gpt4 book ai didi

python - python的随机数生成容易重现吗?

转载 作者:太空狗 更新时间:2023-10-30 00:21:53 25 4
gpt4 key购买 nike

我正在阅读标准库中的 python 随机模块。令我惊讶的是,当我设置种子并产生一些随机数时:

random.seed(1)
for i in range(5):
print random.random()

生成的数字与文章中的示例完全相同。我认为可以肯定地说算法在设置种子时是确定性的。

当未设置种子时,标准库使用 time.time() 种子。现在假设在线服务使用 random.random() 生成验证码,黑客可以使用相同的随机生成器轻松复制验证码吗?

  1. 让我们假设黑客知道将随机数转换为验证码的算法。否则,这似乎是不可能的。
  2. 由于在导入模块时调用了 random.seed(),我假设对于 Web 应用程序,用作种子的时间是在发送请求的时间左右(几秒钟内),它不会很难通过几次尝试来校准?

是我担心太多了,还是这是一个真正的漏洞?

最佳答案

序列在播种后是确定性的,这不足为奇。这就是播种的全部意义所在。 random.random 被称为 PRNG,一种随机数生成器。这不是 Python 独有的,每种语言的简单随机源都是以这种方式确定的。

是的,真正关心安全的人会担心攻击者可能会重现该序列。这就是为什么可以使用其他随机源,例如 os.urandom,但它们更昂贵。

但问题并没有你说的那么严重:对于一个网络请求,通常一个进程处理多个请求,所以模块是在过去的某个未知点初始化的,而不是在接收到网络请求时。

关于python - python的随机数生成容易重现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31356466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com