Project Wycheproof 是一个社区管理的测试向量仓库,密码学库开发者可以使用它来测试针对已知攻击、规范不一致以及其他各种实现缺陷的防护能力。
测试向量以 JSON 测试向量数据的形式维护,并附有记录测试向量数据结构的 JSON schema 文件。
你可能会发现,研究其他项目(如 pyca/cryptography)是如何集成 Wycheproof 的测试向量的,会有所帮助。
Project Wycheproof 为最流行的密码学算法提供了测试向量,包括
这些测试向量可以检测一个库是否容易受到多种攻击,包括
我们欢迎贡献新的测试向量数据和算法。
如果你想做出贡献,请阅读 CONTRIBUTING 并向我们发送 pull request。你也可以通过 GitHub issues 报告 bug 或请求新测试。
我们正在将 Project Wycheproof 作为 C2SP 项目重振开发与维护,并重新聚焦于测试向量数据。
我们当前的首要任务是为测试向量数据增加更多的算法和测试用例覆盖。
Project Wycheproof 以 Wycheproof 山命名,它是世界上最小的山。该项目创建时的主要动机是设定一个可实现的目标。山越小,就越有可能攀登上去。
Wycheproof 测试向量以某种形式被许多重要的密码学项目和库所使用。以下排名不分先后:
如果你的项目使用了 Wycheproof 的测试向量,欢迎提交 PR 将其添加到上面的列表中!
请参阅 doc/bugs.md,了解使用 Wycheproof 的测试框架或测试向量数据发现的一些值得注意的历史 bug。
testvectors/ 目录在哪里?我们最近将 testvectors/ 和 testvectors_v1/ 目录合并为一个统一的目录,并采用一致的 schema 方法。
需要原始("v0")测试向量数据的用户可以从 wycheproof-v0-vectors 标签克隆此仓库,但我们鼓励考虑更新为使用 testvectors_v1/,以便从未来的更新中受益。如果 testvectors/ 中有某些功能/测试覆盖在 testvectors_v1/ 中缺失,或者有其他问题阻碍你更新,请提交一个 issue 描述你的需求。
有一些关于文件、格式和类型的遗留文档,但它们不一定与当前测试向量状态保持同步。
一般来说,建议参考 schema 文件,因为这些文件在 CI 中经过测试,以确保向量文件内容与其声明的 schema 匹配。
历史上,Wycheproof 还包含测试框架(例如用于 Java 和 Javascript 密码学实现的框架),可以直接针对实现测试各种攻击。自从过渡到社区支持以来,这些框架已被移除(但感兴趣的各方仍可在 git 历史中的 cd27d64 找到)。我们当前的重点是与实现无关的测试向量。
直接测试第三方密码学库意味着缺陷只有在被测项目提交、甚至可能发布之后才会被发现。相反,我们鼓励下游项目在开发过程中定期使用 Wycheproof 测试向量测试其代码。这种方法有助于在缺陷变成 CVE 之前 捕获它们,意味着新功能可以立即得到测试,并有助于分摊维护负担。这使 Wycheproof 维护者能够专注于测试向量,而不必在维护数量不断增长的语言和项目特定测试框架的同时跟踪许多项目的下游开发。
对测试框架感兴趣的人可能会对 Daniel Bleichenbacher 在 Rooterberg 中的持续工作感兴趣。
Copyright 2016-2026 The Wycheproof Authors,基于 Apache License 2.0 提供。
Project Wycheproof 最初由以下人员创建和维护: