密碼學系列之:海綿函數sponge function
簡介
海綿函數sponge function是密碼學中使用的一種函數,它接收一定長度的輸入,然後輸出一定長度的輸出,中間包含了有限個內部狀態。
因為海綿函數的強大功能,所以可以用來建模和實現許多密碼原語,包括密碼散列,消息身份驗證碼,生成掩碼,流密碼,偽隨機數生成器等。
本文將會講解海綿函數的結構。
海綿函數的結構
我們先看一個海綿函數的結構圖:
這個函數被分成了兩部分,左邊部分叫做吸收部分,右邊部分叫做輸出部分,一吸一出,像是海綿一樣,所以叫做海綿函數。
P表示的是輸入的字符串,Z表示的時候輸出字符串。
一個海綿函數由三部分組成,分別是state, 函數f和填充函數pad。
state就是上圖的r+c部分,r被稱為Bitrate, c被稱為Capacity。
P被分成n份,每一份都會跟Bitrate進行異或操作,如果P的長度不是Bitrate的整數倍,那麼需要使用Pad函數進行填充。
每一輪,Bitrate跟P進行異或操作的結果作為最新的Bitrate, 然後生成新的state,然後這個state又被f(state)來替換。
其中函數 f 是 從n個{0,1} 到n個{0,1}的映射。
就這樣一輪一輪進行下去,直到所有的P都參與了運算。
輸出部分是將最終生成的state進行f運算,每次運算都取Bitrate部分作為輸出,從而得到最終的輸出。
海綿函數的應用
因為海綿函數的優秀的特性,所以被用在很多方面。比如SHA-3的實現算法Keccak就是使用的海綿函數。
通過替換f和多輪置換,海綿函數可以生成非常安全的密碼算法,所以得到了廣泛的使用。
本文已收錄於 //www.flydean.com/36-sponge-function/
最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!