生日攻擊

生日攻擊

生日攻擊(Birthday attack)是指一類強力攻擊,它從令人驚異的結果中獲得它的名字,在一個23人的組中有兩個或更多的人共享同一生日的可能性大於1/2,這個結果被叫做生日悖論。

基本信息

簡介

這種攻擊對Hash函式提出了一個必要的安全條件,即訊息摘要必須足夠長。生日攻擊這個術語來自於所謂的生日問題,在一個教室中最少應有多少學生才使得至少有兩個學生的生日在同一天的機率不小於1/2?這個問題的答案為23。

方法解釋

生日攻擊生日攻擊
設h:X->Y是一個Hash函式,X和Y都是有限的,並且|X|>=2|Y|,記|X|=m,|Y|=n。顯然至少有n個碰撞,問題是如何去找到這些碰撞。一個很自然的方法是隨機選擇k個不同的元素x1,x2,x3,.....,xk∈X,計算yI=h(xi),1<=i<=k,然後確定是否有一個碰撞發生。這個過程類似於把k個球隨機地扔到n個箱子裡邊,然後檢查看是否某一箱子裡邊至少有兩個球。k個球對應於k個隨機數x1,x2,x3,.....,xk,n個箱子對應於Y中的n個可能的元素。我們將計算用這種方法找到一個碰撞的機率的下界,該下界只依賴於k和n,而不依賴於m。
因為我們關心的是碰撞機率的下界,所以可以假定對所有y∈Y,有|h-1(y)|≈m/n。這個假定是合理的,這是因為如果原像集h-1(y)(y∈Y)不是近似相等的,那么找到一個碰撞的機率將增大。
因為原像集h-1(y)(y∈Y)的個數都近似相等,並且xI(1<=i<=k)是隨機選擇的,所以可將yI=h(xi),1<=i<=k視作Y中的隨機元素(yi(1<=i<=k)未必不同)。但計算k個隨機元素y1,y2,.....yk∈Y是不同的機率是一件容易的事情。依次考慮y1,y2,.....yk。y1可任意地選擇;y2≠y1的機率為1-1/n;y3≠y1,y2的機率為1-2/n;.....;yk≠y1,y2,.....,yk-1的機率為1-(k-1)/n。
因此,沒有碰撞的機率是(1-1/n)(1-2/n).....(1-(k-1)/n)。如果x是一個比較小的實數,那么1-x≈e-x,這個估計可由下式推出:e-x=1-x+x2/2!-x3/3!+.....。現在估計沒有碰撞的機率(1-1/n)(1-2/n).....(1-(k-1)/n)約為1-e-k(k-1)/2n。我們設ε是至少有一個碰撞的機率,則ε≈1-e-k(k-1)/2n,從而有k2-k≈nln(1/(1-ε)2)。去掉-k這一項,我們有k2≈nln(1/(1-ε)2),即k≈sqrt(2nln(1/(1-ε)2))。
如果我們取ε=0.5,那么k≈1.17sqrt(n)。這表明,僅sqrt(n)個X的隨機的元素就能以50%的機率產生一個碰撞。注意ε的不同選擇將導致一個不同的常數因子,但k與sqrt(n)仍成正比例。
如果X是一個教室中的所有學生的集合,Y是一個非閏年的365天的集合,h(x)表示學生x的生日,這時n=365,ε=0.5,由k≈1.17sqrt(n)可知,k≈22.3。因此,此生日問題的答案為23。
生日攻擊隱含著訊息摘要的長度的一個下界。一個40比特長的訊息摘要是很不安全的,因為僅僅用2^20(大約一百萬)次隨機Hash可至少以1/2的機率找到一個碰撞。為了抵抗生日攻擊,通常建議訊息摘要的長度至少應取為128比特,此時生日攻擊需要約2^64次Hash。安全的Hash標準的輸出長度選為160比特是出於這種考慮。
中間相遇攻擊是生日攻擊的一種變形,它不比較Hash值,而是比較鏈中的中間變數。這種攻擊主要適用於攻擊具有分組鏈結構的Hash方案。中間相遇攻擊的基本原理為:將訊息分成兩部分,對偽造訊息的第一部分從初試值開始逐步向中間階段產生r1個變數;對偽造訊息的第二部分從Hash結果開始逐步退回中間階段產生r2個變數。在中間階段有一個匹配的機率與生日攻擊成功的機率一樣。
在修正分組攻擊中,為了修正Hash結果並獲得期望的值,偽造訊息和一個分組級聯。這種攻擊通常套用於最後一個組,因此也稱為修正最後分組攻擊。差分分析是攻擊分組密碼的一種方法。這種攻擊也可用來攻擊某些Hash算法。
針對Hash算法的一些弱點可對Hash算法進行攻擊,可利用Hash算法的代數結構及其所使用的分組密碼的弱點來攻擊一些Hash方案。例如針對DES的一些弱點(即互補性、弱密鑰、密鑰碰撞等)來攻擊基於DES的Hash方案。

相關搜尋

熱門詞條

聯絡我們