合成 IV(Synthetic IV,簡稱 SIV)是一個通常搭配 AES 使用的鑑別式密碼模式。

與 GCM 和 OCB 不同,即使你把同一個 nonce 用了兩次,SIV 仍然安全

若攻擊者拿到兩段以相同 nonce 加密的密文,他們只能學到「同一段明文是否被加密了兩次」

與 GCM 或 OCB 加密的訊息不同,攻擊者無法判斷兩則訊息的第一個區塊是否相同——因為加密所用的 nonce,是先由給定的 nonce 與明文組合計算出來的。

建構方式#

SIV 的規格比 GCM 更一般化。它不像 GCM 的 GHASH 那樣指定詳細的內部結構,而只是告訴你如何把一個密碼 E 與一個偽隨機函式 PRF 組合起來,得到一個鑑別式密碼

T = PRF(K₁, N ‖ P)        先算標籤
C = E(K₂, T, P)           再用 T 當作 E 的 nonce 加密

因此 SIV 需要兩把金鑰 K₁K₂ 與一個 nonce N

主要問題:不可串流#

換句話說,要用 SIV 加密一段 100GB 的明文,你必須先儲存那 100GB 的明文,SIV 加密才讀得到它。

規範與變體#

RFC 5297(基於 Rogaway 與 Shrimpton 2006 年的論文〈Deterministic Authenticated-Encryption〉)規範 SIV 使用 CMAC-AES(以 AES 為基礎的 MAC 建構)作為 PRF,並使用 AES-CTR 作為密碼。

2015 年有人提出一個更有效率的 SIV 版本:GCM-SIV

它結合了 GCM 快速的 GHASH 函式與 SIV 的模式,速度幾乎與 GCM 一樣快

但與原始的 SIV 一樣,GCM-SIV 仍然不可串流。(詳見 https://eprint.iacr.org/2015/102/ 。)