完全随机的一次性加密垫
-
10-10-2019 - |
题
我需要创建一个一次性垫来加密一些数据(大小为几个KB)。我应该如何生成此一次性垫,以避免与基本随机数生成相关的所有伪随机问题,例如 rand()
?
我可以使用现有的,值得信赖的工具或库吗?
解决方案
尝试 random.org. 。他们拥有各种自由(和付费)服务,这些服务基于大气噪声(或至少是他们声称要做的)产生真正的随机数。
其他提示
大多数现代操作系统都有 密码确定的伪随机编号生成器.
例如,Windows具有 cryptgenrandom. 。您可以使用。 rngcryptoserviceprovider 班级。从C ++,您可以使用Microsoft C ++库功能访问同一流 rand_s. 。从Python,可以使用该功能访问 Urandom (请参阅链接页面的底部)在OS模块中。
与普通PRNG不同,CSPRNG被设计为通过严格的统计随机性测试。即使攻击者可以使用最初或运行状态,它们也旨在在严重的攻击下保持良好的态度。
密码学家使用的“伪随机”一词可能会误导非技术读者。 csprng将被称为种子的随机值集合扩展到更长的数字序列。鉴于种子,该序列是可重现的,但是对于任何良好的csprng来说,种子的较小变化都会产生截然不同的序列。因此,只要至少通过充分的随机过程选择种子的某些部分,攻击者就无法预测所得的序列 - 即使攻击者可以影响其余的种子。
从军事通信到保护几乎所有在线交易的加密,都依赖于“密码拟编码的伪随机”和“随机”之间的功能相等的安全性。
编辑: :如果您很幸运能够与Intel的Ivy Bridge Processor系列合作,那么您现在有 另一个非常有趣的选择.
您无法从算法上生成真正的随机数 - 您需要硬件帮助。如果您使用算法,无论多么安全(例如密码安全的PRNG),则您只是根据该prng创建一个流密码;它不再是一个时间垫。