信息摘要技術及算法介紹

數據摘要算法是密碼學算法中非常重要的一個分支,它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,由於其不可逆性,有時候會被用做敏感信息的加密。

數據摘要算法也被稱爲哈希(Hash)算法、散列算法;

特點

消息摘要算法(雜湊算法,哈希算法)的主要特徵是加密過程不需要密鑰,並且經過加密的數據無法被解密,只有輸入相同的明文數據經過相同的消息摘要算法才能得到相同的密文。

  • 1.無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的;
  • 2.消息摘要看起來是“隨機的”,一般隨機都是僞隨機;
  • 3.一般地,只要輸入的消息不同,對其進行摘要以後產生的摘要消息也必不相同(潛在意思是可以相同);但相同的輸入必會產生相同的輸出;
  • 4.消息摘要函數是無陷門的單向函數,即只能進行正向的信息摘要,而無法從摘要中恢復出任何的消息,甚至根本就找不到任何與原信息相關的信息;
  • 5.好的摘要算法,沒有人能從中找到“碰撞”,但是“碰撞”是肯定存在的。

應用

一般地,把對一個信息的摘要稱爲該消息的指紋或數字簽名,信息摘要算法的主要用途是信息完整性校驗,就好比我們買菜,肯定都希望稱一下買的菜分量是否足夠。

在計算機領域,我們也希望能知道別人傳遞的消息是否完整是否被篡改了,這裏就用到信息摘要算法。

信息摘要算法常常被用來保證信息的完整性,防止信息在傳輸過程中被篡改(無法確定信息是否被監聽),也就常說的驗籤。

舉例:我們傳遞password時,需要將password加salt後做信息摘要,接收方覈對摘要,相同則接受處理,不相同則認爲本次的password傳輸過程中被篡改,拒絕本次請求。

#算法家族:
信息摘要算法來源於CRC算法,最初CRC算法是用來驗證數據完整性的,即我們常見的奇偶校驗碼循環冗餘校驗,在CRC基礎上發展處了MD和SHA量大算法家族,CRC比這些算法都要早,MD算法比SHA算法早,SHA算法是對MD算法的改進。再後來則發展出了可以帶有密碼的信息摘要算法-MAC算法。

信息摘要算法包括三大類,MD、SHA和MAC算法,MD的分類是按照版本規定的,SHA則是按照適用的消息長度分類的:

  • MD算法: Message Digest Algorithm ,目前主流的是MD5算法,爲第五版算法,之前有MD2、MD3、MD4算法。
  • SHA算法:安全哈希算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裏面定義的數字簽名算法(Digital Signature Algorithm DSA);
  • MAC算法:帶有密碼信息的信息摘要算法,是對MD和SHA算法的演變和改進,包括HmacMD2、HmacMD4、HmacMD5、HmacSHA-256等。

下表是主要的信息摘要算法的特點比較,關於MD5、SHA1等算法的具體過程,非安全、算法專業人士可不學習,如有需要可以參考下面的blog:

http://blog.csdn.net/lonelyroamer/article/details/7652320

算法供應商

美國對於算法出口有着嚴格的限制,Sun公司限於美國算法出口法律的限制和本身的一些原因,並有提供特別全面的算法支持,不過Sun提供SPI方式用來可以透明的接入其他算法供應商,也可以直接使用其他算法供應商的jar包工具。

在Java中主要的算法供應商有三類:Sun本身的算法,包含在JDK中,大部分在JDK 1.6之後,Bouncy Castle和Commons Codec。

  • Sun算法:sun的算法也使用Java SPI機制提供,通過Securty.addProvider()可以註冊算法實現;
  • Bouncy Castle:開源加密組件,提供了很多JDK 6不支持的算法。
  • Commons Codec:也是開源組件,是Apache的項目,Apache的Commons項目應該廣泛,簡單易用,目標是提高Java Api的易用性。

算法選擇

  • CRC算法不屬於加密場景,比較古老,但是在數據壓縮領域被廣泛使用作爲完整性校驗;
  • MD算法中MD5算法最流行,也是目前最流行的信息摘要算法,是大部分系統的首先,雖然MD算法破解門檻越來越低,但是一般應用足夠了;
  • SHA算法枝繁葉茂,比MD算法安全性高,嚐嚐用在一些安全性係數要求較高的環境,目前也逐漸替代MD5算法,用在註冊、登錄模塊,在數字證書的簽名算法中,SHA算法更廣泛。
  • MAC算法是帶有密鑰信息的信息摘要算法,吸收了MD和SHA的精髓,安全程度更高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章