【问题标题】:Can you Encrypt1(m), Encrypt2(E1(m), Decrypt1(E2(E1(m))) and Decrypt2(E2(m))?你能加密1(m),加密2(E1(m),解密1(E2(E1(m)))和解密2(E2(m))吗?
【发布时间】:2018-11-06 14:49:17
【问题描述】:

我想知道以下是否可能。

与服务器交换密码时,应保护密码。因此,用户可以使用生成的密钥 kUser 加密密码。 Encrypt(m, kUser) 生成加密消息eU(m)。现在用户将此信息发送到服务器。服务器现在使用自己的密钥 kServer 加密消息。 Encrypt(eU(m), kServer) 导致 eS(eU(m))。现在服务器发回这个信息,用户现在用他以前使用的密钥解密消息。 Decrypt(eS(eU(m), kUser) 这会导致 eS(m) 吗?这可能吗?

这就像一个装有信息的手提箱成像。用户将他的锁 A 放在手提箱上并将其发送到服务器。除了拥有锁 A 的钥匙的人之外,没有人可以访问该信息。服务器现在将第二个锁 B 除了锁 A 放在手提箱上并将其发送回用户。手提箱现在被两把锁 A 和 B 锁住。然后用户使用他的钥匙 A 移除他的锁 A 并将只剩下锁 B 的手提箱发送到服务器。服务器现在用他的密钥 B 移除锁 B 并且可以访问信息。

如何实现这样的系统(如果可能的话)?

【问题讨论】:

  • 请阅读How to Ask
  • 只使用 TLS。不要尝试实现自己的加密。
  • 看起来更像是您将消息放在了一个上锁的手提箱 eU(m) 然后 - 而不是添加第二个锁 - 将 那个 手提箱放在另一个上锁的手提箱 @987654330 @ - 所以即使你有eU(m) 的钥匙,你也无法拿到它来解锁它。也许有一些时髦的数学可以解决这个问题,但我认为这是一个更准确的描述?
  • 您所描述的内容与Diffie-Hellman key exchange 完全一样。正如@MadaraUchiha 所说,您不会自己实现它,而是使用经过验证的解决方案。

标签: javascript security encryption


【解决方案1】:

这会导致 eS(m) 吗?

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

这可能吗?

是的。想象一下简单的 Caesar 或 Vigenére chifre,那肯定行得通。

  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 的库,它完全符合您的描述,但它是防弹的(直到现在)。

【讨论】:

  • ... 或者不要碰 DH 而只使用 TLS。
猜你喜欢
  • 2020-01-03
  • 2012-12-22
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多