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

标签 javascript cryptography aes

我正在为文件传输协议(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/

相关文章:

javascript - 运行三个桌面环境的最简单方法

c++ - 如何在 Crypto++ 中使用 Shamir secret 共享类

ios - swift 中的 AES 加密

java - SlowAES加密和java解密

java - 使用 AES/CTR 模拟流密码

javascript - 从包含文件路径的字符串列表创建树 - javascript

javascript - 如何修复我的清除按钮以删除阵列

javascript - 如何使旋转 block 不超出该部分?

Python:检索 <ObjectIdentifier> 的属性

java - 将字符串压缩到文本文件(AES)后解密失败