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 在 密码学 中
48KB
736 行
DRBG
Rust实现的NIST 800-90A Rev.1中定义的加密随机数生成器CTR_DRBG
。
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