hash與消息摘要的關係是什麼?

消息摘要是種應用。消息摘要演算法是hash下的一種演算法 這種理解是對的么。還是說消息摘要演算法就是hash演算法?


消息摘要(Message Digest)

將長度不固定的消息(message)作為輸入參數,運行特定的Hash函數,生成固定長度的輸出,這個輸出就是Hash,也稱為這個消息的消息摘要(Message Digest)

為何需要消息摘要?

因為傳統的checksum是弱校驗,可以將一些位翻轉校驗出來,但是卻無法校驗出一些複雜的數據錯誤、人為製造的數據篡改。而使用Hash函數將原始屬於作為輸入參數,生成固定長度的消息摘要,MD5演算法為128位,SHA-1為160位,附在原始數據的尾部,到達目的地,先將原始數據(message)與消息摘要(message digest)分離,然後運行同樣的Hash演算法,生成自己的消息摘要,比較兩個消息摘要,相同則校驗通過。

有同學肯定會說,既然Hash演算法是公開的,那如果有人先將數據篡改,再按照Hash演算法生成一個全新的消息摘要附在數據的末尾,到達終點會如何?很顯然校驗會通過,那只有接受數據被篡改的現實,那如何避免以上不安全的數據傳輸呢?

加密的消息摘要HMAC(Keyed Hash Message Authentication Code)

上文提到的常規Hash演算法,如MD5、SHA,只有一個輸入參數:消息。

如果輸入參數有兩個,一個是原始數據,另外一個是密鑰(Key),將會生成一個加密的消息摘要HMAC。那第三方即使篡改數據,由於沒有密鑰,很難生成一個全新的加密摘要而不被終點主機發現並丟棄。

有同學會抬杠,MD5/SHA-1碰撞(Collision )一直存在著,什麼是碰撞?就是不同的消息,產生相同的消息摘要!無論是理論上還是現實中碰撞是存在的,儘管概率非常非常小,有安全研究人員在幾秒之內通過特殊演算法,可以人為地製造碰撞,那我們自然就會產生一個念頭,沒有Key,能否篡改一部分敏感數據,然後調整其它剩餘數據,保證HMAC不變呢?儘管很難,這在理論上是成立的。

為了增強HMAC的安全性,只要升級加密Hash演算法就可以指數級地增加破解的難度,如HMAC-MD6、HMAC-SHA-3。

消息摘要的應用

1 數據完整性檢查(Data Integrity Check)

用於SSL/TLS/IPsec,將原始數據作為輸入參數,生成Message Digest,然後用共享對稱密鑰加密,接收方做逆操作。

2 數字證書籤名 ( Digital Certification Signature)

將主機(伺服器)的數字證書(明文)作為輸入參數,生成Message Digest,然後用CA的私鑰(Private Key)加密,這個Message Digest就變成了CA的數字簽名,附在原始數字證書(明文)的末尾,成為一個整體,此整體即為CA簽名的數字證書。

伺服器與客戶端認證時,將上文CA簽名的數字證書發給客戶端,客戶端由於擁有CA的公鑰(瀏覽器預裝或手動安裝),可以解密CA的數字簽名,得到Message Digest,然後自己對數字證書運行相同的Hash演算法,然後比較兩個Message Digest,相同則認證通過。

3 數據校驗 (Checksum)

將原始文件生成MD5 checksum,用戶下載完文件,也計算一下下載文件的MD5 checksum,如果相同,則文件完好無缺。

4 數據來源可靠性認證 (Authentication)

主要用於OSPF/ISIS/BGP,將原始數據+共享對稱密鑰作為共同輸入參數,生成HMAC,接收方逆操作


hash演算法是將輸入內容變換為長度固定的輸出,它主要是用於可以更快速地判斷兩個內容是否相同。

信息摘要是hash演算法的一種,但擁有額外更嚴格的條件,例如不能逆運算,更嚴格的碰撞要求等。


推薦閱讀:

拉杆箱密碼忘記了怎麼辦?
2436 926 246 742 24這串密碼有什麼含義?
解密單表代換密碼?
為什麼Ubuntu判斷密碼時,正確密碼比錯誤密碼反應快好多?
網站資料庫用什麼樣的密碼加密的演算法才是最安全的?

TAG:網路安全 | 密碼 | 計算機網路 | 數據處理 |