MAC攻击及缺陷
MAC攻擊及缺陷
- MAC有好幾種實現方式
- 對MAC的攻擊
- 重放攻擊
- 重放攻擊的防護
- 密鑰推測攻擊
- MAC算法的缺陷
- 第三方證明
- 防止否認
前面我們在講HMAC的時候簡單講過了什么是MAC消息認證碼。
簡單點說MAC(Message Authentication Code)是一種確認完整性并進行認證的技術,取三個單詞的首字母,簡稱MAC。它是一種與密鑰相關聯的函數。 HMAC就是MAC的一種實現。
MAC有好幾種實現方式
-
使用單向散列函數實現
比如HMAC。 -
使用分組密碼實現
使用AES之類的分組密碼可以實現消息認證碼。關于分組密碼的詳細內容,后面我們會做詳細說明。 -
其他實現
其他實現方法如:流密碼和公鑰密碼等。
對MAC的攻擊
雖然MAC可以同時驗證消息的完整性和來源,但是仍然有多種攻擊方式。
重放攻擊
什么是重放攻擊?顧名思義,重放攻擊就是將之前的信息或者通信再次請求。我們舉個例子。
有上面的具體例子可以看出,只要監聽者能夠拿到消息和MAC值,既可實現重放攻擊。
重放攻擊的防護
-
制定唯一的序號
在每次消息中,添加一個唯一的序號,序號遞增,這樣計算出來的MAC每次都是不一樣的,即使能夠拿到消息和MAC,在第二次重放的時候,由于消息和MAC都應該發送變化,從而使重放攻擊失效。 -
時間戳
在消息里面包含了當前的時間,在服務器校驗的時候去檢查這個時間戳,如果相隔時間很短的話即認可這個消息。這里會有個雙方時鐘同步的問題,同時要預留一個間隔時間區間。如果在這個時間區間內發生了重放,還是會攻擊成功。 -
隨機數nonce
在雙方通信之前,服務器先發送一個隨機數給發送者,發送者在消息中包含這個隨機數,并計算MAC值。因為每次請求的隨機數都會變化,所以重發MAC攻擊不成立。但是會增加額外的通信請求成本。
密鑰推測攻擊
密鑰推測攻擊實際上是一種暴力破解的方法,即通過MAC來反向推導出密鑰。這就需要我們的MAC算法具有很好的抗暴力破解性。
MAC算法的缺陷
MAC算法的關鍵是發送者和接受者之間共享密鑰,從而實現對消息完整性和認證的確認。但是MAC算法不能解決”第三方證明“ 和 ”防止否認“ 的問題。
第三方證明
假如小明給小剛發送了消息,小剛想向第三方機構證明這條消息確實是小明發出來的,但是MAC無法做到。
因為MAC是通過小明和小剛共享的密鑰生成出來的,所以第三方機構只能確認這個MAC是由共享密鑰生成的,但是不能確定是小明生成的還是小剛自己生成的。
防止否認
假如小明給小剛發送了消息,小剛收到消息之后做MAC驗證,通過后知道消息是小明發出來的。
但是小明完全可以否認自己發送了這條消息,因為小剛擁有同樣的密鑰,可以偽造出同樣的消息出來。
所以MAC算法無法做到防止否認。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考flydean的博客
總結
- 上一篇: ERC20 Short Address
- 下一篇: Libra白皮书解读