random - 是否应将同一个随机数生成器用于多个加密操作

标签 random openssl cryptography crypto++ prng

是否建议实例化 OpenSSL 或 Crypto++ 加密安全随机数生成器,为其播种一次,然后在生成 key 、加密、签名等多个加密操作中按顺序使用它?

这是否足够安全,可以在不影响安全性的情况下处理多种用途?

为每个操作使用不同的 PRNG 并以不同的方式播种是否被认为是安全的做法?是否有任何需要考虑的细微差别?

最佳答案

保持相同的加密安全 PRNG。我知道改变似乎更有意义,但当需要高等数学时应用常识是一个很大的错误。永远不要“推出自己的”加密货币,或改变方法,或进行任何“改进”,无论它们看起来有多大意义。坚持使用经过验证的方法、经过测试的算法以及由声誉良好的人编写的开源代码。

加密安全的 PRNG 与用于蒙特卡罗模拟等的标准 PRNG 有很大不同。它们经过专门设计,即使在获取一长串值时也是不可预测的。如果你试图通过切换来“改进”这一点,你很可能会搞砸。

此外,良好的硬件真正的 RNG 本质上是加密安全的,因此如果您有的话,最好的选择是使用 random.org 之类的东西。

您可能做的最糟糕的事情就是更改每个键的 PRNG。现在你得到的根本不是一个随机序列,而是一个种子的哈希函数序列,并且只能与你的种子和每个 PRNG 的种子函数一样好。

关于random - 是否应将同一个随机数生成器用于多个加密操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565259/

相关文章:

c# - 数字签名 : Encrypting the Hash vs Signing the Hash?

php - 如何在 PHP 中获取长 19 位随机数?

java - 使用字符串数组列表长度作为整数

macos - EIdOSSLUnderlyingCryptoError 和 "Error connecting with SSL. error:14094410..."

c - Linux libcrypto AES-128 CBC 加密/解密适用于 Ubuntu,但不适用于 Raspberry Pi

c++ - 伽罗瓦域 (2^8) 中的错误乘法/除法

linux - Linux/POSIX 中 Windows 的 rand_s 的最佳替代品是什么?

c++ - 获取外部来源的种子

random - 从表中选择一个随机项目

ruby - OpenSSL::SSL::SSLContext SNI servername_cb 不工作