gpt4 book ai didi

c++ - 生成随机数 C++

转载 作者:太空狗 更新时间:2023-10-29 23:39:46 29 4
gpt4 key购买 nike

我想知道是否有办法生成 Cryptographic Nonce使用 OpenSSL 或 Crypto++ 库。除了使用自动播种池生成一组随机字节之外,还有什么比它更重要的吗?

最佳答案

I am wondering if there is a way to generate a cryptographic nonce using OpenSSL or Crypto++ libraries.

加密++:

SecByteBlock nonce(16);
AutoSeededRandomPool prng;

prng.GenerateBlock(nonce, nonce.size());

OpenSSL:

unsigned char nonce[16];
int rc = RAND_bytes(nonce, sizeof(nonce));
unsigned long err = ERR_get_error();

if(rc != 1) {
/* RAND_bytes failed */
/* `err` is valid */
}

/* OK to proceed */

Is there anything more to it than just generating a set of random bytes using autoseeded pools?

随机数基本上是一个 IV。它通常被视为公共(public)参数,如 IV 或 Salt。

随机数在安全上下文中必须是唯一的。您可能还需要随机数才能变得不可预测。

唯一性和不可预测性是两个不同的属性。例如,从 0000000000000000 开始的计数器是唯一的,但它也是可预测的。

当您同时需要唯一性和不可预测性时,您可以将 nonce 划分为一个随机值和一个计数器。随机值将占用 16 字节随机数中的 8 个字节;而计数器将占用 16 字节随机数的剩余 8 字节。然后,每次需要一个值时,您都使用增量函数基本上执行 i++

您不需要 8-8 拆分。 12-4 和 4-12 一样有效。这取决于应用程序和重新加密前所需的随机数。重新加密通常由纯文本字节数驱动。

16-0 也有效。在本例中,您使用的是随机值,避免了计数器,也避免了增量函数。 (增量函数基本上是级联加)。

美国国家标准与技术研究院 SP800-38CSP800-38D提供了几种创建随机数的方法,因为 CCM 和 GCM 使用它们。

另见 What are the requirements of a nonce?在 Crypto Stack Exchange 上。

关于c++ - 生成随机数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126694/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com