Amazon Web Services ブログ
AWS-LC FIPS 3.0: ポスト量子暗号アルゴリズム ML-KEM を FIPS 140-3 検証に含めた初の暗号ライブラリ
本ブログは 2024 年 12 月 10 日に公開された AWS Blog “AWS-LC FIPS 3.0: First cryptographic library to include ML-KEM in FIPS 140-3 validation” を翻訳したものです。
AWS-LC FIPS 3.0 が National Institute of Standards and Technology (NIST) の Cryptographic Module Validation Program (CMVP) の審査中モジュールリストに追加されたことを発表いたします。AWS-LC のこの最新の検証では、ML-KEM (Module Lattice-Based Key Encapsulation Mechanism) のサポートが導入されています。ML-KEM は、FIPS で新たに標準化されたポスト量子暗号アルゴリズムです。これは、米国連邦政府の通信を含む、最も機密性の高いワークフローの長期的な機密性を強化するための重要なステップです。
この検証により、AWS LibCrypto (AWS-LC) は、FIPS モジュール内でポスト量子アルゴリズムのサポートを提供する初のオープンソース暗号モジュールとなります。FedRAMP、FISMA、HIPAA などの連邦コンプライアンスフレームワークに基づいて運用されている組織など、FIPS 検証済み暗号モジュールを必要とする組織は、AWS-LC 内でこれらのアルゴリズムを使用できるようになります。
今回の発表は、新しい FIPS 140-3 認証を継続的に取得するという AWS-LC の長期的なコミットメントの一環です。AWS-LC は 2023 年 10 月に AWS-LC-FIPS 1.0 で最初の認証を取得しました。その後のバージョンである AWS-LC-FIPS 2.0 は、2024 年 10 月に認証を取得しました。この記事では、ポスト量子暗号アルゴリズム ML-KEM の FIPS 検証、AWS-LC FIPS 2.0 および 3.0 における既存アルゴリズムのパフォーマンス改善、バージョン 3.0 で追加された新しいアルゴリズムのサポートについて説明します。また、新しいアルゴリズムを使用してハイブリッドポスト量子暗号スイートを実装する方法と、将来の脅威から保護するために今すぐ設定できる構成オプションについても説明します。
FIPS ポスト量子暗号
大規模な量子コンピュータは、現在公開鍵暗号で保護しているデータの長期的な機密性に対する脅威となります。今記録して後で復号する攻撃 (record-now, decrypt-later 攻撃) として知られる手法では、攻撃者は今日のインターネットトラフィックを記録し、鍵交換と暗号化された通信をキャプチャします。そして、十分に強力な量子コンピュータが利用可能になったときに、暗号の安全性を支える計算上の困難性を突破することで、過去に記録した通信の共有シークレットと暗号鍵を解読できます。
ML-KEM は、量子コンピュータの脅威から公開鍵暗号を守るために NIST が標準化を進めている新しい鍵カプセル化メカニズムの 1 つです。RSA、Diffie-Hellman (DH)、または楕円曲線 Diffie-Hellman (ECDH) 鍵交換と同様に、2 者間で共有シークレットを確立することで機能します。ただし、RSA や DH とは異なり、ML-KEM は量子コンピュータでも突破が困難と考えられている数学的問題に基づいて鍵交換を行います。
現時点では、このような大規模な量子コンピュータを実現する技術はまだ確立されていません。そのようなコンピュータの実現には、さらなる科学技術のブレークスルーが必要です。しかし、将来実現する可能性に備えて、ML-KEM などのポスト量子アルゴリズムを今日の鍵交換プロトコルに導入することで、record-now, decrypt-later 攻撃のリスクを軽減できます。AWS は、ECDH などの従来の鍵交換方式と ML-KEM を組み合わせたハイブリッド鍵交換アプローチを採用し、現在および将来の攻撃者に対するリスクを軽減することを推奨しています。この記事の後半では、将来の脅威から保護するために今すぐハイブリッドポスト量子暗号スイートを実装する方法を紹介します。
AWS-LC FIPS 3.0 では、ML-KEM アルゴリズムの 3 つのパラメータセット (ML-KEM-512、ML-KEM-768、ML-KEM-1024) をすべてサポートしています。3 つのパラメータセットは、NIST が指定する異なるレベルのセキュリティ強度を提供します (FIPS 203 [9, Sect. 5.6] またはポスト量子セキュリティ評価基準を参照)。ML-KEM-768 は汎用的なユースケースに推奨されます。ML-KEM-1024 は、より高いセキュリティレベルを必要とするアプリケーションや、国家安全保障システムの所有者およびオペレーター向けの Commercial National Security Algorithm Suite (CNSA) 2.0 などの明示的な指令への準拠が必要なアプリケーション向けに設計されています。
| アルゴリズム | NIST セキュリティカテゴリ | 公開鍵 (B) | 秘密鍵 (B) | 暗号文 (B) |
| ML-KEM-512 | 1 | 800 | 1632 | 768 |
| ML-KEM-768 | 3 | 1184 | 2400 | 1088 |
| ML-KEM-1024 | 5 | 1568 | 3168 | 1568 |
表 1. ML-KEM の 3 つのパラメータセットにおけるセキュリティ強度カテゴリ、公開鍵、秘密鍵、暗号文のサイズ (バイト単位)
s2n-tls との統合
ML-KEM は、TLS 1.3 のハイブリッド鍵交換 (draft-ietf-tls-hybrid-design) を通じて、AWS のオープンソース TLS 実装である s2n-tls で利用可能になりました。また、TLS 1.3 のハイブリッド ECDHE-ML-KEM 鍵合意 (draft-kwiatkowski-tls-ecdhe-mlkem) のサポートと、Curve x25519 および ML-KEM-768 の新しい鍵共有識別子も追加しました。
FIPS 140 準拠モードでのハイブリッド鍵確立では、コンポーネントアルゴリズムの 1 つが NIST 承認メカニズムである必要があります (NIST ポスト量子 FAQ で詳細を確認できます)。ML-KEM が NIST 承認アルゴリズムのリストに追加されたことで、Curve x25519 のような FIPS 標準化されていないアルゴリズムもハイブリッド暗号スイートに含めることができるようになりました。TLS 暗号スイートを ML-KEM-768 と x25519 を使用するように設定することで (draft-kwiatkowski-tls-ecdhe-mlkem)、FIPS 検証済み暗号モジュール内で初めて x25519 を使用できます。これにより、AWS-LC が提供する高度に最適化され機能検証された Curve x25519 実装を通じて、より効率的な鍵交換が可能になります。
新しいアルゴリズムと新しい実装
AWS-LC FIPS の継続的な検証に対する AWS のコミットメントにおいて重要な 2 つの要素は、承認された暗号サービスとして新しいアルゴリズムを含めることと、既存アルゴリズムについてパフォーマンスを改善し形式検証で正しさを証明した新しい実装を追加することです。
新しいアルゴリズム
AWS は、開発者が FIPS 検証済みの暗号を採用できるよう、認定された暗号アルゴリズムの最新リビジョンと新しいプリミティブを継続的に検証することにコミットしています。最新の標準化リビジョンでアルゴリズムを検証することで、グローバル標準に準拠した高品質な実装を提供しています。
AWS-LC FIPS 3.0 では、SHA(Secure Hash Algorithm)標準の最新規格である SHA-3 を追加しました。SHA-3 ファミリーは、さまざまなアルゴリズムをサポートするために使用される暗号プリミティブです。AWS-LC FIPS 3.0 では、ECDSA と RSA の署名生成および検証を SHA-3 と統合し、ポスト量子アルゴリズム ML-KEM 内でも統合しました。AWS-LC では、ML-KEM が FIPS 検証済みの SHA-3 関数を呼び出し、SHA-3 と SHAKE ハッシュ手順の最適化された実装を提供します。つまり、AWS-LC の SHA-3 実装を継続的に改良・最適化することで、ML-KEM など SHA-3 を使用するアルゴリズム全体のパフォーマンスも向上していきます。
EdDSA は、曲線 Ed25519 を使用した楕円曲線に基づくデジタル署名アルゴリズムです。NIST の更新された Digital Signature Standard (DSS) である FIPS 186-5 に追加されました。この署名アルゴリズムは、AWS-LC 3.0 FIPS モジュールの一部として提供されるようになりました。鍵合意については、共有シークレットから鍵を導出するために使用される Single-step Key Derivation Function (SSKDF) (SP 800-56Cr2) が、ダイジェストベースと HMAC ベースの両方の仕様で利用可能です。SSKDF は、例えば KMS で ECDH を使用した際に生成される共有シークレットから鍵を導出するために使用できます。さらに、Key-based Key Derivation Function (KBKDF) である SP 800-108r1 を使用して、元の鍵からさらに鍵を導出できます。これは HMAC に基づくカウンターモードを使用して利用可能です。
パフォーマンス改善
AWS は、TLS プロトコルなどのトランスポートプロトコルで広く使用されている公開鍵暗号アルゴリズムのパフォーマンス向上に注力しました。例えば、Graviton2 での RSA 署名は、ビット長 2048 で 81%、3072 で 33%、4096 で 94% 高速化され、主要な演算が正しく動作することの形式検証も追加されました。第 3 世代 Intel Xeon 以降で利用可能な Intel の AVX512 Integer Fused Multiply Add (IFMA) 命令を使用して、Intel の開発者がこれらの命令と幅広い AVX512 レジスタを使用する RSA 実装を AWS-LC にコントリビュートしました。これは既存の実装の 2 倍の速度です。
EdDSA 署名のスループットは平均 108% 向上し、検証は 37% 向上しました。この平均は、Graviton2、Graviton3、Intel Ice Lake (Intel Xeon Platinum 8375C CPU) の 3 つの環境で測定されています。このパフォーマンス向上は、s2n-bignum ライブラリから各ターゲット向けのコア演算のアセンブリ実装を統合することで達成されています。さらに、コア演算は定数時間で実装されており、各演算が正しく動作することが形式検証で証明されています。
以下の図 1 では、AWS-LC FIPS 1.0 と比較したバージョン 2.0 および 3.0 でのパフォーマンス改善の割合を示しています。2.0 で達成された改善は 3.0 でも維持されており、グラフでは繰り返し表示していません。グラフには対称鍵の改善も含まれています。セッション確立後の通信を暗号化するために TLS で広く使用されている AES-256-GCM では、Intel Ice Lake と Graviton4 全体で 16 KB メッセージを暗号化する際に平均 115% の向上があります。ディスクストレージで使用される AES-256-XTS では、256 B の入力の暗号化が Intel Ice Lake で 360%、Graviton4 で 90% 高速化されています。
図 1: AWS-LC FIPS バージョン 2.0 および 3.0 でのパフォーマンス改善のグラフ
今すぐ ML-KEM を使用する方法
s2n-tls と AWS-LC の両方の TLS ライブラリを設定して、鍵交換に X25519MLKEM768 と SecP256r1MLKEM768 を有効にすることで、今すぐ ML-KEM によるハイブリッドポスト量子セキュリティを有効にできます。AWS は、各ライブラリの既存の TLS 設定 API を使用して、AWS-LC libssl と s2n-tls の両方でこれらのハイブリッドアルゴリズムのサポートを統合しました。TLS 接続をネゴシエートするには、以下のコマンドのいずれかを使用してください。
# AWS-LC クライアント CLI の例
./aws-lc/build/tool/bssl s_client -curves X25519MLKEM768:SecP256r1MLKEM768:X25519 -connect <hostname>:<port>
# S2N-tls クライアント CLI の例
./s2n/build/bin/s2nc -c default_pq -i <hostname> <port>
まとめ
この記事では、オープンソース暗号ライブラリ AWS-LC を通じて提供している暗号技術の継続的な開発、最適化、検証について説明しました。
また、FIPS 検証済みポスト量子アルゴリズムの追加と、将来の脅威に備えて今すぐこれらのアルゴリズムを使用するための設定方法を紹介しました。
AWS-LC-FIPS 3.0 は、AWS-LC の新しいバージョンを継続的に FIPS 認証を取得していくという AWS のコミットメントの一環です。新しいアルゴリズムが標準化されるたびに認証対象に追加し、既存アルゴリズムのパフォーマンスと形式検証の水準も引き上げています。このコミットメントを通じて、AWS Libcrypto for Rust (aws-lc-rs) や ACCP 2.0 ライブラリへの統合により、Rust、Java、Python 開発者のより広いコミュニティを引き続きサポートしています。また、CPython への統合を促進し、AWS-LC に対してビルドして Python 標準ライブラリのすべての暗号処理に使用できるようにしています。さらに、rustls が FIPS サポートを提供できるようにしました。
この記事についてご質問がある場合は、AWS サポートにお問い合わせください。