在云存储上叠加加密文件系统的4种方案分析详解

目标很简单。云存储上很多文件都挺私人的,直接放着很吓人。虽说云存储采用各种方法来保证你的安全,但是世界上没有绝对的安全。万一密码泄漏,或者更糟糕,云存储泄漏。此时你的各种文件就在网络上裸奔了。
最简单的解决方法是什么?在底层存储上套一层加密呗。不过由于是云存储,所以基于块设备的加密方案不能用,例如luks。否则你同步到云上的就是一个超级巨大的块文件,然后每次修改,云存储客户端都要找到差别上传。这太蛋疼了。正解是每个文件分别加密上传。但即便如此,对于超大文件进行加密后依然会影响上传效率,请提前考虑一下这个问题。
同时又要注意,云存储用的加密文件系统和普通的加密文件系统还有点差别。很多加密文件系统的daemon会认为自己是唯一一个会访问加密内容的进程,而云存储可能随时接收来自远程的修改。所以这会造成一些问题。
备选方案
我对比了四种方案,encfs,cryfs,gocryptfs,ecryptfs。对比的方法是用这四种分别建立一个加密目录,然后用不同的方法做写入测试,看他的各种参数。顺便说一句,如果你要看的话,其实看这份表格就好。我只是在自己的机器上复现了一下,顺便了解一下各家特点。
测试语句:
timeddif=/dev/zeroof=testbs=1048576count=1024
timeddif=/dev/zeroof=testbs=1024count=1048576
timetarxflinux-4.13.12.tar.xz
其中,在裸盘上直接解压内核源码耗时7.568s,空间使用870m。
数据对比
+---------+-------+-----+-------+-----+-------+-----+--------------+
||time1|size1|time2|size2|time3|size3|comment|
+---------+-------+-----+-------+-----+-------+-----+--------------+
|encfs|13.210s|1.1g|39.039s|1.1g|26.496s|894m||
+---------+-------+-----+-------+-----+-------+-----+--------------+
|cryfs|9.327s|1.1g|21.230s|1.1g|42.918s|2.5g|删除耗时2.804s|
+---------+-------+-----+-------+-----+-------+-----+--------------+
|gocryptfs|3.515s|1.1g|28.180s|1.1g|19.874s|918m||
+---------+-------+-----+-------+-----+-------+-----+--------------+
|ecryptfs|3.132s|1.1g|10.218s|1.1g|9.448s|1.4g||
+---------+-------+-----+-------+-----+-------+-----+--------------+
解读
首先说怎么解读。time1是连续写入性能,time2是离散写入性能,time3是小文件写入性能,size3是大量小文件膨胀系统。size1和size2没啥用。
下面先看性能。从性能上看,最优秀的是ecryptfs。这是理所当然,因为这是唯一一个内核态而且和内核整合的系统。gocryptfs次之。encfs要慢上好多。至于cryfs,一开始写小文件就原型毕露了。何况这是唯一一个删除大文件时间超过1s的,达到2.8s。你看我其他系统测试里都没写。
然后是膨胀率。encfs膨胀2.75%,cryfs膨胀近三倍,gocryptfs膨胀5.52%,ecryptfs膨胀65%。相比起来,encfs膨胀率最小,gocryptfs次之,cryfs最糟糕。
安全性
下面是同一个人出的三份审计报告:
encfs的审计报告
gocryptfs的审计报告
ecryptfs的审计报告
根据报告可以得到这么几个意见:
encfs有安全性隐患,目前未解决。主要隐患来自于文件块加密模式上。如果攻击者有机会获得多份密文副本,那么就是不安全的。
gocryptfs有一定安全问题,目前未解决。下面细说。
ecryptfs需要进一步审计,目前可视为安全。
综叙
可能出乎大家意料,我首先排除了encfs和ecryptfs。encfs是因为有安全性隐患。ecryptfs是因为不便于使用和不兼容云存储模式。ecryptfs在每次挂载时都需要独立输入所有参数,这样使用起来比较不方便。更糟糕的是,ecryptfs并不支持同时有人访问加密数据本身。这样会造成竞争问题。对于一个内核级的东西来说,这有极大的危险性。同时,这货的膨胀率有点高。
然后在cryfs和gocryptfs里,我选择gocryptfs。虽然cryfs是唯一一个明确声明自己兼容云存储的,但是其膨胀率实在太高了。虽然是云存储,但是毕竟要考虑性价比的。
那么gocryptfs的安全问题是什么呢?主要隐患来自和云存储混用时,攻击者虽然对文件内容一无所知,但是可以修改文件内容。例如将其他加密文件复制过来,或者将部分内容嫁接过来。审计报告里提供了一系列的poc来说明这一风险。这一风险对于特定情况的用户来说是非常危险的,例如在加密区域存储多个可信身份/帐号身份文件的人。
很幸运,我对这方面没要求。gocryptfs的膨胀率不大,仅高于encfs,完全可以接受。性能也不错,仅次于ecryptfs。使用非常方便,同时还能提供过得去的安全特性。因此综合上面所有情况,我选择gocryptfs作为云存储上叠加的加密文件系统。

华为公布对5G多模手机的收费标准,上限为2.5美元
康奈尔大学科学家研制出5分钟快速充电锂电池
人大金仓&用友 | 5万并发用户下的极致性能体验
VL170:Mux切换信号性能支持USB 3.1连接器
零基础自学编程所要做的事情
在云存储上叠加加密文件系统的4种方案分析详解
电阻屏的基本原理_电容屏和电阻屏的区别
ABB携手海拉共创汽车电子制造新未来
集邦咨询预估 2021 年全球笔电出货量有机会达到 2.17 亿台,相比去年增长 8.6%
如何延长KVM切换器的使用寿命,有哪些方法
电源设计中,对环路造成影响的有哪些因素
川土微电子CA-IF103X CAN总线收发器产品概述
整流二极管的代换原则分享
什么是pcb表面贴装技术和通孔技术?
稳定币的诞生、机制及发展前景展望解读
电动助力转向用电机与ECU的电源一体化
大模型的未来趋势与挑战
Silicon Labs针对物联网推出最低功耗和最小尺寸的无线MCU
光鉴科技在ToF深度相机技术上用纳米光学技术打破苹果垄断
AI+教育蓝海初现,易贝创新科技抢先发力!