こんにちは、阿久梨絵です!
量子コンピュータの登場により、RSAやECCといった従来の暗号方式が将来的に破られるリスクが現実味を帯びてきました。
そんな中、量子耐性を持つ新しい暗号方式=ポスト量子暗号(PQC)が注目されています。
その中核を担うのが、 Kyber (カイバー)とDilithium(ダイリチウム)です。
それぞれの役割と違い
アルゴリズム | 用途 | 特徴 |
---|---|---|
Kyber | 鍵交換・鍵カプセル化(KEM) | 高速・軽量でTLSなどに組み込みやすい |
Dilithium | デジタル署名 | 安定性とセキュリティのバランスが高評価 |
両者とも「格子暗号(Lattice-based cryptography)」に基づいており、Module-LWE問題を安全性の根拠としています。
Kyberの仕組み(鍵カプセル化)
Kyberは、共通鍵を安全に共有するための鍵カプセル化メカニズム(KEM)です。
処理の流れ(ざっくり)
1. 鍵生成:送信者と受信者が公開鍵・秘密鍵を生成
2. 鍵カプセル化:送信者が共通鍵を暗号化して送信
3. 鍵復号:受信者が秘密鍵で復号し、共通鍵を取得
実際のデータは共通鍵で暗号化し、その鍵だけをKyberで安全にやり取りする「ハイブリッド暗号」が一般的です。
Kyberの実装例(Go言語)
Cloudflareの[CIRCLライブラリ]を使えば、Go言語でKyberを簡単に試せます。
import “github.com/cloudflare/circl/pke/kyber/kyber1024”
pubKey, secKey, _ := kyber1024.GenerateKey(nil)
var rawMsg = []byte(“OurVeryStrongSharedSecretKey!”)
var encMsg, decMsg []byte
pubKey.EncryptTo(encMsg, rawMsg, nil)
secKey.DecryptTo(decMsg, encMsg)
暗号化できるのは最大32バイト。実際のデータはAESなどで暗号化し、その鍵をKyberで守るのが基本です。
Dilithiumの仕組み(デジタル署名)
Dilithiumは、電子署名を生成・検証するためのアルゴリズムです。
処理の流れ
1. 鍵生成:秘密鍵・公開鍵を生成
2. 署名生成:秘密鍵でメッセージに署名
3. 署名検証:公開鍵で署名の正当性を確認
RSAやECDSAと違い、量子コンピュータでも破られにくい構造になっています。
実装例とライブラリ
・C言語:[公式実装(PQClean)](https://github.com/PQClean/PQClean)
・Python:[py-pqcrypto](https://github.com/dfinity/py-pqcrypto)
・Rust:[RustCrypto PQC](https://github.com/rustcrypto)
署名サイズはやや大きめ(2〜3KB)ですが、高速かつ安定性が高いのが特徴です。
世界の動きと標準化
アルゴリズム | NIST標準名 | 採用年 | 用途 |
---|---|---|---|
Kyber | ML-KEM(FIPS 203) | 2024年 | 鍵交換・TLSなど |
Dilithium | ML-DSA(FIPS 204) | 2024年 | 電子署名・電子政府など |
日本でも総務省・経産省がガイドラインを策定し、PQCの導入が本格化しています。
まとめ
Kyber とDilithiumは、量子コンピュータ時代に備えるための“新しい暗号の基盤”です。
・Kyber:鍵交換の守り手
・Dilithium:署名の守り手
どちらもすでに実装可能で、TLSや電子署名などの現場に組み込まれ始めています。
「まだ先の話」ではなく、
「今から備えるべき現実」──それがポスト量子暗号です。
阿久梨絵でした!