quarkslab/crypto-condor
GitHub: quarkslab/crypto-condor
用于验证加密算法实现是否符合规范的 Python 库和 CLI 工具,通过 NIST CAVP 等权威测试向量确保 AES、ML-KEM、ML-DSA 等原语实现的正确性。
Stars: 34 | Forks: 7
# crypto-condor
crypto-condor 是一个用于加密原语合规性测试的工具,以 Python 库和 CLI 的形式提供。它配有详尽的文档,其中包含关于所支持原语的指南。
**问:什么是加密原语?**
**答**:一种低级加密算法,通常用于构建协议。
例如,AES 是一种加密原语,用于 TLS 协议中,这正是您的浏览器用来安全获取此页面的协议。
**问:什么是合规性测试?**
**答**:算法在规范中描述,例如 FIPS 出版物或 RFC。在实现这些算法时,我们要确保它们符合规范,即实现的行为与描述的算法一致。
**问:那么如何进行合规性测试?**
**答**:我们可以使用*测试向量*,即一组输入及其对应的输出。例如,使用 AES 加密是一种确定性操作:对于给定的密钥和消息,AES 将始终返回相同的密文。因此,我们可以选择一些输入值,运行算法,并记录返回的值。然后,AES 的所有实现都应为给定的密钥和消息返回*相同*的密文。如果不返回,则不符合规范。
**问:那么,crypto-condor 做什么?**
**答**:crypto-condor 提供了一个出色的 Python API 和一个封装器系统,用于使用来自 [NIST CAVP](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program) 等来源的测试向量集来测试实现。
Python API 公开了测试函数,这些函数将实现(以 Python 函数或类的形式)作为输入,将测试向量定义的输入传递给该实现,并检查输出是否为向量定义的输出。
封装器是已经定义了函数原型的小程序。用户在此函数内调用要测试的实现,crypto-condor 像使用 Python API 一样使用测试向量运行它。
它附带文档、封装器示例和关于所支持原语的指南。
## 环境要求
crypto-condor 需要 **Python 3.10+**。作为参考,它是在 Fedora 41 上使用 Python 3.13 开发的。
**AES、ML-KEM、ML-DSA 和 TestU01** 的实现是用 C 语言编写的,并直接在用户的机器上编译。因此,它们需要 C 编译器(Linux 上默认为 GCC,MacOS 上默认为 Clang)和 GNU Make。这些原语仅在需要时编译,而不是在安装包时编译:
- AES:当使用经典操作模式(非 CCM 或 GCM)测试实现输出时。
- ML-KEM:当测试实现输出**或**在 `encapsulate` 函数上使用测试向量时。
- ML-DSA:当测试实现输出时。
- TestU01:当用于测试文件时。
可以通过在 Linux 上设置 `CC` 环境变量来选择编译器。在 MacOS 上,仅确认 Clang 可用。
## 安装
它可以在 PyPI 上获取:
```
python -m pip install crypto-condor
```
可以在 [pyproject.toml](https://github.com/quarkslab/crypto-condor/blob/main/pyproject.toml) 文件的 `[tool.poetry.dependencies]` 部分找到最新的需求列表。
## 用法
安装后,CLI 可用作 `crypto-condor-cli`。它的结构是命令形式,类似于 Git。不带参数运行或使用 `--help` 运行以显示详细说明可用子命令的帮助消息。您可以查看 [文档](https://quarkslab.github.io/crypto-condor/latest/index.html) 以获取所有命令的快速概览。
至于 Python 库,它以 `crypto_condor` 形式提供(注意下划线)。每个原语在 `primitives` 下都有自己的模块,例如 `crypto_condor.primitives.AES`。它包含用于测试实现的函数。
## 开发
参见 [CONTRIBUTING](https://github.com/quarkslab/crypto-condor/blob/main/CONTRIBUTING.md)。
## 更新日志和版本控制
提供 [更新日志](https://github.com/quarkslab/crypto-condor/blob/main/CHANGELOG.md)。本项目遵循 [CalVer](https://calver.org/)。使用的格式为 YYYY.MM.DD\[.MICRO\]\[-MODIFIER\]:
- YYYY:完整年份(2023)。
- 0M:填充零的月份(01, 02, ..., 12)。
- 0D:填充零的日期(01, 02, ..., 31)。
- MICRO:递增计数器,用于当天发布的补丁。
- MODIFIER:通常为 `rc` 以表示候选发布版本。
## 作者
- Julio Loayza Meneses, Quarkslab.
- Angèle Bossuat, Quarkslab.
- Dahmun Goudarzi, Quarkslab.
Logo 创意由 Robin David 提供,绘图由 Irene Loayza 完成。
## 许可证
[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0),参见 [LICENSE](https://github.com/quarkslab/crypto-condor/blob/main/LICENSE)。
crypto-condor 是一个用于加密原语合规性测试的工具,以 Python 库和 CLI 的形式提供。它配有详尽的文档,其中包含关于所支持原语的指南。
**问:什么是加密原语?**
**答**:一种低级加密算法,通常用于构建协议。
例如,AES 是一种加密原语,用于 TLS 协议中,这正是您的浏览器用来安全获取此页面的协议。
**问:什么是合规性测试?**
**答**:算法在规范中描述,例如 FIPS 出版物或 RFC。在实现这些算法时,我们要确保它们符合规范,即实现的行为与描述的算法一致。
**问:那么如何进行合规性测试?**
**答**:我们可以使用*测试向量*,即一组输入及其对应的输出。例如,使用 AES 加密是一种确定性操作:对于给定的密钥和消息,AES 将始终返回相同的密文。因此,我们可以选择一些输入值,运行算法,并记录返回的值。然后,AES 的所有实现都应为给定的密钥和消息返回*相同*的密文。如果不返回,则不符合规范。
**问:那么,crypto-condor 做什么?**
**答**:crypto-condor 提供了一个出色的 Python API 和一个封装器系统,用于使用来自 [NIST CAVP](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program) 等来源的测试向量集来测试实现。
Python API 公开了测试函数,这些函数将实现(以 Python 函数或类的形式)作为输入,将测试向量定义的输入传递给该实现,并检查输出是否为向量定义的输出。
封装器是已经定义了函数原型的小程序。用户在此函数内调用要测试的实现,crypto-condor 像使用 Python API 一样使用测试向量运行它。
它附带文档、封装器示例和关于所支持原语的指南。
## 环境要求
crypto-condor 需要 **Python 3.10+**。作为参考,它是在 Fedora 41 上使用 Python 3.13 开发的。
**AES、ML-KEM、ML-DSA 和 TestU01** 的实现是用 C 语言编写的,并直接在用户的机器上编译。因此,它们需要 C 编译器(Linux 上默认为 GCC,MacOS 上默认为 Clang)和 GNU Make。这些原语仅在需要时编译,而不是在安装包时编译:
- AES:当使用经典操作模式(非 CCM 或 GCM)测试实现输出时。
- ML-KEM:当测试实现输出**或**在 `encapsulate` 函数上使用测试向量时。
- ML-DSA:当测试实现输出时。
- TestU01:当用于测试文件时。
可以通过在 Linux 上设置 `CC` 环境变量来选择编译器。在 MacOS 上,仅确认 Clang 可用。
## 安装
它可以在 PyPI 上获取:
```
python -m pip install crypto-condor
```
可以在 [pyproject.toml](https://github.com/quarkslab/crypto-condor/blob/main/pyproject.toml) 文件的 `[tool.poetry.dependencies]` 部分找到最新的需求列表。
## 用法
安装后,CLI 可用作 `crypto-condor-cli`。它的结构是命令形式,类似于 Git。不带参数运行或使用 `--help` 运行以显示详细说明可用子命令的帮助消息。您可以查看 [文档](https://quarkslab.github.io/crypto-condor/latest/index.html) 以获取所有命令的快速概览。
至于 Python 库,它以 `crypto_condor` 形式提供(注意下划线)。每个原语在 `primitives` 下都有自己的模块,例如 `crypto_condor.primitives.AES`。它包含用于测试实现的函数。
## 开发
参见 [CONTRIBUTING](https://github.com/quarkslab/crypto-condor/blob/main/CONTRIBUTING.md)。
## 更新日志和版本控制
提供 [更新日志](https://github.com/quarkslab/crypto-condor/blob/main/CHANGELOG.md)。本项目遵循 [CalVer](https://calver.org/)。使用的格式为 YYYY.MM.DD\[.MICRO\]\[-MODIFIER\]:
- YYYY:完整年份(2023)。
- 0M:填充零的月份(01, 02, ..., 12)。
- 0D:填充零的日期(01, 02, ..., 31)。
- MICRO:递增计数器,用于当天发布的补丁。
- MODIFIER:通常为 `rc标签:AES, CAVP, DevSecOps, FIPS, meg, NIST, XML 请求, 上游代理, 信息安全, 加密原语, 加密算法, 单元测试, 合规性测试, 后量子密码, 安全开发, 客户端加密, 客户端加密, 密码学, 手动系统调用, 文档结构分析, 测试向量, 测试框架, 算法验证, 逆向工具