如何破解弱化的TEA分组密码?

目前我正在尝试在C中破解TEA分组密码。这是一个分配,并且茶密码已经弱化,因此密钥是2个16位数字。

我们已经获得了使用密钥对明文进行编码的代码,并使用密钥对密文进行解码。

我有一些明文的例子:

  1. 明文(1234,5678)编码(3e08,fbab)
  2. 明文(6789,dabc)编码(6617,72b5)

更新

编码方法采用明文和密钥编码(明文,密钥1)。 这又发生了另一个密钥,用于创建编码消息,编码(密文,密钥),然后创建编码(3e08,fbab)或编码(6617,72b5)。

我该如何破解这个密码呢?

目前,我用每个可能的密钥编码已知的明文; 密钥大小为hex值ffffffff。 我把它写到文件中。

但现在我陷入困境,需要指导。


我如何使用TEA的等效密钥的弱点来减少破解密码所需的时间? 另外,我打算用中间人攻击。

当我使用已知明文和所有密钥1进行编码时,它将创建具有关联密钥的所有加密文本并将其存储在表中。

然后,我将使用key2中所有可能值的已知密文进行解密。 这将给我一个解密表,只有一次解密。

然后,我可以将两个表一起比较,看看是否有任何一个带有key1的包含与使用key2的解密相匹配。

我也想使用equilenvent的弱点,如果有人可以帮助我在代码中实现这一点,这将是伟大的。 有任何想法吗?

这与IOI’2001编程竞赛中的Double Crypt问题非常类似。 此处显示了一般解决方案,它不会为您提供代码,但可能会指向正确的方向。

不要将结果写入文件 – 只需将您生成的每个密文与已知的密文进行比较,使用每个可能的密钥对已知的纯文本进行编码,直到其中一个密文生成正确的密文。 那时,你已经使用了正确的密钥。 validation通过使用相同的密钥加密第二个已知明文来检查它是否也产生正确的输出。

编辑:两次编码没什么影响。 你仍然得到这样的东西:

for (test_key=0; test_key 

加密发生两次意味着您的encrypt看起来像:

 return TEA_encrypt(TEA_encrypt(plaintext, key), key); 

编辑2:好的,根据编辑过的问题,你显然必须做两次弱化的TEA,每次都有自己的16位密钥。 您可以使用上面的单个循环执行此操作,并将test_key为两个独立的16位密钥,或者您可以执行嵌套循环,例如:

 for (test_key1=0; test_key1<0xffff; test_key1++) for (test_key2=0; test_key2<0xffff; test_key2++) if (encrypt(encrypt(plaintext, test_key1), test_key2) == ciphertext) // we found the keys. 

我不确定这个属性是否适用于16位密钥,但128位密钥具有四个密钥相同的属性,将搜索空间减少了四倍。 我不会忘记如何找到等效键,只是键空间没有看起来那么大。 这意味着它容易受到相关密钥攻击。

你把它标记为家庭作业,所以我不确定这里是否有其他要求,比如不使用蛮力,这似乎是你试图做的。 如果你要进行蛮力攻击,你可能需要知道明文应该是什么样的(比如知道英语)。

等效键很容易理解并将键空间减少四倍。 关键分为四个部分。 TEA的每个循环都有两轮。 第一部分使用键的前两部分,第二部分使用第三和第四部分。 以下是TEA的单个周期(两轮)的图表:(未注册的用户不允许包含图像,因此这里是链接) https://en.wikipedia.org/wiki/File:TEA_InfoBox_Diagram.png

注意:绿色框是加红色圆圈是异或

TEA在块上运行,它分成两半。 在每一轮中,块的一半向左移动4,0或-5位,将一部分键或圆形常量添加到其中,然后将结果值的XOR添加到另一半块。 翻转任一关键段的最高有效位将翻转它所用的总和中的相同位,并通过扩展XOR结果,但没有其他影响。 翻转一轮中使用的两个关键段的最重要位将翻转XOR产品中的相同位两次,使其保持不变。 将这两个位翻转在一起不会改变块密码结果,使得翻转的密钥等同于原始密钥。 这可以对(第一/第二)和(第三/第四)关键段进行,将有效键数减少四倍。

考虑到加密密钥的(适度)大小,您可以负担得起创建一个预先计算的表(使用上面给出的相同代码,并将数据存储在大块内存中 – 如果您没有足够的RAM,请将组块转储到磁盘并保持寻址方案,以便您可以按正确的顺序查找它们。

这样做可以让您覆盖整个域,然后找到一个解决方案,然后实时完成(单个表查找)。

在领先的Office软件中使用(不是很久以前)相同的技巧(密钥截断)。 他们现在使用非随机数据来生成加密密钥 – 其中(最多)导致相同的结果。 在实践中,在生成加密密钥之前知道加密密钥的能力(因为所谓的随机生成器是可预测的)比密钥截断更令人满意(它导致相同的结果 – 但没有必须构建和存储的障碍彩虹表)。

这被称为进步的进程……