open-quantum-safe/liboqs-python
GitHub: open-quantum-safe/liboqs-python
liboqs-python 是 Open Quantum Safe 抗量子密码 C 库的 Python 3 绑定,便于在 Python 中原型化和评估后量子密钥封装与签名算法。
Stars: 238 | Forks: 84
# liboqs-python:liboqs 的 Python 3 绑定
[](https://github.com/open-quantum-safe/liboqs-python/actions)
## 关于
**Open Quantum Safe (OQS) 项目** 旨在开发和原型化抗量子密码技术。
**liboqs-python** 提供了
[Open Quantum Safe](https://openquantumsafe.org/)
[liboqs](https://github.com/open-quantum-safe/liboqs/)
C 库的 Python 3 包装器,该库是一个用于抗量子密码算法的 C 库。
该包装器使用 Python 3 编写,因此在下文中假定您可以访问 Python 3 解释器。liboqs-python 已经在 Linux、macOS 和 Windows 平台上进行了广泛测试。持续集成通过 GitHub actions 提供。
该项目包含以下文件和目录
- **`oqs/oqs.py`:liboqs C 库的 Python 3 模块包装器。**
- `oqs/rand.py`:支持 `` 中 RNG 的 Python 3 模块
- `examples/kem.py`:密钥封装示例
- `examples/rand.py`:RNG 示例
- `examples/sig.py`:签名示例
- `examples/stfl_sig.py`:有状态签名示例
- `tests`:单元测试
## 前置条件
- [liboqs](https://github.com/open-quantum-safe/liboqs)
- [git](https://git-scm.com/)
- [CMake](https://cmake.org/)
- C 编译器,
例如 [gcc](https://gcc.gnu.org/), [clang](https://clang.llvm.org),
[MSVC](https://visualstudio.microsoft.com/vs/) 等。
- [Python 3](https://www.python.org/)
## 安装
### 配置、构建和安装 liboqs
在终端/控制台/管理员命令提示符中执行
```
git clone --depth=1 https://github.com/open-quantum-safe/liboqs
cmake -S liboqs -B liboqs/build -DBUILD_SHARED_LIBS=ON
cmake --build liboqs/build --parallel 8
cmake --build liboqs/build --target install
```
在类 UNIX 系统上,最后一行可能需要加上 `sudo` 前缀。请根据您系统上可用的核心数更改 `--parallel 8`。
在类 UNIX 平台上,您可能需要设置 `LD_LIBRARY_PATH`(在 macOS 上为 `DYLD_LIBRARY_PATH`)环境变量,使其指向 liboqs 的库目录路径,例如,
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
```
在 Windows 平台上,**您必须确保**在 CMake 中添加了 `-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE` 标志,并且 liboqs 的共享库 `oqs.dll` 在系统全局可见,即,通过使用“编辑系统环境变量”控制面板工具或在命令提示符中执行以下命令来相应地设置 `PATH` 环境变量
```
set PATH=%PATH%;C:\Program Files (x86)\liboqs\bin
```
您可以通过配置构建以使用备用路径(例如 `C:\liboqs`)来更改 liboqs 的安装目录,方法是向 CMake 传递 `-DCMAKE_INSTALL_PREFIX=/path/to/liboqs` 标志,例如,
```
cmake -S liboqs -B liboqs/build -DCMAKE_INSTALL_PREFIX="C:\liboqs" -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE -DBUILD_SHARED_LIBS=ON
```
或者,您可以设置 `OQS_INSTALL_PATH` 环境变量以指向安装目录,例如,在类 UNIX 系统上,执行
```
export OQS_INSTALL_PATH=/path/to/liboqs
```
### 让 liboqs-python 自动安装 liboqs
如果 liboqs-python 在运行时未检测到 liboqs,它将被自动下载、配置并安装(作为共享库)。此过程仅在加载 liboqs-python 包装器时(即运行时)执行一次。liboqs 的源目录将在该过程结束时自动删除。
如果您想避免像上一小节所述的那样手动安装 liboqs,这会非常方便。
默认情况下,liboqs-python 会安装与其自身版本相匹配的 liboqs 发行版。设置 `PYOQS_VERSION` 环境变量以覆盖此设置:
```
export PYOQS_VERSION=0.15.0 # install a specific liboqs release
export PYOQS_VERSION=latest # install liboqs from main (HEAD)
```
### 安装并激活 Python 虚拟环境
在终端/控制台/管理员命令提示符中执行
```
python3 -m venv venv
. venv/bin/activate
python3 -m ensurepip --upgrade
```
在 Windows 上,将这一行
```
. venv/bin/activate
```
替换为
```
venv\Scripts\activate.bat
```
### 配置并安装包装器
在终端/控制台/管理员命令提示符中执行
```
git clone --depth=1 https://github.com/open-quantum-safe/liboqs-python
cd liboqs-python
pip install .
```
### 运行示例
执行
```
python3 liboqs-python/examples/kem.py
python3 liboqs-python/examples/sig.py
python3 liboqs-python/examples/stfl_sig.py
python3 liboqs-python/examples/rand.py
```
### 运行单元测试
执行
```
nose2 --verbose
```
## 在独立应用程序中使用
liboqs-python 可以通过以下方式导入到 Python 程序中
```
import oqs
```
liboqs-python 定义了三个主要的类:`KeyEncapsulation`、`Signature` 和 `StatefulSignature`,提供后量子密钥封装以及无状态和有状态的签名机制。每一个都必须使用标识 liboqs 支持的机制的字符串进行实例化;这些机制可以使用 `get_enabled_kem_mechanisms()`、`get_enabled_sig_mechanisms()` 和 `get_enabled_stateful_sig_mechanisms()` 函数进行枚举。ML-KEM 密钥对也可以使用 `KeyEncapsulation.generate_keypair_seed()` 从种子确定性生成。
`examples/` 中的文件演示了包装器的 API。通过 `randombytes_*()` 函数提供了对替代 RNG 的支持。
注意:除了 `-DOQS_ENABLE_SIG_STFL_LMS=ON` 和/或 `-DOQS_ENABLE_SIG_STFL_XMSS=ON` 之外,`StatefulSignature` 还要求构建 liboqs 时加上 `-DOQS_HAZARDOUS_EXPERIMENTAL_ENABLE_SIG_STFL_KEY_SIG_GEN=ON`。如果没有该标志,实例化 `StatefulSignature` 将引发 `RuntimeError`(有状态签名的公共 C ABI 仅在设置了该标志时可用)。
liboqs-python 项目必须位于 `PYTHONPATH` 中。为了在类 UNIX 系统上确保这一点,请执行
```
export PYTHONPATH=$PYTHONPATH:/path/to/liboqs-python
```
或者,在 Windows 平台上,使用“编辑系统环境变量”控制面板工具,或在命令提示符中执行
```
set PYTHONPATH=%PYTHONPATH%;C:\path\to\liboqs-python
```
## Docker
[`Dockerfile`](https://github.com/open-quantum-safe/liboqs-python/tree/main/Dockerfile) 中提供了一个一目了然的极简 Docker 文件。
通过执行以下命令构建镜像
```
docker build -t oqs-python .
```
例如,通过执行以下命令运行密钥封装示例
```
docker run -it oqs-python sh -c ". venv/bin/activate && python liboqs-python/examples/kem.py"
```
或者,使用以下命令运行单元测试
```
docker run -it oqs-python sh -c ". venv/bin/activate && nose2 --verbose"
```
如果您想将 Docker 容器用作开发环境,请使用以下命令将当前项目挂载到 Docker 容器中
```
docker run --rm -it --workdir=/app -v ${PWD}:/app oqs-python /bin/bash
```
## 限制与安全性
liboqs 旨在用于原型化和评估抗量子密码技术。随着研究的进展,所提出的抗量子算法的安全性可能会迅速发生变化,并且最终可能对经典计算机或量子计算机完全不安全。
我们相信,NIST 后量子密码标准化项目是目前识别潜在抗量子算法的最佳途径。liboqs 无意“选出赢家”,我们强烈建议应用程序和协议在部署后量子密码技术时依赖 NIST 标准化项目的成果。
我们承认,某些方可能希望 NIST 标准化项目结束之前就开始部署后量子密码技术。我们强烈建议此类尝试务必使用所谓的**混合密码技术**,即将后量子公钥算法与传统公钥算法(如 RSA 或椭圆曲线)结合使用,从而确保该解决方案的安全性至少不低于现有的传统密码技术。
与 liboqs 一样,liboqs-python 是“按原样”提供的,不提供任何形式的保证。有关完整的免责声明,请参阅
[LICENSE](https://github.com/open-quantum-safe/liboqs-python/blob/main/LICENSE)。
## 许可证
liboqs-python 采用 MIT 许可证授权;有关详细信息,请参阅
[LICENSE](https://github.com/open-quantum-safe/liboqs-python/blob/main/LICENSE)。
## 团队
Open Quantum Safe 项目由滑铁卢大学的
[Douglas Stebila](https://www.douglas.stebila.ca/research/) 和
[Michele Mosca](http://faculty.iqc.uwaterloo.ca/mmosca/) 领导。
## 支持
Open Quantum Safe 的开发资金支持由 Amazon Web Services 和加拿大网络安全中心提供。
我们要特别感谢那些投入程序员时间向 OQS 贡献源代码的公司,包括 Amazon Web Services、evolutionQ、softwareQ 和 Microsoft Research。
开发了 OQS 特定组件的研究项目得到了各项研究资助的支持,包括来自加拿大自然科学与工程研究委员会 (NSERC) 的资金;有关资金致谢,请参阅相关的原始论文。
标签:Bash脚本, C语言绑定, Python, 后量子加密, 密码学, 密钥封装, 手动系统调用, 抗量子密码, 无后门, 请求拦截