使用 XOR 組合幾個對稱密碼
我看過 Rüdiger Weis 的演講,他說你可以使用 XOR 組合兩個對稱密碼。據他說,如果只有一個密碼是安全的,這就足夠了。
他是怎麼做到的?我想過
ciphertext = twofish(message) XOR aes(message)
但我看不到接收者如何解密它,因為他不知道 twofish(message) 或 aes(message)。
我也想過
ciphertext = twofish(aes(message))
但是不涉及異或。那麼上述方法有什麼問題呢?
我已經看到了這個答案,但我認為它不再相關了。可能需要使用多個密碼來防禦 NSA 的大規模監視。
編輯:這兩個公式是我想出的。Rüdiger Weis 只說,“你可以組合密碼並且涉及 XOR”。
執行此操作的常用方法是將塊密碼轉換為流密碼。以這種方式,通過將明文與生成的密鑰流異或來生成密文。該密鑰流又由將分組密碼轉換為密鑰流的操作模式生成。其中有幾種模式,但最常使用 CTR 操作模式(無論如何在新協議中)。當然,您不需要為流密碼執行此操作。
現在你可以使用 $ C = P \oplus K^1 \oplus K^2 $ 在哪裡 $ C $ 是密文, $ P $ 是明文和 $ K^1 $ 是一個密碼的密鑰流,並且 $ K^2 $ 是另一個密碼的密鑰流。由於 XOR 是關聯和可交換的,您可以將其視為首先應用密鑰流 1 或密鑰流 2,然後再應用另一個。密鑰流將具有與明文相同的大小。
這類似於對明文應用兩個一次性填充。給定一個安全的分組密碼,使用 CTR 生成的密鑰流是安全的,但不是完全安全的。所以它與使用兩個一次性墊不同。與一次性填充的一個區別是 CTR 模式需要隨機數。不過,兩個流密碼都可以使用相同的隨機數。
與一次性填充相比,可以對流密碼進行密碼分析。這意味著密鑰流應該彼此充分獨立。因此,應該使用單獨的密鑰和密碼來創建流密碼。如果您使用相同的密鑰、IV 和密碼,那麼密鑰流將相互抵消,在加密後為您留下明文。
小流密碼介紹
對於流密碼,密鑰和隨機數與密碼一起使用以生成任意大小的密鑰流。通常在這個階段不需要明文作為輸入。然後密鑰流與明文進行異或。由於密鑰流對於攻擊者應該是隨機的,因此在沒有密鑰和隨機數的情況下應該不可能反轉此操作。解密與加密相同,如果使用分組密碼,那麼您可能只需要在一個方向(加密或解密)使用分組密碼。您可以通過以任何順序應用密鑰流來加密和解密,因為 XOR 操作是關聯和可交換的。