我刚刚读到斯坦福大学 Javascript 加密库 http://crypto.stanford.edu/sjcl/ (jsfiddle 示例 http://jsfiddle.net/kRcNK/),它完全用 JavaScript 支持 SHA256、AES 和其他标准加密方案。该库看起来非常漂亮,但我不知道它的合理用例。
As 一些问题 https://stackoverflow.com/questions/4121629/password-encryption-at-client-side已经指出,客户端加密并不是将安全数据传递到服务器的安全方法。应改用 HTTPS。那么,是否有任何项目可以受益于或需要客户端加密?
使用案例1
怎么样本地存储 http://dev.w3.org/html5/webstorage/#dom-localstorage?您可能想要存储一些数据,但要对其进行加密以使计算机的其他用户无法访问它?
例如:
- 用户通过 HTTPS 连接到服务器。
- 服务器对用户进行身份验证。
- 服务器提供特定于该用户的加密密码。
- 用户在本地做一些事情。
- 一些数据存储在本地(使用密码加密)。
- 用户走失
- 用户稍后返回站点。
- 用户通过 HTTPS 连接。
- 服务器对用户进行身份验证。
- 服务器提供用户的加密密码。
- 客户端JS使用加密密码来解密本地数据。
- 用户使用现在已解密的内存中本地数据在本地执行某些操作。
如果您有一个胖客户端,需要跨会话使用大量(敏感)数据,并且由于大小而无法从服务器提供数据,这可能会很有用。我想不出有那么多适用于此的例子......
当应用程序的用户生成敏感数据并且该数据不需要(或不应)发送到(或存储在)服务器上时,它也可能很有用。
作为一个应用示例,您可以将用户的信用卡详细信息存储在本地,加密并使用 JS 将其自动输入到表单中。您可以通过存储数据服务器端并以这种方式提供预先填充的表单来完成此操作,但通过这种方法,您不必在服务器上存储信用卡详细信息(在某些国家/地区,有严格的信用卡详细信息)有关法律)。显然,在用户计算机上加密存储信用卡详细信息是否比在服务器端存储存在更多或更少的安全风险,这是有争议的。
很可能有一个更好的应用示例......
我不知道有任何现有项目使用这种技术。
用例2
通过密码共享来提高 HTTPS 的性能怎么样?
例如:
- 用户通过 HTTPS 连接到服务器。
- 服务器对用户进行身份验证。
- 服务器提供特定于该用户的加密密码。
- 然后服务器重定向到 HTTP(它的开销比 HTTPS 少得多,因此在性能方面会好得多)。
- 由于服务器和客户端都有加密密码(并且该密码是通过安全连接共享的),因此它们现在都可以发送和接收安全加密的敏感数据,而无需使用 HTTPS 加密/解密整个请求的开销。这意味着服务器可以提供仅加密敏感部分的网页。然后客户端可以解密加密部分。
这个用例可能不太值得,因为 HTTPS 通常具有可接受的性能水平,但如果您需要提高一点速度,则会有所帮助。
用例 3
主机证明存储 http://en.wikipedia.org/wiki/Host_Proof_Storage。您可以加密客户端数据,然后将其发送到服务器。服务器可以存储数据并共享数据,但在不知道客户端私钥的情况下,无法解密。这被认为是诸如此类服务的基础lastpass http://lastpass.com/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)