6.2 UMAC
6.2.1 UMAC的描述
UMAC是一個由四個MAC算法組成的算法族,它們針對不同的輸出比特長度做了效率優化,分別是UMAC-32、UMAC-64、UMAC-96和UMAC-128。UMAC使用一個長度為128比特的密鑰K,并且臨時值V的長度介于8和128比特之間。根據使用的UMAC族中算法的不同,產生的MAC的長度分別為32、64、96或128比特。該指標由參數taglen表示,相應地為4、8、12或16個字節。輸入消息的長度應小于!2^67個字節。輸入UMAC函數的消息應包含整數個字節,也就是說,其比特長度應該是8的倍數。若其比特長度不是8的倍數,則該機制不適用。
注1:這里指定的UMAC的版本不應與UMAC算法較早的版本(如[2]等)相混淆。
注2:若MAC函數的輸入包含整數個字節,則這里指定的UMAC函數與RFC 4418[6]中描述的函數相同。
6.2.2 要求
在使用UMAC之前,需要首先協商以下參數:
——分組密碼算法,具體分組密碼算法的選擇決定了密鑰長度|K|和分組長度|B|。
——標簽長度taglen,應為4、8、12或16之一(以字節計)。
——臨時值的長度,應介于8和128比特之間。
6.2.3 符號和輔助函數
6.2.3.1 比特串操作
關于UMAC的條款在對序列中的元素標記時使用以1為起始的索引。從而,對于UMAC,S[i] 定義為比特串 S 的第 i 個字節,其中 i>=1
6.2.3.2 輔助函數KDF
該密鑰流生成函數輸出偽隨機比特。它返回長度為mumoctets的字節串作為輸出。


6.2.3.3 輔助函數PDF
該填充生成函數調用一個密鑰和一個臨時值,返回一個用以生成標簽的偽隨機填充序列,長度為4、8、12或16個字節。


6.3.3.4 輔助函數NH
NH(非線性雜湊函數)是一個泛雜湊函數。
00001注:非線性雜湊函數NH由Black等提出[2]。


6.3.3.5 輔助函數ENDIAN-SWAP
函數ENDIAN-SWAP將一個長度為4的字節串從按低位排序轉換為按高位排序,或反之。

6.2.3.6 輔助雜湊函數POLY
函數POLY是一個多項式雜湊函數,于第二層雜湊函數L2-HASH中使用,參見6.2.7.2。

6.2.4 密鑰預處理

6.2.5 消息預處理
在需要被雜湊的消息右側填充零串使其達到字節長度整數倍。消息一旦被填充,所有的比特串都被視為字節串。
00001注:在按低位順序排列的計算機上,消息數據按從低位順序排列讀取以加速標簽的生成。
6.2.6 消息雜湊

6.2.7 分層雜湊函數
6.2.7.1 第一層雜湊函數L1-HASH
第一層雜湊將消息分割成長度為1024的字節分組(按需填充最后一個分組),然后調整排序并用函數NH對每一個分組進行雜湊。將結果串聯形成一個比特串,其長度小于或等于128與一個小于原始值的值相乘。

6.2.7.2 第二層雜湊函數L2-HASH
第二層利用一個稱為POLY的多項式雜湊函數將L1-HASH的輸出重新進行雜湊。若L1-HASH的輸出較長,則對L1-HASH輸出的前綴調用一次POLY,再用不同的設置對其余部分調用。只有當消息長度大于16兆字節時,才需要對L1-HASH的輸出執行這兩步雜湊。

6.2.7.3 第三層雜湊函數L3-HASH
L2-HASH的輸出是長度為16的字節串。作為最后一層雜湊函數,L3-HASH將長度為16的字節串雜湊成一個固定長度為4的字節串。

6.2.8 終止化操作

GB/T 15852.3—2019 信息技術 安全技術 消息鑒別碼 第3部分:采用泛雜湊函數的機制
推薦文章: