暗号理論の論文でよく見るMenezesさん(権威)のYoutube動画に最近ハマってる。
視聴したメモ、そこから派生して気になったことなどをまとめる。
今回の動画
NIST標準アルゴリズム
2022年にNISTが耐量子計算機暗号(PQC)であるML-KEMとML-DSAを標準化した。
KEM(鍵共有)
KEM(Key Encapsulation Mechanism)は、共有鍵を「カプセル化」して相手に送る方式。
従来のDHやECDHの代替として使われる。
ML-KEM(CRYSTALS-Kyber)
NISTで標準化された格子ベースKEM。
- ML-KEM-512 → Security Level 1(≒128bit安全性)
- ML-KEM-768 → Security Level 3(≒192bit)
- ML-KEM-1024 → Security Level 5(≒256bit)
よくAES256やRSA3072といったように、鍵長を付すことがあるのが、
ML-KEMにおける512/768/1024は鍵長ではなく行列のサイズである。
多項式の次数$n=256$は固定であり、可変パラメータは行列のサイズ$k$。
ML-KEM-512は$k=2$のため、$k\times n=512$となる。

鍵サイズや暗号文サイズは以下のとおりである。
鍵サイズの単位はBである
| Scheme | Encapsulation Key | Decapsulation Key | Ciphertext | Shared Secret Key |
|---|---|---|---|---|
| ML-KEM-512 | 800 | 1632 | 768 | 32 |
| ML-KEM-768 | 1184 | 2400 | 1088 | 32 |
| ML-KEM-1024 | 1568 | 3168 | 1568 | 32 |
required RBG strengthとは
PQCに限った話ではないが、乱数生成が非常に重要である。
基本的にはNIST SP800-90やBIS AISのような暗号利用に適した方式で生成されたものを利用するべきである。
ML-KEMではセキュリティレベルに応じて乱数生成の強度が要求されている。
ML-KEM-512では少なくとも128ビット、ML-KEM-768では192ビット、ML-KEM-1024では256ビットのセキュリティ強度を持つ乱数生成器を利用するべきである。
過去の暗号実装においても、乱数生成の不備で秘密鍵が漏洩する事例が報告されているため、それも考慮して明示的に組み込まれたのかもしれない。(個人の推測)(日本とアメリカのチェックリストの違いみたいな)
署名
ML-DSA(CRYSTALS-Dilithium)
- ML-DSA-44 → Level 2
- ML-DSA-65 → Level 3
- ML-DSA-87 → Level 5
ここでのパラメータ44や65は、行列の行数$k$と列数$\ell$を示している。
参照:FIPS-204
鍵サイズや署名サイズは以下のとおりである。
鍵サイズの単位はBである
| Scheme | Private Key | Public Key | Signature Size |
|---|---|---|---|
| ML-DSA-44 | 2560 | 1312 | 2420 |
| ML-DSA-65 | 4032 | 1952 | 3309 |
| ML-DSA-87 | 4896 | 2592 | 4627 |
その他(NIST標準・候補)
| アルゴリズム | 種別 | ベース | 特徴 |
|---|---|---|---|
| SLH-DSA (SPHINCS+) | 署名 | ハッシュベース | ステートレス、サイズ大 |
| Falcon | 署名 | 格子ベース | 高速・小サイズ、実装が難しい |
| LMS / XMSS | 署名 | ハッシュベース | ステートフル署名 |
| HQC | KEM | コードベース | NIST候補 |
| FrodoKEM | KEM | 格子ベース | 非構造格子(安全寄り) |
| Classic McEliece | KEM | コードベース | 鍵サイズが非常に大きい |
PQCの実装エコシステム
Open Quantum Safe(OQS)
Linux Foundationによって立ち上げられた、PQCの実用化を加速するためのプロジェクト。
PQCの実験・評価を目的としたOSSプロジェクト。
実質的なリファレンス環境。
liboqs
https://github.com/open-quantum-safe/liboqs
QOSが規格した、複数のPQCアルゴリズムを統一APIで扱えるライブラリ。
アルゴリズム比較やプロトタイピングに便利。
PQCP(Post-Quantum Code Package)
https://github.com/pq-code-package
形式検証済みの高信頼実装。
プロダクション投入を前提とした品質。
検証されたコードはAWSなどの実運用に採用される。
SUPERCOP
暗号アルゴリズムの性能評価フレームワーク。
Curve25519で著名なdjb氏を中心としたベンチマークフレームワーク。
単にアルゴリズムを実装するのではなく、統一した測定環境・手順で性能を比較できる。
具体的には、異なるCPUアーキテクチャやコンパイラ環境に対して自動的にビルドと実行を行い、スループットやレイテンシを測定する。
これにより、例えば同じKyber実装でも、x86とARMでどの程度性能差があるか、あるいは最適化の効果がどれほどかを定量的に比較できる。
https://bench.cr.yp.to/results-kem.html
ライブラリ実装
近年、TLSでもx25519とML-KEMのハイブリッド方式が利用されている。
GoogleはMK-KEM768とx25519のハイブリッドを利用している

Cloudflare Pagesで運用しているこのWebサイトもML-KEMのハイブリッド方式

これを実現するために多くの暗号ライブラリでPQCが実装されている。
OpenSSL(libcrypto)
有名な暗号ライブラリ。
デファクトスタンダードで、バグが発見されると大騒ぎになるやつ。
OepnSSL 3.5からPQCがサポートされた。
https://openssl-library.org/post/2025-04-08-openssl-35-final-release/
Bouncy Castle
Java / C# / Kotlin向けの実用実装。 (初めて知りました…)
BoringSSL(Google)
https://github.com/google/boringssl
ChromeやAndroid用の内部で利用されている暗号ライブラリ。
API互換性が保証されていない一般用途には不向き、とのこと。
Chromium系のブラウザやAndroidのライセンスを見ると、
このライブラリが利用されている。
OpenSSLの表記はない。

Firefoxでは Network Security Services (NSS) の freebl が暗号実装の中枢となっているようだ。
CIRCL(Cloudflare)
https://blog.cloudflare.com/introducing-circl/
Go製ライブラリ。
このWebサイトもきっとこれで動いている。
OpenSSLがPQC対応に遅かった2022年当初、CIRCLはいち早く実装していたと記憶する。
とくに標準化されていない同種写像系(SIDHやCSIDH)は私はCSIDHの高速化実装をやっていたときからすでにあった。
https://github.com/cloudflare/circl/tree/main/dh
AWS-LibCrypto + s2n-tls
https://github.com/aws/s2n-tls
AWSの暗号基盤。
クラウド規模でPQCハンドシェイクを実装。
CryptoKit(Apple)
https://developer.apple.com/documentation/cryptokit
X-WingというハイブリッドKEMがある。
詳しい解説記事がありました:
https://qiita.com/satokan3/items/eb91e759631c793845c9
wolfCrypt(組込み)
https://wolfssl.jp/products/wolfcrypt/
組み込み向け暗号ライブラリとして有名。
以前に業務でwolfCryptをリサーチしたことがあったが、FIPS対応版が欲しい場合にも対応できる、とのこと。
https://wolfssl.jp/products/wolfcrypt-fips/
プログラミング言語レベルでの対応
Java
JEP 496 , 497 により ML-KEM, ML-DSAが標準APIに統合されている。
Rust
RustCryptoなどで純Rust実装が進行。
メモリ安全性の観点で有利。
商用ライブラリ
OSSでは保証が不足するケース向けにFIPS等の認証を取得したライブラリ。
PQShield(PQCryptoLib-Core)
https://pqshield.com/products/pqc-cor/
FIPS 140-3認証済み。
ISARA(Radiate)
https://www.isara.com/products/isara-radiate-quantum-safe-toolkit.html
政府・金融向け統合ソリューション。
まとめ
既存の公開鍵暗号が解けるような量子コンピュータがすぐにできるかについては疑問が多いが、
不確実性に対処するためにPQCが研究・実装・発展することは良いと思う。
セキュリティ(特に暗号)については頭にアルミホイルを巻く勢いで徹底したほうがいいと思う。(小並感)
参考文献
National Institute of Standards and Technology (NIST),
FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard (ML-KEM),
Federal Information Processing Standards Publication 203, 2024.
DOI: https://doi.org/10.6028/NIST.FIPS.203National Institute of Standards and Technology (NIST),
FIPS 204: Module-Lattice-Based Digital Signature Standard (ML-DSA),
Federal Information Processing Standards Publication 204, 2024.
DOI: https://doi.org/10.6028/NIST.FIPS.204