C2SP/wycheproof
GitHub: C2SP/wycheproof
由社区维护的密码学测试向量库,以 JSON 格式提供覆盖数十种算法的测试数据,用于检测加密实现中的已知攻击漏洞和边界缺陷。
Stars: 2993 | Forks: 320
# Project Wycheproof
Project Wycheproof 是一个由[社区管理](https://github.com/C2SP)的测试向量仓库,密码学库开发者可以使用这些测试向量来检测已知的攻击、规范不一致性以及其他各种实现错误。
测试向量以 JSON 测试向量数据的形式维护,并附带记录测试向量数据结构的 [JSON schema](https://json-schema.org/docs) 文件。
## 入门指南
1. Clone 此仓库。你可能还希望将 Wycheproof 集成为 Git submodule,或者通过其他方式设置自动化以跟踪随时间发生的变化。
2. 编写(_或根据 JSON schema 文件生成_)代码,以便根据你的实现语言/项目适当地加载向量数据。
3. 对于每种感兴趣的算法,识别你的密码学 API 的输入和产生的输出,并将其映射回测试向量提供的内容。
4. 遍历适用的测试向量,确保你的 API 在给定相关输入数据时产生的结果与测试向量的预期结果相匹配。
5. 为了获得最佳效果,请将此过程集成到你的持续集成 (CI) 流程中,以便针对所有新的贡献/更改运行测试。
你可能会发现查看其他项目(如 [pyca/cryptography](https://github.com/pyca/cryptography))是如何[集成 Wycheproof 测试向量](https://github.com/pyca/cryptography/tree/ec689a96c98037fc9929e830f551a85cac3973d3/tests/wycheproof)的会很有帮助。
## 覆盖范围
Project Wycheproof 包含最流行的加密算法测试向量,包括
- AEGIS
- AES-EAX
- AES-FF1
- AES-GCM
- AES-SIV
- ARIA
- ASCON
- Camellia
- ChaCha20-Poly1305
- XChaCha20-Poly1305
- [DH](doc/dh.md)
- DHIES
- [DSA](doc/dsa.md)
- [ECDH](doc/ecdh.md)
- ECDSA
- EdDSA
- ECIES
- HKDF
- HMAC
- KMAC
- MORUS
- PBKDF2
- [RSA](doc/rsa.md)
- SEED
- SipHash
- SM4
- VMAC
- X25519, X448
- ML-KEM (Kyber)
- ML-DSA (CRYSTALS-Dilithium)
测试向量可检测库是否容易受到多种攻击,包括
* 无效曲线攻击 (Invalid curve attacks)
* 数字签名方案中的偏置随机数 (Biased nonces)
* 当然,所有的 Bleichenbacher 攻击
* 还有更多——我们拥有超过 80 个测试用例
我们欢迎贡献新的测试向量数据和算法。
## 开发优先级
我们正在重振 Project Wycheproof 的开发和维护,将其作为一个 C2SP 项目,并重新聚焦于测试向量数据。我们的当务之急是:
1. 完成所有测试向量的 JSON schema 描述。
2. 改进文档和工具支持,以便外部贡献者向现有向量文件提供新的测试数据。
3. 发展由下游使用者组成的社区,他们可以帮助协助维护和审查新的测试向量数据。
4. 为测试向量数据增加额外的算法和测试用例覆盖。
## 常见问题解答
### 为什么项目被称为 "Wycheproof"?
Project Wycheproof 以世界上最小的山 [Mount Wycheproof](https://en.wikipedia.org/wiki/Mount_Wycheproof) 命名。项目创建时的主要动机是设定一个可实现的目标。山越小,就越有可能攀登它。
### 哪些下游项目使用 Wycheproof 测试向量?
Wycheproof 测试向量被许多重要的密码学项目和库以某种形式使用。以下排名不分先后:
* [OpenSSL](https://openssl.org/)
* [BoringSSL](https://boringssl.googlesource.com/boringssl/)
* [aws-lc](https://github.com/aws/aws-lc)
* [LibreSSL](https://github.com/libressl/portable)
* [NSS](https://firefox-source-docs.mozilla.org/security/nss/index.html)
* [pyca/cryptography](https://cryptography.io/en/latest/)
* [Botan](https://botan.randombit.net/)
* [Go cryptography](https://golang.org)
* [swift-crypto](https://github.com/apple/swift-crypto)
* [RustCrypto](https://github.com/RustCrypto/)
* [Graviola](https://github.com/ctz/graviola)
* [Tink](https://developers.google.com/tink)
* [PyCryptdome](https://www.pycryptodome.org/)
* [OpenTitan](https://github.com/lowRISC/opentitan)
* [Zig](https://github.com/ziglang/zig)
如果你的项目使用来自 Wycheproof 的测试向量,欢迎提交 PR 将其添加到上面的列表中!
### Wycheproof 测试是否发现过 notable 错误?
请参阅 [doc/bugs.md](doc/bugs.md),了解一些使用 Wycheproof 测试工具或测试向量数据发现的历史性 notable 错误。
### `testvectors/` 目录在哪里?
我们最近将 `testvectors/` 和 `testvectors_v1/` 目录合并为一个统一的目录,采用一致的 schema 方法。
需要原始("v0")测试向量数据的用户可以从 [`wycheproof-v0-vectors`] tag clone 此 repo,但我们鼓励考虑更新以使用 `testvectors_v1/` 以从未来的更新中受益。如果 `testvectors/` 中有某些功能/测试覆盖范围在 `testvectors_v1/` 中缺失,或者有其他问题阻碍你的更新,请 open an issue 描述你的需求。
### 所有向量都有 schema 吗?
在撰写本文时,以下 `testvectors_v1` 文件缺少 schema:
* `testvectors_v1/aes_ff1_base*_test.json`
* `testvectors_v1/aes_ff1_radix*_test.json`
* `testvectors_v1/ecdsa_secp256k1_sha256_bitcoin_test.json`
* `testvectors_v1/pbes2_hmacsha*_aes_*_test.json`
* `testvectors_v1/pbkdf2_hmacsha*_test.json`
* `testvectors_v1/rsa_pss_*_sha*_mgf*_params_test.json`
* `testvectors_v1/rsa_pss_misc_params_test.json`
非常欢迎为上述向量贡献 schema。
### 是否有关于测试向量的额外文档?
关于[文件](doc/files.md)、[格式](doc/formats.md)和[类型](doc/types.md)的一些旧版文档可供查阅,但不一定与当前的测试向量状态同步。
通常,建议参考 [schema 文件](schemas),因为这些文件在 [CI](https://github.com/cpu/wycheproof/actions/workflows/vectorlint.yml) 中经过测试,以确保向量文件内容与其声明的 schema 相匹配。
### 测试工具代码在哪里?
历史上,Wycheproof 还包含测试工具(例如用于 Java 和 Javascript 密码学实现),可直接针对实现测试各种攻击。自从过渡到社区支持以来,这些工具已经[被移除][harness-rm](但在 `git` 历史记录中仍然存在,供感兴趣的一方在 [cd27d64] 查看)。我们目前的重点是于实现无关的测试向量。
直接测试第三方密码学库意味着缺陷只有在被测项目提交并可能发布后才会被发现。相反,我们鼓励下游项目作为其开发流程的一部分,使用 Wycheproof 测试向量定期测试其代码。
这种方法有助于在缺陷变成 CVE 之前将其捕获,意味着新功能能立即得到测试,并有助于分摊维护负担。这允许 Wycheproof 维护者专注于测试向量,而不是跟踪许多项目的下游开发,同时维护越来越多的特定于语言和项目的测试工具。
对测试工具感兴趣的各方可能会发现 Daniel Bleichenbacher 在 [Rooterberg](https://github.com/bleichenbacher-daniel/Rooterberg) 中的后续工作很有趣。
### 谁创建了 Wycheproof?
Project Wycheproof 最初由以下人员创建和维护:
* Daniel Bleichenbacher
* Thai Duong
* Emilia Kasper
* Quan Nguyen
* Charles Lee
标签:AES, ChaCha20, DevSecOps, ECDSA, EVTX分析, EVTX分析, Fuzzing, Google Wycheproof, Homebrew安装, JSON, RSA, XML 请求, 上游代理, 加密库, 单元测试, 后量子密码, 安全开发, 安全测试, 密码学, 开源框架, 手动系统调用, 持续集成, 攻击性安全, 数据验证, 测试向量