Hash

是否可以從雜湊函式生成一個密鑰,該密鑰大於雜湊函式摘要輸出而不拆分種子?

  • October 14, 2022

假設我有一張 2MB 的照片,我想從中生成一個密鑰,並且密鑰的大小應該是 2048 位。

諸如 SHA3-512 之類的散列函式不會提供具有所需強度的密鑰。

是否可以使用散列函式生成這樣的密鑰,該散列函式的最大摘要輸出/內部狀態小於它,而不必將文件拆分為許多部分?

我一直在考慮使用連結對文件進行雜湊處理,如下所述:https ://crypto.stackexchange.com/a/99579/89581

但我不知道它是否可以用於此目的。

如果 $ F $ 是文件,並且 $ H $ 512 位雜湊,建構 2048 位密鑰的三個不錯的選擇是

  1. $ key = H(\mathtt{00}\mathbin|F)\mathbin|H(\mathtt{01}\mathbin|F)\mathbin|H(\mathtt{02}\mathbin|F)\mathbin|H(\mathtt{03}\mathbin|F) $
  2. $ key = H(F\mathbin|\mathtt{00})\mathbin|H(F\mathbin|\mathtt{01})\mathbin|H(F\mathbin|\mathtt{02})\mathbin|H(F\mathbin|\mathtt{03}) $
  3. $ key = H(H(F)\mathbin|\mathtt{00})\mathbin|H(H(F)\mathbin|\mathtt{01})\mathbin|H(H(F)\mathbin|\mathtt{02})\mathbin|H(H(F)\mathbin|\mathtt{03}) $

在哪裡 $ \mathtt{00} $ , $ \mathtt{01} $ , $ \mathtt{02} $ , $ \mathtt{03} $ 是一個字節的字節串。

在所有選項中,整個熵 $ F $ 進入 4 個輸出段中的每一個,並且無法從其他輸出中找到部分輸出 $ F $ (或它的雜湊)。在第一個選項中,輸入 4 個字節作為前綴可以最大化擴散。第二個和第三個選項允許更快地實現大型 $ F $ ,並且足夠安全。

從業者將使用SHA-3 可擴展輸出函式 $ \operatorname{SHAKE256}(F,2048) $ ,這是一種預先設計好的方法來完成這項工作。


評論中所述:如果我們的熵低 $ F $ ,那麼我們想要一個故意緩慢的熵/密鑰拉伸散列函式,用於將密碼轉換為密鑰。那可能是Argon2。與 SHAKE256 一樣,它有一個tagLength控制輸出大小的參數(但它以字節為單位,因此我們希望將其設置為 256 以實現 2048 位輸出)。

對於方法 2、3、SHAKE256 和 Argon2,輸出中的實際熵有一個大大低於 2048 位(更像是 512 位)的限制,即使在 $ F $ . 這不是一個實際的安全問題。

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