Encryption
真隨機數發生器的正確用途是什麼?
假設我有一個真正的隨機數生成器 TRNG。隨機數是從硬體熵源按需生成的,每次呼叫時都會產生一個 32 位的隨機值。
我必須用隨機數填充一個 10 字節(=10*8 位= 80 位)的數組。我可以第一次呼叫 TRNG,取第一個字節、第二個、第三個和第四個字節來填充我的數組,然後再次呼叫…
或者我應該為每個字節呼叫一個新的隨機數並丟棄未使用的字節?
我會說第一種方法是正確的,但是我的項目中的隨機數質量存在一個小問題,我想確定一下——也許我完全錯了……
我假設您的 TRNG 具有均勻分佈,並且可以生成所有可能的 32 位數字(即不限於特定的較小數字範圍,只是為了
$$ 0,2^32-1 $$). 在這種情況下,這並不重要,因為 TRNG 輸出也是一個真正隨機的單個比特流,以及一個真正隨機的 2 位對(數字 0-3)等流。
如果這不是真的, IE。您的 32 位數字是均勻隨機的,但單個位不是,這是不可能的:取第一個 32 位數字,然後查看它有哪些位,並且您已經掌握了有關下一個數字的某些位的資訊,即完整的數字也不是ranodm。
所以,如果你只取一個 32 位數據集的一部分,這並不意味著其餘的不再那麼隨機了。也只需使用其餘部分。