0Pricing
Cryptology Academy · レッスン

CRYSTALS-Kyber:格子ベースのKEM

Module-LWEの鍵カプセル化とパラメータセットを順に確認します。

「CRYSTALS-Kyber:格子ベースのKEM」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

なぜKyberなのか

CRYSTALS-Kyber(NISTがFIPS 203でML-KEMに改称)は、Module-LWEに基づく鍵カプセル化メカニズム(KEM)です。鍵交換におけるRSAとECDHを置き換え、実用的な性能を維持しながら量子コンピューターに対する耐性を提供します。

KEMと鍵合意

KEMは共有秘密をカプセル化します。送信者がランダムな鍵Kを生成し、受信者の公開鍵で暗号化(カプセル化)して、暗号文Cを生成します。受信者は秘密鍵でCをデカプセル化し、Kを復元します。対話的な鍵交換は必要ありません。

Module-LWEの基盤

Kyberは、環 R_q = Z_q[x]/(x^256+1) 上で、q=3329のModule-LWEを使用します。次元kは、Kyber-512ではk=2、Kyber-768ではk=3、Kyber-1024ではk=4です。安全性レベルはそれぞれ約128ビット、約192ビット、約256ビットです。推奨されるデフォルトはk=3(Kyber-768)です。

鍵生成

シードρから、展開可能な行列A ∈ R_q^{k×k}を生成します。秘密値sとノイズeは、中心二項分布(係数が小さい分布)からサンプリングします。公開鍵は(ρ, t=As+e)、秘密鍵はsです。ノイズeは小さい値ですが、公開鍵からsを復元できないようにします。

カプセル化

公開鍵(ρ, t)の所有者に共有秘密を送信するには、ノイズ分布からr、e1、e2をサンプリングします。u = A^T r + e1、v = t^T r + e2 + round(q/2)*mを計算します。ここでmはランダムな256ビットメッセージです。共有秘密K = KDF(m)とし、暗号文は(u, v)です。

デカプセル化

秘密鍵sを使い、m' = decompress(v - s^T u) = decompress(t^T r + e2 + round(q/2)*m - s^T(A^T r + e1))を計算します。ノイズ項はほぼ相殺されるため、m'≈mとなります。K = KDF(m')を計算します。デカプセル化の失敗確率は< 2^{-139}です。

鍵と暗号文のサイズ

Kyber-768では、公開鍵が1184バイト、秘密鍵が2400バイト、暗号文が1088バイト、共有秘密が32バイトです。ECDH-P256では、公開鍵が65バイト、暗号文が32バイトであることと比較してください。Kyberは約15倍大きくなりますが、量子コンピューターに対して安全です。それでも高速で、最新のCPUではカプセル化とデカプセル化を合わせて1ミリ秒未満です。

NTTによる最適化

R_q = Z_q[x]/(x^256+1) における多項式乗算では、FFTのモジュラー算術版である数論変換(NTT)を使用します。NTTにより、多項式乗算の計算量はO(n^2)からO(n log n)に削減されます。q=3329は、n=256に対してNTTに適した性質を持つように選ばれています。

ハイブリッド鍵交換

PQCへの移行中は、ハイブリッド鍵交換としてECDHとKyberを組み合わせます。共有秘密 = KDF(ECDH_output || Kyber_output)です。安全性を確保するには両方を破る必要があります。古典的な攻撃者はどちらも破れず、量子的な攻撃者はECDHを破れますがKyberは破れません。TLS 1.3のドラフト(IETF RFC 8446)はハイブリッドKEMをサポートしています。

サイドチャネルへの配慮

単純な実装では、Kyberのデカプセル化はconstant-timeではありません。拒否サンプリングの手順から実行時間が漏えいするためです。リファレンス実装では、constant-timeのNTTと、圧縮された暗号文の比較を使用しています。NIST提出時のリファレンスコード、または監査済みのライブラリ実装を使用してください。

導入状況

NISTは2024年8月にFIPS 203(ML-KEM)を公開しました。Chromeは2023年にTLS 1.3でKyberのサポートを追加しました。Cloudflare、Google、AWSはハイブリッドECDH+Kyberを導入しています。OpenSSL 3.xはML-KEMのサポートを追加しました。LibSSHとWireGuardの実装は進行中です。

確認問題

CRYSTALS-Kyberを標準化しているNISTの標準文書は何ですか?

まとめ

Kyber(ML-KEM)はModule-LWEベースのKEMで、ECDHを置き換えます。鍵サイズは約1 KBで、高速なNTT演算を使用し、量子コンピューターに対する耐性を備えています。移行中はECDHとのハイブリッドとして導入します。FIPS 203として標準化されています。次はCRYSTALS-DilithiumとFalconの署名方式です。

よくある質問

「CRYSTALS-Kyber:格子ベースのKEM」レッスンは無料ですか?

はい。「CRYSTALS-Kyber:格子ベースのKEM」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「CRYSTALS-Kyber:格子ベースのKEM」で何を学びますか?

Module-LWEの鍵カプセル化とパラメータセットを順に確認します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「CRYSTALS-Kyber:格子ベースのKEM」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ShorのアルゴリズムとGroverのアルゴリズム
  2. CRYSTALS-Kyber:格子ベースのKEM
  3. CRYSTALS-DilithiumとFalconの署名
  4. PQCへの移行:ハイブリッド方式
← Cryptology Academyに戻る