對稱密鑰加密中的初始化向量
我們可以在沒有初始化向量的情況下使用對稱密鑰算法嗎?
我正在製作一個應用程序,其中發送者和接收者共享一個密鑰,並且無法為每個加密創建一個初始化向量。所以我正在考慮
NULL
在加密時將初始化向量設置為。我可以將 IV 設置為 NULL 還是可以使用沒有初始化向量的對稱密鑰算法?
如果你真的不能使用 IV(為什麼?),那麼你能做的最好的事情就是使用類似SIV 模式 (RFC 5297)的東西。SIV 是一種“最大程度地防止誤用”的認證加密模式,具有以下特點:
- 如果每條消息都用唯一的nonce標記,SIV 提供完整的 IND-CCA2安全性(達到通常的限制;即它仍然會洩露消息的長度)。
- 沒有隨機數,只要同一消息從未被加密兩次(如果有的話,使用相同的關聯數據),SIV 就保持 IND-CCA2 安全。
- 如果一條消息在沒有隨機數(或意外重用隨機數)的情況下被加密兩次,攻擊者唯一能知道的是這兩條消息是相同的。
SIV 模式的缺點是它是一種兩遍加密模式:加密程式碼必須對消息進行兩次處理。因此,它最適合可以完全保存在記憶體中的相當短的消息。基本上,在第一次通過時,SIV 計算明文和任何相關數據(包括隨機數,如果提供)的安全消息驗證碼;在第二遍中,消息使用傳統的CTR 模式加密進行加密,第一遍的 MAC 用作“合成 IV”(模式名稱由此而來)。
此外,為了允許對消息進行解密(並驗證其真實性),128 位 MAC/IV 必須與消息一起傳輸。因此,SIV 為每條消息增加了不可避免的 16 字節成本,因此不適合格式保留加密。當然,每一種經過身份驗證的加密模式都是如此,事實上,每一種能夠提供語義安全的模式,無論是否經過身份驗證都是如此。
可能不安全,也不是你的意思。NULL IV 是完全不安全的。
有一些確定性加密方案用於可搜尋加密、重複數據刪除/收斂加密和密鑰包裝等。他們洩露了大量有關您正在加密的基礎文件的數據。一般來說,它們對於一般用途是不安全的。不要使用它們。
有些系統不使用 IV,但使用其他東西。IV 必須是不可預測的和唯一的。因此,您必須在每條消息中發送一個新消息。nonce 是 number used once 的縮寫,唯一的要求是它只能使用一次。這是可以預見的。OCB 和計數器模式都只需要一個隨機數。例如,您可以在密鑰的兩端保留一個計數器,並每次都將其遞增以導出您的隨機數。
但是,必須非常小心以確保您不會重複使用 nonce(即,如果您的計數器不同步或其他原因)。在實踐中,將明文隨機隨機數/IV 附加到密文的前面並發送它更容易。為什麼在你的情況下這是不可能的?你的密文長度有限制嗎?