如何在 Rust 中播种 OpenSSL PRNG?

问题描述 投票:0回答:1

我使用 openssl crate 来生成密钥和加密功能。

我想播种 PRNG(或者至少使用 RAND_ADD() 从应用程序中添加熵),.

然而,这似乎不可能(还?)。
cf rand 模块.

如何从我的 Rust 应用程序向 OpenSSL PRNG 添加种子/随机添加?

或者,有没有办法使用 openSSL (使用 DRBG)确定性地生成密钥?

rust random openssl random-seed deterministic
1个回答
0
投票

“添加种子”几乎普遍意味着混合CSPRNG API 的熵。所以你不会那样得到确定性算法。

如果您想确定性地生成密钥,请不要使用 PRNG。您可以使用密钥派生方法(KDF)来代替,例如用于密码的 Argon2 或用于从秘密中派生密钥的 HKDF。请注意,这些派生出对称密钥,例如 AES 密钥。

如果您想为非对称加密生成密钥对,那么问题突然变得更加困难。例如,看一下this Q/A,我询问这种方法是否有任何问题。问题是密钥对生成算法的任何改变都会影响生成的密钥;有多种数学上等效的策略可以生成所需的 RSA 素数。如果你想走这条路,那么椭圆曲线更适合这个目的。根据用例,您也可以选择“包装”私钥(使用派生对称密钥加密私钥)。 基本上,不要使用 PRNG,除非你可以完全控制它。如果确实需要 DRBG,那么

尝试用您自己的

替换 PRNG。您可以例如使用密钥派生实现一个,然后使用派生密钥对零流进行计数器模式加密(更现代的方法是使用 XOF,但这会引入实现复杂性)。

© www.soinside.com 2019 - 2024. All rights reserved.