Hash

擴展 SHA-2 函式的輸入大小

  • January 14, 2021

在問題中,雜湊函式是否一定需要允許任意長度的輸入?許多答案都在談論 SHA-2 函式的理論極限 $ 2^{64} - 1 $ 位由於填充。我想知道,有沒有一種安全的方法來擴展它?從描述看來, $ 2^{64} -1 $ bits 不是安全限制,而是填充問題。

擁有一個將輸入數據分塊的 SHA-2 函式仍然被認為是安全的嗎? $ 2^{64} - 1 $ 雜湊大小的位並使用前一個塊的雜湊作為下一個塊的鹽?是否有其他選項可以將這些散列函式的輸入大小擴展到任意長度?

$ 2^{64-1} $ 產生 2.30584301 exabytes *的位。如果您不限於 SHA256,則使用允許文件最大大小的 SHA512 $ 2^{128}-1 $ ,或使用沒有限制的 SHA3。

由於 MD 構造的偽影,NIST 必須使用限制。SHA256 在 2001 年與 SHA512 一起標準化。它們的內部塊大小分別為512和1024,為了減少內部碰撞的變化,將輸出大小加倍,內部大小加倍,文件限制加倍!

如果你想擴展 SHA256 的限制,那麼你就超出了標準。SHA512 已經超越一切。

使用 SHA2 函式將輸入數據分塊為 (2^64 - 1) - 散列大小位並使用前一個塊的散列作為下一個塊的鹽,是否仍然被認為是安全的?

是的,你可以用這個擴展 $ h_1 = \operatorname{SHA256}(m_1)) $ 和 $ h_2 = \operatorname{SHA256}(h_1||m_2)… $

但安全是一個模糊的術語,安全反對什麼?雜湊計算是免費的,SHA256 有長度擴展攻擊,你可能需要保護。理論上,我不說數字,你會得到更多的內部碰撞機會,理論上可以減少第二個預像電阻,或者閱讀這裡

另一種選擇是默克爾樹。

是否有其他選項可以將這些散列函式的輸入大小擴展到任意長度?

使用 SHA3-256,或者更好地使用SHAKE128-256 或和 SHAKE128-512


*什麼是艾字節:艾字節是 $ 1000^6 $ 字節

這有點不現實,因為;

  • 對於 SHA256,OpenSSL 雜湊時間約為每秒 450 Mb。在我的設置中散列 1 Exabyte 需要 70466 年。
  • NSA 的猶他州數據中心應該有12 艾字節
  • 據估計,Google、亞馬遜、微軟和 Facebook 等線上儲存和服務公司至少擁有 1,200 PB 的儲存空間,即 1.2 艾字節。

引用自:https://crypto.stackexchange.com/questions/87522