云盘系统如何设计文件加密

2019-12-28 16:58:32 +08:00
 xuthus

存储层用分布式存储系统作为存储盘,保证了一传多备。但对存储安全性有要求,就是上传时,需要对文件进行加密,该选择一个什么样的加密方案,实现对(大)文件的加密的同时,确保时间效率相对较优。

目前我的疑问:

  1. 在上传和下载时 需要进行加密解密 市面上的网盘是如何保证上传后(大文件)可立即下载的(一般大文件都需要加密数 N 秒) 他们没有做文件的加密和解密 仅仅是通过访问控制确保文件安全的吗?
  2. 有什么方案 可以摆脱时间开销 的同时来进行文件加密
4143 次点击
所在节点    Go 编程语言
6 条回复
ferock
2019-12-28 17:00:56 +08:00
1. 文件分数据块
2. 每块数据,单独加密
3. 加密应合理分散分布,不应使用单一秘钥。
4. 要考虑由于加密分散分布,导致的性能问题。
xuthus
2019-12-28 17:14:12 +08:00
@ferock 谢谢 我尝试尝试这种
msg7086
2019-12-29 07:58:23 +08:00
大文件加密为什么要传完了再加?
wanguorui123
2019-12-29 10:51:23 +08:00
可以上传时候加密,有些文件系统底层提供了加密,不需要应用层面加密。
also24
2020-02-23 21:02:14 +08:00
可以参考 seafile 的相关设计,seafile 是开源的。

源码见:
https://github.com/haiwen/


它提供了对单个资料库进行加密的功能,相应的介绍如下:
https://cloud.seafile.com/published/seafile-manual-cn/security/security_features.md
当你创建一个加密资料库,你将为其提供一个密码。所有资料库中的数据在上传到服务器之前都将用密码进行加密。
加密流程:
1.生成一个 32 字节长的加密的强随机数。它将被用作文件加密秘钥(“文件秘钥”)。
2.用用户提供的密码对文件秘钥进行加密 (使用 PBKDF2 算法)。加密后的文件秘钥将会被发送到服务器并保存下来。
3.在文件同步的时候,先用用户输入的密码解密出文件秘钥,然后使用文件秘钥加密文件(使用 AES 256/CBC 算法),加密完后再上传文件。下载的时候,先用用户输入的密码解密出文件秘钥,然后使用文件秘钥解密文件。在上述过程中,你的密码将不会被传输到服务器上。
xuthus
2020-02-23 21:18:00 +08:00
@also24 谢谢提供信息,加密策略感觉很有参考价值。我选型的项目还是与之有区别的,对于 C/S 架构可能很好实现,但我实现的是 B/S 结构,使用 js 来实现加密解密。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/633150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX