认证篇——消息认证码
目錄
一、消息認證碼介紹
1)消息認證碼的使用步驟:
2)消息認證碼的密鑰配送問題:
3)消息認證碼的實例:
4)消息認證碼的實現:
二、HMAC(可忽略)
三、對消息認證碼的攻擊
四、消息認證碼無法解決的問題
一、消息認證碼介紹
消息認證碼(Message authentication code)是一種確認完整性并進行認證的一種技術,簡稱MAC
消息認證碼在輸入包括任意長度的消息和一個發送者與接收者之間的共享密鑰后,輸出固定長度的數據,該數據稱為MAC值
?
1)消息認證碼的使用步驟:
1)發送者與接收者事先共享密鑰
2)發送者根據消息計算MAC值(使用共享密鑰)
3)發送者將消息和MAC發送給接收者
4)接收者根據收到的消息計算MAC(使用共享密鑰)
5)接收者將自己計算出的MAC與從發送者收到的MAC比對
6)如果MAC一致,接收者可以判定消息的確來自接收者(認證成功);如果不一致,可判斷消息不是來自發送方(認證失敗)
?
2)消息認證碼的密鑰配送問題:
在認證過程中,需要發送者和接收者共享密鑰,且密鑰不能被獲取;如果密鑰落入第三方,第三方可以計算出MAC值,從而能輕易進行篡改和偽裝攻擊,使得消息認證碼沒有發揮作用
?
3)消息認證碼的實例:
1)SWIFT(環球銀行金融電信協會):銀行與銀行之間通過SWIFT來傳遞交易信息。為了對消息進行驗證和確定消息完整性,SWIFT使用了消息認證碼,并使用公鑰密碼進行密鑰交換
2)IPsec:對互聯網基本通信協議——IP協議增加安全性的方式之一。在IPsec中,對內容和完整性校驗都采用消息認證碼
3)SSL/TLS:自網上購物時,使用此類協議。對通信內容認證和完整性校驗使用了消息認證碼
?
4)消息認證碼的實現:
1)使用單向散列函數實現(HMAC)
2)使用分組密碼實現(將分組密碼的密鑰作為消息認證碼的共享密鑰來使用,并使用CBC模式進行加密)
3)使用流密碼或公鑰密碼來實現
?
二、HMAC(可忽略)
HMAC:是一種使用單向散列函數來構造消息認證碼的方法
HMAC的步驟:
1)密鑰填充:當密鑰短于單向散列函數的分組長度時,就在末尾填充0,直到與單向散列函數的分組成都相同為止;如果長于散列函數的分組時,就是用單向散列函數求出密鑰的散列值,將這個散列值用作HMAC的密鑰
2)將填充后的密鑰與ipad進行XOR:ipad就是將00110110這一比特序列不斷重復達到分組長度所形成的比特序列;進行XOR后,就是一個和單向散列函數的分組長度相同,并和密鑰相關的比特序列(ipadkey)
3)和消息組合:將ipadkey附加在消息開頭
4)計算散列值:將上一部的結果輸入單向散列函數后計算散列值
5)將填充后的密鑰與opad進行XOR:opad就是將01011100這一比特序列不斷重復達到分組長度所形成的比特序列;進行XOR后,就是一個和單向散列函數的分組長度相同,并和密鑰相關的比特序列(opadkey)
6)將散列值組合:將4)中計算出的散列值放到opadkey后
7)計算散列值:將6)輸入單向散列函數計算散列值,該散列值就是MAC值
?
三、對消息認證碼的攻擊
1)重放攻擊:把以前竊聽到的數據原封不動地重新發送給接收方,主要用于身份認證過程,破壞認證的正確性
防御方法:
- 序號:將每次發送的消息都賦予一個遞增編號,并且在計算MAC值時將序號也包含在消息中,第三方無法計算出遞增之后的MAC值;缺點:必須要記錄每個通信對象的最后一個消息的序列號
- 時間戳:在發送消息時,附帶當前時間,即便收到過去的消息,MAC也能正確將其當作錯誤消息來處理;缺點:必須要求收發雙方的時鐘一致
- nonce:接收者先向發送者發送一個一次性隨機數(該隨機數稱為nonce),發送消息時將nonce包含在消息中計算MAC值,每次通信的nonce都會變化;缺點:通信時的數據量會增加
2)密鑰推測攻擊:消息認證碼也可以使用暴力破解和生日攻擊,如果可以從MAC值反算出密鑰,就可以進行篡改、偽裝等攻擊;所以對于密鑰推測攻擊來說,要保證不能根據MAC值推測出通信雙方使用的密鑰
?
四、消息認證碼無法解決的問題
由于收發雙方共享相同的密鑰,因此無法解決以下問題:
1)對第三方證明
2)防止否認
?
?
?
總結
以上是生活随笔為你收集整理的认证篇——消息认证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 认证篇——单向散列函数
- 下一篇: 交换基础