1 回答

TA貢獻1802條經驗 獲得超5個贊
random.random()
使用偽隨機數生成器 (PRNG),該生成器根據定義使用確定性算法并在數學上擴展其輸入。因此,它生成的數字是偽隨機的,即使它是由量子隨機數生成器或某些其他不確定源的輸出播種的。
種子是初始化 PRNG 的值,PRNG 可以生成的可能序列的數量取決于 PRNG 的狀態大小和種子的大小。例如,如果種子或狀態只有 32 位長,則該 PRNG 最多可能有 2?32 個不同的偽隨機數序列,無論種子來自何處。
無論如何,“偽隨機”和“真正隨機”數字之間的區別不是應用程序關心的(并且您沒有真正指定您想要的應用程序類型)。相反,一般來說:
安全應用程序關心這些數字是否難以猜測;在這種情況下,只有加密 RNG 可以實現這一要求(即使是依賴于偽隨機數生成器的 RNG)。Python 的示例是
secrets
模塊或random.SystemRandom
.科學模擬關心這些數字是否表現得像獨立的均勻隨機數,并且通常關心這些數字在以后是否可重現。一個 Python 示例是
numpy.random.Generator
.
例如,random.random()
Mersenne Twister 使用的偽隨機數生成器不適合密碼學或信息安全;它產生的數字并不是為了難以猜測而設計的,無論該生成器如何播種(無論是通過量子隨機數生成器還是其他方式),情況都是如此。
相比之下,為信息安全而設計的偽隨機生成器通常涉及加密哈希函數、分組密碼或流密碼,特別是因為目標之一是使未來的偽隨機數難以猜測,即使生成器的輸出已知。
添加回答
舉報