我移植过trueCrypt到嵌入式平台上,还做过基于trueCrypt+国密(SM)的内核驱动。VeraCrypt是一个不错的加密软件,基于trueCrypt的后续版本。
VeraCrypt的最大特点是跨平台,Windows、Linux、MacOS都有对应的版本,甚至一些小众的系统,比如FreeBSD上,都有支持,并且衍生了一些非GPL的版本(tcplay),可以说商业上使用也很方便。目前很难看到一个能跨多个平台的加密软件。
其它回答里提到的VeraCrypt的一些“缺点”其实算不上缺点。
1. 太臃肿。这是因为VeraCrypt的功能多,它甚至可以加密启动盘,我估计很多人都没用过这个功能。VeraCrypt有很多简化的版本,比如Linux上的tcplay就是一个极简的,兼容VeraCrypt的加密工具。如果动手能力前,完全可以基于VeraCrypt修改一个简化版本。
2. 速度慢。这种说法是不太正确的,VeraCrypt家族的加密解密速度并不慢,翻代码就知道了,VeraCrypt会根据CPU的核心数来创建多线程的加密解密线程池,它的速度完全取决于选取的加密算法(通常是AES)。如果用内置的算法,可能会存在编译优化不够好的问题,但这些算法的代码是公开的。相比于闭源的汇编级别的加密算法优化,这种开源的实现相对安全。同样的,如果动手能力强,把AES算法库替换成优化过的,速度肯定很快。
3. 不够安全。VeraCrypt不缓存密钥,对于这个安全性的问题,建议去研究一下代码,VeraCrypt使用的是两级密钥,用户的密钥只用于解开第二级密钥,所以用户密码并不在内存中。内存在释放的时候也做过清理。下面就是VeraCrypt的擦除缓存的代码:
#define burn(mem,size) do { volatile char *burnm = (volatile char *)(mem); int burnc = size; while (burnc--) *burnm++ = 0; } while (0) void Buffer::Erase () { if (DataSize > 0) burn (DataPtr, DataSize); }
VeraCrypt的最大特点是可以创建隐藏的加密卷,理论上说,你可以把隐藏的加密卷放到磁盘的任意一个角落里,别人如果不知道密钥的话,甚至无法发现这个隐藏数据区,可能会当做垃圾数据处理。
当年trueCrypt突然放弃维护的时候,就有阴谋论说,是因为恐怖分子使用trueCrypt传递数据,CIA也没办法解开,最后给开发者施压停止了trueCrypt的开发。
所以,如果你的数据要跨平台加密访问,那么VeraCrypt是一个不错的选择。