我什么时候应该使用 AutoSeededRandomPool(而不是 NonblockingRng)?
When should I use AutoSeededRandomPool (and not NonblockingRng)?
我发现Crypto++提供了几个随机生成器:AutoSeededRandomPool
、AutoSeededX917RNG
等等。我知道一些关于这些生成器的细节和它们的用法,我只是想知道我什么时候需要它们?
AutoSeededRandomPool
和AutoSeededX917RNG
默认基于NonblockingRng
,NonblockingRng
基于/dev/urandom
,/dev/urandom
基于/dev/random
和 ChaCha
。
我搜索了一下,发现很多文章都说 /dev/urandom
足够安全并且适用于所有(几乎?)场景,那么为什么要使用 DES/AES
来加密从 /dev/urandom
读取的数据并且比直接使用“/dev/urandom”慢得多?
什么时候应该使用 AutoSeededRandomPool
或 AutoSeededX917RNG
?
When should I use AutoSeededRandomPool or 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
.
我发现Crypto++提供了几个随机生成器:AutoSeededRandomPool
、AutoSeededX917RNG
等等。我知道一些关于这些生成器的细节和它们的用法,我只是想知道我什么时候需要它们?
AutoSeededRandomPool
和AutoSeededX917RNG
默认基于NonblockingRng
,NonblockingRng
基于/dev/urandom
,/dev/urandom
基于/dev/random
和 ChaCha
。
我搜索了一下,发现很多文章都说 /dev/urandom
足够安全并且适用于所有(几乎?)场景,那么为什么要使用 DES/AES
来加密从 /dev/urandom
读取的数据并且比直接使用“/dev/urandom”慢得多?
什么时候应该使用 AutoSeededRandomPool
或 AutoSeededX917RNG
?
When should I use AutoSeededRandomPool or 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
.