混合型加密基本功能結合對稱加密的效率與公開金鑰 (非對稱式) 密碼編譯的便利性。任何人都可以使用公開金鑰加密資料,但只有知道私密金鑰的使用者才能解密資料。
針對混合型加密,傳送者會產生新的對稱金鑰,用於加密每則訊息的明文並產生密文。該對稱金鑰會與收件者的公開金鑰封裝。如果是混合解密,對稱金鑰會由接收者「淘汰」,然後用於解密密文來復原原始明文。如要進一步瞭解如何儲存或傳送密文以及金鑰封裝,請參閱 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 位元安全防護機制,適用於橢圓曲線配置
範例用途
請參閱「交換資料」。