串流 AEAD 原始功能可為串流資料提供經過驗證的加密功能。當要加密的資料過大,無法在單一步驟中處理時,這項功能就很實用。常見用途包括加密大型檔案或即時資料串流。
加密作業會以區段進行,這些區段會綁定在密文內的特定位置,且無法移除或重新排序。一個密文的片段無法插入另一個密文。如要修改現有的密文,必須重新加密整個資料串流。1
解密速度快,因為系統只會一次解密及驗證部分密文。您不必處理整個密文,即可取得部分明文。
串流 AEAD 實作符合 AEAD 定義,且為 nOAE 安全。其屬性如下:
- Secrecy:除了長度之外,沒有人知道明文的任何內容。
- Authenticity:系統會偵測出加密文字底層的加密明文是否遭到竄改。
- Symmetric:使用相同的金鑰加密明文和解密密文。
- 隨機化:加密方式為隨機。兩則含有相同明文的訊息會產生不同的密文。攻擊者無法得知哪個密文對應至特定明文。
相關資料
您可以使用串流 AEAD 基本元素,將密文繫結至特定關聯資料。假設您有一個包含 user-id
和 encrypted-medical-history
欄位的資料庫:在這種情況下,user-id
可用於加密 encrypted-medical-history
時做為關聯資料。這可防止攻擊者將醫療記錄從一位使用者轉移至另一位使用者。
選擇金鑰類型
我們建議您在大多數情況下使用 AES128_GCM_HKDF_1MB。一般而言:
- AES-GCM-HKDF
- AES128_GCM_HKDF_1MB (或 AES256_GCM_HKDF_1MB) 是較快的選項。可將 264 個檔案加密,每個檔案最多可達 264 位元組。在加密和解密程序中,系統會耗用約 1 MB 的記憶體。
- AES128_GCM_HKDF_4KB 會消耗約 4 KB 的記憶體,如果系統記憶體不多,這是不錯的選擇。
- AES-CTR HMAC
- AES128_CTR_HMAC_SHA256_1MB (或 AES256_CTR_HMAC_SHA256_1MB) 是較保守的做法。
安全性保證
串流 AEAD 實作項目提供:
用途範例
請參閱「我想加密大型檔案或資料串流」。
-
這項限制的原因是使用 AES-GCM 密碼。在相同位置加密不同的明文區段,等同於重複使用 IV,這會違反 AES-GCM 的安全保證。另一個原因是,這可防止回溯攻擊,攻擊者可能會嘗試還原先前版本的檔案,而不會被偵測到。 ↩
-
系統支援 232 個區段,每個區段包含
segment_size - tag_size
個純文字位元組。對於 1 MB 區段,純文字的總大小為 232 * (220-16) ~= 251 個位元組。 ↩ -
當衍生金鑰 (128 位元) 和 Nonce 前置字 (獨立的隨機 7 個位元值) 組合重複時,串流 AEAD 就會變得不安全。我們採用 184 位元碰撞抵抗力,如果希望成功機率低於 2-32,則大致等同於 264 則。 ↩