我编写了一款这样加密文本的应用程序:
获取输入的文本
翻转文本
转换为十六进制
与密钥异或
进行Base64编码
现在,我没有进行过很多加密/编码,所以我的问题可能听起来有些愚蠢,但假设我得到一个具有上述算法内容的文件,而我并不知道这个算法。如何开始"破解"文本?是否有任何指南、原则或规则可供遵循?
我的问题不限于这五个步骤,那只是一个纯粹的例子。
另一个例子,假设文本为:A751CD9E1F99。我该如何开始破译它的含义?
我编写了一款这样加密文本的应用程序:
获取输入的文本
翻转文本
转换为十六进制
与密钥异或
进行Base64编码
现在,我没有进行过很多加密/编码,所以我的问题可能听起来有些愚蠢,但假设我得到一个具有上述算法内容的文件,而我并不知道这个算法。如何开始"破解"文本?是否有任何指南、原则或规则可供遵循?
我的问题不限于这五个步骤,那只是一个纯粹的例子。
另一个例子,假设文本为:A751CD9E1F99。我该如何开始破译它的含义?
如果你知道如何解密,就可以尝试猜测算法。我可以创建许多算法,使某些输入的结果为“A751CD9E1F99”。
现在,如果你有许多输入/输出可用,你可以尝试稍微改变一下你的输入,看看输出会发生什么,例如。好的加密算法通常会对微小的输入变化产生重大的输出变化。
如果您想要破译某个密文,需要拥有比这更大的文本库,并且对该密文所属的特定语言/领域有一定的了解。然后根据该语言/领域中单词的频率,可能可以从文本中解密出某些属性。
当然,好的加密方法可以避免这种情况。只有实现不良的加密方法才能轻易地通过此方法破解。
攻击者通常会执行以下操作:
识别和打败任何“肉眼可见的编码”或琐碎的加密,例如文本反转、Base64编码、ROT13等。
当他们发现高熵状态时,尝试获取更多的编码数据片段,并将它们进行异或运算。如果编码确实是基于异或(如RC4)且密钥是恒定的,则结果是两个原始明文与密钥相互抵消。如果攻击者可以获得任何明文-编码数据组合,则所有其他编码数据都可以解码。
在最后绝望的情况下,他们可能会尝试测试最常见的实践,例如使用RC4或其他简单算法和动态密钥,在文件/数据的末尾或开头放置密钥。
如果他们只能访问编码文本,则这几乎是无路可走的。如果他们有访问权限,例如可以生成提供的明文的编码版本的API,则他们将轻松识别其是否为基于位(如XOR)、块密码或前馈块密码编码,但获取密钥和实际算法仍然是一个问题。
如果他们可以访问对称密钥加密的解码程序(比如XOR),或非对称密钥加密的编码程序,那么编码很可能会被立即破解。如果您可以访问执行加密的黑盒,您可以通过提供特定的输入值来获取大量信息。
举个简单的例子,如果黑盒执行“一次性密码本”式的加密,如果您提供全零输入,则可以获得一次性密码本。(实际上,提供任何输入值都将获得带有额外异或的一次性密码本。)
请注意,即使已知加密系统(但未知密钥),好的加密系统也会抵御此类攻击。
这有点不可能,如果你不知道使用了什么密钥,你会在XOR解密中失败。
一般情况下,甚至更加不可能(如果可能的话:))去判断一个加密字符串可能意味着什么。