非均勻隨機和均勻隨機之間的區別
我正在閱讀密鑰派生函式 (KDF),在 David Wong 的Real-World Cryptographic 書中的一部分中,正在與偽隨機數生成器 (PRNG) 進行比較。據說其中一個區別是KDF採用非均勻隨機任意長度輸入,而PRNG採用均勻隨機k位密鑰。即使兩者都具有均勻隨機的任意長度輸出。
基本上據說主要區別在於 KDF 不期望完全均勻隨機的秘密作為輸入(只要它有足夠的熵)。
在這種情況下,非均勻隨機和均勻隨機究竟是什麼意思?在這種情況下熵是什麼意思?
似乎更好地理解這些術語將有助於更好地理解 KDF 和 PRNG 之間的區別
一致隨機意味著所有可能的值都是等可能的。其中“所有可能的值”將是某個集合中的那些,如果沒有另外定義,則該集合是所考慮的變數大小的位串集合。
KDF 的非均勻輸入的一個例子是當 KDF 被輸入 Diffie-Hellman 密鑰交換的結果時 $ \mathbb Z_p^* $ 和 $ g $ 整個組的生成器。KDF 的輸入可以是 $ g^{a,b}\bmod p $ 表示為固定大小的字節串(例如大端)( $ p $ ,四捨五入為 8 位的倍數),其中 $ a $ 和 $ b $ 隨機短暫的秘密。一些在 KDF 輸入中有效的字節串在實際使用中永遠不會出現:在 KDF 中不代表整數的輸入字節串 $ [1,p-1] $ ,包括全 0x00 和全 0xFF 字節串。在可以達到的那些中,二次殘差(達到 $ a $ 或者 $ b $ 是偶數)的可能性是非二次餘數的三倍(當 $ a $ 和 $ b $ 很奇怪)。
另一個非統一輸入的例子是密碼片語,它是一些 KDF 的常見輸入(例如現代 Argon2 或過時的 PBKDF2)。
生成變數的過程的香農熵(以位為單位) $ X $ 那可以採取 $ n $ 具有機率的值不同的值 $ p_i $ 和 $ 0\le i<n $ , 因此與因此 $ 1=\displaystyle\sum_{0\le i<n}p_i $ 和 $ 0\le p_i\le1 $ , 被定義為數量 $$ H(X)=\sum_{0\le i<n\text{ and }p_i\ne0}p_i\log_2(1/p_i) $$
另一個有用的熵是min-entropy,定義為 $$ H_\text{min}(X)=\log_2(1/\max_{0\le i<n}{p_i}) $$
它總是持有 $ H_\text{min}(X)\le H(X) $ .
一個程序產生一個 $ b $ -bit 位串 $ X $ 有 $ b $ -位熵(對於任一定義)當且僅當它生成均勻隨機的位串時。非均勻隨機時,熵小於 $ b $ -位,下降到 $ 0 $ 當它總是生成相同的位串時。
非正式地,如果 KDF 的輸出基本上是均勻隨機的(對於或多或少嚴格的定義),則 KDF 的輸入有足夠的熵。當 KDF 的輸入不是均勻隨機時,這是可能的,但前提是該輸入具有(最小)熵,至少 KDF 的輸出寬度為 $ b $ 位(或至少 $ b $ 這樣 $ 2^b $ 對抗對手的列舉)。然後這不是嚴格的充分條件。