V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xuthus
V2EX  ›  Go 编程语言

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

  •  
  •   xuthus · 2019-12-28 16:58:32 +08:00 · 4134 次点击
    这是一个创建于 1820 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    目前我的疑问:

    1. 在上传和下载时 需要进行加密解密 市面上的网盘是如何保证上传后(大文件)可立即下载的(一般大文件都需要加密数 N 秒) 他们没有做文件的加密和解密 仅仅是通过访问控制确保文件安全的吗?
    2. 有什么方案 可以摆脱时间开销 的同时来进行文件加密
    6 条回复    2020-02-23 21:18:00 +08:00
    ferock
        1
    ferock  
       2019-12-28 17:00:56 +08:00
    1. 文件分数据块
    2. 每块数据,单独加密
    3. 加密应合理分散分布,不应使用单一秘钥。
    4. 要考虑由于加密分散分布,导致的性能问题。
    xuthus
        2
    xuthus  
    OP
       2019-12-28 17:14:12 +08:00
    @ferock 谢谢 我尝试尝试这种
    msg7086
        3
    msg7086  
       2019-12-29 07:58:23 +08:00
    大文件加密为什么要传完了再加?
    wanguorui123
        4
    wanguorui123  
       2019-12-29 10:51:23 +08:00 via iPhone
    可以上传时候加密,有些文件系统底层提供了加密,不需要应用层面加密。
    also24
        5
    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
        6
    xuthus  
    OP
       2020-02-23 21:18:00 +08:00
    @also24 谢谢提供信息,加密策略感觉很有参考价值。我选型的项目还是与之有区别的,对于 C/S 架构可能很好实现,但我实现的是 B/S 结构,使用 js 来实现加密解密。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 10:03 · PVG 18:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.