Kyber とDilithiumとは?──量子時代の“守り手”たち

こんにちは、阿久梨絵です!
量子コンピュータの登場により、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標準名採用年用途
KyberML-KEM(FIPS 203)2024年鍵交換・TLSなど
DilithiumML-DSA(FIPS 204)2024年電子署名・電子政府など

日本でも総務省・経産省がガイドラインを策定し、PQCの導入が本格化しています。

まとめ

Kyber とDilithiumは、量子コンピュータ時代に備えるための“新しい暗号の基盤”です。

Kyber:鍵交換の守り手
Dilithium:署名の守り手

どちらもすでに実装可能で、TLSや電子署名などの現場に組み込まれ始めています

「まだ先の話」ではなく、
今から備えるべき現実」──それがポスト量子暗号です。
阿久梨絵でした!

Verified by MonsterInsights