RFC 9180: HPKE, Hybrid Public Key Encryptionにおける各暗号スイートのアルゴリズム / ID一覧
ref
7.1. Key Encapsulation Mechanisms (KEMs)
table: KEM IDs
Value KEM Nsecret Nenc Npk Nsk Auth Reference
0x0000 Reserved N/A N/A N/A N/A yes RFC 9180
gemini.icon
この表に記載されているKEM(Key Encapsulation Mechanism)の主な違いは、基盤となる数学(楕円曲線)の種類と、それに伴うセキュリティレベル、パフォーマンスです。
一言でいうと、「実績のある標準的な暗号(NIST曲線)」と「よりモダンで高速、安全に実装しやすい暗号(Xシリーズ曲線)」の2つの系統に分かれています。
## 2つの系統:NIST曲線 vs Xシリーズ曲線
この表のKEMは、大きく2つのファミリーに分類できます。
1. NIST曲線ファミリー (P-256, P-384, P-521)
ID: 0x0010, 0x0011, 0x0012
特徴:
米国国立標準技術研究所(NIST)によって標準化された、非常に広く普及している楕円曲線です。
長年の利用実績があり、多くの政府機関や金融システムで採用されています。
「P-」の後ろの数字は、使用する素数のビット長を表し、数字が大きいほど安全性が高くなります。
懸念点 (学術的な議論):
曲線を定義する定数(シード値)の選定経緯が不透明であるため、「バックドアがあるのでは?」という懸念が一部の専門家から指摘されたことがあります(ただし、具体的な脆弱性は発見されていません)。
アナロジー: 長年使われている、信頼性の高いエンジン。多くの車に搭載実績があるが、最新のエンジンに比べると設計が少し古い。
2. Xシリーズ曲線ファミリー (X25519, X448)
ID: 0x0020, 0x0021
特徴:
著名な暗号学者ダニエル・バーンスタインらによって設計された、モダンな楕円曲線です。
高いパフォーマンスと安全な実装のしやすさを最優先に設計されています。
サイドチャネル攻撃(処理時間のわずかな差などから秘密情報を推測する攻撃)のような、実装上のミスに起因する脆弱性が生まれにくいのが大きな利点です。
TLS 1.3など、新しいプロトコルで広く採用されています。
アナロジー: 最新技術で作られた、高効率で安全なエンジン。燃費(パフォーマンス)が良く、安全機能も豊富。
## 各項目の違いからわかること
table:_
項目 説明 系統ごとの違い
KEM アルゴリズム名。使用する楕円曲線とハッシュ関数(HKDF)の組み合わせ。 P-シリーズかX-シリーズかが最大の違い。
Nsecret 最終的に生成される共有秘密鍵の長さ(バイト)。ハッシュ関数の出力長と一致。 数字が大きいほど、より長い鍵が生成される。
Npk / Nsk 公開鍵 / 秘密鍵の長さ(バイト)。 X-シリーズは鍵長がコンパクトで効率的。<br>P-シリーズは曲線の表現方法により鍵長が少し大きくなる。
Reference 仕様が定義されている文書。 P-シリーズは[NISTCurves]、X-シリーズは[RFC7748]で定義。
## まとめ:どちらを選ぶか?
table:_
NIST曲線 (P-256, P-384, P-521) Xシリーズ曲線 (X25519, X448)
強み 圧倒的な普及率と利用実績、政府標準への準拠。 高いパフォーマンス、実装の安全性、モダンなプロトコルでの採用。
選び方 既存システムとの互換性や、政府標準への準拠が求められる場合。 新規のシステム開発で、速度と安全性を重視する場合(現在の主流はこちら)。
結論として、これらはすべて安全な暗号ですが、設計思想と得意な領域が異なります。
特にこだわりがなければ、現代ではパフォーマンスと実装の安全性の観点からXシリーズ(特にX25519)が好まれる傾向にあります。
---
7.2. Key Derivation Functions (KDFs)
table: KDF IDs
Value KDF Nh Reference
0x0000 Reserved N/A RFC 9180
gemini.icon
この表に記載されているKDF(Key Derivation Function)の主な違いは、内部で使われているハッシュ関数の種類と、それに伴う出力される鍵の長さ(Nh)およびセキュリティ強度です。
一言でいうと、どれも同じ「HKDF」という鍵導出のレシピを使っていますが、材料となるハッシュ関数を変えることで、出来上がる鍵の強度と長さが変わります。
## ハッシュ関数の違いがすべて
この表のKDFはすべて「HKDF」という標準的なアルゴリズムですが、末尾についている名前がその違いを示しています。
HKDF-SHA256: SHA-256 というハッシュ関数を使います。
HKDF-SHA384: SHA-384 というハッシュ関数を使います。
HKDF-SHA512: SHA-512 というハッシュ関数を使います。
## 各項目の違いからわかること
table:_
項目 説明 違い
KDF アルゴリズム名。 どの SHA バージョンを使うかが最大の違い。
Nh 生成される鍵のハッシュ長 (バイト単位)。 SHA-256 → 32バイト<br>SHA-384 → 48バイト<br>SHA-512 → 64バイト
## まとめ:どれを選ぶべきか?
どのKDFを選ぶかは、通常、組み合わせる暗号(KEMやAEAD)が要求するセキュリティレベルに合わせます。
table:_
KDF セキュリティ強度 主な組み合わせ先
HKDF-SHA256 128ビットセキュリティ AES-128, P-256, X25519 など
HKDF-SHA384 192ビットセキュリティ AES-192, P-384 など
HKDF-SHA512 256ビットセキュリティ AES-256, P-521, X448 など
結論として、これらはすべて安全な鍵導出関数ですが、セキュリティ要件に応じて適切な強度のものを選択します。 例えば、「128ビットセキュリティ」で十分なシステム(現在の主流)ではHKDF-SHA256が、「256ビットセキュリティ」というより高いレベルが求められるシステムではHKDF-SHA512が選ばれます。
---
7.3. Authenticated Encryption with Associated Data (AEAD) Functions
table: AEAD IDs
Value AEAD Nk Nn Nt Reference
0x0000 Reserved N/A N/A N/A RFC 9180
0x0001 AES-128-GCM 16 12 16 GCM 0x0002 AES-256-GCM 32 12 16 GCM 0x0003 ChaCha20Poly1305 32 12 16 RFC8439 0xFFFF Export-only N/A N/A N/A RFC 9180