在不同的方案中使用相同的加密密鑰
使用相同的秘密加密密鑰使用兩種不同的算法加密可能相同的明文是否安全?這個問題與這個問題類似,只是它們使用 2 個鍵。更正式地說:
$ E_k(m) = E_{1,k}(m)||E_{2,k}(m) $
我知道,通過從提供的一個密鑰中生成更多的密鑰,這可以很容易地確保安全,例如,在預定義的明文上使用流密碼或通過使用預定義的前綴對密鑰進行散列。我想知道混合方案是否存在任何不明顯的問題。我懷疑可能存在,因為兩個密文一起為攻擊者提供了比每個密文單獨的更多資訊。
考慮一下。兩種方案都使用 512 位密鑰。第一次加密輸出一個密文,它是消息和密鑰前半部分的函式,與明文密鑰的後半部分連接。該方案本身是安全的,因為對安全至關重要的密鑰位是保密的。剩餘的位被認為是垃圾。第二次加密則相反,前半部分以明文形式輸出。一起,揭示了整個關鍵。
附帶說明一下,我知道不應將相同的 RSA 密鑰用於加密和身份驗證。GPG 使用單獨的密鑰。感覺是類似的問題。
我知道,通過從提供的一個密鑰中生成更多的密鑰,這可以很容易地確保安全,例如,在預定義的明文上使用流密碼或通過使用預定義的前綴對密鑰進行散列。
這將是基於密鑰的密鑰派生函式或簡稱 KBKDF 的任務。HKDF 就是這樣一個迅速取得進展的 KBKDF。也可以使用其他方法構造密鑰,但基本上您將創建簡化的 KDF。
所以通常最好使用 KDF 來派生每個單獨的密鑰。
我想知道混合方案是否存在任何不明顯的問題。我懷疑可能存在,因為兩個密文一起為攻擊者提供了比每個密文單獨的更多資訊。
正如您已經發現的那樣,很容易創建一組兩個理論密碼,其中重用密鑰是不安全的。但是,您可以採用一組非常不同的普通密碼。在這種情況下,您必須找到一個方程式,其中一個密碼會洩露有關另一個密碼的資訊,或者您必須從其中一個密碼中檢索密鑰(即破解它)。這裡沒有人會選擇兩個最終的 AES 候選人並打破這個計劃。
附帶說明一下,我知道不應將相同的 RSA 密鑰用於加密和身份驗證。GPG 使用單獨的密鑰。感覺是類似的問題。
現在你正在進入危險水域。與非對稱密碼的 AES 候選密鑰不同,它通常具有與算法相關的特定結構(例如 RSA)。因此,您可能只能將它們用於直接相關的算法。在這種情況下,很可能是您洩露了資訊,甚至可能洩露了密鑰。
對於將密鑰簡單地分成多個部分的密碼模式(當然,例如 SIV)也是如此。您不希望對這些操作模式進行任何密鑰重用。
請注意,除了理論問題外,還可能存在實際問題。許多 API 不允許您將一種特定類型的密鑰用作另一種。假設您在 HSM 中有一個 RSA 或 AES 密鑰。您不能僅將其用於任何其他算法。
聽起來您已經回答了自己的問題,但是我會嘗試提供替代方案。
假設您的第一個加密方案是一個替換密碼,它通過 key+4 移動每個字元。第二種方案通過 key-3 移動每個字元。如果您使用相同的密鑰和明文,攻擊者現在有額外的資訊來開始密碼分析。他們知道密鑰可以同時使用 +4 和 -3。
當然,使用 AES 或其他更高級的密碼,它會復雜得多,但我相信這說明了主要問題。