帶有隨機 IV 的 AES-256-CBC - 將相同的明文儲存為相同的密文
我正在加密儲存在 MySQL 數據庫列中的一些資訊。該列可以包含重複值,假設該表有 7 行,要加密的列具有以下值:
"a", "b", "a", "c", "b", "b", "c"
我想知道對每個不同的值僅加密一次(每個值都與密文一起儲存一個隨機IV)並為相同的明文重用相同的密文是否不安全。
假設用隨機IV(IV1)加密“a”得到“z”,用另一個隨機IV(IV2)加密“b”得到“x”,用另一個隨機IV加密“c”( IV3) 給出“k”。將所有“a”加密為“z”,所有“b”加密為“x”,所有“c”加密為“k”是否不安全?
"z", "x", "z", "k", "x", "x", "k"
我經常讀到對於相同的明文具有相同的密文是一個弱點,但我想知道如果您每次都使用隨機 IV 加密數據,這個弱點是否不再存在。
謝謝你的幫助。
我經常讀到對於相同的明文具有相同的密文是一個弱點,但我想知道如果您每次都使用隨機 IV 加密數據,這個弱點是否不再存在。
弱點仍然存在。如果對於相同的明文,您在加密時生成了不同的隨機 IV,則會減輕這種情況。對相同的明文使用不同的 IV 會產生不同的密文。
為什麼你想要不同的密文?考慮這樣一個場景,您有一個包含兩列的數據庫,一個 VARCHAR
username
和一個 BOOLEANhas_some_horrible_disease
。假設您has_some_horrible_disease
出於隱私目的使用您描述的方案對列進行加密。有一天,攻擊者破壞了數據庫並可以訪問所有數據。假設攻擊者知道username
“johnsmith”的值為“true”has_some_horrible_disease
(這並不牽強,他們所要做的就是例如創建一個帳戶並將他們的數據設置為目標值)。問題是您剛剛洩露了
has_some_horrible_disease
每個使用者的值!為什麼?因為使用者“johnsmith”的加密值對於has_some_horrible_disease
設置為“true”的每個其他使用者都是相同的。換句話說,存在從加密值到明文值的一對一映射。如果您使用隨機 IV,則情況並非如此,其中的每個值has_some_horrible_disease
對於該行都是唯一的(機率極高)。