Javascript 具有客户端加密的Web应用程序

Javascript 具有客户端加密的Web应用程序,javascript,encryption,ssl,Javascript,Encryption,Ssl,我正在开发一个web应用程序,它将在客户端加密数据,然后将数据发送到服务器。服务器将存储加密数据,但无法解密数据。关键是要确保客户端数据的安全,这样即使服务器主机也无法访问数据。这可以通过服务器只接收加密数据而从不接收密钥这一事实来保证 我计划在客户端使用Javascript进行加密和解密。此外,连接将使用SSL进行保护 我在这里读了这篇文章:这篇文章建议不应将Javascript用于加密,但它没有涉及我的用例 这是一个安全的解决方案吗?有什么方法可以使它更安全吗?尽管此设置本身没有任何问题,因

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

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

我在这里读了这篇文章:这篇文章建议不应将Javascript用于加密,但它没有涉及我的用例


这是一个安全的解决方案吗?有什么方法可以使它更安全吗?

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

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

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

只是一些值得思考的东西。

看看这个模式(从2005年7月开始)

眨眼示意图:

锁定在数据云内部,在浏览器处键入

解决方案

以加密形式托管敏感数据,以便客户端只能访问 并通过提供一个永远不会出现的通行短语来操纵它 传输到服务器。服务器仅限于持久化和 检索浏览器发送的任何加密数据,并且从不 以普通形式实际访问敏感数据。信息技术全部的 加密和解密在浏览器内部进行

关键点是,您仍然需要使用TLS/SSL,并且完全信任将HTML和JavaScript资源作为JavaScript资源提供服务的主机

此外,还有一个类似于您正在寻找的解决方案


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