您可以加密1(m),加密2(E1(m),解密1(E2(E1(m)))和解密2(E2(m))吗?

时间:2018-11-06 14:49:18

标签: javascript security encryption

我想知道以下情况是否可能。

与服务器交换密码时,应保护密码。因此,用户可以使用生成的密钥kUser对密码进行加密。 Encrypt(m, kUser)产生了加密的消息eU(m)。现在,用户将此信息发送到服务器。服务器现在使用自己的密钥kServer加密消息。 Encrypt(eU(m), kServer)产生eS(eU(m))。现在,服务器将这些信息发送回去,在此,用户现在使用其先前使用的密钥解密消息。 Decrypt(eS(eU(m), kUser)会产生eS(m)吗?这有可能吗?

这就像是将里面的信息存储在行李箱中。用户将他的锁A放在手提箱上,然后将其发送到服务器。除了拥有锁A的钥匙之外,没有人可以访问该信息。服务器现在将除锁A之外的第二把锁B放在手提箱上,然后将其发送回用户。现在,手提箱被两个锁A和B锁住。然后,用户使用他的钥匙A取下他的锁A,并将仅剩下锁B的手提箱发送给服务器。服务器现在用他的钥匙B移除锁B,并且可以访问该信息。

一个人将如何实施这样的系统(如果可能)?

1 个答案:

答案 0 :(得分:4)

  

该结果是否为eS(m)?

这取决于您的解密/加密功能。

  

这可能吗?

是的。想象一下简单的Caesar或Vigenérechifre,肯定会起作用。

  const keyA = "B";
  const keyB = "C";
  const text = "AB";

  const sent = encrypt(text, keyA); // BC
  const sendBack = encrypt(sent, keyB); // DE
  const sent2 = decrypt( sendBack, keyA); // CD
  decrypt(sent2, keyB); // AB

但是,它不适用于换位和其他更复杂的算法,例如AES。

  

一个人将如何实施这样的系统(如果可能)?

不要。最弱的加密是您自己发明的。而是使用实现Diffie-Hellmann key exchange protocol的库来实现您所描述的完全一样,但要保证其安全性(到现在为止)。