消息認證碼(MAC)


消息認證碼:帶密碼的Hash     (能提取消息的'指紋')

消息認證碼 MAC (Message Authentication Code)是種消息認證技術。

 

發送方A和接收方B共享密鑰K,若A向B發送消息。則A計算利用C=F(K,M)計算MAC值:然后將原始消息M和C一起發送給接收方。

接收方B對收到的消息M用相同的密鑰進行相同的計算得出新的MAC值C'。並將接收到的C與其計算出的C'進行比較,若相等,則:

(1)接收方可以相信消息未被修改。                               如果被修改,Hash值會不等

(2)接收方可以確信消息來自真正的發送方。      K值只有A、B知道,能知道來自誰

F是MAC函數,它利用密鑰和任意長度的消息來生成一個固定長度的短數據塊C。

 

 

CBC-MAC

基本思想:                               

首先,填充數據,形成一串n比特組

其次,使用CBC模式加密這些數據      CBC (cipher block chaining)模式         https://www.cnblogs.com/sjyu/p/12810759.html

對最后的輸出分組進行選擇處理和截斷(如果m<n)形成MAC.                     (也就是說最后的Mac輸出長度m可能會比明文分塊長度n小)

 

設n比特數據組D1,D2,…Dq.

則MAC的具體計算過程如下:

1.置I1=D1,計算O1=ek(I1)。

2.對i=2,3,…,q,完成下列計算

Ii⊕Oi-1=Di

Oi=ek(Ii)

3.對Oq進行選擇處理和截斷,獲得m比特MAC.其中ek表示分組密碼的加密函數.

 

若數據不是加密算法分組長度的整數倍,則需進行消息填充,填充方法有:

方法1:對需要計算MAC的數據的右邊填充若干個或零個“0"比特,以便得到一個比特長度是n的整數倍的數據串。

方法2:對需要計算MAC的數據的右邊先填充一個“1"比特,然后填充若干個或零個“0"比特,以便得到一個比特長度是n的整數倍的數據串。

方法3:首先對需要計算MAC的數據的右邊填充若干個或零個0”比特,以便得到一個比特長度是n的整數倍的數據串:其次,在所到的數據串的左邊填充一個n比特組:該組包含了未進行填充的數據的比特長度的二元表示,其左邊用“0"補齊。

注:如果驗證者不知道數據的長度,則應選用填充方法或3,因為這兩種方法可使驗證者查明所填充的那些“0”比特.

 

HMAC

HMAC的基本觀點:

使用Hash函數H,K1和K2(K1≠K2)計算MAC=H(K1||H(K2||m)),其中K1和K2由同一個密鑰K導出

 

HMAC的工作流程如下:

H是一個Hash函數

K表示密鑰

B表示計算消息摘要時消息分塊的字節長度(對MD5和SHA-1是512比特,64字節)

L表示消息摘要按字節計算的長度(對MD5是16字節)

ipad表示0x36重復B次,opad表示0x5重復B次

K可以有不超過B字節的任意長度,但一般建議K的長度不小於L。當使用長度大於B的密鑰時,先用田對密鑰進行雜湊,然后用得出的L字節作為HMC的真正密鑰

 

 

 

 

計算一個數據“文本”的HMAC的操作如下:

1.在K的后面加上足夠的0以得到B字節的串

2.將上一步得到的B字節串與ipad異或

3.將數據流“文本”接在第2步得到的B字節串后面

4.將H應用於上一步的比特串

5.將第1步所得到的B字節串與opad異或

6.將第4步的消息摘要接在第5步的B字節串后面

7.應用於上一步的比特串

 

前面的描述可以表述為H((K⊕opad)||H(K⊕ipad||text))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM