在云存儲(chǔ)上疊加加密文件系統(tǒng)
目標(biāo)很簡(jiǎn)單。云存儲(chǔ)上很多文件都挺私人的,直接放著很嚇人。雖說(shuō)云存儲(chǔ)采用各種方法來(lái)保證你的安全,但是世界上沒(méi)有絕對(duì)的安全。萬(wàn)一密碼泄漏,或者更糟糕,云存儲(chǔ)泄漏。此時(shí)你的各種文件就在網(wǎng)絡(luò)上裸奔了。
最簡(jiǎn)單的解決方法是什么?在底層存儲(chǔ)上套一層加密唄。不過(guò)由于是云存儲(chǔ),所以基于塊設(shè)備的加密方案不能用,例如LUKS。否則你同步到云上的就是一個(gè)超級(jí)巨大的塊文件,然后每次修改,云存儲(chǔ)客戶端都要找到差別上傳。這太蛋疼了。正解是每個(gè)文件分別加密上傳。但即便如此,對(duì)于超大文件進(jìn)行加密后依然會(huì)影響上傳效率,請(qǐng)?zhí)崆翱紤]一下這個(gè)問(wèn)題。
同時(shí)又要注意,云存儲(chǔ)用的加密文件系統(tǒng)和普通的加密文件系統(tǒng)還有點(diǎn)差別。很多加密文件系統(tǒng)的daemon會(huì)認(rèn)為自己是唯一一個(gè)會(huì)訪問(wèn)加密內(nèi)容的進(jìn)程,而云存儲(chǔ)可能隨時(shí)接收來(lái)自遠(yuǎn)程的修改。所以這會(huì)造成一些問(wèn)題。
備選方案
我對(duì)比了四種方案,EncFS,CryFS,GoCryptFS,eCryptFS。對(duì)比的方法是用這四種分別建立一個(gè)加密目錄,然后用不同的方法做寫入測(cè)試,看他的各種參數(shù)。順便說(shuō)一句,如果你要看的話,其實(shí)看這份表格就好。我只是在自己的機(jī)器上復(fù)現(xiàn)了一下,順便了解一下各家特點(diǎn)。
測(cè)試語(yǔ)句:
- time dd if=/dev/zero of=test bs=1048576 count=1024
- time dd if=/dev/zero of=test bs=1024 count=1048576
- time tar xf linux-4.13.12.tar.xz
其中,在裸盤上直接解壓內(nèi)核源碼耗時(shí)7.568s,空間使用870M。
數(shù)據(jù)對(duì)比
- +---------+-------+-----+-------+-----+-------+-----+--------------+
- | |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 |刪除耗時(shí)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 | |
- +---------+-------+-----+-------+-----+-------+-----+--------------+
解讀
首先說(shuō)怎么解讀。time1是連續(xù)寫入性能,time2是離散寫入性能,time3是小文件寫入性能,size3是大量小文件膨脹系統(tǒng)。size1和size2沒(méi)啥用。
下面先看性能。從性能上看,最優(yōu)秀的是eCryptFS。這是理所當(dāng)然,因?yàn)檫@是唯一一個(gè)內(nèi)核態(tài)而且和內(nèi)核整合的系統(tǒng)。GoCryptFS次之。EncFS要慢上好多。至于CryFS,一開(kāi)始寫小文件就原型畢露了。何況這是唯一一個(gè)刪除大文件時(shí)間超過(guò)1s的,達(dá)到2.8s。你看我其他系統(tǒng)測(cè)試?yán)锒紱](méi)寫。
然后是膨脹率。EncFS膨脹2.75%,CryFS膨脹近三倍,GoCryptFS膨脹5.52%,eCryptFS膨脹65%。相比起來(lái),EncFS膨脹率最小,GoCryptFS次之,CryFS最糟糕。
安全性
下面是同一個(gè)人出的三份審計(jì)報(bào)告:
根據(jù)報(bào)告可以得到這么幾個(gè)意見(jiàn)。
- EncFS有安全性隱患,目前未解決。主要隱患來(lái)自于文件塊加密模式上。如果攻擊者有機(jī)會(huì)獲得多份密文副本,那么就是不安全的。
- GoCryptFS有一定安全問(wèn)題,目前未解決。下面細(xì)說(shuō)。
- eCryptFS需要進(jìn)一步審計(jì),目前可視為安全。
綜敘
可能出乎大家意料,我首先排除了encfs和ecryptfs。encfs是因?yàn)橛邪踩噪[患。ecryptfs是因?yàn)椴槐阌谑褂煤筒患嫒菰拼鎯?chǔ)模式。ecryptfs在每次掛載時(shí)都需要獨(dú)立輸入所有參數(shù),這樣使用起來(lái)比較不方便。更糟糕的是,ecryptfs并不支持同時(shí)有人訪問(wèn)加密數(shù)據(jù)本身。這樣會(huì)造成競(jìng)爭(zhēng)問(wèn)題。對(duì)于一個(gè)內(nèi)核級(jí)的東西來(lái)說(shuō),這有極大的危險(xiǎn)性。同時(shí),這貨的膨脹率有點(diǎn)高。
然后在CryFS和GoCryptFS里,我選擇GoCryptFS。雖然CryFS是唯一一個(gè)明確聲明自己兼容云存儲(chǔ)的,但是其膨脹率實(shí)在太高了。雖然是云存儲(chǔ),但是畢竟要考慮性價(jià)比的。
那么GoCryptFS的安全問(wèn)題是什么呢?主要隱患來(lái)自和云存儲(chǔ)混用時(shí),攻擊者雖然對(duì)文件內(nèi)容一無(wú)所知,但是可以修改文件內(nèi)容。例如將其他加密文件復(fù)制過(guò)來(lái),或者將部分內(nèi)容嫁接過(guò)來(lái)。審計(jì)報(bào)告里提供了一系列的POC來(lái)說(shuō)明這一風(fēng)險(xiǎn)。這一風(fēng)險(xiǎn)對(duì)于特定情況的用戶來(lái)說(shuō)是非常危險(xiǎn)的,例如在加密區(qū)域存儲(chǔ)多個(gè)可信身份/帳號(hào)身份文件的人。
很幸運(yùn),我對(duì)這方面沒(méi)要求。GoCryptFS的膨脹率不大,僅高于EncFS,完全可以接受。性能也不錯(cuò),僅次于eCryptFS。使用非常方便,同時(shí)還能提供過(guò)得去的安全特性。因此綜合上面所有情況,我選擇GoCryptFS作為云存儲(chǔ)上疊加的加密文件系統(tǒng)。























