如何知道文件是否被解密

信息安全 蛮力
2021-09-04 21:33:56

对于学校,我必须做一个练习,我必须通过暴力攻击来解密文件。

有许多不同文件格式的不同文件。文件已使用 XOR 或凯撒算法加密。

我知道如何尝试所有可能的密钥来解密文件,但是,我怎么知道文件是否正在使用正确的密钥解密?

4个回答

如果您只是加密/解密文本,您真的不能。

如果您知道加密的字符串是“kdo”并且加密方法是凯撒移位,那么明文可以很容易地是“IBM”和“HAL”。您必须对纯文本“看起来像”有所了解。例如,如果你知道明文是 Stanley Kubrick 角色的名字,你就会很清楚它应该是哪一个。

如果字符串较长,则更容易缩小范围。与上面的三字符示例相比,大文本文件的可理解结果要少得多。但是您仍然需要确定它是否是自己解密的。

另一方面,如果您以某种特定格式(.docx 等)解密整个文件,如果解析程序(Word 等)可以读取该文件,则可以合理地确定该文件已解密。

您绝对可以不同程度地确定文件甚至字符串是否已成功解密。加密货币的大多数挑战都取决于它我已经开始制作一个用于密文暴力破解和分析的工具,可以自动完成这项任务。如果你想看看,你可以在这里找到它。
(它需要大量清理,不要评判我)

我最初在这个项目中的目标是使用简单的蛮力工具提高我在 CTF 加密挑战中的效率,但我开始着手实施更多分析。就目前而言,它可以暴力破解所有凯撒、单字节异或、atbash 和一些编码,重复键异或已开发但尚未集成。

现在的工作方式

  • 接受输入密文字符串或换行符分隔的密文字符串文件
  • 尝试使用支持的密码的整个密钥空间进行解密
  • 每次解密尝试后,对明文运行检测功能以确定解密的文本是否为英文
  • 显示最可能的猜测

使这个过程变得棘手的一件事是必须如何根据密文长度调整英语检测的阈值。它默认要求 60% 的明文是单词,75% 的明文是字母来注册匹配。在中长长度的明文(任何几个字符串上的任何内容)上,此设置很少给出误报,甚至更少出现误报。然而,当用于短长度的密文时,会弹出一些误报,并且会出现许多误报。在测试中,我不得不将阈值降低 30% 或更多以检测一些短字符串上的匹配,并且在此过程中产生更多误报,我必须筛选这些误报才能找到真正的匹配。

如果您有兴趣了解有关制作预言机和破解加密货币的更多信息,我强烈建议您从一开始就解决加密货币挑战它开始很容易,然后发展为现实世界的攻击,例如制作Bleichenbacher Oracle,这是DROWN攻击起作用的一部分。

tl;博士

您需要制作一个检测英语的模块并将其应用于每次解密尝试的结果。或者只是叉我的,让它变得更好。
如果明文不是英语或其他语言,则需要进行一些更高级的分析。

如果您知道明文是什么,则可以在您可能已经破解密文时使用该知识猜测。

例如,如果您认为明文是英文,请在您的解密尝试中开始寻找英文单词。

如果您认为明文是 zip 文件,则 zip 文件在文件开头有一个签名。寻找那个签名。

如果您认为明文是一封电子邮件,请寻找有说服力的电子邮件标题。

通常,您可以尝试查找解密尝试的“信息内容”。明文通常比密文具有更少的信息内容,尽管对于简单的凯撒密码来说并非如此。

但是您需要先对明文可能包含的内容进行一些墨迹书写,即使(如上所述)它只是“比密文的信息内容分数低”。

这里的其他答案非常适合一般情况。对于课堂作业,我怀疑教授们想让你很容易知道你什么时候解密了文件。

例如,您正在解密的文件是否在正确解密时显示消息的文本文件?如果是这样,您可以使用您的语言的字典,并检查消息中的大部分单词是否在字典中。如果您使用的是英语,我猜 50% 的单词在英语词典中的阈值是一个很好的使用数字 - 错误解密的文件几乎完全是胡言乱语,但您不想忽略正确的明文如果它有一些单词,例如专有名词或技术术语,则恰好不在您的字典中。