23
9 月
几种加密工具的对比
- By IanGoo
云端时代,数据安全变得更为重要。数据加密是一种非常行之有效的个人数据保护的手段。但是,数据加密的工具那么多,如何选择呢?
以下是我的一些经验。
我比较深入使用过的加密工具有三个:
- BitLocker
- TrueCrypt/VeraCrypt
- Cryptomator
其他还有一些比如给文件夹加密码的一些小工具,实在是称不上“加密”,也就不多絮叨,主要围绕这三个我比较熟悉的加密方式来展开说。
微软的亲儿子:BitLocker

从Windows Vista开始,BitLocker就集成在了非家用级Windows操作系统当中。
BitLocker是一个基于卷(Volume)的加密,一加密就是整个磁盘。因此,BitLocker最简单明了的用途就是为移动存储设备(U盘、移动硬盘、存储卡等)进行加密。
BitLocker作为跑在系统层面上的组件,拥有和底层硬件很高的集成度,BitLocker可以很好地支持TPM,也可以非常方便地加密任意驱动器——包括系统驱动器。
但是BitLocker的缺陷也是显而易见的。
最主要的就是它的使用受到了很大的限制——它只能用于部分Windows操作系统。在家庭版Windows上不能用,在macOS和Linux上同样一筹莫展。
其次,BitLocker是闭源软件。尽管其核心算法AES是开源的,但是软件总体的封闭性带来了两个问题:第一是指望开源社区将BitLocker带入其他操作系统是不可能了;第二就是潜在的安全疑虑。尽管微软宣称他们并未与留任何后门,但是在信息安全方面有一个最基本的信条——不要指望任何个人和组织的节操,不要信任任何人和组织,微软也不例外。
由于我使用Linux的时间并不算短,因此BitLocker带来了很大的不便,现在已经弃用了。
VeraCrypt

VeraCrypt的前身是非常著名的加密软件TrueCrypt。
但是,TrueCrypt在2014年宣布终止开发。理由是该软件存在“未经修复的安全问题”,并且在官网挂出了“使用TrueCrypt不安全”的红字警告。目前官网只提供了7.2版本的下载链接,这个版本只提供了解密功能,官网首页的大部分内容是教用户如何将加密数据迁移到BitLocker。
幸运的是,TrueCrypt是开源软件。因此,TrueCrypt很早之前就有一些Fork,在TrueCrypt暴毙之后,这些Fork就接过了TrueCrypt的衣钵,成为下一代的强力加密工具。VeraCrypt就是其中之一。
VeraCrypt是由法国的数据加密开发商IDRIX在TrueCrypt基础上开发的一套加密软件,操作和TrueCrypt非常相似,在TrueCrypt代码审计曝出漏洞之前的2013年就已经发布了。在TrueCrypt的基础上,VeraCrypt修改了TrueCrypt的漏洞,同时加强了加密算法。
事实上,如果破解TrueCrypt的加密分区需要一个月,那么破解VeraCrypt可能需要一年。
Paul Rubens
和BitLocker相比,VeraCrypt优势有三:第一,灵活。VeraCrypt不光可以加密卷,也可以生成一个加密的“容器”;第二,跨平台。Windows、Linux、macOS全平台可用;第三,开源,且接收独立的第三方代码审计。
VeraCrypt使用的方式是选定加密的容器或者卷,然后将其挂载(Mount),加密的方式也很多样,除了密码,还可以支持PIM和密钥文件,更强大的是,它还支持双层加密。一个加密容器或者加密卷可以分成两层,分别对应一套密码,外层可以放置一些伪装性质或者虚假内容的文件,而内层则是真正的文件。在特定情况下(比如被暴力威胁),可以交出外层密码,保证内层文件的安全。
至于加密算法,那也多得很,AES、Serpent和Twofish都有,并且可以互相嵌套提升加密效果。
但是如何在云存储方面使用VeraCrypt,那就没那么轻松了。
从本质上说,BitLocker也好,VeraCrypt也好,都是卷级加密而非文件级加密。用户并没有办法将一个“卷”上传到云端。云端能够理解的是文件——但是不论是BitLocker还是VeraCrypt,能做的只是在解锁后,将解锁后的文件与云端同步——但是那样的话,与不用加密软件又有什么区别?
VeraCrypt倒是可以生成一个“容器”,但是问题也有。
首先,默认情况下,VeraCrypt不会记录容器文件的修改时间。而对于以时间戳为基准的同步软件看来(包括OneDrive、坚果云、Syncthing等),不改变修改时间的文件=没有修改。
其次,虽然可以关掉,但是,这个容器的灵活性非常差。说白了用户还是得考虑将新建一个容器这个行为构思成“新买一个U盘”,容器的容量是固定的,当然可以考虑NTFS簇,这样可以实现“看起来是XX MB但是实际占用空间并没有这么大”的效果——可蛋疼的是,云同步软件压根就不支持NTFS簇——因为鬼知道云端的操作系统和文件系统是啥,比如我用的,云端文件系统是Brtfs。所以同步软件会很忠实地反映这个文件的占用体积——可能很难理解,我就说我自己的测试过程吧。
我新建了一个体积为128MB的容器,这是我估算了一下立面大概要放置的文件的体积之后得出的结论。当然打开了动态NTFS簇,毕竟我不想每次同步都要跑掉128MB的流量。出来之后的容器是128MB大小,但是实际占用的空间只有几个M。
看似很美好,但是一开同步,依然吃掉了128MB的流量——因为“体积128MB,实际占用几个MB”这样的特殊属性只有依靠NTFS才能实现,并不具备普适性。
于是第三个加密软件纳入囊中。它是专门为云同步开发的。
Cryptomator

Cryptomator就是一个很有意思的软件了。论安全性,它并不算出色。VeraCrypt关闭文件时间戳的理由就是“安全分析人员有可能通过文件时间戳猜测文件内容”,可见VeraCrypt的开发者都是一群什么样的强迫症,在他们眼中,Cryptomator的加密功能大致也就是个玩具。
但是——使用场景和面向的用户是不一样的。
VeraCrypt面向的大概是国字头的情报人员和执法人员,比如FBI,试图破解TrueCrypt加密的毒枭的硬盘,前前后后两年然后灰溜溜地放弃了。
Cryptomator没这么凶残。它的作用很简单——让用户上传到云端服务器的文件不那么毫无遮拦。
云存储用户或许会有这样的顾虑——尽管厂商宣称“用户数据经过天顶星加密算法,确保数据安全Blahblahblah”但是,如果有个无良服务器管理员,ta是否有权限窥伺用户的数据呢?
Cryptomator就是为了这一目的而诞生的。
举一个很简单的例子,下面这个Tree,是我的加密目录的全部文件:
└─d
├─3B
├─45
├─4B
├─4G
├─55
├─6B
├─6D
├─6N
├─7B
├─DN
├─FI
├─HK
│ └─7JKXB6MPVUU4NUPCYUSGPBQDKFQYFM
│ └─ejHSpjbgqvj4Spq02cjKNAltTzHyfCAo8KjRQSQS3vKX.c9r
├─HM
├─IM
├─KC
├─ML
├─QF
│ └─F3CZKU7ERBHJF2CR42CPXCKZMZCT4N
├─S3
├─U3
└─XA
Emm……能看出来什么吗?从文件名到文件内容,全部被加密了。使用也很简单,将这个目录Mount成一个卷即可,支持WebDAV和FUSE两种挂载方式。
要说问题,很显然,Cryptomator会将文件的目录结构、每个文件的大小和修改时间暴露出来,因此安全性显然是不及VeraCrypt那个冷冰冰的容器的,更是无法和全卷加密相比,但是它胜在灵活,并且可以和云存储很好地协同。另外,Cryptomator的性能也不及VeraCrypt。VeraCrypt的设备挂载后,基本上拥有接近Native状态的性能,我的U盘使用了VeraCrypt加密,依然可以达到300MB/s以上的读写性能(USB 3.2),但是Cryptomator则不行,基本上都在3MB/s左右,可以猜测的原因是Cryptomator是一边存取一边加/解密,这很大程度上制造了I/O瓶颈。最后,Cryptomator的文件系统比较脆弱。如果误操作或者被恶意软件干乱了容器所在的文件,这个容器就废掉了。而且这个“乱”,极为敏感,甚至文件在哪个目录里都不能有一丝错误,否则就会导致用户数据无法读取。如果用户使用的同步软件有版本回滚还好,如果没有的话,那就是非常惨重的数据灾难。所以,一定要做好冷灾备。
事实上,这也是加密软件选用的原则——并不是加密强度越大、功能越复杂越好,需要结合自己的实际使用情况进行选择。
目前,我主要使用的就是VeraCrypt和Cryptomator,前者用于U盘的加密,后者用于云存储上需要加密的内容的加密,相得益彰。