我应该如何使用客户端JavaScript加密大文件

How should I encrypt large files using clientside JavaScript?

本文关键字:加密 文件 JavaScript 客户端 何使用 我应该      更新时间:2023-09-26

我正在为文件传输协议进行客户端加密(因此即使服务器也不知道文件是什么)。我目前的方法是将文件导入浏览器文件系统,将文件分成1mb的块,将每个块存储在内存中,使用AES加密每个块,然后将所有块连接起来并上传。这可以防止内存过载,但是效率很低。有更好的方法吗?在浏览器文件系统中加密整个文件的方法?谢谢!

在没有创建可信的威胁模型之前,不应该使用加密或任何其他加密原语。您打算通过使用基于JavaScript的加密来防止对应用程序的哪些威胁?如果威胁来自网络上的某个人,那么我们有很棒的工具来防止基于网络的攻击——我们称之为HTTPS与TLS,它是免费使用的——而JavaScript是无法替代的。

一些实验性的"端到端"(e2e)聊天应用程序使用基于JavaScript的加密。但是这种"承诺不达到峰值"的加密实际上并不能保护客户端免受服务器的攻击——恶意的JavaScript可以访问这些密钥,而服务器选择不读取它们——这不是安全。

基于JavaScript的加密无法阻止任何本地攻击(或RCE)或跨域攻击(XSS) - HTTPS也无法阻止这些攻击。由于缺乏可信的威胁参与者,所以加密从来不由客户端执行,而是通常由应用服务器或后端数据库执行,以加密静态的敏感字段。这是因为后端可以对不受信任的客户端保密。

如果你想更好地理解开发人员是如何编写安全应用程序的,可以考虑阅读OWASP Top 10("JavaScript加密"不包括)