我一直希望有人会问这个话题,我一直在这个领域做很多研究。
您是正确的,javascript-cryptography-considered-harmful 中的大多数点都已被较新的浏览器过时。除了有人破坏服务器的明显问题(这是一个单独的问题并且也给 TLS 带来问题)之外,要点现在“修复”了:
window.crypto.getRandomValues() 使用真正的 CSPRNG
- HTTPS 现在很常见,而且比 2011 年便宜得多
- CSP
integrity和nonce <script>属性可以确保脚本交付的安全,以确保正在运行的内容是预期的
- SJCL 比 2011 年成熟了很多年,没有重大问题突出
- 如果您没有 XSS,可延展的运行时并不重要,CSP 现在擅长阻止
此外,我们现在知道 HTTPS 不是隐私的绝对保证(snowden/heartbleed/crime/breach/etc),但适当的端到端加密是。我们现在还可以实现相当健壮、经过实战考验和安全的库,由比 2011 年提供的更安全的 JS 运行时提供支持;"use strict"广泛支持,CSPRNG,二进制结构,具有密封运行时环境的网络工作者等。
这些是对要点的更新,但是如果您对客户端密码学的其他方面有疑虑,我很乐意解决它们。
当然,没有什么是完美的:
- 真正的旧浏览器仍然存在问题或无法安全地运行新代码
- 用户添加的扩展可以运行他们想要的任何代码
- 恶意软件可以用险恶的东西替换整个浏览器,或者窃取数据预加密
- 网络钓鱼可以诱使用户使用除您的安全站点之外的其他内容。
简而言之,我认为在斯诺登之后,我们应该尽量将普通的私人数据保留在服务器之外,只要我们能提供帮助,并且正确的端到端加密,可以极大地增强用户的隐私和内容的安全性.