「關聯資料的驗證加密」(AEAD) 基元是資料加密最常見的基本方法,適用於大多數需求。
AEAD 具有下列屬性:
- Secrecy:明文沒有已知的資訊,但長度除外。
- 真實性:在未偵測到的情況下,您無法變更加密明文的基礎密文。
- 對稱式:如要加密明文及解密密文,系統會使用相同的金鑰。
- 隨機化:加密作業會透過隨機方式進行。具有相同明文的兩則訊息會產生不同的密文。攻擊者無法得知哪個密文對應至指定明文。如要避免這種情況,請改用確定性 AEAD。
相關資料
AEAD 可用來將密文與特定相關資料建立連結。假設您有一個包含 user-id
和 encrypted-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。
範例用途
請參閱「加密資料」,以及根據結構定義繫結密文。