2016-02-23 88 views
1

我有這樣的代碼:如何從RIJNDAEL 128恢復密鑰?

$result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plain_text, "ecb"); 

另外,我有結果和$ plain_text的$值。

有什麼辦法可以恢復$ key嗎?

+2

這將是對aes的純文本攻擊,請參閱http://crypto.stackexchange.com/questions/1512/why-is-aes-resistant-to-known-plaintext-攻擊 – VolkerK

+1

除非您有密鑰,至少在這十年你不會強制執行A​​ES 128。 – Matt

+1

或者請參閱:http://security.stackexchange.com/questions/5355/compute-the-aes-encryption-key-given-the-plaintext-and-its-ciphertext – duskwuff

回答

0

您無法從直接密碼分析中恢復密鑰。

您可以使用已知明文攻擊來關聯已知/重複的密文,特別是在ECB模式被重用的情況下。您可以使用Vaudenay的CBC填充oracle攻擊一次解密一個字節的消息(通過選擇的密文攻擊)。您可以利用CTR模式隨機重用來從密文中恢復明文。

你不能簡單地恢復給定明文和密文的密鑰。

還有旁道攻擊,如cache-timing attacks against AES(PDF),它允許攻擊者恢復密鑰。但是,如果您使用恆定時間AES(即由AES-NI提供),那麼這些都不在表格中。

+1

請注意,Vaudenay的CBC填充oracle攻擊僅適用對於CBC模式,並且只有當解密方法返回填充錯誤時,它纔不會,這將是一個實現錯誤。 – zaph

+0

對。我試圖提出的觀點是:這些攻擊都不能恢復密鑰。 :) –

+0

確實沒有恢復密鑰,這是一個有效和重要的一點。我的問題是,我經常看到「CBC填充甲骨文」經常出現,就好像只是使用CBC模式一樣,實際上開發人員也必須有一個實現錯誤。 – zaph