C 为什么DES是不安全的?我们如何知道何时停止迭代以及我们';你找到钥匙了吗?

C 为什么DES是不安全的?我们如何知道何时停止迭代以及我们';你找到钥匙了吗?,c,cryptography,cryptanalysis,C,Cryptography,Cryptanalysis,据说DES是不安全的。我猜这是因为密钥有55位长,所以使用蛮力最多需要2^55次迭代才能找到现在不多的密钥。但是如果我们迭代2^55,我们什么时候知道什么时候停止?这取决于内容。任何一个键都会产生一些输出,所以除非你能猜出你在寻找什么样的东西,否则没有自动的方法知道你找到了正确的键。如果您希望加密的数据是文本,那么可以检查每个解密是否主要包含ASCII字母;类似地,如果您希望它是JPEG文件,则可以检查解密是否以字符“JFIF”开头 如果您希望数据不会被压缩,您可以对解密运行各种熵测试,寻找低熵

据说DES是不安全的。我猜这是因为密钥有55位长,所以使用蛮力最多需要2^55次迭代才能找到现在不多的密钥。但是如果我们迭代2^55,我们什么时候知道什么时候停止?

这取决于内容。任何一个键都会产生一些输出,所以除非你能猜出你在寻找什么样的东西,否则没有自动的方法知道你找到了正确的键。如果您希望加密的数据是文本,那么可以检查每个解密是否主要包含ASCII字母;类似地,如果您希望它是JPEG文件,则可以检查解密是否以字符“JFIF”开头

如果您希望数据不会被压缩,您可以对解密运行各种熵测试,寻找低熵的解密。

它是256而不是255

对于如何知道何时停止,有两种选择。一个是你正在进行一次已知的纯文本攻击,也就是说,你知道一条特定消息的实际文本,用它来学习密钥,然后用它来阅读其他消息。在许多情况下,您可能不知道全文,但可能知道一些内容——例如,您可能知道与您关心的类型的所有消息一起使用的地址块,或者如果文件已加密,则可能具有可识别的头,即使实际内容未知

如果您不知道任何消息的(任何)文本,那么您通常依赖于这样一个事实:自然语言通常是相当冗余的——关于它们的结构,我们已经知道了很多。举几个例子,在英语中,空格通常是最常见的字符,
e
是最常见的字母,几乎没有一个单词的一行中有两个以上相同的字母,几乎所有的单词都至少包含一个元音,等等。在典型情况下,你可以做几个不同层次的统计分析——一个非常简单的分析,可以很快排除大多数可能性。对于那些通过测试的人,你会做第二次分析,很快排除绝大多数其他人

当你完成后,你可能需要人类的判断来在几种可能性之间做出选择——但老实说,这是相当不寻常的。统计分析通常是完全足够的


我可能应该补充一点,有些人发现统计分析问题严重,他们试图阻止它,比如用哈夫曼压缩之类的算法压缩数据,以最大化压缩数据中的熵

继续尝试解密任何加密的东西,直到它正确为止?使用已知的明文。简而言之,你总是在运行已知的明文攻击。也许你的知识是部分的,但如果你想破解代码,你必须知道一些东西。这个问题似乎是离题的,因为它是关于加密(不包括编程),请改为检查crypto.stackexchange.com。