如果我加密,比如说,一个 .pdf 文件,那么知道它是一个 .pdf 是否更容易解密?
即文件的众所周知的结构可以作为加密字节的可预测部分吗?
如果我加密,比如说,一个 .pdf 文件,那么知道它是一个 .pdf 是否更容易解密?
即文件的众所周知的结构可以作为加密字节的可预测部分吗?
出于实际目的,没有。
与良好的加密相比,使用现代密码并且不犯诸如填充预言或 ECB 模式或其他弱点之类的重大错误,它并没有真正的帮助。从理论上讲,它可以测试您是否正确地暴力破解密钥 - 解密的文件是否包含正确的幻数和数据格式?很好,你得到了正确的密钥 - 但实际上,对于任何现代广泛使用的密码来说,暴力破解密钥应该是不可能的(即使是最弱的 AES 形式,使用 128 位密钥,即使是一个民族国家也需要几个世纪才能破解-force,即使假设摩尔定律继续发展;仅使用现代硬件将花费许多数量级的时间)。
当然,人们在加密方面确实会犯错误,一些曾经被认为很强大的密码现在也很容易受到攻击。
如果您知道文件是以特定方式加密的,并且您知道该方法的弱点,那么您可以尝试利用该弱点。知道文件类型可能会更容易,因为某些文件是由名义上支持加密但实现非常弱的软件生成的,并且知道文件属于该类型将表明您可能能够尝试此类攻击(尽管它如果文件是使用其他正确实现加密的工具加密的,则对您没有帮助)。
ECB(电子密码本)分组密码操作模式上面提到的使用相同的算法(对于给定的密钥)加密每个块(现代密码通常为 16 个字节;历史上通常只有 8 个字节),无论它在消息中的哪个位置。这意味着,如果您将消息(或任意数量的消息,如果已知它们都使用相同的密钥加密)分成块并找到两个相同的块,您就会知道它们是相同的纯文本。如果你发现这样的重复并且至少知道其中一个的纯文本,因为你知道文件的至少一部分数据(由于知道它的格式,或其他原因),你现在知道了明文另一个块的同一部分。即使您不知道其中的任何特定字节,当您一般了解数据格式时,这也很有用,特别是如果它是低熵数据,例如简单的图像文件;
还有其他攻击不太可能与此处相关,但在其他情况下可能相关。例如,如果您可以使用 RC4(有时称为 ARC4 或 ARCFOUR)流密码对相同的数据进行多次加密,则可以利用“密钥流”中的偏差(流密码是由伪随机函数生成的位)慢慢解密数据;这就是为什么在 SSL/TLS 中不再信任 RC4 的原因(尽管对于只加密一次的给定数据块,这种攻击是不可行的)。填充预言机攻击允许您在线性时间内解密消息(通常是在 CBC 操作模式下使用分组密码(如 AES)加密的消息),前提是有一个知道解密密钥的“oracle”,并且会根据命令解密任何消息并告诉如果填充(分组密码需要填充)是正确的。这种预言机通常不适用于静态文件,但是填充预言机是 CBC 模式不能再在 SSL 中使用的原因,并导致整个 SSL 协议的弃用(TLS 包括针对填充预言机攻击的保护) )。
了解文件的结构和一些基本数据还可以启用位翻转攻击(您不解密数据,但以可预测的方式更改它,这可能会进一步打击合法使用该文件的人)。这与您的问题相去甚远,但是当您攻击一个加密文件时,您对它的了解最少但非零知识时,它有时是相关的。
是的,从某种意义上说,当你的蛮力尝试了正确的键时,更容易检测到。如果您知道它是用英文编写的文本文件,则可以检查字母频率。如果它是具有标头信息的格式,您可以检查标头是否有意义。如果它是一个可执行文件,您可以检查代码的分布是否接近合理。如果你不知道你在寻找什么文件类型,你怎么知道你什么时候找到了正确的解密?
可能 - 是的。这样的信息减少了熵,因此需要更少的尝试来暴力破解它。但我说潜在的,因为它只有在攻击者能够真正改进他针对特定文件类型的暴力破解算法时才成立。这远非微不足道。原因之一是在加密开始时通常通过应用一些随机数据来转换数据,例如通过应用xor
.