關於單向雜湊函式和Keccak的攻擊

2021-08-28 09:03:59 字數 2579 閱讀 7159

一 對keccak的攻擊

keccak之前的單向雜湊函式都是通過迴圈執行壓縮函式的方式來生成雜湊值,這種方式稱為md結構。md4、md5、ripemd、riprmd-160、sha-1、sha-2等幾乎所有的傳統單向雜湊函式都是基於md結構的。

當初之所以開始徵集sha-3演算法,就是因為針對當時廣泛使用sha-1演算法已經出現了理論上可行的攻擊方法。為了避免sha-1的風險,sha-2出現了,但sha-2依然是基於和sha-1相同的md結構,針對sha-1的攻擊方式很有可能也適用於sha-2,問題沒有得到根本解決。

keccak採用了和md結構完全不同的海綿結構,因此針對sha-1的攻擊方法對keccak是無效的。

到目前為止,還沒有出現對實際運用中的keccak演算法形成威脅的攻擊方法。

二 對縮水版keccak攻擊競賽

通過設計乙個比實際作為sha-3標準運用的keccak強度低一些版本,並嘗試對其進行攻擊,就可以據此來評估實際運用的標準版keccak·的強度。

keccak的設計者舉辦了相關競賽,內容就是對縮水版keccak進行攻擊。在競賽中使用的縮水版keccak比標準版減少了迭代輪數,引數者可以通過改變寬度b等各種方法來進行攻擊。

keccak被選為sha-3標準的其中乙個原因就是「結構清晰,易於分析」。這個原因好像有點違背常識,因為「易於分析」也就表示「容易找到弱點」。而乙個容易找到弱點的演算法為什麼會被選為sha-3呢?其實,正是因為可以比較容易地分析縮水版的keccak,也就能夠比較容易地對實際運用的標準版演算法的強度進行評估,而作為乙個將在全世界廣泛使用的單向雜湊函式演算法,「易於分析」可以說是乙個十分優秀的特性。

三 應該使用哪種單向雜湊函式

首先,md5是不安全的,因此不應該使用。

sha-1除了對過去生成的雜湊值進行校驗之外,不應該被用於新的用途,而是應該遷移到sha-2.

sha-2有效應對了針對sha-1的攻擊方法,因此是安全的,可以使用。

sha-3是安全的,可以使用。

和對稱密碼演算法一樣,不應該使用任何自製演算法。

四 對單向雜湊函式的攻擊

1 暴力破解

故事場景

alice寫了乙份合同:「alice要支付金額100萬美元」,並將其雜湊值安全儲存。

mallory擬定多份冗餘假合同:

「alice要支付的金額為1億元。」

「alice要支付的金額壹億元」

「alice要支付的金額:1億元」

「alice應該支付1億元」

mallory利用文件的冗餘性,通過機器生成一大堆「支付1億元合同」。

如果在這一大堆的合同中,能夠找到乙個合同和alice原本的「alice要支付金額100萬美元」恰好產生相同的雜湊值,那麼mallory就算成功了,因為這樣就可以天衣無縫地用1億元合同來代替100萬元合同。替換了檔案之後,mallory消無聲息地離開。到此,檔案的內容就被成功篡改了。

在這個故事中,用人類能夠讀懂的合同作為例子。然而無論人類是否能夠讀懂,任何檔案都或多或少具有一定冗餘性。利用檔案的冗餘性生成具有相同雜湊值的另乙個檔案,這就是一種針對單向雜湊函式的攻擊。

這裡mallory所進行的攻擊,就是暴力破解。

針對這個故事,mallory需要尋找的就是和「100萬元合同」具備相同雜湊值的另一條不同的訊息。這相對於一種試圖破解單向雜湊函式的「弱抗碰撞性」的攻擊。在這種情況下,暴力破解需要嘗試的次數可以根據雜湊值的長度計算出來。以sha3-512為例,由於它的雜湊值長度為512位元,因此最多只要嘗試2的512次方就能夠找到目標訊息了,如果多的嘗試次數在現實中是不可能完成的。

2 生日攻擊

故事場景

編寫合同的人不是alice而是主動攻擊者mallory。他事先準備了兩份具備相同雜湊值的「100萬元合同」和「一億元合同」,然後將「100萬元合同」交給alice讓她計算雜湊值。隨後,mallory再像故事1中一樣,把「100萬合同」掉包成「1億元合同」。

在這裡,mallory所進行的攻擊不是尋找生成特定雜湊值的訊息,而是找到雜湊值相同的兩條訊息,而雜湊值則可以是任意的。這樣的攻擊,一般稱為生日攻擊或者衝突攻擊,這是一種試圖破解單向雜湊函式的「強抗碰撞性」的攻擊。

生日問題

設想隨機選出n個人組成乙個集合,在這n個人中,如果要保證至少有兩個人生日一樣的概率大於二分之一,那麼n至少是多少?

計算方法:

1-365*364*......(365-n+1)/365*365*......365=0.5

當n取23時,這個值約等於0.507,大於0.5,也就是說23個人,保證了至少有兩人生日一樣的概率大於二分之一。

問題轉換:假設一年的天數為y天,那麼n人的集合中至少有兩個人生日一樣的概率大於二分之一時,n至少是多少。

當y非常大時,近似的計算結果為:

n=y平方根(一年天數的平方根)

回到生日攻擊問題。

假設alice所使用的單向雜湊函式的雜湊長度為m位元,則m位元所能產生的全部雜湊值的個數為2的m次方。

因此當n=y的平方根=2的m次方的平方根=2的(m/2)次方

因此當n為2的(m/2)次方時候,mallory的生日攻擊就會有二分之一的概率能夠成功。

和暴力破解相比,生日攻擊所需的嘗試次數要少得多。

單向雜湊函式

在介紹單向雜湊函式之前,我們先了解一下什麼情況下需要使用到單向雜湊函式。單向雜湊函式有乙個輸入和輸出。輸入稱為訊息,輸出稱為雜湊值。雜湊值的長度跟訊息的長度無關,不論多少大小的長度的訊息,都會計算出固定長度的雜湊值。單向雜湊函式具有下面幾個特性 能夠根據任意長度的訊息計算出固定長度的雜湊值。計算速度...

單向雜湊函式

在介紹單向雜湊函式之前,我們先了解一下什麼情況下需要使用到單向雜湊函式。單向雜湊函式有乙個輸入和輸出。輸入稱為訊息,輸出稱為雜湊值。雜湊值的長度跟訊息的長度無關,不論多少大小的長度的訊息,都會計算出固定長度的雜湊值。單向雜湊函式具有下面幾個特性 能夠根據任意長度的訊息計算出固定長度的雜湊值。計算速度...

單向雜湊函式

之前討論的問題是 資訊保密。通過加密的方式 有時候,我們可能不需要對資訊保密,而是希望接收者能夠驗證在傳遞過程中的訊息有沒被修改,即入侵者不能用假訊息代替合法訊息。資料完整性 乙個生活中的問題 如何識別某個人的身份?身份證 指紋。對應的,我們有資料指紋。那麼乙個指紋函式需要滿足什麼條件?指紋能處理不...