第28章 文件加密
文件加密
Cloudreve 支持为存储策略启用文件加密。启用后,上传到该策略的所有新文件都会自动加密,下载时 Cloudreve 也会自动解密。加密后的文件只能通过 Cloudreve 访问。
默认情况下,文件加密由 Web 客户端完成。加密后的文件数据会直接传输至存储服务提供商。如果该存储策略启用了上传中继,客户端则只需将明文文件发送给 Cloudreve,由 Cloudreve 进行流式加密后再传输给存储服务提供商。
加密文件的所有下载操作都必须经过 Cloudreve 中转,Cloudreve 会在向客户端发送文件的同时进行流式解密。
配置
在存储策略配置页面启用「文件加密」即可开启此功能。在决定为某存储策略启用文件加密之前,请确保已了解并确认以下事项:
- 加密文件只能通过 Cloudreve 访问。 - 在未启用上传中继时,文件加密由客户端完成。此过程并非强制,部分旧版客户端或第三方实现可能会拒绝遵循加密设置,而是上传原始文件。 - 请启用并配置分片上传,以避免上传大文件时出现长时间等待。 - 站点必须支持安全上下文(HTTPS)。 - 客户端上传文件时,新文件的加密密钥会暴露给客户端。 - 启用文件加密后,存储策略的原生缩略图生成器将不可用,建议启用生成器代理。 - 无论是否启用下载中继,下载加密文件都会自动通过 Cloudreve 中转。
加密算法
Cloudreve 使用 AES-256-CTR 密码算法对文件进行加密。每个文件 Blob 都使用独立的密钥。该密钥通过主加密密钥进行加密后存储在数据库中。
警告
默认情况下,Cloudreve 会在首次启动时随机生成主加密密钥并将其存储在数据库中。潜在风险在于,主加密密钥与各 Blob 的密钥都存储在相同位置,若在安全事件中可能导致密钥同时泄露。我们建议按照下一节的说明将主加密密钥存储在不同位置,并定期轮换。
主加密密钥管理
如需轮换主加密密钥或更改其存储方式,请按以下步骤操作:
1. 在后台管理面板的「文件系统 -> 设置 -> 文件加密 -> 主加密密钥存储」中,确认当前主加密密钥的存储方式。 2. 备份数据库中的 entities 表。 3. 使用以下命令获取并备份当前的主加密密钥:
```bash
./cloudreve master-key get -c
例如: ```bash ./cloudreve master-key get -c data/conf.ini --license-key xxx ```
4. 将输出的主加密密钥备份到安全位置。 5. 选择一种生成新主加密密钥的方式:32 个随机字节,并使用 Base64 编码。
```bash ./cloudreve master-key generate -o new.key ```
6. 执行以下命令,使用新的主加密密钥重新加密所有文件 Blob 的密钥:
```bash
./cloudreve master-key rotate -c
例如: ```bash ./cloudreve master-key rotate -c data/conf.ini -n new.key --license-key xxx ```
7. 如有需要,在「文件系统 -> 设置 -> 文件加密 -> 主加密密钥存储」中更改主加密密钥的存储方式。 8. 根据新的存储方式,将新的主加密密钥存储到安全位置。 9. 无需额外操作,Cloudreve 会在第 5 步中自动将新的主加密密钥存储到数据库。 10. 重启 Cloudreve 以应用新的主加密密钥。检查文件上传和下载功能是否正常,然后删除残留的 new.key 文件及备份文件。