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

时间:2011-08-19 15:01:31

标签: javascript encryption client-side

我刚刚在javascript中阅读了支持SHA256,AES和其他标准加密方案的Stanford Javascript Crypto Libraryjsfiddle example)。该库看起来非常漂亮,但我不知道它的合理使用情况。

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

3 个答案:

答案 0 :(得分:9)

用例1

local storage怎么样?您可能希望存储一些数据,但要加密它以便计算机的其他用户无法访问它?

例如:

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

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

在应用程序的用户生成敏感数据并且不需要(或不应该)将数据发送到服务器(或存储在服务器上)的情况下,它也可能很有用。

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

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

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

用例2

通过密码共享促进通过HTTPS进行性能改进怎么样?

例如:

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

这个用例可能不值得,因为HTTPS通常具有可接受的性能水平,但如果你需要更快的速度,它会有所帮助。

用例3

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

答案 1 :(得分:3)

与客户端上的任何内容一样,您可以使用模糊处理使临时用户更难以查看内容,但由于客户端还需要拥有解密器的副本,因此没有什么可以阻止用户自己使用解密器任

JavaScript是一个不安全的环境,期间。

答案 2 :(得分:3)

首先想到的一个用途是主机打样。这是您希望将数据存储在服务器上或存储并通过服务器转发但不允许服务器访问数据的位置。

客户端可以在传输到服务器之前加密数据,并在本地保留私钥或至少私钥的密码。

我认为这是lastpass等服务的基础。