我发现Crypto ++提供了几个随机生成器:AutoSeededRandomPool
,AutoSeededX917RNG
等。我知道有关这些发生器及其使用的一些细节,我只是想知道什么时候需要它们?
AutoSeededRandomPool
和AutoSeededX917RNG
默认基于NonblockingRng
,而NonblockingRng
基于/dev/urandom
,/dev/urandom
基于/dev/random
和ChaCha
。
我用Google搜索并发现许多文章说/dev/urandom
足够安全并且适合所有(几乎?)场景,那么为什么使用DES/AES
来加密从/dev/urandom
读取的数据并且比直接使用'/ dev / urandom'慢得多?
我什么时候应该使用AutoSeededRandomPool
或AutoSeededX917RNG
?
我什么时候应该使用AutoSeededRandomPool或AutoSeededX917RNG?
你应该使用AutoSeededRandomPool
。它使用基于AES的PGP样式生成器从OS池中提取熵。它还将时间与种子混合在一起,以帮助加强VM回滚攻击。
你还应该为每个线程创建一个AutoSeededRandomPool
。如果对所有线程使用单个生成器,则需要提供锁。
AutoSeededX917RNG
是在NIST批准基于AES的ANSI X9.31生成器用于FIPS 140验证加密的时候。 X9.17和X9.31发电机也用于其他一些标准,如汽车和金融。
NIST在2014年左右弃用了AutoSeededX917RNG
发电机,转而使用SP800-90中指定的确定性位发生器。
如果你愿意,你可以使用AutoSeededX917RNG
。但除非你有要求,否则你应该使用AutoSeededRandomPool
。