我编写了一个以这种方式加密文本的应用程序:
获取输入文本
反转文本
转换为十六进制
与密钥进行异或
Base64 编码
现在,我自己并没有做很多加密/编码,所以我的问题可能听起来很愚蠢,但是,假设我得到一个包含上述算法内容的文件,而我不知道这个算法。一个人将如何开始“破坏”文本,是否有任何指导方针、原则和规则可以遵循?
我的问题与这 5 个步骤无关,这是一个纯粹的例子。
作为不同的示例,以文本:A751CD9E1F99 为例。我将如何开始调查这可能意味着什么?
我编写了一个以这种方式加密文本的应用程序:
获取输入文本
反转文本
转换为十六进制
与密钥进行异或
Base64 编码
现在,我自己并没有做很多加密/编码,所以我的问题可能听起来很愚蠢,但是,假设我得到一个包含上述算法内容的文件,而我不知道这个算法。一个人将如何开始“破坏”文本,是否有任何指导方针、原则和规则可以遵循?
我的问题与这 5 个步骤无关,这是一个纯粹的例子。
作为不同的示例,以文本:A751CD9E1F99 为例。我将如何开始调查这可能意味着什么?
为了破解密码,密码分析员使用他们可以收集的所有信息。攻击分为许多类别,具体取决于已知的内容。一些主要的攻击,从最难到最简单,是
如今,破解密码的可能方法是通过系统中的缺陷。例如,可能会使用不良的密钥管理,从而导致密钥被盗或被猜到。在其他情况下,可能会使用“旁道”攻击。例如,通过仔细测量某些加密操作所需的时间,攻击可能会猜测密钥的某些位或字节为零,从而导致通过某些算法的快速路径。
频谱的“锡箔帽”端附近是拦截计算设备无线电发射的方法。这允许远程代理“看到”监视器上显示的内容。甚至有专门设计的字体来尝试破坏这种窃听。
基本上,这种加密方式很容易解密。base64 编码将相当容易识别。(您将只使用 64 个字符,这是 Base64 的典型特征。)接下来是查找原始 XOR 键的步骤。这有点困难,但如果有足够的加密数据可用,有几种算法可以检测这些密钥。你的简单文本是不够的,但如果他们知道它应该变成一个十六进制字符串,事情就会变得容易得多。然后他们确实扭转了你的其他步骤。所有这些都太容易了。
如果可能的话,如果黑客在加密之前知道原始值,它应该能够破解。在这种情况下,与提供的字符串一样短的字符串至少足以发现您的完整加密例程,尽管您用于对字符串进行异或的密钥可能并不完全已知。
好吧,让我们尝试解密 A751CD9E1F99... 12 个字符。您似乎只使用了几个字符,因此它似乎只是一些十六进制字符串。原件必须是 6 个字符。值将在 0x51 到 0xCD 的范围内,这对于 base64 编码来说太大了。此外,由于大多数值都高于 0x7F,这表明您已经对其进行了一些编码。字典攻击已经可以对所使用的 XOR 键提供一些见解,您可以将 6 个十六进制值与大量 6 个字符的单词进行 XOR,以查看哪个返回字典中的另一个单词。似乎返回有效单词的那些可能是您用来异或原始单词的键。使用第二个加密字符串,可以再次使用那些发现的密钥,将可能的密钥集过滤成更小的集合。在现代系统中,
大约 50 年前,这种加密方案将非常强大。如今,希望它在一天之内被任何有兴趣尝试破译它的人破解。
我不是破解加密的专家,但我知道哪些加密方法太弱而无法使用。大约 10 年前,我参与了一个项目,该项目使用像您这样的复杂 XOR 机制将密码存储在加密文件中。然后,一位客户决定检查安全性,并让专家仅调查密码文件。他只知道一个用户名和密码,并且该用户帐户没有管理权限。但这足以让他在一小时内破解安全性,阅读有关管理员帐户的信息,然后使用该信息做任何他喜欢的事情。然后我的公司给了他一周的免费啤酒...... :-) 因此,10 年前,专家只需要一个小时。如今,他们正在相对轻松地破解更复杂的算法,仅仅因为计算机功能更强大。如果您必须使用这种加密,那么您也可以不使用加密。对于黑客来说,这并不重要。
如果您知道如何解密,您将能够尝试猜测算法。我可以创建许多算法,这些算法会导致某些输入为“A751CD9E1F99”。
现在,如果您有许多可用的输入/输出,例如,您可以尝试只更改一点输入以查看输出会发生什么。良好的加密算法通常会导致较小的输入更改导致较大的输出更改。
我认为您应该从阅读The Code Book开始。您要问的是如何破解加密方法,这将使您开始了解它们的工作原理。
橡胶软管密码分析可能非常有效。
您将需要比这更大的文本库,并且需要了解地穴来自特定语言/域。然后根据该语言/领域中单词的频率,可以潜在地破译文本中的某些属性。
当然,好的密码可以解决这个问题。使用这种方法只能轻松破解实现不佳的密码。
密文不可区分性是一个很好的页面,可以帮助您了解加密算法旨在防止/防御的内容。提到的攻击类型(例如 IND-CPA)也可以为您提供有关可以从什么开始的线索。
攻击者可能(通常)会执行以下操作:
识别并击败任何“肉眼可见的编码”或琐碎的加密,如文本反转、Base64 编码、ROT13 等。
当他们发现高熵状态时,他们会尝试获取更多的编码数据,并将它们异或在一起。如果编码确实是基于 XOR(如 RC4)并且密钥是恒定的,这会导致两个原始纯文本的 XOR-ing 与密钥被取消。如果攻击者可以获取任何纯文本编码的数据组合,则所有其他编码数据都是可解码的。
在最后绝望时,他们可能会尝试针对最常见的做法进行测试,例如他们使用 RC4 或其他带有动态密钥的简单算法,并将密钥放在文件/数据的末尾或开头。
如果他们只能访问编码文本,这几乎就是路的尽头。如果他们可以访问.. 像 API,他们可以在其中生成提供的纯文本的编码版本,那么他们将轻松识别它是基于位(如 XOR)、块密码还是前馈块密码编码,但获取密钥和实际算法仍然是一个问题。
如果他们可以访问对称密钥编码的解码程序(如您的 XOR),或非对称密钥编码的编码程序,则编码很可能会立即被逆转而失败。
如果您可以访问进行加密的黑匣子,则可以通过为其提供特定的输入值来获取大量信息。
举个简单的例子,如果黑匣子进行“一次性密码”式加密,如果您将其全部输入零,您将获得一次性密码。(事实上,给它提供任何输入值都会让你得到一个带有额外异或的一次性填充。)
请注意,即使密码系统已知(但密钥未知),好的密码系统也能抵抗此类攻击。
那是不可能的,如果您对使用的密钥一无所知,您将在 XOR 解密中失败。
在一般情况下,更不可能(如果可能的话:))来衡量加密字符串的含义。
错误...我会说:
我假设由于这是一个简单的加密算法,如果您知道输入和输出,但不知道密钥,那么应该很容易以这种方式反转它。