Web加密
客户端(浏览器)javascript中的加密问题将在下面详细介绍。除了这些关注点之外,所有关注点均不适用于WebCrypto API,该API现在得到了很好的支持。
对于脱机应用程序,您仍然必须设计和实现安全的密钥库。
另外:如果您使用的是Node.js,请使用内置的加密 API。
本机Java密码术(WebCrypto之前的版本)
我认为主要的关注点是可以物理访问计算机的人员,该计算机正在读取localStorage
您网站的,而您希望通过加密来防止这种访问。
如果某人具有物理访问权限,那么您也很容易遭受其他攻击,这比读书更糟。这些包括(但不限于):键盘记录程序,脱机脚本修改,本地脚本注入,浏览器缓存中毒和DNS重定向。仅当用户在计算机受到威胁后使用计算机时,这些攻击才起作用。但是,在这种情况下进行物理访问意味着您会遇到更大的问题。
因此请记住,如果机器被盗,则本地加密很有价值的局限性场景是。
有些库确实实现了所需的功能,例如Stanford Javascript Crypto Library。但是,存在一些固有的弱点(如@ircmaxell的答案的链接所述):
- 缺乏熵/随机数生成;
- 缺少安全的密钥库,即如果私钥存储在本地或存储在服务器上(禁止离线访问),则必须对其进行密码保护;
- 缺乏安全擦除;
- 缺乏时序特征。
这些弱点中的每一个都对应于一类密码妥协。换句话说,尽管您可能拥有“ crypto”的名字,但它远低于人们在实践中所追求的严格性。
综上所述,精算评估不如“ Javascript加密功能弱,不要使用它”那么简单。这不是背书,严格地是警告,它要求您完全了解上述弱点的风险,所面临媒介的频率和成本以及在出现故障时的缓解或保险能力:Javascript crypto,in尽管它有弱点,但可能会减少您的接触风险,但只能针对技术能力有限的小偷。但是,您应该假定Java加密对于以该信息为目标的坚定而有能力的攻击者没有价值。当已知实现中固有的许多弱点时,有些人会认为将数据称为“加密”是一种误导。换一种说法,您可以略微减少技术风险,但可以通过披露增加财务风险。当然,每种情况都是不同的-减少将技术风险暴露于财务风险的分析并非易事。这是一个说明性的类比:尽管存在固有风险,但一些银行仍要求使用弱密码,因为它们所遭受的弱密码损失要小于支持强密码的最终用户成本。
🔥如果您阅读了最后一段,并认为“互联网上某个叫Brian的人说我可以使用Java加密技术”,请不要使用Java加密技术。
对于问题中描述的用例,用户加密本地分区或主目录并使用强密码似乎更有意义。该类型的安全性通常经过良好测试,广泛信任并且普遍可用。