【问题标题】:How can I recover the key from RIJNDAEL 128?如何从 RIJNDAEL 128 恢复密钥?
【发布时间】:2016-02-23 01:19:55
【问题描述】:

我有这样的代码:

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

另外,我有 $result 和 $plain_text 的值。

有什么方法可以恢复 $key 吗?

【问题讨论】:

标签: php security cryptography rijndael


【解决方案1】:

您无法从直接密码分析中恢复密钥。

您可以使用已知明文攻击来关联已知/重复的密文,尤其是在重复使用 ECB 模式的情况下。您可以使用 Vaudenay 的 CBC 填充预言攻击来一次解密一个字节的消息(通过选择的密文攻击)。您可以利用 CTR 模式 nonce 重用从密文中恢复明文。

你不能简单地恢复给定明文和密文的密钥。

边信道攻击,例如cache-timing attacks against AES (PDF),允许攻击者恢复密钥。但是,如果您使用的是恒定时间 AES(即由 AES-NI 提供),那么这些都不适用。

【讨论】:

  • 请注意,Vaudenay 的 CBC padding oracle 攻击仅适用于 CBC 模式,并且仅当解密方法返回填充错误时,它不应该,这将是一个实现错误。
  • 对。我试图说明的观点是:这些攻击都无法恢复密钥。 :)
  • 确实没有人恢复密钥,这是一个有效且重要的观点。我的问题是,我经常看到“CBC padding oracle”被抛出,好像只需要使用 CBC 模式就足够了,而实际上开发人员还必须有一个实现错误。
猜你喜欢
  • 2016-05-26
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多