使用 aes-256-cbc 解密具有相同 IV 的相同消息
在解密完全相同的加密消息時使用相同的 IV 是否安全?據我了解,當對大量不同的消息使用相同的 IV 時存在安全漏洞,因為攻擊者可以推斷出模式。
aes-256-cbc 也是此場景的正確加密方法和模式。如果不是,哪些更好?
首先,IV 是在加密時確定的,您必須使用與加密期間相同的 IV 進行解密。因此,問題實際上應該是關於用相同的 IV 加密相同的消息而不是關於解密。
在 CBC 模式下,對不同的消息使用相同的 IV 和相同的密鑰可以幫助您檢測消息中遇到第一個不同塊後發散的公共前綴。這就是為什麼使用相同的 IV 在語義上永遠不安全,因為您可以很容易地看到消息的分歧之處,即即使您不允許重複消息,資訊也會洩露。回到問題,同樣地,對同一條消息使用相同的 IV 和密鑰總是會產生相同的密文,因此您可以很容易地看到重複的密文加密消息。如果您可以接受這麼多的資訊披露,那沒關係,但可能不是每個人都可以接受。
在這種情況下沒有“正確”的加密模式,這取決於您想要什麼類型的安全性,並且了解所涉及的風險很重要。CBC 模式有一些缺陷,不應該在未經身份驗證的情況下使用。它很容易受到位翻轉攻擊(密文上的翻轉位會在下一個塊中產生可預測的變化)並且如果應用程序在目標塊之前接受隨機塊或者它是第一個塊(在這種情況下你可以實現通過位翻轉IV相同)。同樣,它可能容易受到填充預言機攻擊,具體取決於它使用的系統類型以及它有意或無意透露的資訊類型。我最好的建議是使用經過身份驗證的加密模式,如 GCM 或 GCM-SIV。
在 CBC 模式下對不同的消息使用相同的 IV 不會像在 CTR 或 OFB 或 GCM 模式下那樣糟糕(對於這些,後果可能是毀滅性的)並且在這些模式下對相同的消息使用相同的 IV 會帶來同樣的問題,由於重複密文而導致的重複消息的檢測,這完全取決於它們是否可以接受。