2个不稳定版本
0.11.1 | 2024年6月24日 |
---|---|
0.10.1 | 2023年5月19日 |
#513 在 密码学
267 每月下载量
在 3 个crate(2个直接)中使用
2MB
3K SLoC
hpke_pq - hpke 的分支
这是HPKE混合加密标准(RFC 9180)的实现。
这个分支包括对混合的 Kyber-X25519 KEM 的实验性支持。
警告
这个crate尚未经过正式审计。尽管Cloudflare 对版本0.8进行了安全审查
我们决定采用的HPKE实现尚未经过正式审计,因此我们进行了自己的内部安全审查。我们分析了使用的密码学原语和相应的库。在上述原语的组合和安全的编程实践(如正确清零内存和随机数生成器的安全使用)之间,我们没有发现任何安全漏洞。
它实现了什么
这个实现符合HPKE标准(RFC 9180)。
以下是规范中列出的所有原语。带勾选框的原语是已实现的。
- KEMs
- DHKEM(Curve25519, HKDF-SHA256)
- DHKEM(Curve448, HKDF-SHA512)
- DHKEM(P-256, HKDF-SHA256)
- DHKEM(P-384, HKDF-SHA384)
- DHKEM(P-521, HKDF-SHA512)
- KDFs
- HKDF-SHA256
- HKDF-SHA384
- HKDF-SHA512
- AEADs
- AES-GCM-128
- AES-GCM-256
- ChaCha20Poly1305
crate功能
默认功能标志: alloc
、x25519
、p256
。
功能标志列表
alloc
- 包括分配方法,如AeadCtxR::open()
和AeadCtxS::seal()
x25519
- 启用基于X25519的KEMp256
- 启用基于NIST P-256的KEMp384
- 启用基于NIST P-384的KEMserde_impls
- 包含所有hpke::Serializable
和hpke::Deserializable
类型对serde::Serialize
和serde::Deserialize
的实现std
- 包含HpkeError
的std::error::Error
实现。同时执行alloc
的功能。
有关如何省略或包含功能标志的信息,请参阅 Cargo 功能文档。
使用示例
有关如何使用 HPKE 的示例,请参阅 客户端-服务器示例。
MSRV
当前最低支持的 Rust 版本(MSRV)是 1.65.0(897e37553 2022-11-02)。
变更日志
有关过去版本中做出的更改列表,请参阅 CHANGELOG.md。
测试
要运行所有测试,请执行 cargo test --all-features
。这包括已知答案测试,这些测试针对 test-vector-COMMIT_ID.json
进行测试,其中 COMMIT_ID
是测试向量来源的 规范 版本的简短提交。最终规范使用提交 5f503c5。有关如何生成测试向量的信息,请参阅 参考实现。
基准测试
要运行所有基准测试,请执行 cargo bench --all-features
。如果您设置了自定义功能标志,基准测试仍然可以工作,并运行它能够运行的基准测试子集。基准测试的结果可以在 target/criterion/report/index.html
的整洁网页上阅读。
已测试的加密套件
- NIST 加密套件,128 位安全性:AES-GCM-128,HKDF-SHA256,ECDH-P256
- 非 NIST 加密套件,128 位安全性:ChaCha20-Poly1305,HKDF-SHA256,X25519
每个加密套件中测试的函数
Kem::gen_keypair
setup_sender
,具有 OpModes 为 Base、Auth、Psk 和 AuthPsksetup_receiver
,具有 OpModes 为 Base、Auth、Psk 和 AuthPskAeadCtxS::seal
,明文长度为 64,附加数据长度为 64AeadCtxR::open
,密文长度为 64,附加数据长度为 64
敏捷性
定义:**加密敏捷性**是指加密系统或协议变化其底层原语的能力。例如,TLS 具有加密敏捷性,可以使用许多不同的加密套件运行该协议。
这个crate不支持开箱即用的加密敏捷性。这是因为加密原语被编码为满足某些约束的类型,并且类型需要在编译时确定(广义上)。尽管如此,您仍然可以自己实现敏捷性。在示例文件夹中有一个 示例实现。由于敏捷性很复杂,因此示例实现很混乱。
许可证
许可协议为以下之一
- Apache License,版本 2.0,(LICENSE-APACHE)
- MIT 许可证(LICENSE-MIT)
任选其一。
依赖项
~3.5–5.5MB
~104K SLoC