#密钥交换 #加密 #aead #加密

no-std hpke

hpke的分支,增加了PQ模式

2个不稳定版本

0.11.1 2024年6月24日
0.10.1 2023年5月19日

#513密码学

Download history 9/week @ 2024-04-19 6/week @ 2024-04-26 4/week @ 2024-05-03 4/week @ 2024-05-10 6/week @ 2024-05-17 4/week @ 2024-05-24 5/week @ 2024-05-31 6/week @ 2024-06-07 4/week @ 2024-06-14 163/week @ 2024-06-21 13/week @ 2024-06-28 7/week @ 2024-07-05 1/week @ 2024-07-12 43/week @ 2024-07-19 120/week @ 2024-07-26 103/week @ 2024-08-02

267 每月下载量
3 个crate(2个直接)中使用

MIT/Apache

2MB
3K SLoC

hpke_pq - hpke 的分支

Version Docs CI

这是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功能

默认功能标志: allocx25519p256

功能标志列表

  • alloc - 包括分配方法,如 AeadCtxR::open()AeadCtxS::seal()
  • x25519 - 启用基于X25519的KEM
  • p256 - 启用基于NIST P-256的KEM
  • p384 - 启用基于NIST P-384的KEM
  • serde_impls - 包含所有 hpke::Serializablehpke::Deserializable 类型对 serde::Serializeserde::Deserialize 的实现
  • std - 包含 HpkeErrorstd::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 和 AuthPsk
  • setup_receiver,具有 OpModes 为 Base、Auth、Psk 和 AuthPsk
  • AeadCtxS::seal,明文长度为 64,附加数据长度为 64
  • AeadCtxR::open,密文长度为 64,附加数据长度为 64

敏捷性

定义:**加密敏捷性**是指加密系统或协议变化其底层原语的能力。例如,TLS 具有加密敏捷性,可以使用许多不同的加密套件运行该协议。

这个crate不支持开箱即用的加密敏捷性。这是因为加密原语被编码为满足某些约束的类型,并且类型需要在编译时确定(广义上)。尽管如此,您仍然可以自己实现敏捷性。在示例文件夹中有一个 示例实现。由于敏捷性很复杂,因此示例实现很混乱。

许可证

许可协议为以下之一

任选其一。

依赖项

~3.5–5.5MB
~104K SLoC