【问题标题】:How to encrypt a value on the client and pass it through a web server without decrypting it如何加密客户端上的值并通过 Web 服务器传递而不解密它
【发布时间】:2010-09-17 08:31:35
【问题描述】:
大家好,我正在研究一个项目,在该项目中,我们需要保持从客户端到黑盒系统的加密值,而无需在其间的任何时间点对其进行解密。我们在浏览器和 Web 服务器之间使用 SSL,但值会在 Web 服务器上自动解密,这是我们需要避免发生的事情。我们需要能够通过网络服务器(仍然加密)和其他后端系统传递它,直到它到达最终目的地,在那里它会被解密。
所以我的问题是,我们可以使用哪些选项来维护来自浏览器的值的加密状态,而无需一路解密?
谢谢
标记
【问题讨论】:
标签:
javascript
encryption
【解决方案1】:
您是否考虑过对值进行简单的 RSA 加密并通过系统发送?您将需要确保客户端具有用于加密数据的公钥,但这将足够简单和安全以传递。
据我所知,大多数库都支持 RSA。可以在here 找到一个关于如何纯粹用 Javascript 来完成的很好的演示。
【解决方案2】:
你会想看看public key encryption。 SSL 保护您的会话(浏览器 服务器),但不是完整的传输。我建议在从客户端收到数据后对您的数据进行加密,然后将加密的数据一直发送进去。
这是一个描述数据流的糟糕图表
client browser web server random server blackbox
route ---- SSL -------------><------------- not encrypted ------->
data *-------- PGP/GPG encrypted --------->
基本上,您的数据通过 SSL 加密到网络服务器,在该服务器上进行 PGP/GPG 加密,然后发送到下游。 SSL 在这一点上并不重要(或者至少,它不是主要的加密形式)。
除非您可以在您的环境中保证 javascript,否则如果用户出于某种原因关闭了 javascript,最好在 Web 服务器上进行加密以确保您的数据安全。
【解决方案3】:
如果您在数据库中使用二进制类型,则 Web 服务器应按原样发送。然后,您的客户端可以在插入数据之前对其进行加密,然后在获取数据后必须对其进行解密。 Web 服务器和数据库服务器本身都无法查看数据。
【解决方案4】:
根据定义,黑盒系统无法解密数据,除非它是为此而构建的。我建议与黑盒系统的开发人员讨论这个问题。