在每次启动应用程序时,都应创建一个128位的随机消息,以使该消息之前从未被最大概率地选择过,并且这也应该是安全的(即不能被某些黑客破解)。例如,使用标准的随机生成器并从系统时间获取种子是不安全的,因为它可以通过某种方式冻结系统时间而被破坏(是否有可能?)。
Windows函数CryptGenRandom似乎适用于此。但是有便携式的替代品吗?如果没有,Linux和Mac是否有相应的功能?
最佳答案
那取决于你如何看待它。我不确定是否有可以直接在平台RNG周围包装的独立包装器。但是大多数密码库都将具有一个随机生成器,该生成器直接引用或(更可能是)从OS随机数生成器中自身植入种子。
例如,阅读有关Crypto ++ here的AutoSeeded
生成器的信息。这些库从操作系统提供的功能中抽象出来,为您提供了一个可移植的选项,可将对底层平台的调用保持在最低限度(即,它们既安全又快速)。
要直接使用加密随机数,请使用/dev/urandom
。通常,没有理由使用可能会阻止的/dev/random
。我建议尽管使用经过严格审查的库。
特别是如果您使用的是嵌入式或虚拟设备和操作系统,则必须确保操作系统随机数生成器足够随机。例如,对于虚拟化系统,通常要确保为OS安装了VM扩展。
也可以将其他种子添加到随机数生成器中,因此,如果您不确定什么看起来是随机的,则最好在不确定随机数强度的情况下将其添加为种子。
当然,拥有带有RNG扩展名(由操作系统或库使用)的CPU(例如Intel RD_RAND)也很有意义。
关于c++ - C++:CryptGenRandom的便携式替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44602902/