是否存在加密方法,加密和解密顺序是任意的?就像在同一个锁定环上使用两个挂锁一样。
也就是说,如果有两个密钥(或密钥对)K1, K2
,则会将消息M
和密码C
作为(例如)C=M*K1*K2
获取(其中) *
表示加密),然后可以通过以下每种方式检索消息M
:1)M=C*K1*K2
,2)M=C*K2*K1
(此处*
表示解密)。
显然,XOR
是一个微不足道的候选人。是否存在任何加密强大的例子?
答案 0 :(得分:9)
使用任何强块密码(例如AES)并在Output Feedback Mode或Counter Mode中运行。
由于OFB和CTR基本上只是加密伪随机流的XOR,因此它将具有您寻找的属性。只需确保您的K1和K2 独立。
此外,由于OFB和CTR是NIST认可的(并且广泛使用的)分组密码模式,只要您正确实现它们并使用强大的底层分组密码,它们就会“加密强大”。
答案 1 :(得分:2)
你所要求的是一种可交换的密码。这种密码的一个应用是Shamir的三遍协议(通常使用挂锁来解释)。
目前还不清楚“加密强”是什么意思。即经常需要的一个要求是,如果对手用K1学习消息加密,然后用K2加密消息并用K1和K2加密消息,则对手不能学习消息。在Shamir的三遍协议的情况下,这个要求是显而易见的。
很容易看出流密码不满足上述要求。因此,将流密码称为“密码强的可交换密码”会产生误导。在上述假设下同样容易打破的是Rasmus Fabers的提议(我认为这是Bruce Schneier提出的一个有点不同的结构)。
强可交换密码可以基于模幂运算。 Massey-Omura协议就是一个很好的例子。
答案 2 :(得分:1)
如果密码的大小不是问题,您可以根据任何其他密码轻松构建这样的密码:
让第一个加密器生成大小为> = B1
的随机位掩码M
。使用原始密码和密钥加密位掩码,并将此加密与B1 ^ M
一起发送。
类似地,下一个加密器生成一个新的随机位掩码B2
,用他的密钥加密它并发送加密的位掩码和B2^(B1^M)
。 (以及N个加密器等等。)
要解密,只需按任意顺序解密每个位掩码,然后将它们放到掩码消息上。