AES-ECB 选择具有长秘密的明文攻击

信息安全 加密 攻击 AES
2021-08-23 02:05:34

我在理解我正在做的加密练习的方法时遇到了一些麻烦。练习的目标是通过在 ECB 模式下对 AES 进行选择密钥攻击来恢复加密的秘密字符串。

我有一个 oracle 函数,它将字符串作为输入,将秘密字符串附加到它,并使用静态随机生成的密钥为其返回 AES-ECB-128 加密字符串。

oracle("text goes here!!") -> AES.encrypt("text goes here!!somesecretsomesecret", "staticrandomkey!")

我了解如何使用此处描述的方法获取密文的明文,并且已成功恢复 16 字节密文字符串。

我不明白的是,该方法如何应用于长度超过 16 个字节的秘密字符串?除非我遗漏了一些明显的东西,否则它只适用于恢复附加秘密的第一个块。

1个回答

我认为您已经在帖子中说过解决方案,但让我们重新指出一下。

  1. AES 使用 16 字节(128 位)的块大小
  2. 秘密附加到您选择的文本中。
  3. ???
  4. 一一找出秘密字符串的字符

如果这不是练习,我会提供更多详细信息...

编辑

找到前 16 个字节后,您需要做的就是:

完全一样的东西,但看看第二块!

解决方案...

  1. 获取第一个秘密块

输入 15 个字符并检索前 16 个编码字节然后输入 16 个字符更改最后一个字符,直到获得与前 16 个编码字节的 15 个字符相同的结果。第 16 个字符是你秘密的第一个字符。然后,您可以重复该过程,输入 14 个字符,然后找到具有相同技术的第二个秘密字符。

  1. 获得第二个秘密区块

您已经找到了前 16 个秘密字节。现在输入 15 个字符并找到第二个编码字节块的结果;字节 17 到 32。然后输入 32 个字符,只更改最后一个,直到找到秘密字符串中的第 17 个秘密字符。然后重复查找第 18 个字节,依此类推。