Image Image Image Image Image

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盘的加密,后者用于云存储上需要加密的内容的加密,相得益彰。

Tags |