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, 代码安全, 加密库, 合规性测试, 后量子密码学, 威胁情报, 安全测试, 密码学, 已知攻击, 开发者工具, 开源框架, 开源项目, 手动系统调用, 持续集成, 攻击性安全, 数据驱动测试, 测试向量, 测试框架, 漏洞枚举, 软件安全