Cryptanalysis

偽隨機值可以用作安全密鑰嗎?

  • April 17, 2019

我想導出 $ n $ 來自主密鑰的密鑰。

我選擇萬能鑰匙 $ mk $ 並使用偽隨機函式(PRF)生成 $ n $ 偽隨機值, $ v_i=PRF(mk,i) $ 在哪裡 $ 1\leq i \leq n $ . 接下來,我使用密鑰推導函式來生成 $ n $ 鍵: $ k_i=KDF(v_i) $ , 在哪裡 $ 1\leq i \leq n $ . 請注意,密鑰派生必須是確定性的。

問題1:上述方案是一種安全的生成方式嗎 $ n $ 鑰匙?

問題2:我們可以考慮價值觀嗎 $ v_i $ 作為安全加密密鑰?

是的,是的,正如評論中提到的那樣。

值得注意的是,比特幣錢包使用與 BIP32 中類似的方案,這是一種確定性地從單個種子創建 n 個不同 EC 密鑰對的方法:

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

𝑃𝑅𝐹編輯:這個答案只有在CSPRNG時才成立。(這個應用程序就是 CSPRNG 定義存在的原因。)

如果您的協議是安全的,具有獨立的統一隨機選擇 $ v_i $ ,那麼它的安全性也不會差很多 $ v_i = \mathit{PRF}(\mathit{mk}, i) $ 對於均勻隨機 $ \mathit{mk} $ ,只要你從不使用 $ \mathit{PRF}(\mathit{mk}, i) $ 對於任何其他目的——對手在使用 PRF 破壞系統時獲得的唯一額外優勢是區分 PRF 的最佳優勢,對於一個好的 PRF 來說,這是可以忽略不計的。這是PRF的要點!

術語“KDF”有時包含兩個步驟,如 HKDF-Extract 和 HKDF-Expand:

  1. 從高熵但可能不統一的字元串(如 DH 共享密鑰)中提取一個短的統一字元串,有時使用鹽來緩解多目標攻擊,以及
  2. 通過 PRF 將一個短的統一字元串擴展為許多具有結構化輸入的有效獨立鍵(您所謂的 $ i $ ) 以避免碰撞。

如果你已經有一個短的統一字元串,你可以安全地跳過提取步驟,剩下的只是一個 PRF!之後再做一個提取步驟並沒有什麼壞處——按照你的描述再次對 PRF 輸出進行雜湊處理——但沒有必要。

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