Random-Number-Generator

什麼應該用作熵的來源?

  • December 22, 2020

我有基於硬體的 RNG,它由 TRNG 和 PRNG 組成。TRNG 給出了一個 512 位的數字,用作 PRNG 的種子。RNG 正在使用 PRNG 生成一個 160 位隨機數,並在之後完成重新播種 $ 2^{20} $ 數字。我想使用基於硬體的 RNG 作為熵源。什麼應該用作熵的來源,即 TRNG 或 PRNG 的輸出?

如果你需要一個熵源,那就是 TRNG,根據定義。TRNG 通過物理方式提供不可預測的輸出。熵源是提供不可預測輸出的源。熵是衡量不可預測程度的指標。

硬體熵源很少是統一的,因此它們永遠不應該用作 RNG,而是作為CSPRNG的種子,即“平滑”位之間所有相關性的確定性算法。

因此,如果您真的需要熵源,請使用 TRNG。但是,如果您所做的不是播種 CSPRNG,那麼您真正需要的是隨機源;為此,請使用由 TRNG 播種的 CSPRNG。

擁有 160 位輸出讓我擔心您的 CSPRNG 是基於 SHA-1。SHA-1 已棄用,但尚未損壞。如果您使用的是 SHA-1,則應該計劃用 SHA-256 替換它,但這不是很緊急。重要的是,您在使用的任何散列或其他加密原語之上使用良好的 CSPRNG 算法,希望 NIST 的 Hash_DRBG 或 HMAC_DRBG(如果它基於散列)。

熵的簡化公式 (log2n) 給出 160 位的值為 7.32,512 位的值為 9。如果我決定使用 RNG 的輸出,我是否有理由聲稱 7.32 位熵?

你的計算沒有意義。想想什麼 $ n $ 在這個公式中!源的熵 $ n $ 可能的不同等機率是 $ \log_2(n) $ . 提供源的熵 $ k $ 獨立位是 $ k $ . 如果您的源提供了 512 個獨立位,那麼您將從中獲得 512 位的熵,但實際上物理源具有一些​​難以精確評估的相關性,因此您的相關性可能要少得多。在任何情況下,熵最重要的是足以使蠻力攻擊成功的機率可以忽略不計。為此,160 位和 512 位之間沒有有意義的區別。

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