串流 AEAD 原始功能可為串流資料提供經過驗證的加密功能。當要加密的資料過大,無法在單一步驟中處理時,這項功能就很實用。常見用途包括加密大型檔案或即時資料串流。
系統會分段加密,並將該區段繫結至密文中的其位置,因此無法移除或重新排序。來自一個密文的片段無法插入另一個密文。如要修改現有的密文,必須重新加密整個資料串流。1
解密速度快,因為系統只會一次解密及驗證密文的一部分。您不必處理整個密文,即可取得部分明文。
串流 AEAD 實作符合 AEAD 定義,且為 nOAE 安全。這些屬性包括:
- Secrecy:除了長度以外,任何明文皆無已知的資訊。
- 真實性:如果沒有偵測到,就無法變更基礎加密的明文。
- 對稱式:以相同的金鑰加密明文與解密密文。
- 隨機:加密方式為隨機。具有相同明文的兩則訊息會產生不同的密文。攻擊者無法得知哪個密文對應至特定明文。
相關資料
您可以使用串流 AEAD 將密文繫結至特定相關資料。假設您有一個資料庫,欄位為 user-id
和 encrypted-medical-history
。在這種情況下,user-id
可用於加密 encrypted-medical-history
時做為相關聯資料。這可防止攻擊者將醫療記錄從一位使用者轉移至另一位使用者。
選擇金鑰類型
我們建議您在大多數情況下使用 AES128_GCM_HKDF_1MB。一般而言:
- AES128_GCM_HKDF_1MB (或 AES256_GCM_HKDF_1MB) 是較快的選項。可將 264 個檔案加密,每個檔案最多可達 264 位元組。在加密和解密程序中,系統會耗用約 1 MB 的記憶體。
- AES128_GCM_HKDF_4KB 會消耗約 4 KB 的記憶體,如果系統記憶體不多,這是不錯的選擇。
- 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 則。↩