客户端加密的有效用例是什么?
What are the valid use cases for client side encryption?
我刚刚读到斯坦福Javascript加密库(jsfiddle示例),它完全支持Javascript中的SHA256, AES和其他标准加密方案。这个库看起来很漂亮,但是我不知道它有一个合理的用例。
正如一些问题已经指出的那样,客户端加密不是将安全数据传递给服务器的安全方式。应该使用HTTPS。那么,是否有任何项目将受益于或需要客户端加密?
用例1
本地存储呢?您可能希望存储一些数据,但对其进行加密,以便计算机的其他用户无法访问它?
例如:- 用户通过HTTPS连接到服务器。
- 服务器认证用户
- 服务器提供特定于此用户的加密密码。
- 用户在本地做一些事情。
- 部分数据存储在本地(使用密码加密)。
- 用户离开
- 用户后期返回站点
- 用户通过HTTPS连接。
- 服务器认证用户
- 服务器提供用户的加密密码。
- 客户端JS使用加密密码解密本地数据
- 用户在本地使用他们现在解密的内存中的本地数据做某事或其他事情。
如果您有一个胖客户端,需要跨会话使用大量(敏感)数据,而由于大小问题,从服务器提供数据是不可行的,那么这可能很有用。
在应用程序的用户生成敏感数据,而这些数据不需要(或不应该)被发送到(或存储在)服务器的情况下,它也很有用。
对于一个应用示例,您可以将用户的信用卡详细信息存储在本地,加密并使用JS将其自动输入到表单中。您可以通过存储数据服务器端来实现这一点,并以这种方式提供预填充的表单,但是使用这种方法,您不必在服务器上存储他们的信用卡详细信息(在某些国家,有严格的法律)。显然,在用户机器上存储加密的信用卡详细信息是否比存储在服务器端更有安全风险,这是有争议的。很可能有一个更好的应用例子…
我不知道有任何现有的项目使用这种技术。
用例2
如何通过密码共享促进HTTPS的性能改进?
例如:- 用户通过HTTPS连接到服务器。
- 服务器认证用户
- 服务器提供特定于此用户的加密密码。
- 服务器然后重定向到HTTP(它的开销比HTTPS少得多,因此在性能方面会好得多)。
- 由于服务器和客户端都有加密密码(并且该密码通过安全连接共享),因此它们现在可以发送和接收安全加密的敏感数据,而无需使用HTTPS加密/解密整个请求的开销。这意味着服务器可以提供一个只有敏感部分被加密的网页。然后客户端可以解密加密的部分。
这个用例可能不是那么值得,因为HTTPS通常具有可接受的性能水平,但如果您需要挤出更多的速度,它会有所帮助。
用例3主机校验存储。您可以在客户端加密数据,然后将其发送到服务器。服务器可以存储数据并共享数据,但如果不知道客户端的私钥,它就无法解密数据。这被认为是lastpass等服务的基础。
就像客户端上的任何东西一样,您可以使用混淆来使临时用户更难以窥视内部,但是由于客户端也需要解密器的副本,因此也没有什么可以阻止用户自己使用解密器。
JavaScript是一个不安全的环境,句号
我想到的一个用途是防宿主。这是您希望在服务器上存储数据的地方,或者通过服务器存储和转发数据,但不允许服务器访问数据。
客户端可以在传输到服务器之前对数据进行加密,并将私钥或至少私钥密码保存在本地。
我相信这是lastpass等服务的基础。
- 是什么让新的Date() / 1000成为一个有效的javascript
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 指定的侧边栏广播器无效 -- 有效的侧边栏广播器是什么样子的
- 在Javascript中实现GroupBy最有效的方法是什么
- 获取字符串中最后一个换行符的最有效方法是什么
- 通过字符串最有效的方法是什么;s字符
- 在日期范围内查找丢失日期的最有效方法是什么
- 对区间[1,10^12]中的整数进行编码/解码的快速有效方法是什么
- 对我来说,用javascript设置这个函数最有效的方法是什么
- 当生成正态分布的随机值时,定义范围的最有效方法是什么
- 将非类型化数组编译为 C 的有效方法是什么?
- 以下情况的有效正则表达式是什么
- 在 Javascript 中调用多个延迟的最有效方法是什么?
- 在没有服务器根访问权限的情况下构建聊天脚本的有效方法是什么
- 从数组中检索列的有效方法是什么
- Android,TCP,Servlet - 无需外部库即可进行来回通信.标准有效的方法是什么
- 在 JavaScript 中合并多个排序对象数组的最有效方法是什么?
- 什么是最有效的JavaScript语法检查解决方案
- 在javascript中注册事件侦听器的最有效方法是什么
- 将图像发送到服务器的最佳/更有效的方法是什么