混合式加密

混合型加密基本功能結合對稱加密的效率與公開金鑰 (非對稱式) 密碼編譯的便利性。任何人都可以使用公開金鑰加密資料,但只有知道私密金鑰的使用者才能解密資料。

針對混合型加密,傳送者會產生新的對稱金鑰,用於加密每則訊息的明文並產生密文。該對稱金鑰會與收件者的公開金鑰封裝。如果是混合解密,對稱金鑰會由接收者「淘汰」,然後用於解密密文來復原原始明文。如要進一步瞭解如何儲存或傳送密文以及金鑰封裝,請參閱 Tink 混合型加密傳輸格式

混合型加密具有下列屬性:

  • 密碼:除非有人能存取私密金鑰,否則無法取得已加密明文的任何相關資訊 (長度除外)。
  • 非對稱式:您可以使用公開金鑰加密密文,但如要解密,則必須使用私密金鑰。
  • 隨機:系統以隨機方式加密。具有相同明文的兩個訊息不會產生相同密文。這可以防止攻擊者知道哪個密文對應至指定明文。

Tink 採用的混合加密技術在 Tink 中會顯示為一對原始物件:

  • 使用 HybridEncrypt 進行加密
  • 用於解密的 HybridDecrypt

結構定義資訊參數

除了明文以外,混合式加密也接受額外的參數 context_info,這通常是從結構定義中隱含的公開資料,但應繫結至產生的密文。這表示密文可讓您確認背景資訊的完整性,但無法保證其安全性或真實性。實際背景資訊可以是空白或空值,但為了確保產生的密文正確解密,您必須提供相同的結構定義資訊值以進行解密。

具體實作混合型加密,可透過多種方式將背景資訊繫結至密文,例如:

  • context_info 做為 AEAD 對稱加密的關聯資料輸入 (請參閱 RFC 5116)。
  • 使用 context_info 做為 HKDF 的「CtxInfo」輸入 (如果實作使用 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:Curve25519 上的 Diffie–Hellman 使用 HKDF-SHA-256 衍生出共用密鑰。
  • KDF:HKDF-SHA-256 擷取傳送者和接收方的背景資訊。
  • AEAD:AES-256-GCM,以及根據 HPKE 標準產生的 12 位元組 Nonce。

其他支援的 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

雖然已不再建議使用,但 Tink 也支援某些 ECIES 變化版本,如 Victor Shoup 的 ISO 18033-2 標準所述。以下列出部分支援的 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 位元安全防護機制,適用於橢圓曲線配置

範例用途

請參閱「交換資料」。