C2SP/wycheproof
GitHub: C2SP/wycheproof
Wycheproof 提供标准化的密码学测试向量数据集,帮助开发者检测密码学库中的已知攻击漏洞、规范不一致和实现错误。
Stars: 3027 | Forks: 325
# Project Wycheproof
Project Wycheproof 是一个[社区管理](https://github.com/C2SP)的测试向量代码库,密码学库开发人员可以使用这些测试向量来测试已知的攻击、规范不一致以及其他各种实现错误。
测试向量以 JSON 测试向量数据的形式维护,并附带有记录测试向量数据结构的 [JSON schema](https://json-schema.org/docs) 文件。
## 入门指南
1. 克隆此代码库。您可能还希望将 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
- BLS-12-381
- ML-KEM (Kyber)
- ML-DSA (CRYSTALS-Dilithium)
这些测试向量可以检测库是否容易受到多种攻击,
包括
* 无效曲线攻击
* 数字签名方案中存在偏差的 nonce
* 当然,所有的 Bleichenbacher 攻击
* 以及更多——我们拥有超过 80 个测试用例
我们欢迎贡献新的测试向量数据和算法。
## 开发优先级
我们正在推进将 Project Wycheproof 作为一个 C2SP 项目进行开发和维护的复兴工作,并重新聚焦于测试向量数据。
我们近期的优先事项是:
1. 完成所有测试向量的 JSON schema 描述。
2. 改进文档和工具支持,以便外部贡献者向现有向量文件提供新的测试数据。
3. 发展由下游使用者组成的社区,他们可以协助引导新测试向量数据的维护和审查。
4. 为测试向量数据增加更多算法和测试用例的覆盖范围。
## 常见问题
### 为什么项目被称为“Wycheproof”?
Project Wycheproof 以[世界上最小的山——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)
* [liboqs](https://github.com/open-quantum-safe/liboqs)
如果您的项目使用了 Wycheproof 的测试向量,欢迎提交 PR 将其添加到上面的列表中!
### Wycheproof 测试发现过 notable 错误吗?
请参阅 [doc/bugs.md](doc/bugs.md),了解一些使用 Wycheproof 测试工具或测试向量数据发现的 notable 历史错误。
### `testvectors/` 目录在哪里?
我们最近将 `testvectors/` 和 `testvectors_v1/` 目录合并为一个统一的目录,并采用一致的 schema 方法。
需要原始("v0")测试向量数据的用户可以从 [`wycheproof-v0-vectors`] 标签克隆此代码库,但我们鼓励您考虑更新以使用 `testvectors_v1/`,从而从未来的更新中受益。如果 `testvectors/` 中有某些特性/测试覆盖范围在 `testvectors_v1/` 中缺失,或者有其他问题阻碍了您的更新,请提出一个 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, BLS, ChaCha20-Poly1305, DNS解析, DSA, ECC, EdDSA, EVTX分析, Google Wycheproof, HMAC, Homebrew安装, JSON测试数据, ML-DSA, ML-KEM, RSA, TLS抓取, X25519, 代码安全, 加密库, 合规性测试, 后量子密码学, 威胁情报, 安全测试, 密码学, 已知攻击, 开发者工具, 开源框架, 开源项目, 手动系统调用, 持续集成, 攻击性安全, 数据驱动测试, 测试向量, 测试框架, 漏洞枚举, 软件安全