密碼學系列之:海綿函數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/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!