【问题标题】:Decrypting AES String without knowing how it was encrypted在不知道如何加密的情况下解密 AES 字符串
【发布时间】:2020-06-27 12:02:39
【问题描述】:

我有一个要解密的 AES 加密字符串(来自已停产应用的用户备份)。

我有什么:

json 文件:

  • 密钥是使用 PBKDF2 创建的信息
  • 加密字符串

我知道创建备份的密码,可能也是 PBKDF2 的密码

有没有办法找出字符串被加密的参数?即密钥是如何创建的

有没有简单的方法来解密字符串?

【问题讨论】:

  • 首先您需要应用程序对其进行反转并提取参数,例如 PBKDF2 的迭代和使用的哈希算法。没有这些知识,这比在干草堆里找一根针还要糟糕。如果任何商店都不再提供该应用程序,请四处询问。通常有人仍然在某处存储应用程序的副本。
  • 对应用程序进行逆向工程很可能超出了我的能力范围。
  • 我投票决定将此问题移至 security.stackexchange.com。

标签: encryption aes


【解决方案1】:

幸运的是,对加密方法和密文(以及解密所需的其他信息)存储在文件中的方式进行逆向工程,比尝试破解用于派生加密密钥的密码要容易得多。由于您知道密钥的派生密码,因此可能会有希望。

json 文件中的加密字符串是否使用您识别的编码方法(例如十六进制或 base64)进行编码?如果是这样,那么当你解码加密字符串时,它是否正好是 128 位?

如果是这样,那么问题就变得简单多了,因为这意味着它只是一个 AES 加密块。这意味着您不必担心加密模式(例如 CBC、GCM、ECB、CTR 等)或 IV(如果它是 CBC 等分组密码模式)。

此外,如果 json 文件中包含有关 PBKDF2 函数输入的信息(例如迭代次数和/或哈希算法),这可能会有所帮助。

最后,它归结为试错法,在其中尝试您不知道的参数的不同值,直到找到 PBKDF2 函数的正确参数,生成正确的密钥,以解密密文。这也需要你对明文有所了解,才能知道何时解密成功。

当然,未知的参数越多,需要的试错次数就越多。如果在分配的时间和资源的情况下,反复试验的轮数是合理的,那么该过程可以以类似于https://security.stackexchange.com/questions/226935/write-a-python-or-c-program-to-guess-the-key/226950#226950 的方式自动化。

【讨论】:

  • 密文大小在11mb左右,原文是聊天记录,所以是纯文本。 The encrypted text looks like this: kyrsx2M4cPUkCnQprf+udyYJEcCOrRmQ0koCbdjIghK+QVHhUSOpBNdBC+RgX1c3W67qqb/Sppgxggb9PoyLvdnvhBi77qdLWmqFmS+9zFE2NWUW1Wp9qcNKctyyQ4WNJ2Zt02c+LeIw9zKF0CRTIt7gthC43DsaTPI9vEjfh75vpsdHir1T/+XA8O9aEDixNqGDJe0w32n8xk547oh ...and there is no other information about the way the key was generated in the json file.它只打算由应用程序读回,它知道它是如何创建的。
  • 不知道 1) PBKDF2 函数中用于从密码中导出密钥的参数,2) AES 密钥长度,3) 使用的 AES 模式,以及 4) 如何获取IV(假设像 AES-CBC 这样的分组密码模式) - 这里有很多可能的组合。我并不是说这是不可能的,但您需要分配大量资源才能在任何合理的时间内找到正确的组合。我会尝试追踪该程序的旧版本,或者更好的是,开发人员。
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
相关资源
最近更新 更多