什么是最好的核导弹加密系统?

时间:2010-05-05 09:06:45

标签: security encryption cryptography

您在潜艇上,并且有一条您想要阅读的加密消息。两个人必须同时使用他们的密钥才能获得纯文本。什么是最好的加密原语?以下两种实现是否合适?

plain_text=decrypt(Key1 XOR key2,ciper_text,IV)

plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)

(假设AES-256-CBC带有CMAC块,如果它对您很重要。)

6 个答案:

答案 0 :(得分:18)

将两个随机生成的密钥拼凑在一起以获得最终的秘密肯定是安全的。这种方法的一般形式称为“secret sharing”,并且有一些安全算法允许您生成'm of n'方案,您可以在其中生成n个共享,并且任何m都足以推导出原始密钥。

最着名的方案是Shamir's Secret Sharing,并且涉及生成随机m-1次多项式,其中密钥为常数,然后在n个位置对其进行采样,并将这些多项式作为关键共享给予个人。

答案 1 :(得分:5)

通过对密钥进行异或,您可以保证Key1中的每个位都可能被Key2中的每个位修改(反之亦然)。这意味着Key1的持有者无法计算Key2或XORing Key1 / Key2的结果。

另一种说明这一点的方法是Key1的持有者必须强制每一个可能的位组合来耗尽可用的密钥空间。他已经拥有其中一把钥匙的事实根本无法帮助他。

还有其他方法可以将两个键组合在一起,但当键长度相同时,只需要一个简单的XOR。

答案 2 :(得分:3)

在考虑解决方案之前,您可能想要考虑这些要求。在给定的场景中,如果您有两个人都需要解密消息,则需要

是合理的
  • 每个人都看不到对方的钥匙。

毕竟你想避免一个人只选择一个随机的密文,假装这个刚刚进来,看到了另一个人的密钥,然后注意到密文一定是骗局。 此要求使选项1的解密变得困难。 由于你使用MAC,你可能也想要那个

  • 两个人都确信解密的邮件是合法的。

这似乎排除了选项2.毕竟Key2的持有者怎么知道Key1的持有者解密了更正并且不只是用他选择的一个替换合法的明文。

我必须承认,我不知道你所描述的场景的一个好的解决方案。潜在的方案可能如下所示:密文是元组c1,c2,d1,d2,其中

  

c1 = EncryptAndMAC(Key1,Share1)

     

d1 = MAC(Key2,hash(Share1))

     

c2 = EncryptAndMAC(Key2,Share2)

     

d2 = MAC(Key1,Share2)

     

message = Share1 XOR Share2

现在需要两个密钥来查找消息,双方可以独立解密其共享而无需共享密钥,双方都可以验证对方是否正确解密。当然,这是一个临时协议,所以很可能我错过了一些东西。

答案 3 :(得分:1)

第二个选项:

plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)

不遵守双方必须同时使用其密钥的要求。必须在Key1之前使用Key2,但一旦发生这种情况,第一方(Key1的拥有者)可以等到她选择的时间进行解密,使第二方退出循环。这可能是也可能不是应用程序的问题。

正如Cocowalla的Schneier引用所暗示的那样,XOR有效,除非其中一方能够获得组合密钥(解密器可以保密),而另一方密钥则有其他用途。如果密钥在统计上不是独立的,则XOR的速度意味着密钥组合步骤易受引导强制攻击(decrypt仍然是瓶颈)。如果密钥是独立的,那么就不需要弄清楚任何部分密钥,也不需要知道一个部分密钥帮助找出组合密钥,因此暴力攻击也可以针对组合密钥而忽略部分。正如caf提到的那样,找出另一个部分密钥是没有意义的,因为它需要组合键;另外,你只能开一次核武器。如果一个密钥只与另一个密钥结合使用(我们不会为不同的系统重用密码,对吗?),XOR是安全的。

有几个加密系统允许k-out-of-n密钥在同时使用时对消息进行解密,但是我不记得他们的这个术语,我的副本{ {1}}不在眼前。

编辑:感谢Cocowalla,该方案的名称是“(m,n)阈值方案”。有关可视化示例,请阅读Dobbs博士发表的Daniel Stoleru撰写的“Visual Cryptography and Bit-Plane Complexity Segmentation”。 Visual cryptography由Naor和Shamir创建,并出现在EUROCRYPT '94(根据Doug Stinson)。

维基百科列出了更多k-out-of-n secret sharing的例子:使用n个点,其中秘密是k-1次多项式;使用k k-hyperplanes,秘密就是交叉点。

答案 4 :(得分:0)

有了这个,我看不出你怎么能实现这样一个要求,即任何两个有足够等级的人 - 能够一起阅读这个消息......

除此之外:根据底层加密算法,拥有一半XOR的密钥可能允许一个人获得完整密钥的一部分,从而显着削弱了保护。

然后,IANAC:)

答案 5 :(得分:-1)

XOR'ing键,而简单的方法,可能不是最好的。我不认为生成的密钥会足够随机 - 如果有密钥1的人能够获得生成的密钥,他们就可以得到密钥2.

为了进一步提高复杂性,也许某种一次性垫是一个很好的计划。重新使用这种系统的密钥可能不是一个好主意:)

以下是重复使用密钥导致问题的示例:

http://en.wikipedia.org/wiki/Venona_project

<强>更新

我刚刚从布鲁斯施奈尔出色的 Applied Cryptography 副本中抹去了灰尘,并看了3.6节秘密拆分。这是一个不同的场景,但他建议简单地用信息对密钥进行异或是安全的:

  

这是Trent可以在Alice和Bob之间拆分消息的协议:

     

(1)Trent生成一个随机位字符串R,其长度与消息M相同。

     

(2)Trent X与M一起产生S。

     

M⊕R= S

     

(3)特伦特给出   R到Alice和S到Bob。

请注意,他没有说这是否适合守卫导弹发射系统;)