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

Ano*_*ous 4 encryption encryption-asymmetric

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

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

加密:

public1(public2(plain_text.txt))
Run Code Online (Sandbox Code Playgroud)

解密:

private1(private2(encrypted))
Run Code Online (Sandbox Code Playgroud)

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

abc*_*abc 5

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

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

用h A加密消息m 给出了密文

(mh A r,g r).

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

(g r)x A = h A r

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

(mh A r h A r',g r g r')=(mh A r + r',g r + r').

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

(MH R + R ' ħ 小号,克R + R',G 小号).

解密可以按任何顺序进行,例如知道x A允许计算

(g r + r')x A = h A r + r'

因此可以计算出来

(mh B s,g s),

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

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


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

现在我们可以加密m as

m e A mod n,

再次加密为

ê é 模N,

用A的秘密密钥解密

Ë 模N,

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

re A + se B = 1

然后计算

m = c r(c')s mod n.

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


Pav*_*sky 0

据我所知,这应该可以通过对 RSA 进行轻微修改来实现。但我不知道有什么工具可以真正做到这一点。