c++ - std::random_device 加密安全吗?

标签 c++ c++11 random cryptography

我看到很多人一起谈论安全和 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/

相关文章:

r - 如何在列表的每一行中随机选择行和列

c++ - CMake 嵌套项目和目标

c++ - 正确的(资源处理)零规则在哪里?

algorithm - 当某些卡片无法使用时,从套牌中随机挑选卡片的最有效方法是什么?

c++ - 元素如何在 vector 中找到自己的索引?

c++ - 仅为特定模板类启用模板

Java - 如何检查 JOptionPane.showInputDialog 中确切输入的内容

javascript - 三星智能电视 - SEF 与 PNaCL

c++ - DELAYLOAD 在 Qt LNK2001 : unresolved external symbol 中给出链接错误

c++ - 在字符串中查找字符时遇到问题