生日攻擊是密碼學的一種破譯手段，利用了機率論中的生日問題，用於幹擾兩個或以上群體之間的通訊。此攻擊是對固定的重新排列模式作隨機嘗試攻擊，仰賴較高的命中率（鴿籠原理）。生日攻擊可在 sqrt 2n 2n 2 等級的時間內找到雜湊碰撞，低於原像攻擊的 2n。有研究給出一個籠統（但尚存爭議）的估計，表示量子電腦能夠進行生日攻擊，進而可以破解防雜湊碰撞的抵禦，並能把時間壓縮到 sqrt 32n 2n 3 的等級。 理解問題 舉例來說，假設有一位老師帶著一個有 30 位學生（n 30）的班級，老師詢問每位學生的生日（為了簡化計算，忽略閏年），想要確認是否有兩位學生的生日相同（這相當於稍後會提到的雜湊碰撞）。 直覺上，這個機率可能看起來很小。 但出乎意料的是，根據公式 1frac 365365ncdot 365n 計算，至少有一位學生的生日與其他任一天的生日相同的機率（n 30）約為 70。 如果老師挑選了一個特定的日期（例如 9 月 16 日），那麼至少有一位學生在該特定日期出生的機率是 1 36436530，約 79。 在生日攻擊中，攻擊者會準備多個不同版本的良性和惡意合約，每個合約都有一個數位簽章。 目標是尋找一對具有相同簽章的良性和惡意合約。 在這個假設的例子中，假設字串的數位簽章是其 SHA256 雜湊值的第一個位元組。 找到的組合將以綠色表示 需要注意的是，找到兩個良性合約（藍色）或兩個惡意合約（紅色）的配對是無效的的。 當受害者接受良性合約後，攻擊者會將其替換為惡意合約，並聲稱受害者已簽署該合約，因為數位簽章作為證據可以證明此。 數學 定函式 f，攻擊目標是找到符合 f x_1 f x_2 的兩個不同輸入值 x_1 x_2。這一對 x_1 x_2 被稱之為碰撞。找出一對碰撞的方法可以是隨機或偽隨機地輸入不同的數值，直到找出至少兩個相同的結果為止。但由於生日問題，這種方法的效率不高。明確的說，若函式 f x 所擁有的 H 的不同輸出有著相同可能性且 H 足夠大，要取得符合 f x_1 f x_2 的一對不同的自變數 x_1 和 x_2，函式平均需要大約 125sqrt H 個不同個自變數。 思考下面一個實驗。從下列的 H 數集中隨機均勻地選擇 n 個值，因此將允許重複。使 p（n H）成為此實驗中至少一個值被選擇多於一次的機率。則機率可估計為 p nH approx 1 en n12H approx 1en22H 使 n（p H）為將選擇的最小數值，這種情況下找到碰撞的機率至少為 p。透過顛倒上方的表示式，可得到了下列估計公式： n pHapprox sqrt 2Hlnfrac 11p 將碰撞機率設為 05，將得到 n 05H approx 11774 sqrt H 使 Q（H）成為在尋找首次碰撞前所期望的值的數量。此數量可透過下列公式進行估計： Q Happrox sqrt frac pi2 H 舉例：若使用 64 位雜湊，則估計將有 18 1019 個不同的輸出。若這些輸出均可能發生（理想情況下），則攻擊者 僅僅 需要約 50 億次嘗試（538 109）就能透過暴力攻擊生成碰撞。此值被稱為 生日界限（birthday bound）請參閱上界和下界。而對於 n 位密碼則需要 2n2 次。 下列舉出其他例子 位數 可能輸出（H） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 期望的隨機碰撞可能性（2 安全係數）（p） 位數 可能輸出（H） 1018 1015 1012 109 106 01 1 25 50 75 16 216 65 x 104 2 2 2 2 2 11 36 190 300 430 32 232 （43 109） 2 2 2 3 93 2900 9300 50000 77000 110000 64 264 （18 1019） 6 190 6100 190000 6100000 19 108 61 108 33 109 51 109 72 109 128 2128 （34 1038） 26 1010 82 1011 26 1013 82 1014 26 1016 83 1017 26 1018 14 1019 22 1019 31 1019 256 2256 （12 1077） 48 1029 15 1031 48 1032 15 1034 48 1035 15 1037 48 1037 26 1038 40 1038 57 1038 384 2384 （39 10115） 89 1048 28 1050 89 1051 28 1053 89 1054 28 1056 89 1056 48 1057 74 1057 10 1058 512 2512 （13 10154） 16 1068 52 1069 16 1071 52 1072 16 1074 52 1075 16 1076 88 1076 14 1077 19 1077 表格展示了需要達到給定成功可能性的雜湊數量 n p，且假設所有雜湊均有相同機率。為了比較，通常一塊硬碟的不可修正位元錯誤率為 1018 至 1015。理論上說，使用 128 位的 MD5 雜湊或通用唯一識別碼將在 8200 億份文件時得到破解，即使它們的可能輸出還要更多。 顯而易見，若函式的輸出不平均分佈，碰撞則可能將被更快找到。雜湊函式的 平衡 概念量化了其能抵禦生日攻擊（攻擊平均的金鑰分佈）的次數。然而，確定雜湊函式的平衡將需要計算所有輸入，因此這種方法對於諸如 MD 及 SHA 系的流行雜湊函式是不切實際的。 當計算 n pH 中的子表示式 lnfrac 11p 翻譯到常見的程式語言如 log 11p 下，公式由於對較小的 p 的計算精度不高。例如，當 log1p（如 C99 中一樣）可用時，應直接使用可達到相同效果的表示式 log1p p。 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 100probability_exponent outputs 20bits return sqrt 20outputslog1p probability 若程式碼儲存在命名為 birthdaypy 的檔案中，使用者可和下面的例子一樣互動執行此程式： python i birthdaypy birthday 15 128 8249634742471193 birthday 6 32 9268192319417072 簡單估計 一項經驗法則可適用於此關係中的心算流程 p n approx n2 over 2H 可改寫為 H approx n2 over 2p n 或 n approx sqrt 2H times p n 此公式在機率小於等於 05 時有效。 此近似方案在使用指數時可輕易使用。例如，假設構建 32 位雜湊（H 232）且希望碰撞機率為 100 萬分之一（ p approx 220 ），則最多需要多少份文件？ n approx sqrt 2 times 232 times 220 sqrt 213220 sqrt 213 265 approx 905 即與正確答案 93 次近似。 數字簽名敏感度 數位簽章可對生日攻擊十分敏感。設想一條被首次計算 f m（f 為密碼雜湊函式）所簽名的資訊，且隨後又使用了一些金鑰來簽名 f m。假設愛麗絲與鮑伯牽涉到簽名詐騙合同。馬洛裡準備了一份正常合同 m 和一份偽造合同 m。馬洛裡隨後發現 m 所在的位置數可在不改變原意的情況下（如插入逗號、清空行、在句後增加一兩個空格、替換同義詞等等）被更改。透過結合這些更改，她可新建諸多 m 的變體且均為正常合同。 相似情況下，馬洛裡也為偽造合同 m 新建了諸多變體。她隨後應用雜湊函式到所有變體直到她找到與正常合同有著相同雜湊值 f m f m 的偽造合同位置。她隨後將正常合同帶給鮑勃簽名。在鮑勃簽名完後，馬洛裡將簽名取下並依附到偽造簽名上。此簽名 證實了 鮑勃簽署了偽造合同。 此例中，攻擊機率與原始的生日問題稍有不同，因為馬洛裡將在尋找兩份具有相同雜湊的正常合同與偽造合同時將一無所獲。馬洛裡的策略是生成一份偽造和一份正常的合同。生日問題公式適用於 n 為合同對數的情況下。但馬洛裡所生成的雜湊數實際上為 2n。 為避免這種攻擊，用於簽名方案的雜湊函式的輸出長度應夠大以從計算角度防止生日攻擊。換言之，位數應為防止普通暴力破解所需位數的兩倍。 除了使用更大的位數長度外，簽名者（鮑勃）可以在簽名前做出一些隨機且無害的更改，並且在自己的手上留下一份合同副本以在法庭上展示出他的簽名與正常合同上的匹配，而不匹配偽造合同。 離散對數的波拉德 ρ 演算法是使用生日攻擊以計算離散對數的演算法。 另請參閱 中途相遇攻擊 腳註 參考文獻 ，《等一下：雜湊函式平衡及其對生日攻擊的影響》（Tadayoshi Kohno Hash Function Balance and Its Impact on Birthday Attacks） 2004 pp401418 《應用密碼學》 第二版。（Applied Cryptography 2nd ed） 布魯斯施奈爾所著 外部連結 What is a digital signature and what is authentication 來自加密的常見問題集。 Birthday Attack X5 網路加密問答 Category 密碼分析 deKollisionsangriffGeburtstagsangriff