天天看點

MAC攻擊及缺陷

MAC攻擊及缺陷

  • MAC有好幾種實作方式
  • 對MAC的攻擊
    • 重播攻擊
    • 重播攻擊的防護
    • 密鑰推測攻擊
  • MAC算法的缺陷
    • 第三方證明
    • 防止否認

前面我們在講HMAC的時候簡單講過了什麼是MAC消息認證碼。

簡單點說MAC(Message Authentication Code)是一種确認完整性并進行認證的技術,取三個單詞的首字母,簡稱MAC。它是一種與密鑰相關聯的函數。 HMAC就是MAC的一種實作。

  • 使用單向散列函數實作

    比如HMAC。

  • 使用分組密碼實作

    使用AES之類的分組密碼可以實作消息認證碼。關于分組密碼的詳細内容,後面我們會做詳細說明。

  • 其他實作

    其他實作方法如:流密碼和公鑰密碼等。

雖然MAC可以同時驗證消息的完整性和來源,但是仍然有多種攻擊方式。

什麼是重播攻擊?顧名思義,重播攻擊就是将之前的資訊或者通信再次請求。我們舉個例子。

  1. 小明跟小剛在做借款通信,但是這個通信被小紅監聽到了。
  2. 小明向小剛發起借款100元,在MAC中假設小明和小剛共享了密鑰,小明通過密鑰根據請求消息計算出了MAC,并将MAC和消息一起發送給小剛。
  3. 小剛收到了消息和MAC,根據自己存儲的密鑰計算出MAC,将整個MAC和收到的MAC做對比,如果兩個MAC相等,那麼小剛就知道這個是小明發起的合法請求,于是做出借款100元的操作。
  4. 因為小紅監聽到了小明跟小剛的通信,是以小紅擷取到了請求消息和生成的MAC,并保持起來。
  5. 小紅将第4步收到的消息和MAC再次發送給小剛。
  6. 小剛收到消息和MAC後,驗證發現MAC是正确的值,然後再次出借100元。
  7. 重複5,6的步驟。

有上面的具體例子可以看出,隻要監聽者能夠拿到消息和MAC值,既可實作重播攻擊。

  • 制定唯一的序号

    在每次消息中,添加一個唯一的序号,序号遞增,這樣計算出來的MAC每次都是不一樣的,即使能夠拿到消息和MAC,在第二次重放的時候,由于消息和MAC都應該發送變化,進而使重播攻擊失效。

  • 時間戳

    在消息裡面包含了目前的時間,在伺服器校驗的時候去檢查這個時間戳,如果相隔時間很短的話即認可這個消息。這裡會有個雙方時鐘同步的問題,同時要預留一個間隔時間區間。如果在這個時間區間内發生了重放,還是會攻擊成功。

  • 随機數nonce

    在雙方通信之前,伺服器先發送一個随機數給發送者,發送者在消息中包含這個随機數,并計算MAC值。因為每次請求的随機數都會變化,是以重發MAC攻擊不成立。但是會增加額外的通信請求成本。

密鑰推測攻擊實際上是一種暴力破解的方法,即通過MAC來反向推導出密鑰。這就需要我們的MAC算法具有很好的抗暴力破解性。

MAC算法的關鍵是發送者和接受者之間共享密鑰,進而實作對消息完整性和認證的确認。但是MAC算法不能解決”第三方證明“ 和 ”防止否認“ 的問題。

假如小明給小剛發送了消息,小剛想向第三方機構證明這條消息确實是小明發出來的,但是MAC無法做到。

因為MAC是通過小明和小剛共享的密鑰生成出來的,是以第三方機構隻能确認這個MAC是由共享密鑰生成的,但是不能确定是小明生成的還是小剛自己生成的。

假如小明給小剛發送了消息,小剛收到消息之後做MAC驗證,通過後知道消息是小明發出來的。

但是小明完全可以否認自己發送了這條消息,因為小剛擁有同樣的密鑰,可以僞造出同樣的消息出來。

是以MAC算法無法做到防止否認。

更多教程請參考flydean的部落格