消息認證碼 - MAC (Message Authentication Code)


消息認證包括兩個目標
  1消息完整性認證: 確保張三發給我的消息是完整的,在傳輸過程中沒有被第三方篡改
  2消息的來源認證: 確保這個數據是張三發給我的,而不是李四發給我的

第一個目標通常使用散列函數來達成
  常見用例: 張三把要發送的數據通過散列函數比如md5提取數據的摘要,讓后將摘要和數據一起發送給我
          我接收到數據后將數據部分進行同樣的md5散列方法,得到的摘要和收到的摘要做對比,如果
          兩個摘要相同,那證明這個數據是沒有被篡改的

第二個目標通常使用密匙來達成
  我們在回過頭看一下上面的那個例子,會發現一個大問題,那就是我們認定了收到摘要沒有問題,這個邏輯
  才講得通,但實際中的黑客比你想象中更聰明,他不僅改了數據,連同摘要一起篡改了。

  這個時候就需要密匙了

  這個密匙只有我和張三知道,張三將密匙追加在數據后面進行摘要提取,然后將摘要和數據發送給我,
  我方收到數據后,將我本地存儲的密匙追加在數據后面,進行摘要提取,對比收到的摘要,如果可以吻合,
  那么數據就是未被篡改且一定是張三發給我的


  再來回味一下這個過程,發現數據在傳輸過程中沒有暴漏出密匙,黑客拿不到密匙就無法偽造摘要,摘要無法偽造,
  他篡改了數據就會被我方輕易識破

結論
  在設計消息認證碼的時候,至少要實現這兩個目標才算安全合格,密匙要定期更換,降低密匙泄露造成的危害

擴展
  上面的一通可以認為是消息認證碼的底層原理,實際中有很多已經設計好的方案可供使用,比如使用廣泛的 HMAC,
  HMAC可以看成是一個消息認證碼接口,其中H代表Hash,意味着HMAC需要和一個hash函數搭配才能使用,
  常見的hash函數: md5,sha1,sha256,sha512....
  比如常見的 HS256 就是 HMAC + SHA256

大部分編程語言都提供相關函數,調用類似於這樣 hmac(數據,hash方法,密匙)


免責聲明!

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



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