完美随机的一次性密码加密

Pet*_*ron 6 random cryptography one-time-password

我需要创建一次性填充来加密一些数据(大小为几KB).我应该如何生成这个一次性填充,以避免与基本随机数生成相关的所有伪随机问题,如rand()

我可以使用现有的,可信的工具或库吗?

Roa*_*ior 5

大多数现代操作系统都具有加密安全的伪随机数生成器.

例如,Windows有CryptGenRandom.您可以使用RNGCryptoServiceProvider类从.NET访问相同的流.从C++,您可以使用Microsoft C++库函数rand_s访问相同的流.从Python中,可以使用os模块中的urandom函数(参见链接页面的底部)来访问它.

与普通PRNG不同,CSPRNG旨在通过严格的统计随机性测试.它们还被设计为在严重攻击下保持良好状态,即使攻击者可以使用其初始或运行状态.

密码学家使用的术语"伪随机"可能会误导非技术读者.CSPRNG将随机值的集合(称为种子)扩展为更长的数字序列.鉴于种子,该序列是可重复的,但对于任何良好的CSPRNG,种子中的微小变化产生非常不同的序列.因此,只要通过充分随机的过程选择种子的至少一部分,攻击者就无法预测结果序列 - 即使攻击者可以影响种子的其余部分.

许多重要的系统,从军事通信到保护几乎所有在线交易的加密,都依赖于"加密 - 安全伪随机"和"随机"之间的功能等效安全性.

编辑:如果你很幸运能够使用英特尔的Ivy Bridge处理器系列,那么你现在有了另一个非常有趣的选择.


Nea*_*alB 4

尝试Random.ORG。他们有各种免费(和付费)服务,可以根据大气噪声生成真正的随机数(或者至少他们声称是这样做的)。

  • 只要您不介意别人知道您的超级秘密一次性便笺簿即可。而且您不介意攻击者能够在线拦截它。 (8认同)