加密中是否存在像散列函式那樣的衝突?
在雜湊函式中, $ h(m) = h(m_1) $ 被稱為碰撞並且非常不希望它們是可行的,因為它破壞了雜湊安全性。但是,在像分組密碼 (AES-256) 或 RSA 這樣的加密中是否存在本質上類似的問題?如果有明文密鑰對 $ m,k $ 產生一些密文,並且存在另一個密鑰,消息對 $ m_1, k_1 $ 這也會產生相同的密文,這與雜湊衝突本質上是否相似?給定兩對,然後您可以進行“密碼分析”和突破性密碼,“學習”兩者如何以相同的密文結尾。
另一件事是,這是否會引發諸如無法解密之類的問題,就像散列函式的不可逆性一樣,因為“無法從可能的原始輸入中進行選擇”(就像在一次性便箋中一樣)。
由於鴿洞原理,雜湊中發生碰撞。在散列中,輸入的大小大於輸出的大小。因此會發生碰撞,您無法阻止它。
這不是加密的情況。Encryption 的輸出總是至少與輸入的大小相同——因此鴿洞原則不適用。
此外,加密必須是一個可逆函式,不像散列是單向函式。所以任何標準的加密算法都不能有衝突,因為它會使逆轉過程(即解密)變得不可能。因此,只要您使用相同的加密密鑰,加密就不會發生衝突。
Enc(Plaintext1, key1) 永遠不等於 Enc(Plaintext2, key1)
塊密碼與不同密鑰的衝突
如果有明文密鑰對 $ m,k $ 產生一些密文,並且存在另一個密鑰,消息對 $ m_1,k_1 $ 這也會產生相同的密文,這與雜湊衝突本質上是否相似?
是的,它類似於雜湊衝突,如果使用相同的密鑰,則會出現攻擊案例,請參閱獎勵部分。對於不同的鍵,它不會顯示任何內容。
如果您使用的是 CTR(任何流媒體模式),那麼如果您有密文沖突,則不會顯示消息,因為
$$ m_1 \oplus o_1 = c_1 = c_2 = m_2 \oplus o_2 $$因為
$$ m_1 m_2 \oplus = o_1 \oplus o_2 $$即使您猜到了,這也不會顯示消息。
同樣,CBC模式將抵抗不同鍵下的碰撞。
密文沖突的可能性
假設我們用密鑰“morehotquestions”得到“fjydhpdag”對“月亮”進行 AES 加密。我們用密鑰“hotnetworkquestions”加密“sun”,也得到“fjydhpdag”。這甚至可能嗎?
如果我們認為 AES 是 PRP,那麼我們的條件與生日攻擊完全相同。兩個單塊具有相同密文的機率為 $ 1/2^{128} $ 對於歐洲央行塊。
由於 AES 是可逆的,因此更容易找到我們。考慮歐洲央行的簡單情況。由於 AES 是可逆的,因此獲取密文並使用兩個不同的密鑰對其進行解密。然後你會收到兩條不同的消息。當然,它們不一定有意義,這是查找/顯示它的簡單方法。
RSA-Sign 等簽名系統
簽名系統使用消息的雜湊值進行簽名。偽造攻擊者的方法之一需要對雜湊函式進行第二次原像攻擊。如果我們有惡意簽名者或簽名者的惡意秘書怎麼辦?假設他們使用即將發生衝突的 MD5(不要使用 MD5 和 SHA-1 進行簽名),那麼他們可以找到兩條具有相同雜湊值的消息。 $ h(m_1) = h(m_2) $ 和 $ m_1 \neq m_2 $ 那麼這兩個值$$ \operatorname{RSA-Sign}(h(m_1)) = \operatorname{RSA-Sign}(h(m_2)) $$是相同的。
始終使用 SHA-256、SHA-512、SHA-3、BLAKE2 等抗衝突加密雜湊函式來緩解這種攻擊。
獎勵部分:塊密碼與相同的密鑰衝突
是的,對此存在攻擊和擔憂;喜歡 Sweet32;
簡而言之,對於大小為 $ b $ , 如果你正在加密 $ 2^b $ 同一密鑰下的塊可能會在它的 CBC 模式的密文上發生衝突 $ c_i = c_j $ 和 $ i \neq j $ . 那是;
$$ m_i \oplus c_{i-1} = m_j \oplus c_{j-1} $$
然後使用CBC的屬性我們可以得到
$$ m_i \oplus m_j = c_{1-1} \oplus c_{j-1}. $$
正如我們所看到的,這只是被動攻擊者可以利用的明文塊的 x 或。
我只談到了 CBC 模式,但是頁面提到的更多,留下來調查類似於 CBC;
這在使用常見的操作模式時尤其重要:我們要求分組密碼的安全性高達 $ 2^n $ 查詢,但大多數操作模式(例如CBC、CTR、GCM、OCB等)是不安全的,超過 $ 2^{n/2} $ 消息塊(生日綁定)。
當然,我們幾乎不再使用 64 位塊大小的密碼。但是,如果您使用相同的密鑰加密太多數據,這種攻擊甚至是可能的。有人可能會說加密 $ 2^{64} $ 數據太多,我們不會加密這樣的大小。然後我們有一個更深層次的論點,50% 的生日攻擊對於攻擊者的優勢來說太多了,它遠不能忽略不計。他們甚至可以尋找更低的機率來揭示某些消息塊。你應該限制在 $ 2^{32} $ -block 以減少攻擊者的優勢。