什么是SHA算法
和MD5算法類似,SHA (Security Hash Algorithm) 算法也是一種信息摘要生成算法,SHA 是美國的 NIST 和 NSA 設(shè)計(jì)的一種標(biāo)準(zhǔn)的 Hash 算法。
SHA-1 是第一代 SHA 算法標(biāo)準(zhǔn),后來的 SHA-224、SHA-256、SHA-384 和 SHA-512 被統(tǒng)稱為 SHA-2。
SHA-256:可以生成長度256bit的信息摘要。
SHA-224:SHA-256的“閹割版”,可以生成長度224bit的信息摘要。
SHA-512:可以生成長度512bit的信息摘要。
SHA-384:SHA-512的“閹割版”,可以生成長度384bit的信息摘要。
顯然,信息摘要越長,發(fā)生碰撞的幾率就越低,破解的難度就越大。但同時(shí),耗費(fèi)的性能和占用的空間也就越高。
SHA-1和SHA-2
如上所述,SHA-1和SHA-2是該算法不同的兩個(gè)版本,它們的構(gòu)造和簽名的長度都有所不一樣,可以把SHA-2理解為SHA-1的繼承者。
SSL行業(yè)選擇SHA作為數(shù)字簽名的散列算法,從2011到2015,一直以SHA-1位主導(dǎo)算法。但隨著互聯(lián)網(wǎng)技術(shù)的提升,SHA-1的缺點(diǎn)越來越突顯。目前SHA-2已經(jīng)成為新的標(biāo)準(zhǔn),所以現(xiàn)在簽發(fā)的SSL證書,必須使用SHA-2算法簽名。也許有人偶爾會看到SHA-2 384位的證書,很少會看到224位,因?yàn)?24位不允許用于公共信任的證書,512位,不被軟件支持。
下面是SSL證書的SHA-1和SHA-2簽名對比
SHA-1和SHA-2簽名對比
兩者在表面上似乎沒有什么特別,但是數(shù)字簽名對于SSL / TLS的安全性具有重要的作用。哈希值越大,組合越多,其安全性就越高,SHA-2比SHA-1安全的多。
加密哈希算法的一個(gè)重要功能是產(chǎn)生獨(dú)特的散列,當(dāng)兩個(gè)不同的值或文件可以產(chǎn)生相同的散列,則會產(chǎn)生所謂的碰撞。只有在不發(fā)生碰撞時(shí),才能保證數(shù)字簽名的安全性。碰撞對于哈希算法來說是極其危險(xiǎn)的,因?yàn)榕鲎苍试S兩個(gè)文件產(chǎn)生相同的簽名。當(dāng)計(jì)算機(jī)檢查簽名時(shí),即使該文件未真正簽署,也會被計(jì)算機(jī)識別為有效的。
SHA-1和MD5的區(qū)別
1.摘要長度不同。
MD5的摘要的長度盡128bit,SHA-1摘要長度160bit。多出32bit意味著什么呢?不同明文的碰撞幾率降低了2^32 = 324294967296倍。
2.性能略有差別
由于SHA-1摘要比MD5摘要長,因而SHA-1生成摘要的性能比MD5略低。
SHA-1算法原理
我們先來回顧一下MD5算法的核心過程,沒看過的小伙伴們可以點(diǎn)擊這個(gè)鏈接:什么是MD5算法
簡而言之,MD5把128bit的信息摘要分成A,B,C,D四段(Words),每段32bit,在循環(huán)過程中交替運(yùn)算A,B,C,D,最終組成128bit的摘要結(jié)果。
md5計(jì)算原理
再看一下SHA-1算法,核心過程大同小異,主要的不同點(diǎn)是把160bit的信息摘要分成了A,B,C,D,E五段。
SHA-1算法計(jì)算過程
再看一下SHA-2系列算法,核心過程更復(fù)雜一些,把信息摘要分成了A,B,C,D,E,F,G,H八段。
SHA-2算法計(jì)算過程
其中SHA-256的每一段摘要長度是32bit,SHA-512的每一段摘要長度是64bit。SHA-224和SHA-384則是在前兩者生成結(jié)果的基礎(chǔ)上做出裁剪。
SHA1,SHA256,MD5算法比較
以一個(gè)60M的文件為測試樣本,經(jīng)過1000次的測試平均值,三種算法的表現(xiàn)為:
MD5算法運(yùn)行1000次的平均時(shí)間為:226ms
SHA1算法運(yùn)行1000次的平均時(shí)間為:308ms
SHA256算法運(yùn)行1000次的平均時(shí)間為:473ms
安全性方面,顯然SHA256(又稱SHA2)的安全性最高,但是耗時(shí)要比其他兩種多很多。MD5相對較容易碰撞,因此,SHA1應(yīng)該是這三種中性能最好的一款加密算法。
?
總結(jié)
- 上一篇: CTP综合交易平台接口-程序化交易编程模
- 下一篇: SQL注入的一般过程