11 个版本
0.5.0 | 2021年10月7日 |
---|---|
0.4.3 | 2020年7月16日 |
0.4.2 | 2019年12月9日 |
0.3.0 | 2019年11月27日 |
0.1.7 | 2019年3月12日 |
#977 in 密码学
5,215 monthly downloads
在 5 个 (3 直接)crate中使用
51KB
872 行
crypto_api_chachapoly
欢迎使用 crypto_api_chachapoly
🎉
关于
此crate实现了IETF版本的ChaCha20、XChaCha20、Poly1305、ChachaPoly-IETF AEAD构造和XChachaPoly。
安全性
⚠️ 以下是一些警告:此库尚未经过审计 – 使用风险自负!⚠️
然而我们力求从一开始就做到正确 – 此库不使用不安全Rust,遵循KISS原则,对各种测试向量进行了测试,并仅使用恒定时间实现。
测试向量
所有实现都通过所有参考测试向量,并假定在角落案例中也能产生正确的结果。我们还使用API测试向量(用于测试输入验证)和失败测试向量来测试我们的MAC验证。
针对sodiumoxide
进行模糊测试
git仓库包含一个名为fuzz
的子crate,它可以生成随机输入并测试此crate和sodiumoxide
是否产生相同的结果。
可以通过克隆git仓库,进入"fuzz/"目录并运行cargo run --release
来运行。crate使用所有可用的CPU线程,只有当出现意外不同的结果时才会停止。您还可以指定随机生成和大小测试输入的最大长度;只需将TEST_VECTOR_LIMIT
设置为环境变量。 如果您发现意外的不同结果,请复制整个输出并在GitHub上创建一个新问题!😊
恒定时间实现
所有实现都设计为不受时间侧信道攻击的影响,通过在恒定时间内执行所有依赖密钥的计算来实现
- ChaCha20已经通过设计做到这一点
- Poly1305基于公共领域的Poly1305-Donna实现(32位版本),其中借鉴了来自BearSSL的一些想法(注意,此实现可能在一些较老/低端ARM CPU上不是常数时间)
- AEAD构造也是按设计为常数时间(前提是底层算法都是常数时间)
内存卫生
crypto_api_chachapoly
不尝试从内存中删除敏感内容。然而,所有敏感内容都存储在堆分配的内存中,因此如果您使用的是MAProper之类的擦除内存分配器,它们将被删除。
使用擦除内存分配器是个好主意,因为Rust使得跟踪底层内存管理变得相当困难 – 另一方面,内存分配器可以看到堆上发生的所有事情,并相应地处理。
依赖关系
由于此代码实现了crypto_api
,因此它依赖于crypto_api
-crate。否则,它无依赖。