JuiceFS 作为散布文件系统,每天与海量的数据打着交道,因而数据的安全性尤为要害,明天就来介绍一下 JuiceFS 在数据加密方面所做的致力。
传输中数据加密
JuiceFS 在网络上传输时会对数据进行加密,以避免未经受权的用户窃听网络通信。
JuiceFS 客户端始终应用 HTTPS 把数据上传到对象存储服务,以下状况除外:
- 应用外部端点上传至阿里云 OSS
- 应用外部端点上传至 UCloud US3
静态数据加密
JuiceFS 反对静态数据加密,即在上传到对象存储之前对数据进行加密。在这种状况下,存储在对象存储中的数据将会被加密,这能够在对象存储自身被毁坏时无效地避免数据泄露。
JuiceFS 在客户端加密中采纳了行业标准的加密形式(AES-GCM 和 RSA)。加密和解密是在 JuiceFS 客户端进行的。用户惟一须要做的是在 JuiceFS 挂载时提供一个私人密钥或明码,并像一般文件系统一样应用它。它对应用程序是齐全通明的。
留神:在客户端缓存的数据是不加密的。不过,只有 root 用户或所有者能够拜访这些数据。如果要把缓存的数据也加密,你能够把缓存目录放在一个加密的文件系统或块存储中。
加密和解密办法
必须为每个加密的文件系统创立一个全局 RSA 密钥 M
。在对象存储中保留的每个对象都将有本人的随机对称密钥 S
。数据用对称密钥 S
进行 AES-GCM 加密,S
用全局 RSA 密钥 M
进行加密,RSA 密钥应用用户指定的口令进行加密。
数据加密的具体过程如下:
- 在写入对象存储之前,数据块会应用 LZ4 或 ZStandard 进行压缩。
- 为每个块生成一个随机的 256 位对称密钥
S
和一个随机种子N
。 - 基于 AES-GCM 应用
S
和N
对每个块进行加密。 - 应用 RSA 密钥
M
对对称密钥S
进行加密失去密文K
。 - 将加密后的数据、密文
K
和随机种子N
组合成对象,而后写入对象存储。
数据解密的步骤如下:
- 读取整个加密对象(它可能比 4MB 大一点)。
- 解析对象数据失去密文
K
、随机种子N
和被加密的数据。 - 用 RSA 密钥解密
K
,失去对称密钥S
。 - 基于 AES-GCM 应用
S
和N
解密数据失去数据块明文。 - 对数据块解压缩。
密钥治理
在启用加密性能时,RSA 密钥的平安是极其重要的。如果密钥被泄露,可能会导致数据泄露。如果密钥失落,那么 所有 的加密数据都将失落,而且无奈复原。
当应用 juicefs format
创立一个新卷时,能够通过 --encrypt-rsa-key
参数指定 RSA 私钥来启用动态加密,该私钥将会被保留到 Redis。当私钥被密码保护时,能够应用环境变量 JFS_RSA_PASSPHRASE
来指定明码。
应用办法:
生成 RSA 密钥
$ openssl genrsa -out my-priv-key.pem -aes256 2048
在格式化时提供该密钥
$ juicefs format --encrypt-rsa-key my-priv-key.pem META-URL NAME
留神:如果私钥受密码保护,在执行
juicefs mount
时应应用JFS_RSA_PASSPHRASE
来指定该明码。
性能
TLS、HTTPS 和 AES-256 在古代 CPU 中的实现十分高效。因而,启用加密性能对文件系统的性能影响并不大。RSA 算法绝对较慢,特地是解密过程。倡议在存储加密中应用 2048 位 RSA 密钥。应用 4096 位密钥可能会对读取性能产生重大影响。
总结
文件系统加密技术简直能够实用于任何基于文件系统的数据库存储加密需要,本文从原理登程到实际操作如何生成并应用密钥,具体介绍了 JuiceFS 对数据加密解密的过程。将来,JuiceFS 将继续致力为您的数据安全保驾护航。
举荐浏览:知乎 x JuiceFS:利用 JuiceFS 给 Flink 容器启动减速
如有帮忙的话欢送关注咱们我的项目 Juicedata/JuiceFS 哟!(0ᴗ0✿)