通过查看加密的文本是否可以识别加密方法,或者至少排除其中的某些方法?

例如,如果您有3个加密字符串,且前10个字符相同在每个字符串上。

评论

有趣的结果是-加密的数据流显然应该是随机的-它说明了为什么应该先压缩然后加密,而不是先加密再压缩。压缩取决于冗余,而加密的流则没有。实际上,压缩后的加密文件可能比原始文件大。

视压缩算法而定,它几乎总是会更大一些,甚至更大一些。 (deflate算法可防止过多的膨胀,在不可压缩数据的情况下仅使用少量固定开销即可。)

#1 楼

是的,在某些情况下可以完全从密文确定使用的加密方法。密码分析面临这样一个问题的第一个问题必须回答密码的一般类型。密码看起来是经典密码,非对称密码还是对称密码?


经典密码-这些密码通常写在纸上。字符频率通常是非随机的。人们通常会发明自己的经典密码,因此很有可能您的密码不在任何书中。经典密码通常很容易通过统计分析来破解,一旦破解了就知道使用的方法。
非对称密码-我可能是错的,我一直无法在网上找到有关此信息,是非对称密码,例如RSA可以区分来自随机噪声?暂时将这一问题放在一边,通常,使用非对称密码的协议需要某些元数据,这些元数据会揭示所使用的密码。假设没有元数据,则密文的大小也可以帮助分析人员,因为RSA倾向于使用比ECC或AES大得多的密钥。

对称密码-许多其他答案都声称确定加密方法如果对称密码没有被破坏(如果它们是“好”的话),那么就不可能使用对称密码。尽管在某些情况下“坏的”对称密码确实是可以区分的,但让我们假设,无论要使用哪种密码,我们都将注意“好”的随机排列,但要注意的是,当前使用的许多密码(尤其是流密码)尚不明确。 “好”。我们有两类对称密码:流密码和分组密码。


流密文-给定足够的密文,就可以区分块密文和流密文,因为流密文只能是任意长度,而块密文必须始终以块大小为增量。在两个流密码之间进行区分要困难得多,但是在其他假设下是可能的。例如,纯文本是所有拉丁字符。然后,要做的就是尝试所有可能的密钥和所有可能的流密码。如果您找到能可靠地将密文解密为包含所有拉丁字符的明文的密钥,则您已确定流密码。
分组密码-分组密码具有两个易于从密文确定的属性:1。块大小以及2.块密码正在ECB模式下运行。只需查看密文的长度即可推断出块大小,但这并不一定告诉您使用了什么密码,但是在半罕见情况下,某些块大小对于密码是唯一的。例如,如果发现该块为96位,则可能是在处理3路密码。如果密码以概率不太可能的方式重复相同的块,则密码很可能以ECB模式运行。



关于“好的”密码的性质。

当前使用的许多密码都不符合上面给出的良好密码的定义。例如,DES的密钥大小小于其块大小。给定两个具有小块大小和不同密钥大小的密码,理论上应该有可能在仅给出密文的情况下区分它们。此外,许多当前使用的流密码在设计时就考虑到易于实现,因此不使用非线性映射。例如,许多移动电话使用的GMS系统使用a5 / 1密码。这些密码只是LFSR,不仅可以区分,而且可以在足够的预计算时间后几秒钟内被破坏。

评论


$ \ begingroup $
“而块密文必须始终以块大小为增量”:否,您可以使用诸如CBC模式的密文窃取之类的技术。
$ \ endgroup $
– Nayuki
2011年8月11日15:23

$ \ begingroup $
@Nayuki Minase-您能区分流密码和以“密文窃取”模式运行的分组密码吗?
$ \ endgroup $
– Ethan Heilman
2011年8月11日15:40

$ \ begingroup $
据我所知,没有。这些方法看起来像伪随机排列函数,完全没有明显的模式。
$ \ endgroup $
– Nayuki
2011年8月11日15:45

$ \ begingroup $
@Nayuki Minase-函数本身可能是伪随机的,但是增量又是其他人都不想谈论的信息呢?以“密文窃取”模式运行的分组密码能否产生奇数个位数,它可以在位级别而不是字节级别运行吗?如果输入大小小于一个块,该怎么办?它怎么会失败?
$ \ endgroup $
– Ethan Heilman
2011年8月11日在16:23

$ \ begingroup $
实际上,大多数流密码也仅在字节级别使用,即使它们可能已在位级别使用也是如此。这将无助于区分。
$ \ endgroup $
–PaŭloEbermann
2011年11月19日下午14:46

#2 楼

如果加密系统有任何好处,则否。假设(对称)加密算法的输出与纯随机无区别。如果您能够以大于1/2的概率将加密输出与纯随机输出区分开(即,您得到了两个字符串串,并且您可以辨别出哪个来自平均比纯运气更成功的加密系统),则加密算法被称为“中断”。这种算法的一个示例是RC4(不是被破坏并不意味着没有密钥就可以轻松解密;受RC4保护的SSL连接似乎仍然很安全)。

但是,使用的加密通常不将算法视为秘密信息。该算法以代码或特定硬件的形式存在。可以进行逆向工程。很难知道多少算法秘密可以抵御攻击者,这是一个问题,因为好的安全策略应该以量化为目标。对称密钥的保密性可以量化:一个128位密钥是秘密的,平均最多2127次试验。由于无法针对算法本身实现如此精确的测量,因此通常假定算法的名称是众所周知的。相应地,加密的消息格式通常以附加的标头开始,该标头清楚地说明所使用的算法(这样的标头避免了许多维护难题,尤其是在使用几种不同的算法时)。

评论


$ \ begingroup $
或者,如果您确定LESS小于1/2,则也可以认为它已损坏。只需选择与算法相反的方法即可。
$ \ endgroup $
–萨摩斯
2011年7月15日13:41

#3 楼

不,不可能。密码算法的输出应类似于伪随机数生成器的输出。没有任何标识可以识别它。如果可能,密码算法不是一个好的密码算法。

评论


$ \ begingroup $
我不同意。从块大小,加密模式,相对密钥大小到块大小,填充方法,密文长度,非随机明文,密钥重用(OTP的问题),相关密钥,固定点,可以得出所有细节。
$ \ endgroup $
– Ethan Heilman
2011年7月19日在22:42