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 绑定 [![GitHub actions](https://static.pigsec.cn/wp-content/uploads/repos/cas/78/783be659879faa06af3665eaf7e286ad579c85a992dd41e3d94b17daf0a3e404.svg)](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, 后量子加密, 密码学, 密钥封装, 手动系统调用, 抗量子密码, 无后门, 请求拦截