我看到很多人一起谈论安全和 std::random_device
。
例如,here幻灯片 22。
根据 cppreference , std::random_device
:
std::random_device is a uniformly-distributed integer random number generator that produces non-deterministic random numbers.
它没有明确谈论安全性。
是否有明确提到 std::random_device
对密码学是安全的?
最佳答案
不,因为这不是 std::random_device
的设计目的;它旨在生成随机数,而不是为了安全。
在安全方面,随机性对 key 生成很有用,但随机性并不是绝对需要的。例如,AES不使用任何随机性,但美国使用 AES-256 加密绝密信息。
随机性和安全性交叉的一个领域是生成和使用随 secret 钥时;如果我能猜出种子并知道所使用的随机协议(protocol),那么我很有可能可以使用相同的种子值生成相同的“随机”值,从而生成相同的 key 。
std::random_device
将使用硬件模块(如硬件 TPM )如果可用,否则它将使用操作系统具有的任何 RNG(如 Windows 中的 CryptGenRandom
,或 *nix 系统中的 /dev/random
),甚至可能是一个 PRNG(伪随机数生成器),它可能会生成相同的数字,具体取决于所使用的随机数算法。作为旁注:很像 AES instruction set被纳入芯片组以加速加密和解密,hardware RNG's随着算法转移到硬件中,有助于提供更大的熵池和更快的随机数生成。
因此,如果您在任何类型的加密 key 生成中使用 std::random_device
,您需要知道部署到的系统上使用的是什么随机数生成器,否则您可能会发生冲突,因此您的加密系统容易受到重复 key 类型的攻击。</p>
希望对您有所帮助。
关于c++ - std::random_device 加密安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867500/