【问题标题】:Web app with client-side encryption具有客户端加密的 Web 应用程序
【发布时间】:2013-03-14 21:02:19
【问题描述】:

我正在开发一个 Web 应用程序,它将在客户端加密数据,然后将数据发送到服务器。服务器将存储加密数据,但具有解密数据的能力。关键是要保证客户端数据的安全,这样即使服务器主机也无法访问数据。这可以通过服务器只接收加密数据而从不接收密钥这一事实来保证。

我打算在客户端使用 Javascript 进行加密和解密。此外,连接将受到 SSL 保护。

我在这里阅读了这篇文章:http://www.matasano.com/articles/javascript-cryptography/,其中建议不应使用 Javascript 进行加密,但它没有解决我的用例。

这是一个安全的解决方案吗?有没有办法让它更安全?

【问题讨论】:

  • 这似乎足够安全,只要您实际上不注入 JS 代码来窃取密钥。
  • 而且该页面上的任何其他内容都来自您的服务器以外的任何内容。并且用户没有在他们的浏览器中运行任何扩展程序,允许扩展程序访问他们访问的网页(这很多)。实际上,该文章涵盖了您的情况 - 因为它继续说 RNG 在浏览器中是不安全的,所以从理论上讲,您无能为力。像大多数安全问题一样,您永远无法说“它是安全的”。您可以表达一定程度的信心。
  • @Nik:这样的浏览器扩展是否能够从任何网络应用程序中窃取数据,无论客户端是否进行加密?我对使用Javascript加密客户端的感觉不太好,但我不知道是第三方脚本还是扩展的原因。
  • 是的 - 因为扩展通常可以访问 DOM,所以游戏结束了。对于每个 url,许多最有用的扩展都需要这个。它们并不是不信任客户端加密的全部原因,只是在尝试确定浏览器解决方案是否可以描述为“安全”时要考虑的另一件事。

标签: javascript encryption ssl


【解决方案1】:

看看Host-Proof Hosting 模式(从 2005 年 7 月开始)。

一闪而过:

锁定在数据云中,在浏览器上键入。

解决方案

以加密形式托管敏感数据,以便客户端只能访问 并通过提供永远不会的密码来操纵它 传送到服务器。服务器仅限于持久化和 检索浏览器发送的任何加密数据,并且永远不会 实际上以普通形式访问敏感数据。它。全部 加密和解密发生在浏览器内部。

关键点是您仍需要使用 TLS/SSL 并完全信任将 HTML 用作 JavaScript 资源的主机。

另外,Web-browser encryption of personal health information 有一个类似于您正在寻找的解决方案。

【讨论】:

    【解决方案2】:

    尽管此设置本身没有任何问题,但由于客户有责任维护自己机器的安全性,我认为您可能会遇到可能导致更多问题的情况。

    用户希望无论如何都能够访问他们的数据。如果他们在另一个关闭了 JS 的系统上,那么他们将无法访问他们的数据。

    另外,如果用户忘记了他们的密码/密钥会怎样?由于您没有存储它,因此您无法恢复数据并且它实际上已经丢失了。您将无能为力,即使这不是您的错,用户也不会那样看。

    只是一些思考的食物。

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 2018-07-13
      • 2011-06-10
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      相关资源
      最近更新 更多