SHA-1是第壹代SHA算法標準,後來的SHA-224、SHA-256、SHA-384和SHA-512統稱為SHA-2。
顯然,信息摘要越長,碰撞的概率越低,破解難度越大。但同時消耗的性能和占用的空間也越高。
如前所述,SHA-1和SHA-2是算法的兩個不同版本,結構和簽名長度不同,所以SHA-2可以理解為SHA-1的後繼者。
SSL行業選擇SHA作為數字簽名的哈希算法。從2011到2015,SHA-1壹直是占優勢的算法。但是隨著互聯網技術的提高,SHA-1的缺點也越來越突出。目前SHA-2已經成為新的標準,所以現在發布的SSL證書必須用SHA-2算法簽名。可能會有人偶爾看到SHA-2的SHA-2 384位證書,但很少看到224位證書,因為224位證書是不允許用於公信的,512位證書是軟件不支持的。
以下是SSL證書的SHA-1和SHA-2簽名之間的比較。
從表面上看,它們似乎沒什麽特別的,但是數字簽名在SSL/TLS的安全性中起著重要的作用。哈希值越大,組合越多,安全性越高。SHA-2比SHA-1安全得多。
密碼哈希算法的壹個重要功能是生成唯壹的哈希。當兩個不同的值或文件可以生成相同的哈希時,就會發生所謂的沖突。只有當沒有碰撞時,數字簽名的安全性才能得到保證。沖突對於哈希算法來說是極其危險的,因為沖突允許兩個文件產生相同的簽名。當計算機檢查簽名時,即使文件沒有實際簽名,它也會被計算機識別為有效。
MD5摘要的長度是128bit,SHA-1摘要的長度是160bit。多壹個32位意味著什麽?不同明文的碰撞概率降低2 ^ 32 = 324294967296倍。
因為SHA-1的摘要比MD5長,所以SHA-1生成摘要的性能比MD5略低。
我們先來回顧壹下MD5算法的核心流程。沒看過的可以點擊這個鏈接:MD5算法是什麽?
簡而言之,MD5將128bit的信息摘要分成四段(字),每段32 bits,在循環過程中交替進行A、B、C、D運算,最終形成128bit的摘要結果。
我們再來看看SHA-1算法。核心流程都差不多。主要區別是160bit的信息摘要分為A、B、C、D、e五段。
再看SHA-2系列算法,核心流程更復雜,信息匯總分為A、B、C、D、E、F、G、h八段
SHA-256每段長度為32bit,SHA-512每段長度為64bit。SHA-224和SHA-384是基於前兩者生成的結果進行切割的。
以60M文件為測試樣本,經過1000次測試,三種算法的性能如下:
在安全性方面,很明顯SHA256(也叫SHA2)的安全性最高,但它比其他兩個花費的時間要多得多。MD5比較容易碰撞,所以SHA1應該是三者中最好的加密算法。