生日攻擊

密碼學攻擊手段

生日攻擊密碼學的一種破譯手段,利用了機率論中的生日問題,用於干擾兩個或以上群體之間的通訊。此攻擊是對固定的重新排列模式作隨機嘗試攻擊,仰賴較高的命中率(鴿籠原理)。生日攻擊可在等級的時間內找到雜湊碰撞,低於原像攻擊。有研究給出一個籠統(但尚存爭議[1])的估計,表示量子電腦能夠進行生日攻擊,進而可以破解防雜湊碰撞的抵禦,並能把時間壓縮到 的等級。[2]

理解問題

舉例:當老師問一個有30名學生的班級(n = 30)每個人的生日在哪一天(為簡便,此處省略閏年)以確定是否有兩個學生同一天生日(對應碰撞 )。從直覺角度考慮,機率看起來很小。若老師選擇特定日期(例如9月16日),則至少有一名學生在那天出生的概率是 ,約為7.9%。但是,與直覺相反的是,至少一名學生和另外任意一名學生有著相同生日的概率大約為70.63%(n = 30時),從方程  中可看出。[3]

數學

定函數 ,攻擊目標是找到符合 的兩個不同輸入值 。這一對 被稱之為碰撞。找出一對碰撞的方法可以是隨機或偽隨機地輸入不同的數值,直到找出至少兩個相同的結果為止。但由於生日問題,這種方法的效率不高。明確的說,若函數 所擁有的 的不同輸出有着相同可能性且 足夠大,要取得符合 的一對不同的自變量  ,函數平均需要大約 個不同個自變量。

思考下面一個實驗。從下列的H數集中隨機均勻地選擇n個值,因此將允許重複。使pnH)成為此實驗中至少一個值被選擇多於一次的概率。則概率可估計為

 

使npH)為將選擇的最小數值,這種情況下找到碰撞的概率至少為 p。通過顛倒上方的表達式,可得到了下列估計公式:

 

將碰撞概率設為0.5,將得到

 

使QH)成為在尋找首次碰撞前所期望的值的數量。此數量可通過下列公式進行估計:

 

舉例:若使用64位哈希,則估計將有1.8 × 1019個不同的輸出。若這些輸出均可能發生(理想情況下),則攻擊者「僅僅」需要約50億次嘗試(5.38 × 109)就能通過暴力攻擊生成碰撞。此值被稱為 生日界限(birthday bound)[4]而對於n位密碼則需要2n/2次。[5]下列舉出其他例子

位數 可能輸出(H) 期望的隨機碰撞可能性
(2安全係數)(p)
10−18 10−15 10−12 10−9 10−6 0.1% 1% 25% 50% 75%
16 216 (~6.5 x 104) <2 <2 <2 <2 <2 11 36 190 300 430
32 232 (~4.3 × 109 <2 <2 <2 3 93 2900 9300 50,000 77,000 110,000
64 264 (~1.8 × 1019 6 190 6100 190,000 6,100,000 1.9 × 108 6.1 × 108 3.3 × 109 5.1 × 109 7.2 × 109
128 2128 (~3.4 × 1038 2.6 × 1010 8.2 × 1011 2.6 × 1013 8.2 × 1014 2.6 × 1016 8.3 × 1017 2.6 × 1018 1.4 × 1019 2.2 × 1019 3.1 × 1019
256 2256 (~1.2 × 1077 4.8 × 1029 1.5 × 1031 4.8 × 1032 1.5 × 1034 4.8 × 1035 1.5 × 1037 4.8 × 1037 2.6 × 1038 4.0 × 1038 5.7 × 1038
384 2384 (~3.9 × 10115 8.9 × 1048 2.8 × 1050 8.9 × 1051 2.8 × 1053 8.9 × 1054 2.8 × 1056 8.9 × 1056 4.8 × 1057 7.4 × 1057 1.0 × 1058
512 2512 (~1.3 × 10154 1.6 × 1068 5.2 × 1069 1.6 × 1071 5.2 × 1072 1.6 × 1074 5.2 × 1075 1.6 × 1076 8.8 × 1076 1.4 × 1077 1.9 × 1077
表格展示了需要達到給定成功可能性的哈希數量n(p),且假設所有哈希均有相同概率。為了比較,通常一塊硬盤的不可修正比特錯誤率為10−18至10−15[6]理論上說,使用128位的MD5哈希或通用唯一識別碼將在8200億份文檔時得到破解,即使它們的可能輸出還要更多。

顯而易見,若函數的輸出不平均分布,碰撞則可能將被更快找到。哈希函數的「平衡」概念量化了其能抵禦生日攻擊(攻擊平均的密鑰分布)的次數。然而,確定哈希函數的平衡將需要計算所有輸入,因此這種方法對於諸如MD及SHA系的流行哈希函數是不切實際的。[7] 當計算 中的子表達式 翻譯到常見的編程語言如log(1/(1-p))下,公式由於有效位丟失英語loss of significance對較小的 的計算精度不高。例如,當log1p(如C99中一樣)可用時,應直接使用可達到相同效果的表達式-log1p(-p)[8] If this is not done, the first column of the above table is computed as zero, and several items in the second column do not have even one correct significant digit.

源碼示例

下列是能準確生成上方表格中大多數數值的Python函數:

from math import log1p, sqrt

def birthday(probability_exponent, bits):
    probability = 10.0**probability_exponent
    outputs = 2.0**bits
    return sqrt(2.0*outputs*-log1p(-probability))

若代碼保存在命名為birthday.py的文件中,用戶可和下面的例子一樣交互運行此程序:

$ python -i birthday.py
>>> birthday(-15, 128)
824963474247.1193
>>> birthday(-6, 32)
92.68192319417072

簡單估計

一項經驗法則可適用於此關係中的心算流程

 

可改寫為

 .

 .

此公式在概率小於等於0.5時有效。

此近似方案在使用指數時可輕易使用。例如,假設構建32位哈希( )且希望碰撞概率為100萬分之一( ),則最多需要多少份文檔?

 

即與正確答案93次近似。

數字簽名敏感度

數位簽章可對生日攻擊十分敏感。設想一條被首次計算  密碼雜湊函數)所簽名的信息,且隨後又使用了一些密鑰來簽名 。假設愛麗絲與鮑伯牽涉到簽名詐騙合同。馬洛里準備了一份正常合同 和一份偽造合同 。馬洛里隨後發現 所在的位置數可在不改變原意的情況下(如插入逗號、清空行、在句後增加一兩個空格、替換同義詞等等)被更改。通過結合這些更改,她可新建諸多 的變體且均為正常合同。

相似情況下,馬洛里也為偽造合同 新建了諸多變體。她隨後應用哈希函數到所有變體直到她找到與正常合同有着相同哈希值 的偽造合同位置。她隨後將正常合同帶給鮑勃簽名。在鮑勃簽名完後,馬洛里將簽名取下並依附到偽造簽名上。此簽名「證實了」鮑勃簽署了偽造合同。

此例中,攻擊概率與原始的生日問題稍有不同,因為馬洛里將在尋找兩份具有相同哈希的正常合同與偽造合同時將一無所獲。馬洛里的策略是生成一份偽造和一份正常的合同。生日問題公式適用於 為合同對數的情況下。但馬洛里所生成的哈希數實際上為 

為避免這種攻擊,用於簽名方案的哈希函數的輸出長度應夠大以從計算角度防止生日攻擊。換言之,位數應為防止普通暴力破解所需位數的兩倍。

除了使用更大的位數長度外,簽名者(鮑勃)可以在簽名前做出一些隨機且無害的更改,並且在自己的手上留下一份合同副本以在法庭上展示出他的簽名與正常合同上的匹配,而不匹配偽造合同。

離散對數的波拉德ρ算法是使用生日攻擊以計算離散對數的算法。

另請參閱

腳註

  1. ^ Daniel J. Bernstein. Cost analysis of hash collisions : Will quantum computers make SHARCS obsolete? (PDF). Cr.yp.to. [29 October 2017]. (原始內容存檔 (PDF)於2017-08-25). 
  2. ^ Brassard, Gilles; HØyer, Peter; Tapp, Alain. Quantum cryptanalysis of hash and claw-free functions. Springer, Berlin, Heidelberg: 163–169. 20 April 1998 [29 October 2017]. doi:10.1007/BFb0054319. (原始內容存檔於2020-08-08). 
  3. ^ Math Forum: Ask Dr. Math FAQ: The Birthday Problem. Mathforum.org. [29 October 2017]. (原始內容存檔於2013-07-22). 
  4. ^ 請參閱上界和下界
  5. ^ Jacques Patarin, Audrey Montreuil. Benes and Butterfly schemes revisited (PostScript, 可移植文檔格式). Université de Versailles. 2005 [2007-03-15]. (原始內容存檔於2007-09-29). 
  6. ^ Gray, Jim; van Ingen, Catharine. Empirical Measurements of Disk Failure Rates and Error Rates. 25 January 2007. arXiv:cs/0701166 . 
  7. ^ Archived copy. [2006-05-02]. (原始內容存檔於2008-02-23). 
  8. ^ Compute log(1+x) accurately for small values of x. Mathworks.com. [29 October 2017]. (原始內容存檔於2012-08-30). 

參考文獻

外部連結