使用關聯資料進行驗證 (AEAD)

「關聯資料的驗證加密」(AEAD) 基元是資料加密最常見的基本方法,適用於大多數需求。

AEAD 具有下列屬性:

  • Secrecy:明文沒有已知的資訊,但長度除外。
  • 真實性:在未偵測到的情況下,您無法變更加密明文的基礎密文。
  • 對稱式:如要加密明文及解密密文,系統會使用相同的金鑰。
  • 隨機化:加密作業會透過隨機方式進行。具有相同明文的兩則訊息會產生不同的密文。攻擊者無法得知哪個密文對應至指定明文。如要避免這種情況,請改用確定性 AEAD

相關資料

AEAD 可用來將密文與特定相關資料建立連結。假設您有一個包含 user-idencrypted-medical-history 欄位的資料庫。在這種情況下,user-id 在加密 encrypted-medical-history 時可做為關聯資料使用。這可以防止攻擊者將病歷轉移到其他使用者。

選擇金鑰類型

雖然我們建議大部分的用途使用 AES128_GCM,但還是有各種金鑰類型能滿足不同的需求 (如要針對 256 位元安全性,將 AES128 替換為下方的 AES256)。 一般而言:

  • 採用 16 位元組初始化向量 (IV) 的 AES128_CTR_HMAC_SHA256 是具有良好邊界的最保守模式。
  • AES128_EAX 的保守程度略低,速度比 AES128_CTR_HMAC_SHA256 稍快。
  • AES128_GCM 通常是速度最快的模式,訊息數量和訊息大小最嚴格的限制。如果超過明文和相關資料長度 (如下所示) 的限制,AES128_GCM 就會失敗,並外洩金鑰內容。
  • AES128_GCM_SIV 的速度與 AES128_GCM 幾乎相同,對於大量訊息有極佳的範圍,但建構程度略有不同。如要在 Java 中使用這個功能,您必須安裝 Conscrypt
  • 與 AES128_GCM 相比,XChaCha20Poly1305 對訊息和訊息大小設下的侷限範圍遠超過 AES128_GCM,但即使失敗 (極少) 也會洩漏金鑰內容。並未使用硬體加速,因此在提供硬體加速的情況下,速度可能會比 AES 模式慢。

安全性保證

AEAD 導入提供以下功能:

  • CCA2 安全性。
  • 至少 80 位元驗證強度。
  • 能夠加密至少 232 則訊息 (總計 250 個位元組)。選擇最多 232 個明文或所選密文的情況下,沒有任何攻擊帶來的成功機率大於 2-32

範例用途

請參閱「加密資料」,以及根據結構定義繫結密文