【发布时间】: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