ML-KEM
FIPS 203 モジュール格子ベースの鍵カプセル化メカニズム標準 Module-Lattice-Based Key-Encapsulation Mechanism Standard IBMなどが開発
概要
鍵カプセル化メカニズム(KEM)は、特定の条件下で二者間が公開チャネルを介して共有秘密鍵を確立するために使用できるアルゴリズムのセットです。KEMを用いて安全に確立された共有秘密鍵は、対称鍵暗号アルゴリズムと組み合わせて、暗号化や認証といったセキュア通信における基本的なタスクを実行するために使用できます。この標準規格は、ML-KEMと呼ばれる鍵カプセル化メカニズムを規定しています。ML-KEMの安全性は、モジュール学習エラー問題の計算困難性に関連しています。現在、ML-KEMは量子コンピュータを所有する攻撃者に対しても安全であると考えられています。この標準規格は、ML-KEMの3つのパラメータセットを規定しています。セキュリティ強度が高く、パフォーマンスが低い順に、ML-KEM-512、ML-KEM-768、ML-KEM-1024です。 キーワード
コンピュータセキュリティ、暗号化、暗号化、連邦情報処理標準、鍵カプセル化メカニズム、格子ベース暗号耐量子暗号; 公開鍵暗号 1. はじめに
1.1 目的と適用範囲
この規格は、モジュール格子ベースの鍵カプセル化メカニズム(ML-KEM)を規定する。鍵カプセル化メカニズム(KEM)とは、公開チャネルを介して通信する二者間で共有秘密鍵を確立するために使用できるアルゴリズムのセットである。KEMは、鍵確立スキームの一種である。NIST承認の他の鍵確立スキームは、NIST特別刊行物(SP)800-56A「離散対数ベース暗号を用いたペアワイズ鍵確立スキームに関する勧告」2およびSP 800-56B「整数因数分解暗号を用いたペアワイズ鍵確立スキームに関する勧告」3で規定されている。 SP 800-56AおよびSP 800-56Bで規定されている鍵確立スキームは、十分な能力を持つ量子コンピュータを用いた攻撃に対して脆弱である。 ML-KEM は、現在、大規模フォールトトレラント量子コンピュータを所有する敵対者に対しても安全であると考えられている承認済みの代替方式です。ML-KEM は、NIST ポスト量子暗号標準化プロジェクトに提出された CRYSTALS-KYBER KEM 4 の第 3 ラウンド バージョンから派生しています。ML-KEM と CRYSTALS-KYBER の違いについては、付録 C を参照してください。 この標準は、セキュリティ強度とパフォーマンスのトレードオフが異なる ML-KEM の 3 つのパラメータ セットを規定しています。 ML-KEMの3つのパラメータセットはすべて、米国連邦政府の機密扱いではない機密扱いの通信システムを保護するために承認されています。
1.2 背景
過去数年間、量子コンピュータの構築は着実に進展してきました。
大規模な量子コンピュータが実現すれば、多くの一般的に使用されている公開鍵暗号システムのセキュリティが危険にさらされることになります。これには、整数因数分解問題と離散対数問題(有限体上および楕円曲線上)の解の難しさに依存する鍵確立方式やデジタル署名方式が含まれます。その結果、2016年にNISTは、耐量子公開鍵暗号アルゴリズムを選定するための公開耐量子暗号(PQC)標準化プロセスを開始しました。合計82の候補アルゴリズムがNISTに提出され、検討されました。
3回にわたる評価と分析を経て、NISTは標準化に向けて最初の4つのアルゴリズムを選定しました。これらのアルゴリズムは、暗号技術に関連する量子コンピュータの登場後も含め、予見可能な将来にわたって米国政府の機密情報を保護することを目的としています。本規格は、選択されたアルゴリズムCRYSTALS-KYBERの派生形を規定します。これは、Peter Schwabe、Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John Schanck、Gregor Seiler、Damien Stehlé、およびJintai Ding 4によって設計された格子ベースの鍵カプセル化メカニズム(KEM)です。本規格全体を通して、ここで規定されるKEMは、モジュール学習エラー仮定に基づいているため、ML-KEMと呼ばれます。 2.4 擬似コードの解釈
このセクションでは、本標準規格のアルゴリズムを記述するために使用される擬似コードの表記規則について概説します。すべてのアルゴリズムは、2つのグローバル整数定数(𝑛 = 256、𝑞 = 3329)にアクセスできるものと理解されています。また、5つのグローバル整数変数(𝑘、𝜂1、𝜂2、𝑑𝑢、𝑑𝑣)も存在します。その他の変数はすべてローカルです。5つのグローバル変数は、パラメータセットが選択されると特定の値に設定されます(セクション8を参照)。
本仕様のアルゴリズムが他のアルゴリズムをサブルーチンとして呼び出す場合、すべての引数(つまり入力)は値渡しされます。言い換えれば、入力のコピーが作成され、そのコピーを使用してサブルーチンが呼び出されます。「参照渡し」は行われません。
擬似コードの代入は「←」記号を用いて行われます。例えば、𝑧 ← 𝑦 という文は、変数𝑧に変数𝑦の値が代入されることを意味します。擬似コードの比較は記号「==」を用いて行われます。例えば、式𝑥 == 𝑤 は、変数𝑥と𝑤が同じ値を持つ場合にのみ真となるブール値です。
通常のテキスト(つまり擬似コードの外側)では、異なる表記規則が適用されます。そこでは、標準的な数学表記法に従い、値の代入と比較の両方に記号「=」が使用されます。強調が必要な場合は、代入は代わりに「∶=」で行われます。
変数は常に、そのデータ型に適した有効な値を持ちますが、次の2つの例外があります。
1. 乱数ビット生成器(RBG)の出力はバイト配列データ型ですが、特別な値 NULL も使用できます。この値は、乱数生成が失敗したことを示します。これはML-KEM.KeyGenとML-KEM.Encapsでのみ発生する可能性があります。
2. ML-KEM.KeyGenとML-KEM.Encapsの出力はバイト配列データ型ですが、特別な値⊥も持つことができます。ML-KEM.KeyGenまたはML-KEM.Encapsが値⊥を返す場合、これは乱数生成の失敗によりアルゴリズムが失敗したことを示します。