? ? ? ? 本文為對結(jié)城浩所著 《圖解密碼技術(shù)》一書中論述的SHA-3在2012年確定的標(biāo)準(zhǔn)算法Keccak用更簡潔的方式描述下,力求讓無專業(yè)數(shù)學(xué)的朋友們也能了解算法過程。
? ? ? ?
(圖一)Keccak過程:將需要Hash運(yùn)算的消息補(bǔ)全并分為r個(gè)bit的最小整數(shù)倍個(gè)輸入分組;用全0的r個(gè)bit與輸入分組進(jìn)行XOR異或操作,再補(bǔ)充c個(gè)干擾bit一起輸入函數(shù)f( )中進(jìn)行運(yùn)算;運(yùn)算結(jié)果繼續(xù)與后續(xù)分組進(jìn)行同樣處理。在輸入分組處理完后形成輸出分組,根據(jù)需要的Hash散列結(jié)果長度再通過函數(shù)f( )獲得多個(gè)輸出分組。
(圖三)至(圖七)為函數(shù)f( )算法。算法基本思想是用小正方體組成的長方體去裝載b個(gè)bit,每個(gè)小正方體里裝載一位bit。函數(shù)要對所裝載的這些bit循環(huán)處理24輪,每輪5個(gè)步驟。
? ? ? ?
圖(三)第一步驟:在(X,Y)切面,對每個(gè)bit,用與該點(diǎn)位置不同的兩列各自5個(gè)bit異或相加后,再與改bit異或運(yùn)算。
圖(四)第二步驟:各(Y,Z)切面中所有bit,沿Z軸進(jìn)行平行移動(dòng)。
圖(五)第三步驟:在(X,Y)切面,對所有bit進(jìn)行移位互換。
圖(六)第四步驟:對與X軸平行的每一行,將每一bit與另外兩個(gè)bit計(jì)算結(jié)果再進(jìn)行異或操作,得到新的行。
(圖七)第五步驟:亦即每輪最后,用一串常數(shù)對與Z軸平行的每道的所有bit進(jìn)行異或操作。