#secure-random #encryption-key #random #csprng #key-input #ctr-drbg

drbg

由NIST SP 800-90A R1定义的密码学随机数生成器CTR_DRBG

5次发布

0.2.0 2023年11月15日
0.1.3 2023年6月23日
0.1.2 2023年6月21日
0.1.1 2023年6月15日
0.1.0 2023年6月15日

#1123密码学

MIT 许可证

48KB
736

DRBG

Rust实现的NIST 800-90A Rev.1中定义的加密随机数生成器CTR_DRBG

crates-badge docs-badge mit-badge

CTR_DRBG是一种基于AES分组密码的密码学安全伪随机数生成器(CSPRNG)。它可以用于生成加密密钥、非ces或盐。默认情况下,它使用操作系统的熵进行初始化,但可以使用Entropy特性定义其他熵源。此包的目标是创建一个默认安全、轻量级且易于使用的CSPRNG。

性能

CTR_DRBG的性能受AES加密操作的影响。具有AES指令集的平台(例如,AES-NI)应看到显著的性能提升。传递额外信息到fill_bytes函数会产生额外的开销,因为信息被输入到AES派生函数中。

基准测试

以下基准测量是在Intel i5-8265U CPU @ 1.60GHz(启用AES-NI)上进行的。

以下测量是读取随机数据的平均延迟。使用16和32字节的大小,因为它们是生成对称加密密钥的典型大小。1 MiB测试表示收集大量随机数据。

第一组测量是在不传递额外信息fill_bytes的情况下进行的。而第二组测量是在调用中传递8字节额外信息的情况下进行的。额外信息是一个可选参数,它向随机数生成过程添加额外的输入。然而,信息是通过将信息映射到AES块大小的消息摘要的派生函数传递的。计算摘要确实会增加额外的开销,但这是对fill_bytes每次调用的一次性成本。

不传递额外信息

随机数据 延迟
16 (字节) 144 (ns)
32 (字节) 167 (ns)
1 (MiB) 1.5 (ms) ~ 655 MiB/s

传递8字节额外信息

随机数据 延迟
16 (字节) 702 (ns)
32 (字节) 722 (ns)
1 (MiB) 1.51 (ms) ~ 652 MiB/s

总体而言,此实现中 CTR_DRBG 的性能应该足够满足大多数使用场景。尽管传递额外信息会有性能影响,但这是一个可选参数。对于大量随机数据,额外数据带来的开销与随机数生成过程相比微不足道。

要运行上述基准测试,请执行以下命令。根据您的环境,您可能需要强制启用 AES-NI。有关详细信息,请参阅 aes 包。

cargo bench

依赖项

~570–790KB
~17K SLoC