PythonからPQCを触ってみよう(liboqs-python)

2026.06.20 01:01:51

## introduction
liboqs-pythonというリポジトリがある。
これは耐量子計算機暗号(PQC)のC言語ライブラリliboqsのPythonラッパーとなっていて、PQCを触るに当たって一通りの道具が揃っている。これを利用してPythonからPQCを触れるようにするというのがここでの目標だ。

## liboqsの環境構築
Pythonからliboqsを呼ぶためには、ベースとなるCライブラリ(liboqs)をビルドした上で、Pythonパッケージをインストールする必要がある。

さっそくインストールを進めよう。

## 1. 必要なツールのインストール
Cライブラリをビルドするため、事前にビルド環境を準備。
brew install cmake gcc openssl

## 2. リポジトリのクローンとインストール
基本的に公式のREADMEに従って進めるだけで完了する。

### liboqsの設定、ビルド、インストール
最新のソースコードをクローンして、CMakeでビルドしている。
最後の行を実行するとパスワードを聞かれるので入力する。
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
sudo cmake --build liboqs/build --target install

### Python仮想環境をインストールしてアクティブ化する
ここでは、次の `pip install .` がうまくいくように整備してる。
python3 -m venv venv
. venv/bin/activate
python3 -m ensurepip --upgrade

### ラッパーの設定とインストール
ここは、liboqs-python を clone してインストールしてるだけ。
git clone --depth=1 https://github.com/open-quantum-safe/liboqs-python
cd liboqs-python
pip install .

## 3. 動作確認
ここまでで環境構築としては完了。
サンプルコードが用意されているのでそれを実行して確認する。

### 共有鍵の確認(ML-KEM)
python3 examples/kem.py
最後に `Shared secretes coincide: True` が出ればOK

## 署名検証テスト(ML-DSA)
python3 examples/sig.py
最後に `Valid signature? True` が出たらOK

## 乱数の取得確認
python3 examples/rand.py
16進数が並べばOK

## ステートフル署名(XMSS)
python3 examples/stfl_sig.py
これはエラーが出る。専用フラグを立ててビルドし直さないといけないっぽい。個人的に触りたいのは ML-KEM と ML-DSA だったし、ステートフル署名はいまのところ触る予定がないので放置する。

ともあれ、これでliboqsが触れるようになった。

## 参照
1. open-quantum-safe/liboqs-python: Python 3 bindings for liboqs (公式リポジトリ)
2. 簡易実装から本番実装へ:Pythonで学ぶML-KEMとliboqs