串流 AEAD 原始物件為串流資料提供經過驗證的加密。當需要加密的資料過大,無法在單一步驟中處理時,這個功能就非常實用。常見用途包括加密大型檔案或即時資料串流。
加密是在區段中進行,系統會將其繫結至其位置在密文中的位置,且無法移除或重新排序。某個密文的區段無法插入其他密文。如要修改現有的密文,則必須重新加密整個資料串流1。
由於只有部分密文會一次解密及驗證,因此解密速度相當快。您不必處理整個密文,即可取得部分明文。
串流 AEAD 實作會完成 AEAD 定義,並且具有 OAE2 安全。這些元件具有以下屬性:
- 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 則訊息。↩