客户端加密的有效用例是什么?

Ben*_*ley 12 javascript encryption client-side

我刚刚读到了斯坦福Javascript加密库(jsfiddle示例),它完全支持javascript中的SHA256,AES和其他标准加密方案.该库似乎非常漂亮,但我不知道它的合理用例.

正如一些问题已经指出的那样,客户端加密并不是将安全数据传递到服务器的安全方法.应该使用HTTPS.那么,是否有任何项目可以从中受益或需要客户端加密?

Spy*_*cho 9

用例1

如何本地存储?您可能希望存储一些数据,但要加密它以便计算机的其他用户无法访问它?

例如:

  • 用户通过HTTPS连接到服务器.
  • 服务器验证用户.
  • 服务器提供特定于此用户的加密密码.
  • 用户在本地做一些事情.
  • 某些数据存储在本地(使用密码加密).
  • 用户徘徊
  • 用户在稍后阶段返回站点.
  • 用户通过HTTPS连接.
  • 服务器验证用户.
  • 服务器提供用户的加密密码.
  • 客户端JS使用加密密码来解密本地数据.
  • 用户使用现在解密的内存本地数据在本地执行某些操作.

如果您有胖客户端,并且需要跨会话使用大量(敏感)数据,这可能很有用,因为服务器中的数据由于大小而不可行.我想不出那会适用的很多例子......

其中应用的用户产生的敏感数据,并且该数据并不需要(或不应该)曾经被发送到(或存储)的服务器,也可能是在情况下非常有用.

对于应用示例,您可以在本地存储用户的信用卡详细信息,加密并使用JS将其自动输入到表单中.您可以通过存储数据服务器端并以这种方式提供预先填充的表单来完成此操作,但使用此方法您不必将其信用卡详细信息存储在服务器上(在某些国家/地区,存在严格要求)关于的法律).显然,关于在用户的机器上存储加密的信用卡详细信息是否比存储服务器端或多或少存在安全风险,这是有争议的.

很可能是一个更好的应用示例......

我不知道任何使用这种技术的现有项目.

用例2

如何通过密码共享促进HTTPS的性能改进?

例如:

  • 用户通过HTTPS连接到服务器.
  • 服务器验证用户.
  • 服务器提供特定于此用户的加密密码.
  • 然后,服务器重定向到HTTP(其开销比HTTPS少得多,因此在性能方面会更好).
  • 由于服务器和客户端都具有加密密码(并且密码是通过安全连接共享的),因此它们现在可以发送和接收安全加密的敏感数据,而无需使用HTTPS加密/解密整个请求的开销.这意味着服务器可以提供仅加密其敏感部分的网页.然后,客户端可以解密加密的部分.

这个用例可能不值得,因为HTTPS通常具有可接受的性能水平,但如果您需要更快地挤出,则会有所帮助.

用例3

主机证明存储.您可以加密数据客户端,然后将其发送到服务器.服务器可以存储数据并共享它,但是在不知道客户端的私钥的情况下,它无法对其进行解密.这被认为是lastpass等服务的基础.

  • HTTPS的巨大开销是建立连接,因为它需要额外的往返来完成公钥密钥并安全地交换密钥.建立连接后,有效负载的HTTPS对称密钥加密可能比任何JS加密都快,因为它是本机代码与JS代码.另外,还应该记住,HTTPS提供的不仅仅是有效负载加密.它还提供了一个验证级别,您正在与之交谈的端点是您想要的端点.我个人认为用例2非常有用. (3认同)