迭代散列增加安全位數?
根據WhatsApp 安全白皮書,Whatsapp在使用者的公鑰和身份上使用 5200 次 SHA-512 迭代。
我想知道為什麼?
根據:為什麼在 Signal 中計算安全編號時要迭代 5200 次? Information Security.SE上的這個問題:是將安全位增加到112。
我明白為什麼30位數字有 $ \approx 99 $ 位熵等等 $ \approx 99 $ 安全位。
$$ \log_2(10)*30 \approx 99 $$
但是迭代散列如何影響安全位?據我了解,它不會影響熵。
文章中的數學確實顯示:
$ \log_2(10^{30} * 5200) \approx 112 $ . keylength.com推薦的安全位數
此外,Signal 原始碼註釋也在原始碼中說明了這一點
我在哪裡可以閱讀更多關於為什麼將“5200”雜湊迭代作為乘法放入*“*日誌”以及為什麼它會影響安全位的更多資訊?
迭代散列如何影響安全(測量)位?
它通過增加通過蠻力解決問題可能需要的操作數量來實現這一點,因為操作是在每次嘗試中斷時迭代的內容。
(迭代散列)不影響熵
實際上,迭代散列不會增加¹熵。它仍然可以增加安全性。
$ n $ -位安全意味著對手需要執行 $ 2^n $ 破壞系統的操作。
是的,對於某些操作的定義,以及確定性的破壞系統。
如果有攻擊 $ N $ 以機率成功的操作 $ p $ , 和 $ p $ 線性增長 $ N $ 直到 $ p=1 $ 就像在關鍵搜尋中一樣,那麼系統最多有$$ n=\log_2(N/p)=\log_2(N)-\log_2(p)\text{ bit security} $$
這個公式適用於低 $ p $ 和任何 $ N\ge1 $ . 習慣上,它也用於 $ p $ 僅線性增長 $ N $ 直到 $ p $ 達到不可忽略的值,例如因為 $ p=e^{-N_0/N} $ 就像在原像搜尋中一樣。
該問題的 Whatsapp 系統將 32 字節 ECC 公鑰重新格式化為 30 位十進制數字字元串,這些字元串看起來幾乎均勻分佈。主要設計目標是使生成一個私鑰變得困難,該私鑰匹配公鑰重新格式化為一個(或多個)給定字元串,該字元串通過重新格式化一個(或多個)目標公鑰獲得;也就是說,使第二個原像搜尋變得困難。
針對該系統的暴力原像攻擊會生成密鑰對;使用 SHA-512 對公鑰進行 5200 次散列;並針對目標值進行測試。每個私鑰測試都有機率 $ p=10^{-30} $ 匹配給定的字元串。每個測試花費 5200 次 SHA-512 迭代,其他相對較少(私鑰的增量,ECC 點將常數點添加到前一個公鑰,通常與給定字元串的 5 位數字進行一次(最多 6 次)比較模減模的 $ 10^5 $ SHA-512 雜湊的一部分)。
由此可見,安全性是 $ \log_2(5200)+30\log_2(10)\approx112.00 $ -bit 當成本計算在 SHA-512 雜湊中時,這是這裡的自然度量,並且有一個目標鍵。為了 $ s $ 目標字元串/鍵,每次測試成功的機率增加一個因子 $ s $ ,因此安全性降低了 $ \log_2(s) $ 少量。
筆記:
這個答案的前一個版本是關於在加密系統中隨著迭代次數的增加而增加的安全性,其中除了迭代雜湊之外還有相當多的其他操作。這與問題的上下文無關,因此被刪除。
¹ :迭代雜湊的最簡單形式,包括問題的 Whatsapp 上下文中的一種,甚至略微降低了熵;看到這個。