Aes
我是否需要 IV 才能將 AES-CTR 用作 CSPRNG?
我正在使用 AES128-CTR 生成偽隨機值,這被認為是高達 1MB 的安全值(至少從我讀過的內容來看)。
我只是加密一個 128 位的小端計數器,從 0 開始。
我應該使用靜脈注射嗎?我應該從非零隨機值開始計數嗎?它有什麼實際區別嗎?
使用計數器模式時,您可以從任何值開始,沒關係。唯一重要的是,您永遠不會在密鑰的生命週期內兩次使用相同的計數器值。因此,只要您的密鑰實際上是隨機的,並且正如您所說,您不會將它用於超過 1 MB 的數據,那麼您的生成器應該沒問題。
如果您從隨機密鑰和零計數器開始,則係統狀態中有 128 位熵。如果您從隨機密鑰和隨機計數器值開始,則有 256 位熵。
這是否重要取決於您使用 PRNG 輸出的目的。如果您將輸出用於任何 256 位熵將成為資產的東西——比如隨機的 256 位 UUID(其中一些來自另一個 PRNG 實例)——那麼您也可以使用隨機值為計數器播種。當然,前提是你有足夠的熵來播種。
SP 800-90A ( pdf) 中的 CTR_DRBG 是一個現成的基於 AES CTR 的 PRNG 設計,具有此類事物的選擇以及密鑰輪換,已經被淘汰。所以你可能要考慮使用它。