C ++:CryptGenRandom的便携式替代品

时间:2017-06-17 09:26:01

标签: c++ random cryptography

在应用程序的每次启动时,都应创建一个128位的随机消息,以便之前没有以最大概率选择消息,这也应该是安全的(即不能被某些黑客攻击)。例如,使用带有从系统时间取得的种子的标准随机生成器是不安全的,因为它可以通过某种方式冻结系统时间来打破(无论如何这可能吗?)。

Windows函数CryptGenRandom似乎适用于此。但是有便携式替代方案吗?如果没有,Linux和Mac是否有相应的功能?

2 个答案:

答案 0 :(得分:3)

  

Windows函数CryptGenRandom似乎适用于此。但是有便携式替代方案吗?

这取决于你如何看待它;我不确定是否有一个可以直接包裹在平台RNG周围的独立包装器。但是大多数加密库都会有一个随机生成器直接引用或者 - 更可能 - 从操作系统随机数生成器中获取种子。

例如,阅读有关Crypto ++ hereAutoSeeded生成器。这些库从操作系统提供的功能中抽象出来,为您提供了一个便携式选项,可以将对底层平台的调用保持在最低限度(即它们都是安全的)。

  

如果没有,Linux和Mac是否有相应的功能?

要直接使用加密随机,请使用/dev/urandom。通常没有理由使用可能阻止的/dev/random。我建议使用经过严格审查的图书馆。

特别是如果您使用的是嵌入式或虚拟化设备& OS支付以确保OS随机数生成器足够随机。例如,对于虚拟化系统,确保为操作系统安装VM扩展通常是个好主意。

其他种子也可以添加到随机数生成器中,因此如果您有任何看起来随机的内容,如果您不确定随机数的强度,将其添加为种子可能​​是明智的。 / p>

具有RNG扩展的CPU(由OS或库使用),例如Intel RD_RAND,当然也可能有意义。

答案 1 :(得分:0)

使用getrandom

getrandom()系统调用将buf指向的缓冲区填充为 最多buflen个随机字节。这些字节可用于播种用户- 空间随机数生成器或用于加密目的。