SHA-3
歷史
Keccak 是一個加密散列算法,由 Guido Bertoni,Joan Daemen,Micha?l Peeters,以及Gilles Van Assche在RadioGatún上設(shè)計。
2012年10月2日,Keccak 被選為NIST散列函數(shù)競賽的勝利者。SHA-3并不是要取代SHA-2,因?yàn)镾HA-2目前并沒有出現(xiàn)明顯的弱點(diǎn)。由于對MD5出現(xiàn)成功的破解,以及對SHA-0和SHA-1出現(xiàn)理論上破解的方法,NIST感覺需要一個與之前算法不同的,可替換的加密散列算法,也就是現(xiàn)在的 SHA-3。
2014年,NIST發(fā)布了 FIPS 202 的草案 "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions"。
2015年8月5日,F(xiàn)IPS 202 最終被 NIST 批準(zhǔn)。
設(shè)計
Keccak 使用海綿函數(shù),此函數(shù)會將數(shù)據(jù)與初始的內(nèi)部狀態(tài)做XOR運(yùn)算,這是無可避免可置換的(inevitably permuted)。在最大的版本,算法使用的內(nèi)存狀態(tài)是使用一個5×5的二維數(shù)組,數(shù)據(jù)類型是64位的字節(jié),總計1600比特 。縮版的算法使用比較小的,以2為冪次的字節(jié)大小w為1比特,總計使用25比特。除了使用較小的版本來研究加密分析攻擊,比較適中的大小(例如從w=4使用100比特,到w=32使用800比特)則提供了比較實(shí)際且輕量的替代方案。
Keccak 的置換
置換方法是先定義字的長度為二的某次方,w = 2比特。SHA-3的主要應(yīng)用使用64位的字長,? = 6。
內(nèi)存狀態(tài)可以被視為5×5×w的三維數(shù)組。令a[i][j][k]代表內(nèi)存狀態(tài)的第(i×5 + j)×w + k個比特(使用小端序,little-endian,參見字節(jié)序)。
置換函數(shù)是五個子段落(sub-round)作12+2?次的循環(huán),每一個子段落都相當(dāng)簡單:
修改
在整個 NIST 散列函數(shù)比賽里面,參賽者允許稍微修改算法解決已經(jīng)出現(xiàn)的問題。Keccak 的修改有:
循環(huán)的數(shù)目從12+?變成12+2?,以增加安全度。
填充函數(shù)使用比起上述101的方式更加復(fù)雜的作法。
吸收比率r增加到安全限制,而非向下舍入到最接近某個2的冪次。
SHA-3 示例
空字符串的散列值:
由于雪崩效應(yīng),即使一個很小的改變都會產(chǎn)出幾乎完全不同的散列值。舉例來說,把 dog 改成 dof:
SHA 家族函數(shù)的比較
在下面的表格中,“內(nèi)部狀態(tài)”指的是傳遞到下一個塊的位數(shù)。
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}