Bitcoin-Core

為什麼比特幣核心中實現的 chacha20 使用 64 位隨機數?

  • September 15, 2021

chacha20的草案使用 64 位 nonce,但 chacha20 規範的最終版本使用 96 位 nonce。

#9792 PR將chacha20 添加到比特幣核心。我們可以看到該函式ChaCha20::SetIV(uint64_t iv)使用 64 位來設置 nonce 值。從這裡chacha20.cpp提到它遵循 chacha20實現

比特幣使用 64 位隨機數有什麼特別的原因嗎?按照推薦使用 96 位隨機數不是更好嗎?

沒關係。舊版本有 64 位隨機數和 64 位計數器,而新版本用 96 位隨機數和 32 位計數器替換它。然而,出於我們的目的,它們都可以合理地被認為是一個不應該重複的 128 位數字。

Bitcoin Core 中的 ChaCha20 實現用作隨機數生成器的基礎,而不是(尚未)用作加密的流密碼,其中 nonce/IV 和塊計數器用於不同的目的。

在 RNG 中,256 位密鑰是隨機生成的(使用 OS 和系統隨機性),並且 nonce 和計數器都設置為 0。然後每生成 64 個字節,塊計數器就會遞增。如果我們改用 32 位計數器,我們需要處理計數器溢出的情況,最有可能的方法是在發生這種情況時增加隨機數。所有這一切仍然與將其視為 64 位隨機數和具有遞增非溢出計數器的計數器完全相同。

引用自:https://bitcoin.stackexchange.com/questions/109657