如果在每次使用之前都使用高熵种子,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))发布于 2017-12-13 16:57:49
好的,在询问其他地方之后,如果随机发生器产生一个均匀的分布,整个操作是无用的,但不会带来安全风险。
就像在问题中一样,如果随机生成器每一代都有新的种子。这就像应用一个简单的无用转换x => f(x)。
对这个问题的回答非常简单,如果您使用高熵并通过python random.random ou random.choice传递它,它就像种子质量一样安全。我不建议将此更改为对正在运行的系统的高优先级更改。
回答的另一部分是:不要那样做,它是无用的。使用更好的方法来保护pick而不是random.choice。
发布于 2017-12-12 13:02:25
警告本模块的伪随机生成器不应用于安全目的。如果需要加密安全的伪随机数生成器,请使用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]https://stackoverflow.com/questions/47773114
复制相似问题