在没有服务器端解密的情况下在用户之间共享加密的秘密

Share encrypted secrets between users without server-side decription

是否可以在服务器端不解密的情况下在几个(动态计数)用户之间共享加密数据?

例如:

  1. 我们有管理后端的秘密
  2. 用户A创建一个秘密,以某种方式加密并发送到服务器进行存储
  3. 用户 A 想将此机密的访问权限授予用户 B
  4. 用户 B 现在可以从服务器获取秘密,但是...

他们如何解密这个秘密?


这是我现在的想法:

制作 2 个后端:

这里是我关心的问题:

服务器所有者可以获得 public 密钥,获取加密数据并解密该数据。当服务器不知道哪个密钥解密数据时,我看不到任何管理用户(包括共享 public 密钥)的方法。

也许有人知道 lastpass、passbolt 或任何其他服务如何解决这个问题?

您似乎对 public 和私钥的工作原理有误解。

对于给定的 public/private 密钥对,任何人都可以使用 public 密钥加密数据,但只有私钥的所有者才能解密数据。

所以要在用户之间传递数据,每个用户首​​先应该:

  • 创建 public/private 密钥对
  • 将他们的 public 密钥上传到服务器

如果用户 A 想向用户 B 发送数据,他们将执行以下操作:

  • 从服务器中拉取用户 B 的 public 密钥
  • 使用 B 的 public 密钥加密数据
  • 上传加密数据到服务器

服务器现在持有加密数据,但无法解密,因为它没有 B 的私钥,只有 public 一个。

用户 B 现在可以从服务器中提取加密数据并使用他们的私钥解密。

请注意,这仅涉及加密。它不解决身份验证问题,即确保数据来自已知来源。

通过从受信任的机构为每个用户的 public 密钥颁发证书并将每个用户的证书存储在服务器上,以及让用户对他们加密的消息应用数字签名,可以使该方案更加安全使用他们的私钥。消息的接收者然后可以使用发送者的 public 密钥和证书来验证签名。