我如何对加密算法进行逆向工程?

时间:2009-06-12 19:37:46

标签: encryption encoding reverse-engineering

我写了一个以这种方式加密文本的应用程序:

  1. 获取输入文字

  2. 撤消文字

  3. 转换为十六进制

  4. 带钥匙的XOR

  5. Base64编码

  6. 现在,我自己并没有进行大量的加密/编码,所以我的问题可能听起来很愚蠢,但是,我说我得到的文件中包含上述算法的内容而且我不知道这个算法。如何开始“打破”文本,是否有任何指导方针,原则,规则可以遵循?

    我的问题与这5个步骤无关,这是一个纯粹的例子。

    作为另一个例子,取文字:A751CD9E1F99。我该如何开始调查这可能意味着什么?

11 个答案:

答案 0 :(得分:17)

为了打破密码,密码分析师使用他们可以收集的所有信息。根据已知情况,攻击分为多个类别。从最难到最简单的一些主要攻击是

  • 仅限密文:这是最难的攻击。分析师试图收集尽可能多的加密消息,并分析它们以寻找符号频率的模式或偏差。然而,有了好的现代密码,没有模式。如果使用得当,这是不可行的。
  • known-plaintext:明文对应一些密文是从新密文中恢复未知明文的重要一步。这就是“逆向工程”真正开始的地方,因为他可以根据已知的输入和输出来测试他关于算法的假设。在第二次世界大战中,密码分析师努力建立广泛的“婴儿床”列表 - 这些词可能出现在敌人的消息中 - 利用已知的明文攻击。例如,特定日期的天气状况或战斗地点等可能会以加密消息的形式报告给总部。
  • selected-plaintext:更好的是当密码分析师可以诱骗他的敌人加密由密码分析师创建的消息时。在战争时期,有时会向敌人泄露虚假信息,希望它会被加密并帮助密码分析师破解密码。
  • 自适应选择明文:这是一种已知明文的迭代方法。密码分析者可以反复让系统加密他选择的明文,并查看结果以调整他的下一次尝试。

如今,破解代码的可能方法是通过系统中的缺陷。例如,可能会使用糟糕的密钥管理,从而导致密钥被盗或被猜到。在其他情况下,可能会使用“旁道”攻击。例如,通过仔细测量某些加密操作所花费的时间,攻击可能能够猜测密钥的某些位或字节为零,从而导致通过某种算法的快速路径。

光谱的“锡箔帽”附近靠近intercept radio emissions from computing equipment.的方法这允许远程代理“看到”显示器上显示的内容。甚至还有特别设计的字体来试图破坏这种窃听。

答案 1 :(得分:7)

基本上,这种加密对于decypher来说是合理的。 base64编码很容易识别。 (您将只使用64个字符,这是Base64的典型字符。) 接下来是找到原始XOR密钥的步骤。这有点难,但有几种算法可以检测到这些密钥,如果有足够的加密数据可用。你的简单文本是不够的,但如果他们知道它应该变成十六进制字符串,那么事情会变得容易多了。 然后他们会改变你的其他步骤。所有这些都太容易了。

如果可能的话,如果黑客在加密之前知道原始值,它应该能够破解。在这种情况下,尽管您用来对字符串进行异或的密钥可能不完全已知,但是与提供的字符串一样短的字符串可能足以至少发现您的完整加密例程。

好的,让我们尝试解密A751CD9E1F99 ... 12个字符。您似乎只使用了几个字符,因此它看起来只是一些十六进制字符串。原件必须是6个字符。值将在0x51到0xCD的范围内,这对于base64编码来说太大了。此外,由于大多数值都高于0x7F,这表明你已经对它进行了一些编码。字典攻击已经可以在所使用的XOR键中提供一些洞察力,其中您将6个十六进制值与6个字符的大量单词进行异或运算,以查看哪个字符串返回另一个单词。似乎返回有效单词的那些可能是您用来对原始文本进行异或的密钥。使用第二个加密字符串,可以再次使用这些发现的密钥,将可能的密钥集过滤到更小的集合。在现代系统中,这样的字典攻击可以在一天内返回结果。

大约50年前,这种加密方案将非常强大。如今,任何有兴趣尝试破译它的人都希望它能在一天之内被破解。

我不是破解加密的专家,但我知道哪些加密方法太弱而无法使用。大约10年前,我参与了一个项目,该项目使用像您这样的复杂XOR机制将密码存储在加密文件中。然后客户决定检查安全性并让专家调查密码文件。他只知道一个用户名和密码,该用户帐户没有管理权限。但是有足够的信息让他在一小时内破解安全性,阅读有关管理员帐户的信息,然后使用该信息来做他喜欢的任何事情。我的公司然后给他免费啤酒一个星期...... :-) 因此,10年前,专家需要一个小时。如今,他们正在相对轻松地破解更复杂的算法,仅仅因为计算机更强大。如果您必须使用这种加密,那么您也可以不使用加密。这对黑客来说并不重要。

答案 2 :(得分:5)

如果您知道如何解密它,您将能够尝试猜测算法。我可以创建许多算法,这些算法会为某些输入产生“A751CD9E1F99”。

现在,如果您有许多可用的输入/输出,您可以尝试仅更改一点输入,以查看输出会发生什么。良好的加密算法通常会导致较小输入变化的主要输出变化。

答案 3 :(得分:5)

我认为你应该先阅读The Code Book。您要问的是如何破解加密方法,这将使您了解它们的工作方式。

答案 4 :(得分:4)

Rubber-hose cryptanalysis可能非常有效。

答案 5 :(得分:3)

您需要更大的文本库,并且需要了解隐藏来自特定语言/域。然后,基于该语言/域中的单词的频率,可以潜在地从文本中解读某些属性。

当然,好的密码可以解决这个问题。使用这种方法只能很容易地破解实现不良的密码。

答案 6 :(得分:2)

Ciphertext indistinguishability是一个很好的页面,可以开始了解加密算法的设计目的是防止/防范。提到的攻击类型(例如IND-CPA)也可以为您提供有关您可以从哪些方面开始的线索。

答案 7 :(得分:0)

如果您可以访问加密的黑匣子,您可以通过输入特定的输入值来获取大量信息。

作为一个简单的例子,如果黑匣子进行“一次性打击”式加密,如果你全部为零,你就会得到一次性打击垫。 (实际上,为它提供任何输入值将获得带有额外xor的一次性填充。)

请注意,即使密码系统已知(但密钥不是),良好的密码系统也能抵御此类攻击。

答案 8 :(得分:0)

攻击者可能(通常)会执行以下操作:

识别并击败任何“可见的眼睛编码”或琐碎的加密,如反转文本,Base64编码,ROT13等。

当他们发现高熵状态时,他们会尝试获取更多的编码数据,并将它们混合在一起。这导致两个原始纯文本的异或,并且在编码确实基于XOR(如RC4)并且密钥是常量的情况下取消了密钥。如果攻击者可以获取任何纯文本编码的数据组合,则所有其他编码数据都是可解码的。

在最后的绝望中,他们可能会尝试针对大多数常见做法进行测试,例如他们使用RC4或其他带有动态密钥的简单算法,并将密钥放在文件/数据的末尾或开头。

如果他们只能访问编码文本,那么这就是道路的终点。如果他们可以访问..就像一个API,他们可以生成提供的纯文本的编码版本,那么他们将轻松识别它是否基于位(如XOR),或阻塞密码,或前馈块cypther编码,但获得密钥和实际算法仍然是一个问题。

如果他们可以访问用于对称密钥编码的解码程序(如您的XOR)或非对称密钥编码的编码程序,则编码很可能通过反转来立即失败。

答案 9 :(得分:-1)

这有点不可能,如果您对使用的密钥没有任何了解,那么您在XOR解密时会失败。

在一般情况下,甚至更不可能(如果可能:) :)来衡量加密字符串的含义。

答案 10 :(得分:-2)

呃......我会说:

  1. Base64解码输出。
  2. 使用输入对输出进行XOR以获取密钥。
  3. 我假设因为这是一个简单的加密算法,如果您知道输入和输出,而不是密钥,应该很容易以这种方式反转。