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