加密 – 是否可以以与解密不同的顺序进行加密?

是否可以在一个订单中加密并在另一个订单中解密?例如,我有以下内容:

> plain_text.txt
>公钥/私钥对1
>公钥/私钥对2

加密:

public1(public2(plain_text.txt))

解密:

private1(private2(encrypted))

有没有允许这种加密算法?它甚至可能吗?

最佳答案
在大多数情况下,您无法更改解密的顺序.
允许重新排序解密的方案称为可交换密码系统.
可用于构建交换密码系统的一个公钥密码系统是
ElGamal encryption

这里只是主要的想法:假设g是一个生成器
合适的组G,计算离散对数很难.
设xA和xB是两个私钥,
hA = g xA,和
hB = g xB
是相应的公钥.两个密钥对使用相同的组
G(即,如果使用G = Z /(p),则为相同的模量p).这是一个优点
如果两个用户共享相同的组(或模数),它仍然是安全的ElGamal方案.
另一方面,RSA将是不安全的.

用hA加密消息m给出了密文

(m hAr, gr).

请注意,知道密钥xA允许解密因为

(gr)xA = hAr

为了第二次加密密文,首先要重新加密现有的密文
带有A的公钥的密文.
他选择一个随机的r’并计算

(m hAr hAr’, grgr’) =
(m hAr+r’, gr+r’).

结果是使用A的公钥进行另一次有效加密.
这种重新加密对于避免例如有效的攻击是必要的
对抗RSA,模数相等,如下所示.
接下来,将使用B的公钥给予加密

(m hAr+r’ hBs, gr+r’, gs).

可以按任何顺序解密,例如,知道xA允许计算

(gr+r’)xA = hAr+r’

因此可以计算出来

(m hBs, gs),

这正是我们想要的:用B的公钥加密m.

为了获得安全的实施,需要注意许多细微之处.
做到这一点并不容易.
有关更多信息,请参阅例如Phd of Stephen Weis,其中包含有关可交换加密的章节.

如果使用“教科书RSA”尝试相同的想法,则存在许多问题.首先使加密可交换,用户A和B必须共享相同的模数.
例如. A使用(n,eA,dA)和B使用(n,eB,dB),其中n是模数,eA,eB是公钥,dA是dB密钥.然而,知道例如(n,eA,dA)允许因子n,因此计算B的秘密密钥,这当然是一个大缺陷.

现在我们可以加密m as

meA mod n,

再次加密为

meAeB mod n,

用A的秘密密钥解密

meB mod n,

并用B的密钥再次解密得到m.看起来很好,直到有人注意到这一点
一个可以拦截两个密文的攻击者c = meA mod n和c’= meB mod n可以使用Euclid算法找到r,s这样

r eA + s eB = 1

然后计算

m = cr (c’)s mod n.

这个想法也反对使用RC4在另一个答案中提出的解决方案. Weis的论文包含对攻击的详细描述.

转载注明原文:加密 – 是否可以以与解密不同的顺序进行加密? - 代码日志