Hash

將種子與塊計數器一起散列並用作加密方案:哪種方案在實踐中更安全?

  • November 24, 2022

This question與this有關(但不一樣)。

假設我有一個熵為 1024 位的種子,並使用雜湊函式用一個計數器對其進行雜湊處理,其中四分之一的種子大小以位為 BLAKE2s(256 位摘要大小)。

我用計數器對種子進行雜湊處理,並將結果異或為明文。

正如這個答案中所說,一些選項是(我自己提出的第三個):

  1. H(00∥F) ∥ H(01∥F) ∥ H(02∥F) ∥ H(03∥F)…
  2. H(H(F)∥00) ∥ H(H(F)∥01) ∥ H(H(F)∥02) ∥ H(H(F)∥03)…
  3. H(00∥H(F)) ∥ H(01∥H(F)) ∥ H(02∥H(F)) ∥ H(03∥H(F))…

/\ H 是雜湊值,F 是文件,00、01、02、03 是計數器。

PS:對於H(F∥00)∥H(F∥01)∥H(F∥02)∥H(F∥03),這裡已經回答了

假設散列函式不易受到長度擴展攻擊並且不關心優化,那麼在實踐中哪一個是最安全的方案?為什麼?

我不確定您對實用的確切定義,但第一個方案比其他兩個方案更安全。從熵的角度來看,第二個和第三個方案丟棄了大約四分之三的密鑰熵。換句話說,它們有非常大的等價鍵族:每對值 $ F $ 和 $ F’ $ 和 $ H(F)=H(F’) $ 在方案 2 和 3 下產生相同的流。

特別是,如果 $ 2^{128} $ 使用密碼的實例,可能有兩個實例具有相同的密鑰流。這可能算不上實用,但卻是非常不可取的。

在一個稍微相關的挑剔筆記上,您應該要求種子具有大的最小熵,而不僅僅是大的香農熵。可以建構具有超過 1024 位熵但輸出一個特定數字的隨機數源,例如一半的時間。

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