假设您有一个密钥
K
和一个纯文本P
。然后,使用某种对称算法A
(例如AES变体之一)来获得密文C = A_encrypt(P, K)
。是否存在一些密钥K* != K
可用于从相同的密文即P = A_decrypt(C, K*)
中取回纯文本?它是否取决于密码的类型(块与流),确切的算法,密钥的大小和纯文本的大小?我的直觉表明,这种事物的不可能或至少不可能是造成对称密码的原因,但我在任何地方都找不到明确的说法。找不到能直接回答该问题的任何东西;而且,我找不到有人问这样的问题。我所能找到的就是这样的问题,这些问题似乎与我的问题相关,但并不完全相同,而诸如“如何生成用于解密相同数据的两个密钥”之类的问题与我的问题有些相反。#1 楼
块密码的可能置换数量为$ 2 ^ n!$,其中$ n $是块大小。排列将所有$ 2 ^ n $个可能的输入块映射到$ 2 ^ n $个可能的输出块。密钥空间为$ 2 ^ k $的密钥选择其中一个。尽管键的数量很多,但它与可能的排列数量相比显得相形见.。这样的密钥将被视为等效密钥,或者-更具体地说-是弱密钥。许多算法旨在禁止使用弱键。如果可能具有相同的排列,则可能是设计使然。找到两个将单个特定明文映射到相同密文或相反的密文的可能性更大。如果可能的话,这取决于分组密码的详细信息,请参阅AES上的讨论以获取更多信息。
对于流密码,这个问题有些困难。可以说流密码的输出由密钥和IV(有时融合为一个,例如在RC4中)确定。如果密钥的大小,IV和流密码的内部状态足够大,则您应该无法在为单独的密钥/ IV对生成的密钥流中找到大量重复项。
将有可能找到生成少量相同密钥流的密钥。这很容易看到;大约一半的密钥应正确解密一位。但是,可能无法确定您是否生成了正确的明文;您必须事先确定两个密钥。
上面表达的思想也适用于流操作模式(例如CTR(计数器模式))中的分组密码。
已经提出了这类问题,但是要找出您是否不知道正确的用语(即使您确实知道)也很棘手。
相关的问题是算法是否包含后门。在那种情况下,攻击者应该能够解密任何密钥值。
可否认的加密是另一个与之相关的术语。
评论
$ \ begingroup $
请注意,第一段是关于所有明文等效的键数。其他一些将给定密文解密为原始明文的密钥更有可能。
$ \ endgroup $
–otus
16年6月6日12:10
#2 楼
显然,在现实生活中至少有一个使用等效密钥的分组密码示例:TEA有一些弱点。最值得注意的是,它具有等效的
密钥-每个密钥都等效于其他三个密钥,这意味着有效的密钥大小仅为126位。结果,TEA作为密码散列函数特别不好。这种弱点导致了一种方法
,用于破解Microsoft的Xbox游戏机,该方法使用密码作为哈希函数。 wikipedia.org/wiki/Tiny_Encryption_Algorithm)
施耐尔(Schneier)描述这是算法结构中的一个错误:
考虑补充K0的最高有效位和K1。请注意,
翻转最高有效位会同时通过
加法和XOR操作传播,将其翻转两次将取消
修改
(https: //www.schneier.com/academic/paperfiles/paper-key-schedule.pdf)
弱或等效密钥原则上不是理想的功能(即使没有126位密钥空间比128位密钥空间小得多)。提到这是将TEA进一步开发为XTEA的原因之一。
评论
$ \ begingroup $
欢迎来到ilkkachu加密货币!
$ \ endgroup $
–马腾·博德威斯♦
16年6月6日在16:28
$ \ begingroup $
请注意,TEA中的等效密钥问题对于加密的安全性而言可以忽略不计,但是当用作哈希函数时,对于安全性而言却是灾难性的。
$ \ endgroup $
– Nayuki
16年6月6日在23:04
#3 楼
假设您的分组密码合理地近似为伪随机排列。我们在所有可能的密钥下解密您的密文
C
,这会产生随机分布的2^128
明文。这等效于将n
球扔入n
的n=2^128
箱中。对于较大的1-1/e
,填充任何特定料仓的机会收敛到n
。我们通过生成C
作为A_encrypt(P, K)
来保证存在一种解决方案,这对(key, Plaintext)
的所有其他C
对的分布没有影响。因此,所有其他键都存在冲突的几率是1-1/e (≈ 0.63)
评论
您注意到这个问题了吗?@otus,不;正如我所说,我的搜索查询都没有产生任何结果。坦白说,我不知道如何制定一个查询来查找该问题:)但是它确实回答了我的问题,至少部分地。谢谢!