在网站上执行安全双向加密的正确方法

信息安全 Web应用程序 密码管理 客户端 证书
2021-08-13 19:47:19

我目前正在开展一个项目,该项目需要我通过标准的 python/flask 网站在 Web 服务器上存储敏感信息(主要是密码和其他信息)。此信息将与系统上的 x 个其他人共享,他们可以在其中解密和查看信息。

理想情况下,我想在客户端执行所有加密,并让服务器以某种方式存储加密数据,这意味着服务器永远无法解密这些数据。

我最初设想的是一个类似于 lastpass 的系统,但是能够与其他用户共享相同的数据以供他们解密和查看,我想不出一种可行的方法。

这可能吗?

[编辑添加更多信息]

我正在进行的项目实际上是一个密码/信息管理应用程序,主要针对希望管理其内部密码/信息的公司,例如服务器访问或具有单个帐户的软件系统。我认为不可能为用户提供在系统外使用的密钥。我希望用户密码或某种单独的密钥足以解密系统中保存的数据,但能够加密数据,因此任何用户密钥都可以解密它。我想这可能是不可能的。

1个回答

基本上,您需要使用对称密钥(例如 AES 密钥)对要保护的数据进行加密。此密钥只有被允许访问服务器上的加密数据的用户组才知道。

您用于加密数据的密钥不应存储在服务器上。加密和解密发生在客户端 Web 浏览器内的客户端,有许多 JavaScript 库实现了 AES 算法。

最困难的部分是如何在用户之间共享加密密钥。此外,如果同一用户与两个不同的用户组共享他的部分数据,他可能需要为每个组使用不同的加密密钥。请注意,您不想让服务器知道密钥

那么我们怎么能做到这一点。密钥分配有两种选择:

  1. 使用 web socket 在使用 P2P 连接的用户组之间共享密钥。可以在每个用户浏览器上使用 HTML5 网络存储加密存储密钥。
  2. 每个用户都有一个 RSA 密钥对,他的公钥存储在服务器上。然后用户 A 与用户 B 共享一个 AES 密钥。用户 A 下载用户 B 公钥并使用 uesr B 公钥加密 AES 密钥。然后他将加密的 AES 密钥上传到服务器。用户 B 他们下载加密的 AES 密钥并使用他的私钥对其进行解密。然后他可以使用加密的 AES 密钥访问用户 A 的数据。

看,您系统中的技术挑战是如何管理加密密钥以及如何管理用户组。

您应该利用 HTML5 网络存储来存储 AES 密钥,只需为每个用户分配一个密码并使用此密码生成一个主 AES 密钥,您可以使用该密钥来加密网络存储中的所有密钥和其他敏感数据客户端。

注意:这里的主要问题是用户丢失了加密密钥。在这种情况下,他可能无法在服务器上恢复加密数据。

如果您发布有关您的项目要求的更多详细信息,我们可能会为您提供更好的解决方案,也许是一个简单的解决方案。