Aes

AES ECB 和 CBC 模式在保護靜態數據方面的相對優點

  • November 19, 2012

我需要在大型機數據庫(即“靜止”)中安全地儲存數百萬支付卡號 (PCN)。我假設任何攻擊者都可以訪問所有儲存的數據。

我假設有一個安全設備可以:

  • 儲存要用於所有 PCN 的唯一、恆定(“主”)密鑰
  • 如有必要,儲存一個唯一的常量 IV,用於使用主密鑰進行所有加密
  • 以 ECB 或 CBC 模式加密 (AES-256) 數據
  • 在 ECB 或 CBC 模式下解密 (AES-256) 數據

以下可能的加密和解密選項的相對優點和缺點是什麼?:

  1. 在 ECB 模式下使用萬能鑰匙。我聽說/讀到這在密碼學上很弱(為什麼?)。
  2. 在 CBC 模式下使用萬能鑰匙和 IV。
  3. 在 PCN 中添加一個 16 字節、微秒或更精細的時間戳,然後在 CBC 模式下使用主密鑰和 IV。這意味著儲存一個額外的 16 字節密文塊,但這不是問題。解密時,只需丟棄生成的明文的前 16 個字節。
  4. (如果可用)同 (3),但讓設備提供 16 字節的偽 IV。
  5. 更好的東西(請註明)

額外的榮譽解釋了對在任何這些方案下加密的大量 16 位數字的可能攻擊。

我是新手,我知道新手很容易做出普通密碼學家會覺得可笑的東西,所以請保持溫和——我只是想學習。

我把它放在這裡,而不是在 security.SE 上,因為它看起來更合適;如果你們不同意,我將不勝感激,如果你們能遷移它,而不是關閉作為題外話。


如需進一步說明,請遵循@curious 的回答:

我在這裡包含 ECB 模式的原因是它可以讓我節省一半的儲存空間。由於消息只有一個塊長,我懷疑這可能會影響反對歐洲央行的“傳統”論點。

但我興趣了解是否存在任何特定漏洞:

  • 消息的熵相對較低(1E16 種可能性的消息空間,由 PCN 校驗和減少)
  • 使用固定的通用密鑰或密鑰+IV

在 ECB 模式下使用萬能鑰匙。我聽說/讀到這在密碼學上很弱(為什麼?)。

我在這裡包含 ECB 模式的原因是它可以讓我節省一半的儲存空間。由於消息只有一個塊長,我懷疑這可能會影響反對歐洲央行的“傳統”論點。

因為任何相同的明文都將加密為相同的密文值。除非每個明文只加密一次,否則在密鑰的整個生命週期內,您都會洩露有關明文的資訊。

對於任何真正希望保持其密文安全的密碼系統來說,ECB 模式應該是不可能的。

在 CBC 模式下使用萬能鑰匙和 IV。

這必須更好,但仍然很弱。但是,您必須使用與密碼相同塊大小的**加密隨機IV (AES-256 使用 128 位塊大小)。使用恆定 IV 基本上與 ECB 模式沒有區別,使用弱的、可預測的 IV 也好不了多少。

在 PCN 中添加一個 16 字節、微秒或更精細的時間戳,然後在 CBC 模式下使用主密鑰和 IV。這意味著儲存一個額外的 16 字節密文塊,但這不是問題。解密時,只需丟棄生成的明文的前 16 個字節。

您本質上是在發明自己的加密模式。這既不必要又非常危險。

更好的東西(請註明)

您幾乎肯定應該使用經過身份驗證的加密。例如,NaClcrypto_secretbox中的函式。如果你不能使用 NaCl,你可以在 EAX 或 GCM 模式下使用 AES,或者通過Encrypt-Then-MAC來近似你自己的(使用完全獨立的密鑰計算 HMAC ;例如,與你用來執行加密的密鑰不同) . 解密時,您必須要求 HMAC 與密文和 IV 一起發送,並且您必須在嘗試解密密文之前驗證 HMAC(使用恆定時間字元串比較算法)。這樣做的重點是剝奪攻擊者執行選擇密文攻擊的能力。

如果您不使用經過身份驗證的加密,並且攻擊者能夠向您發送然後解密的消息,那麼即使您不向他發送解密結果,攻擊者也幾乎可以肯定地讀取您的密文內容。這種性質的最令人擔憂的攻擊類型是CBC padding oracle 攻擊

如果您不使用恆定時間字元串比較算法,那麼攻擊者可以偽造有效的 HMAC,從而可以執行填充預言攻擊,從而獲取您的秘密數據。

從中得出的結論應該是加密是困難的。如果可能的話,請使用像 NaCl 這樣的高級庫,它已經對密碼學做出了正確的決定,並且已經由備受尊敬的密碼學家實施。

但我有興趣了解是否存在任何特定漏洞:

  1. 消息的熵相對較低(1E16 種可能性的消息空間,由 PCN 校驗和減少)
  2. 使用固定的通用密鑰或密鑰+IV

如果您正確使用密碼學,則消息本身的熵是無關緊要的。

例如,如果您使用 ECB 模式(或 CBC 模式中的常量 IV,這在密碼學上是等效的)並且攻擊者能夠提供自己的數據進行加密,那麼您的數據與被盜一樣好。攻擊者只需列舉可能的卡號(使用校驗和或特別常見的前綴,就像大多數信用卡一樣,大大減少了搜尋空間)並比較生成的密文。

同樣,如果您使用加密,如果您希望對您希望保護的數據的安全性提供任何現實的保證,則*必須正確執行此操作。*如果可能的話,你不應該在你嘗試的級別上處理加密——這是錯誤的抽象層。使用像氯化鈉這樣的東西。

引用自:https://crypto.stackexchange.com/questions/5405