鍵交換・暗号化スキームHPKEとは

この記事では、さまざまなセキュリティプロトコルの基本となる鍵交換・暗号化スキームの標準HPKE(Hybrid Public Key Encryption)について紹介します。

HPKEは公開鍵暗号と共通鍵暗号を組み合わせてメッセージを暗号化するための暗号アルゴリズムの組み合わせ/手順(スキーム)の標準規定で、昨年2月にIETFのRFC 9180として標準が発行されています。楕円曲線Diffie-Hellman鍵交換を用いて一時的な共通鍵を作成し,それを元に必要な鍵を導出し、共通鍵暗号によって暗号化・復号を行うところまでの一連のスキームを定義しています.

プロトコル標準ではありますが、暗号スキームの定義だけでレコードレイヤーのような物理層の定義がないので軽装で様々なプロトコルの中に柔軟に取り込めることが特徴です。そのため比較的新しい標準ですが、すでに以下のような場面で利用されています.また、HPKEの機能はwolfCryptのAPIとしても提供しています。

  • TLS Encrypted Client Hello (TLS-ECH)

TLS 1.3では,クライアントがサーバーに送る最初のメッセージであるClient Helloに含まれる情報が暗号化されていません.これは,ネットワーク上の監視者や中間者によってプライバシーが侵害される可能性があります.TLS Encrypted Client Helloは,HPKEを使ってClient Helloをサーバーの公開鍵で暗号化することで,この問題を解決しようとしています.ECHはIETFのTLS ワーキンググループで検討が進められまもなく標準となる見込みです。wolfSSLのTLS1.3でも、ビルド時に指定することで利用可能です。

  • Oblivious DNS over HTTPS (ODoH)

DNS over HTTPSは,DNSクエリとレスポンスをHTTPSで暗号化することで,DNSのプライバシーとセキュリティを向上させるプロトコルです.しかし,DNS over HTTPSでは,サーバーがクライアントのIPアドレスやクエリ内容を知ることができてしまいます.

Oblivious DNS over HTTPSは,HPKEを使ってDNSクエリを暗号化し別の中継者に送ることで,サーバーがクライアントの情報を知らないようにするプロトコルです.2022年2月,RFC 9180として公開されました.

  • Messaging Layer Security (MLS)

MLSはIETF MLSワーキンググループで検討中のプロトコルで、メッセージング層でグループへの複数の参加者間で共通の鍵を使って秘密情報を共有するためのプロトコルです。グループの共有鍵を安全に生成し共有するための基盤のプロトコルとして、HPKEが利用されています。

HPKEの構造

HPKEでは,送信者と受信者が各要素において同一のスイートを使っていることが前提です.送信者は受信者の公開鍵を予め知っている必要があります.その一方で送信者は,メッセージを暗号化する度に一時的なキーペアを生成・利用します.これは,送信者の一時的な秘密鍵が漏洩しても,過去のメッセージが復号されないようにする前方秘匿性を保証するためです.

HPKEは,大きく以下の3要素によって成り立っています.それぞれ,利用可能なスイートを併記します.

  • KEM (Key Encapsulation Mechanism)

送信者が受信者の公開鍵と自分の秘密鍵で一時鍵を暗号化し,受信者が送信者の公開鍵と自分の秘密鍵で復号することで,共有秘密鍵を生成する部分です.暗号アルゴリズムとしては楕円曲線ディフィーヘルマンを利用します。

DHKEM(P-256, HKDF-SHA256)

DHKEM(P-384, HKDF-SHA384)

DHKEM(P-521, HKDF-SHA512)

DHKEM(X25519, HKDF-SHA256)

DHKEM(X448, HKDF-SHA512)

  • KDF (Key Derivation Function)

KEMにより生成した共有秘密鍵をもとに,暗号化・復号で用いる共通鍵やノンスを導出する部分です.鍵導出アルゴリズムとしてはHMACを利用します。

HKDF-SHA256

HKDF-SHA384

HKDF-SHA512

  • AEAD (Authenticated Encryption with Associated Data)

KDFで生成した共通鍵を利用して,実際に暗号化・復号を行う部分です.暗号アルゴリズムとしてはAES-GCM, ChaCha20Poly1305によるAEAD型の共通鍵暗号を利用します。

AES-128-GCM

AES-256-GCM

ChaCha20Poly1305

モード

HPKEには,送信者と受信者の間に事前共有鍵(PSK)や認証情報があるかどうかによって,4つのモードがあります.

  • Base Mode

このモードでは,事前共有鍵も認証情報もなく,公開鍵暗号だけでメッセージを暗号化します.送信者は受信者の公開鍵で一時鍵を暗号化し,受信者は送信者の公開鍵と自分の秘密鍵で復号します.送信者の認証は行われません.

  • PSK(Pre-Shared Key) Mode

このモードでは,送信者と受信者で同一の事前共有鍵を保有しているか確認します.送信者は受信者の公開鍵と事前共有鍵で一時鍵を暗号化し,受信者は秘密鍵と事前共有鍵で復号します.送信者の認証は行われませんが,事前共有鍵が漏洩しない限り,メッセージの機密性と完全性が保証されます.

  • Auth(Authentication) Mode

このモードでは,暗号化や復号に認証情報を用います.送信者は受信者の公開鍵と自分の秘密鍵で一時鍵を暗号化し,受信者は秘密鍵と送信者の公開鍵で復号します.送信者の認証が行われます.ただし,受信者の認証は行われません.

  • AuthPSK Mode

このモードでは,事前共有鍵と認証情報の両方を用います.送信者の認証が行われます.ただし,受信者の認証は行われません.

HPKEについてさらに詳しく知りたいかた、wolfSSLのHPKEサポートにご興味がある方は、 info@wolfssl.jp までご連絡ください。

参照:

https://www.rfc-editor.org/rfc/rfc9180.html

ECH(暗号化クライアントハロー)をサポート!