Pet*_*ron 6 random cryptography one-time-password
我需要创建一次性填充来加密一些数据(大小为几KB).我应该如何生成这个一次性填充,以避免与基本随机数生成相关的所有伪随机问题,如rand()?
我可以使用现有的,可信的工具或库吗?
大多数现代操作系统都具有加密安全的伪随机数生成器.
例如,Windows有CryptGenRandom.您可以使用RNGCryptoServiceProvider类从.NET访问相同的流.从C++,您可以使用Microsoft C++库函数rand_s访问相同的流.从Python中,可以使用os模块中的urandom函数(参见链接页面的底部)来访问它.
与普通PRNG不同,CSPRNG旨在通过严格的统计随机性测试.它们还被设计为在严重攻击下保持良好状态,即使攻击者可以使用其初始或运行状态.
密码学家使用的术语"伪随机"可能会误导非技术读者.CSPRNG将随机值的集合(称为种子)扩展为更长的数字序列.鉴于种子,该序列是可重复的,但对于任何良好的CSPRNG,种子中的微小变化产生非常不同的序列.因此,只要通过充分随机的过程选择种子的至少一部分,攻击者就无法预测结果序列 - 即使攻击者可以影响种子的其余部分.
许多重要的系统,从军事通信到保护几乎所有在线交易的加密,都依赖于"加密 - 安全伪随机"和"随机"之间的功能等效安全性.
编辑:如果你很幸运能够使用英特尔的Ivy Bridge处理器系列,那么你现在有了另一个非常有趣的选择.
尝试Random.ORG。他们有各种免费(和付费)服务,可以根据大气噪声生成真正的随机数(或者至少他们声称是这样做的)。