Cryptanalysis
僅使用偽隨機函式來驅動許多確定性鍵
我的問題與:
但在這裡我只使用偽隨機函式。
假設我們有一個偽隨機函式, $ PRF $ . 我們有一個真正隨機的主密鑰: $ mk $ 用於 PRF 功能。
我想確定性地生成 $ n $ 鍵,所以我這樣做:
$ \forall i, 1\leq i\leq n: k_i=PRF(mk,i) $ .
問題:使用每個密鑰是否安全 $ k_i $ 生成 $ m $ 偽隨機值?例如 $ \forall j, 1\leq j\leq m : k_{i,j}=PRF(k_i,j) $ .
是否有任何協議使用這種方案(如果該方案是安全的)?
是的,您的建議本質上是SP 800-108 (pdf) 第 5.1 節中定義的“計數器模式下的 KDF”。這顯示瞭如何像您一樣在計數器模式下使用 PRF 導出一長串“派生密鑰材料”。它包括一些用於區分域分離的派生密鑰的上下文和長度的輸入。您可以使用這些,但如果您只使用這一密鑰派生過程,您可以跳過它們。
同一文件的第 7.3 節指出,您可以根據需要劃分密鑰的派生材料,只要它們不重疊:
在沒有依賴應用程序可能施加的限制的情況下,可以指定具有所需長度的派生密鑰材料的任何片段用作密鑰,但受以下限制:當多個密鑰(或任何其他類型的秘密參數,例如秘密初始化向量)是從派生的密鑰材料中獲得的,它們應從KDF 輸出的不相交(即非重疊)段中選擇。
我想不出一個協議可以做到這一點。例如,TLS 使用更複雜的密鑰派生函式,直到 1.3 應該使用 HKDF。
說到,你可能想使用HKDF只是因為它更標準,但你所做的也很好。