ハイブリッド暗号化

ハイブリッド暗号化プリミティブは、対称暗号化の効率性と、公開鍵(非対称)暗号の利便性を組み合わせたものです。誰でも公開鍵を使用してデータを暗号化できますが、データを復号できるのは、秘密鍵を持っているユーザーのみです。

ハイブリッド暗号化の場合、送信者は新しい対称鍵を生成して、各メッセージの平文を暗号化し、暗号テキストを生成します。この対称鍵は、受信者の公開鍵でカプセル化されます。ハイブリッド復号では、受信者によって対称鍵が復号され、暗号テキストを復号して元の平文を復元するために使用されます。鍵のカプセル化とともに暗号テキストを保存または送信する方法については、Tink ハイブリッド暗号化のワイヤ形式をご覧ください。

ハイブリッド暗号化には次の特性があります。

  • 機密性: 秘密鍵にアクセスできない限り、暗号化された平文に関する情報(長さを除く)は誰も取得できません。
  • 非対称性: 暗号テキストの暗号化は公開鍵で行えますが、復号には秘密鍵が必要です。
  • ランダム化: 暗号化はランダム化されます。同じ平文の 2 つのメッセージがあっても、暗号テキストは同じになりません。これにより、攻撃者は特定の平文に対応する暗号テキストを認識できません。

ハイブリッド暗号化は、Tink で次のプリミティブのペアとして表されます。

  • HybridEncrypt(暗号化の場合)
  • 復号のための HybridDecrypt

コンテキスト情報パラメータ

ハイブリッド暗号化は、平文に加えて、追加のパラメータ context_info を受け入れます。これは通常、コンテキストから暗黙的に一般公開されるデータですが、生成された暗号テキストにバインドする必要があります。つまり、暗号テキストによってコンテキスト情報の完全性を確認できますが、秘匿性や真正性は保証されません。実際のコンテキスト情報は空または null にすることもできますが、暗号テキストが正しく復号されたことを確認するには、復号の際にも同じコンテキスト情報の値を指定する必要があります。

ハイブリッド暗号化を具体的に実装すると、さまざまな方法でコンテキスト情報を暗号テキストにバインドできます。次に例を示します。

  • AEAD 対称暗号化の関連データ入力として context_info を使用します(RFC 5116 を参照)。
  • HKDF の「CtxInfo」入力として context_info を使用します(実装で鍵導出関数として HKDF を使用する場合は、RFC 5869 をご覧ください)。

キータイプの選択

ほとんどのユースケースでは、DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM キータイプを使用することをおすすめします。この鍵タイプは、RFC 9180 で指定されているハイブリッド公開鍵暗号化(HPKE)標準を実装しています。HPKE は、鍵カプセル化メカニズム(KEM)、鍵導出関数(KDF)、関連データを伴う認証付き暗号化(AEAD)アルゴリズムで構成されます。

DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM では、具体的に以下を使用します。

  • KEM: HKDF-SHA-256 を使用して Curve25519 で Diffie–Hellman を行い、共有シークレットを導出します。
  • KDF: HKDF-SHA-256(センダーとレシーバーのコンテキストを取得します)。
  • AEAD: HPKE 標準に従って生成された 12 バイトのノンスを持つ AES-256-GCM。

サポートされているその他の HPKE キータイプは次のとおりです(ただし、これらに限定されません)。

  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
  • DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM

KEM、KDF、AEAD のアルゴリズムの選択について詳しくは、RFC 9180 をご覧ください。

現在は推奨されていませんが、Victor Shoup の ISO 18033-2 標準で説明されているように、Tink は ECIES の一部のバリエーションもサポートしています。サポートされている ECIES 鍵タイプの一部を以下に示します。

  • ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256

最小限のプロパティ

  • 平文とコンテキスト情報は任意の長さ(0..232 バイトの範囲内)にすることができます。
  • 適応型の選択暗号テキスト攻撃から保護
  • 楕円曲線ベースのスキームでの 128 ビット セキュリティ

サンプル ユースケース

データを交換したいをご覧ください。