2016-02-23 90 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