Random-Number-Generator
為什麼 CSPRNG 中有計數器?
這可能是那些令人尷尬的簡單問題之一,但在這裡。考慮以下兩個結構:
- CSPRNG 由帶有計數器的分組密碼 (AES) 製成,例如
- CSPRNG 由帶有計數器(Java SecureRandom 的 SHA1PRNG)的安全散列函式製成,例如
共同點是提供計數器。建立狀態後,您可以簡單地執行state’ = F(state),計數器的意義何在?所以狀態只是種子,它會被迭代處理以產生隨機流。櫃檯給聚會帶來了什麼?
計數器有一個實際優勢:它使隨機流可搜尋,而不是純粹的順序。這對於 CSPRNG 無關緊要,但對於 DRBG 和並行化卻很重要。
但它也可以解決遞歸呼叫雜湊函式的兩個可能問題:循環長度和固定點。
擊中一個固定點會特別討厭;本來應該是隨機數生成器的東西將永遠開始生成相同的值。
在實踐中,風險可以忽略不計,除非您的函式不是安全散列函式,或者塊大小非常小。循環長度也不是問題,只是因為在偏差變得可利用之前儲存所有觀察值是不切實際的。
儘管如此,使用計數器還是令人放心的。達到一個固定點的安全隱患為零。週期長度很短的點也不會。