如果在每次使用之前播种高熵种子,Python的3个random.random()是否足够安全?除了验证分布形状之外,如何知道和验证。
所以问题是使用random.random将一些熵源转换为数组项内的许多选择。
比方说,我们有一个9k字的字典,想要随机选择18个字。我们不希望任何其他人通过玩pythons的random.random()来找到它们。
dic = ["word1", "word2", ... , "word19k"]
while(true):
seed = os.urandom(50)
random.seed(seed)
print(random.choice(dic))
答案 0 :(得分:2)
Python documentation of random specifies:
警告不应将此模块的伪随机生成器用于安全目的。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。
正如问题的评论中所述,生成随机数的更好,更安全的方法(用于加密目的)是os.urandom()。
来自链接问题的示例代码
>>> import os
>>> os.urandom(10)
'm\xd4\x94\x00x7\xbe\x04\xa2R'
>>> type(os.urandom(10))
<type 'str'>
>>> map(ord, os.urandom(10))
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25]
答案 1 :(得分:1)
好的,在其他地方询问之后,如果随机发生器产生均匀分布,整个操作都没用,但不会带来安全风险。
在问题中,如果随机生成器为每一代播种新种子。这就像应用简单无用的转换x =&gt; F(X)。
如果你使用高熵并通过python random.random ou random.choice传递给这个问题的回答很简单,它和种子质量一样安全。我不建议将其更改为正在运行的系统的高优先级更改。
响应的另一部分是:不要那样做,它没用。使用更好的方法来保护选择而不是random.choice。