Random-Number-Generator
我們可以結合兩個真正的隨機生成器來獲得一個新的嗎?
眾所周知,真正的隨機發生器利用了某些物理現像中出現的隨機性。此外,真正的隨機生成器的輸出可以是有偏差的,也可以是相關的。因此,需要去偏技術。
我的問題是,如果我們有兩個真正的隨機位生成器,其輸出沒有通過 NIST 的測試套件,我們可以將這些輸出組合起來以獲得通過統計隨機性測試套件的隨機位生成器嗎?
如果某些條件為真,則可以將兩個 TRNG 合二為一,並從中獲得更好的輸出。
我將兩個原始發生器稱為 TRNG-1 和 TRNG-2,以及它們的組合 TRNG-3。
- 如果 TRNG-1 正在生成 $ k $ 每秒輸出位數,TRNG-2 正在生成 $ l $ 每秒輸出位數,它們的組合(TRNG-3)需要產生少於 $ k+l $ 每秒輸出位數。實際輸出速率需要通過考慮兩個生成器的估計熵以及它們之間的相關性來仔細確定。
- TRNG-1 和 TRNG-2 不需要完全相關。只要它們之間存在小的、獨立的差異,就可以通過組合產生比單獨使用它們中的任何一個更好的輸出。
有多種方法可以組合 TRNG-1 和 TRNG-2。下面是一些例子。
- 加密雜湊函式
- 海綿功能,例如 Keccak 或 Gimli 海綿
- 與隨機填充的矩陣相乘
- 即使是簡單的方法,例如 Pearson 雜湊。
如果 TRNG 本身很好並且沒有有意義的相關性,那麼您可能可以通過簡單的 XOR 逃脫。但是上述方法並不太複雜或昂貴,所以我建議保持安全並實施其中一種。