我正在为文件传输协议(protocol)进行客户端加密(所以即使服务器也不知道文件是什么。)我目前的方法是将文件导入浏览器文件系统,将文件分成 1 MB block ,存储每个内存中的 block ,用AES加密每个 block ,然后连接所有 block 并上传。这可以防止内存过载,但效率相当低。有没有更好的方法?一种在浏览器文件系统中加密整个文件的方法?谢谢!
最佳答案
在未创建 credible threat model 之前,不应使用加密或任何其他加密原语。 .您打算通过使用基于 JavaScript 的加密来防止对您的应用程序的哪些威胁?如果威胁是网络上的某个人,那么我们有很棒的工具来防止基于网络的攻击 - 我们称之为 HTTPS with TLS, and its free to use - 和 alternative cannot be made in JavaScript. .
一些 experimental "end-to-end" (e2e) chat applications使用基于 JavaScript 的加密。但是这种“ promise 不会达到峰值”的加密实际上并不能保护客户端免受服务器的侵害——恶意 JavaScript 可以访问这些 key ,而服务器选择不读取它们——这不是安全性。
基于 JavaScript 的加密无法阻止任何本地攻击(或 RCE)或跨域攻击(XSS)——HTTPS 也无法阻止这些攻击。缺乏可信的威胁参与者是为什么加密从不由客户端完成 - 而是通常由应用程序服务器或 backend database to encrypt sensitive fields at rest 执行。 .这是因为后端可以保护不受信任的客户端的 secret 。
如果您想更好地了解开发人员如何编写安全应用程序,请考虑阅读 OWASP Top 10 (“JavaScript 加密”不是特色。)
关于javascript - 我应该如何使用客户端 JavaScript 加密大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351253/