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

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

AEAD 具有下列屬性:

  • Secrecy:除了長度之外,系統不會知道任何有關明文的資訊。
  • 真實性:如果想變更密文底層的加密純文字,一定會遭到偵測。
  • 對稱式:使用相同金鑰加密明文和解密密文。
  • 隨機化:加密作業會隨機進行。兩則明文相同的訊息會產生不同的密文。攻擊者無法得知特定明文對應的密文。如要避免這種情況,請改用「Deterministic AEAD」。

相關資料

AEAD 可用來將密文繫結至特定相關聯資料。假設您有一個資料庫,其中包含 user-idencrypted-medical-history 欄位。在這種情況下,加密 encrypted-medical-history 時,user-id 可做為相關聯的資料。這可防止攻擊者將醫療記錄從一位使用者轉移給另一位使用者。

關聯資料為選用項目。如果指定了關聯資料,只有在加密和解密呼叫中傳遞相同的關聯資料時,解密才會成功。

選擇車鑰類型

雖然我們建議大多數使用者採用 AES128_GCM,但您可根據不同需求選擇各種金鑰類型。AES128 提供 128 位元安全性,AES256 則提供 256 位元安全性。

選擇模式時,有兩項重要的安全限制:

  1. QPS:使用相同金鑰加密的郵件數量。
  2. 郵件大小:郵件有多大?

支援的金鑰類型:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256、AES256_CTR_HMAC_SHA256) 搭配 16 位元組的初始向量 (IV) 是最保守的模式,且具有良好的界限。
  • AES-EAX (AES128_EAX、AES256_EAX) 的保守程度稍低,速度也比 AES128_CTR_HMAC_SHA256 快一點。
  • AES-GCM (AES128_GCM、AES256_GCM) 通常是最快的模式,但對訊息數量和訊息大小的限制最嚴格。如果超過明文和相關資料長度的限制 (如下),AES-GCM 會因洩漏明文和 AES-GCM 內部金鑰的驗證部分而嚴重失敗。
    • AES-GCM 並非穩固的 [ABN],也不是金鑰提交 [GLR]。您可以使用兩種不同的金鑰解密密文。這可能會導致實際攻擊 [DGRW]。如果金鑰是由攻擊者選取,請仔細檢查威脅模型。
  • AES-GCM-SIV (AES128_GCM_SIV、AES256_GCM_SIV) 的速度幾乎與 AES-GCM 相同。 訊息數量和訊息大小的限制與 AES-GCM 相同,但超出這些限制時,失敗的影響較小:可能只會洩漏兩個訊息相等的事實。因此比 AES-GCM 更安全,但實際應用較少。如要在 Java 中使用這項功能,請安裝 Conscrypt
  • 與 AES-GCM 相比,XChaCha20-Poly1305 (XCHACHA20_POLY1305) 的郵件數量和郵件大小限制高出許多,但如果失敗 (機率極低),也會洩漏金鑰資料。由於未採用硬體加速,因此在可使用硬體加速的情況下,速度可能會比 AES 模式慢。

進一步瞭解 AEAD 密文的線路格式

安全保障

AEAD 實作方式提供:

  • CCA2 安全性。
  • 驗證強度至少為 80 位元。
  • 能夠加密至少 232 封郵件,總共 250 個位元組。如果選擇最多 232 個明文或密文,攻擊成功機率不會超過 2-32

應用實例

請參閱「加密資料」和「將密文繫結至其內容」。