官术网_书友最值得收藏!

2.3 哈希函數

哈希(Hash)算法(也稱散列算法)的特別之處在于它是一種單向算法,用戶可以通過Hash算法對目標信息生成一段特定長度的、唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。因此,Hash算法常用于不可還原的密碼存儲、信息完整性校驗等。常見的Hash算法有MD2、MD4、MD5、HAVAL、SHA。MD5和SHA-1是最常見的Hash算法。MD5是由國際著名密碼學家、麻省理工學院的Ronald Rivest教授于1991年設計的;而SHA-1有美國國家安全局的背景。

2.3.1 MD5哈希算法

MD5是計算機安全領域曾經廣泛使用的一種哈希函數,為消息的完整性提供保護。對MD5加密算法的簡要敘述是:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位的子分組,經過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯后將生成一個128位Hash值。

MD5廣泛用于各種軟件的密碼認證和密鑰識別。MD5用的是哈希函數,它的典型應用是對一段消息(message)產生指紋(fingerprint),以防止“篡改”。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。MD5還廣泛用于操作系統的登錄認證,如UNIX、各類BSD系統登錄密碼。

MD5哈希算法的總體流程如圖2.5所示,表示第i個分組,每次運算都是由前一輪的128位結果值和第i塊512位上的值進行運算。

圖2.5 MD5哈希算法流程

2.3.2 SHA1哈希算法

SHA1是和MD5一樣流行的消息摘要算法。SHA[2]加密算法模仿MD4加密算法。SHA1設計為和數字簽名算法DSA一起使用。

SHA1主要適用于數字簽名標準里面定義的數字簽名算法。對于長度小于264位的消息,SHA1會產生一個160位的消息摘要。當接收到消息的時候,這個消息摘要可以用來驗證數據的完整性。在傳輸的過程中,數據很可能會發生變化,那么這時候就會產生不同的消息摘要。SHA1無法從消息摘要中復原信息,而兩個不同的消息不會產生同樣的消息摘要。這樣,SHA1就可以驗證數據的完整性。所以,SHA1是為了保證文件完整性而提出的技術。

SHA1對于每個明文分組的摘要生成過程如下。

(1)將512位的明文分組劃分為16個子明文分組,每個子明文分組為32位。

(2)申請5個32位的鏈接變量,記為A、B、C、D、E。

(3)16份子明文分組擴展為80份。

(4)80份子明文分組進行4輪運算。

(5)鏈接變量與初始鏈接變量進行求和運算。

(6)鏈接變量作為下一個明文分組的輸入重復進行以上操作。

(7)最后,5個鏈接變量里面的數據就是SHA1摘要。

圖2.6為SHA1哈希算法流程圖。

圖2.6 SHA1哈希算法流程

SHA1哈希算法可以采用不超過264位的數據輸入,并產生一個160位的摘要。輸入被劃分為512位的塊,并單獨處理。160位緩沖器用來保存哈希函數的中間和最后結果。緩沖器可以由5個32位的寄存器(A、B、C、D和E)來表示。SHA1是一種比MD5更安全的算法,理論上,凡是采取“消息摘要”方式的數字驗證算法都是會存在“碰撞”的——也就是兩個不同的消息算出的消息摘要相同。但是安全性高的算法要找到指定數據的“碰撞”很困難,而利用公式來計算“碰撞”就更困難。

SHA1與MD5的差異主要在于:SHA1對任意長度明文的預處理和MD5的過程是一樣的,即預處理完后的明文長度是512位的整數倍,但是有一點不同,那就是SHA1的原始報文長度不能超過264,然后SHA1才能生成160位的報文摘要。SHA1算法簡單而且緊湊,容易在計算機上實現。SHA1與MD5的比較如表2-1所示。

表2-1 SHA1與MD5的比較

在安全性方面,SHA1所產生的摘要比MD5長32位。若兩種哈希函數在結構上沒有任何問題的話,SHA1比MD5更安全。

在速度方面,兩種方法都是主要考慮以32位處理器為基礎的系統結構。但SHA1的運算步驟比MD5多了16步,而且SHA1記錄單元的長度也比MD5多了32位。因此,若是以硬件來實現SHA1,其速度大約比MD5慢了25%。

在簡易性方面,兩種方法都相當簡單,在實現上不需要很復雜的程序或是大量存儲空間。然而總體上來講,SHA1對每一步驟的操作描述還是要比MD5簡單。

主站蜘蛛池模板: 兰考县| 徐州市| 台东市| 潮州市| 会理县| 临邑县| 奉贤区| 寻甸| 宁南县| 崇信县| 岳阳县| 定结县| 西平县| 马公市| 资溪县| 仁寿县| 普陀区| 肃南| 沛县| 平江县| 全椒县| 靖边县| 堆龙德庆县| 宜都市| 平邑县| 都匀市| 卫辉市| 岱山县| 临沭县| 明光市| 宜昌市| 盖州市| 宝丰县| 鄂伦春自治旗| 阳山县| 吴江市| 寿宁县| 宜良县| 上高县| 临夏市| 如皋市|