在应用程序的每次启动时,都应创建一个128位的随机消息,以便之前没有以最大概率选择消息,这也应该是安全的(即不能被某些黑客攻击)。例如,使用带有从系统时间取得的种子的标准随机生成器是不安全的,因为它可以通过某种方式冻结系统时间来打破(无论如何这可能吗?)。
Windows函数CryptGenRandom似乎适用于此。但是有便携式替代方案吗?如果没有,Linux和Mac是否有相应的功能?
答案 0 :(得分:3)
Windows函数CryptGenRandom似乎适用于此。但是有便携式替代方案吗?
这取决于你如何看待它;我不确定是否有一个可以直接包裹在平台RNG周围的独立包装器。但是大多数加密库都会有一个随机生成器直接引用或者 - 更可能 - 从操作系统随机数生成器中获取种子。
例如,阅读有关Crypto ++ here的AutoSeeded
生成器。这些库从操作系统提供的功能中抽象出来,为您提供了一个便携式选项,可以将对底层平台的调用保持在最低限度(即它们都是安全的和)。
如果没有,Linux和Mac是否有相应的功能?
要直接使用加密随机,请使用/dev/urandom
。通常没有理由使用可能阻止的/dev/random
。我建议使用经过严格审查的图书馆。
特别是如果您使用的是嵌入式或虚拟化设备& OS支付以确保OS随机数生成器足够随机。例如,对于虚拟化系统,确保为操作系统安装VM扩展通常是个好主意。
其他种子也可以添加到随机数生成器中,因此如果您有任何看起来随机的内容,如果您不确定随机数的强度,将其添加为种子可能是明智的。 / p>
具有RNG扩展的CPU(由OS或库使用),例如Intel RD_RAND,当然也可能有意义。
答案 1 :(得分:0)
使用getrandom:
getrandom()系统调用将buf指向的缓冲区填充为 最多buflen个随机字节。这些字节可用于播种用户- 空间随机数生成器或用于加密目的。