我想生成随机字符串的标记和密钥。生成它们的可接受方法是什么?
是通过标准库函数生成两个UUID并将它们连接起来可以接受吗?
答案 0 :(得分:4)
os.urandom提供对操作系统随机数生成器的访问
编辑:如果您使用的是Linux并且非常关注安全性,那么您应该直接使用 / dev / random / 。此调用将阻止,直到有足够的entropy可用。
答案 1 :(得分:0)
计算机(没有特殊硬件)只能生成pseudo random data。过了一会儿,所有的speudo-random数字生成器都会开始重复自己。它在重复之前可以生成的数据量称为 period 。
一个非常流行的伪随机数(也在random
模块中的Python中使用)生成器是Mersenne Twister。但它被认为不适合加密目的,因为在观察到相对较少的迭代次数后,很容易预测下一次迭代。
请参阅cryptographically secure pseudo-random number generators上的维基百科页面,了解适合的算法列表。
FreeBSD,OpenBSD和OS X等操作系统对urandom
设备使用Yarrow算法。因此,使用os.urandom
的系统可能没问题,因为它被认为是加密安全的。
当然,您需要使用的内容在很大程度上取决于您的要求有多高;你想要它有多安全?一般来说,我会建议您使用已发布和经过测试的算法实现。编写自己的实现很容易出错。
修改:计算机可以收集随机数据中断到达的时间。然而,这不会提供大量随机数据,因此通常用于播种PRNG。