SHA-3 完整性
我們曾經使用 CRC 來檢查文件的完整性。對於安全分析,我們可以關聯檢測大文件中損壞位的機率。現在我們使用 RSA 簽名的 SHA-3 雜湊進行身份驗證。
是否有任何方法可以計算兩個相同大小的文件具有相同 SHA-3 雜湊的機率?我假設機率為 1。
如何根據更改的位數或什至 1 關聯機率?
是否有任何方法可以計算兩個相同大小的文件具有相同 SHA-3 雜湊的機率?
碰撞阻力通常受生日界限的約束,相當於輸出大小的一半。所以找到兩個文件(或真正的輸入消息)大約需要 $ 2^{h / 2} $ 在哪裡 $ h $ 是 (SHA-3) 散列的輸出大小。這是假設你有足夠的儲存空間,這是不太可能的。
但是,如果您有兩個尚未預先選擇或預先計算的文件,那麼選擇兩個的機會取決於完整的輸出大小:一個在 $ 2^{h} $ ,可以忽略不計。
有關更多資訊,您可以嘗試了解預像電阻。
我假設機率為 1。
假設散列輸出分佈良好,則存在散列到相同散列的輸入的機率為 1(或非常接近於 1 對於大小有限的大文件)——這很有可能。
如果您有消息,例如每個 1MiB 和 256 位的散列,那麼每個散列值應該對許多消息有效;這就是所謂的鴿籠原則:畢竟,如果你試圖在 10 個洞裡放 100 只鴿子,你會得到擁擠的籠子。對於所有可能的 1MiB 文件,您將擁有 $ 2^{2^{23}} $ 分佈在 $ 2^{256} $ 可能的雜湊值,這意味著大約 $ 2^{8388352} $ 消息平均會產生相同的雜湊值!
然而,找到這樣的消息是複雜的地方:加密雜湊是一種無法反轉的雜湊:除了雜湊消息之外,沒有簡單的計算來創建雜湊到某個值的消息。當然,循環通過所有 $ 2^{8 \cdot 2^{20}} = 2^{2^{23}} $ 消息(對於所有可能的 1MiB 大小的文件)是不可行的。
如何根據更改的位數或什至 1 關聯機率?
找到兩個具有相同雜湊值的文件的機率是相同的:可以忽略不計。但是,要記住一件事:雜湊值本身的變化沒有考慮在內。加密雜湊並非旨在同時抵抗文件和雜湊值的更改。在錯誤被限制在不比 CRC 寬的段中,或者隨機錯誤發生在有限的、可能更大的消息段中的情況下,CRC 甚至可能具有更好的特性。
但是,如果散列是簽名的一部分,則它不能更改。如果您更改簽名位,則驗證將非常確定地失敗。因此,將雜湊值作為簽名驗證的一部分進行驗證是非常好的。
再深入一點:機會或對手可以在沒有簽名的情況下翻轉散列的任何位,您需要私鑰來基於散列生成簽名。如果您更改簽名的任何位,則在比較散列 (RSA) 或比較現在隨機化的散列(ECDSA 的間接比較)之前驗證失敗。
換句話說,簽名文件已更改並且簽名驗證的可能性可以忽略不計。只要散列保持不變或者散列位全部翻轉大約 $ 0.5 $ 找到另一個散列到相同值的文件的機會在計算上是不可行的。
因此,用簽名替換 CRC 是非常好的。另一個文件驗證的機會可以忽略不計。考慮到 SHA-3 等安全散列函式,即使是對文件的惡意更改也不會驗證簽名。與 CRC 相比,這是一個明顯的優勢。
請注意,將文件與其簽名一起交換仍然是完全可能的,這是經常被忽視的。簽名本身也無助於防止刪除或複制。與往常一樣,僅應用加密本身並不能保護您的系統。
我假設機率為 1。
我想你要麼你真的不明白機率是什麼。或者通過機率 1 你的意思是別的東西。
如果我們使用 SHA-3 的 512 位變體,則雜湊的長度為 64 字節。正如@Maarten Bodewes 解釋的那樣,這意味著如果您採用所有可能的文件大小,比如說 65 個字節,那麼肯定會發生衝突。如果您指的是此類衝突的機率,那麼可以肯定,它是 1。但是您需要多少文件才能獲得保證的衝突?對於 512 位雜湊,您需要超過 2^512 ~= 10^154 個文件。即使您每秒可以生成 1 000 000 個文件,您也需要 10^140 年才能生成此數量的文件。這就是為什麼您可以創建一個與給定文件產生相同雜湊的文件的機率為 0,而不是 1。
任何兩個相同大小的文件給出相同雜湊的機率是多少?SHA-3 的分佈被認為是均勻的。這意味著包含隨機數據的兩個任意大小的文件產生相同雜湊的機率是 1/2^512 = 2^(-512) ~= 10^(-154)。在現實中,大多數文件(影片、音頻、PDF 文件等)都有一些結構,其中許多部分的值並不是很隨機的。即使考慮到這一點,碰撞的機率也很小,幾乎為 0。
這就是為什麼您關於機率 1 的陳述不正確的原因。