Random-Number-Generator

為什麼 CSPRNG 中有計數器?

  • November 24, 2017

這可能是那些令人尷尬的簡單問題之一,但在這裡。考慮以下兩個結構:

  1. CSPRNG 由帶有計數器的分組密碼 (AES) 製成,例如

1

  1. CSPRNG 由帶有計數器(Java SecureRandom 的 SHA1PRNG)的安全散列函式製成,例如

2

共同點是提供計數器。建立狀態後,您可以簡單地執行state’ = F(state),計數器的意義何在?所以狀態只是種子,它會被迭代處理以產生隨機流。櫃檯給聚會帶來了什麼?

計數器有一個實際優勢:它使隨機流可搜尋,而不是純粹的順序。這對於 CSPRNG 無關緊要,但對於 DRBG 和並行化卻很重要。

但它也可以解決遞歸呼叫雜湊函式的兩個可能問題:循環長度和固定點。

擊中一個固定點會特別討厭;本來應該是隨機數生成器的東西將永遠開始生成相同的值。

在實踐中,風險可以忽略不計,除非您的函式不是安全散列函式,或者塊大小非常小。循環長度也不是問題,只是因為在偏差變得可利用之前儲存所有觀察值是不切實際的。

儘管如此,使用計數器還是令人放心的。達到一個固定點的安全隱患為零。週期長度很短的點也不會。

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