Instructions for Building TrueCrypt 6.3a in Linux
TrueCrypt最初是为Windows平台上开发的加解密软件,后来也支持了Linux和Mac OS X平台,但是TrueCrypt的重点仍然是Windows平台,Linux和Mac OS X至今还不支持System Encryption功能并且AES算法也没有使用x86汇编。具体是什么原因,没有找到官方的说法,可能的原因如:
1. TrueCrypt的重点是Windows平台,支持Linux和Mac OS X平台可能仅为了提供软件的完整性和跨平台使用的便利性。
2. Linux Kernel 2.6.x已经提供了device mapper架构下的dm-crypt目标驱动。它和cryptsetup-LUKS应用层工具一起可以提供System Encryption功能。TrueCrypt开发人员可能认为dm-crypt据有天生的优势,目前没有必要在Linux平台下提供重复功能软件(dm-crypt代码在Linux kernel中直接维护,避免了很多问题,目前主流的Linux发布版本都支持dm-crypt with luks)。
3. TrueCrypt提供System Encryption功能并不困难,但是要像Windows版本那样提供真正的全磁盘加密,也就是Linux下面的/boot也要加密,这需要修改Grub等bootloader,而且要尽量避免bootloader升级带来的兼容问题,也可以提供一个自己的bootloader提供解密功能并引导Linux的bootloader启动,完成这项工作也是非常费时。
注: cryptsetup目前也不支持/boot加密,有人修改了Grub2的代码实现的此功能,但是他在文章中提到:"The method is truly the bleeding edge and the modified code is not even in the trunk of GRUB2"。
TrueCrypt为了避免受到Linux Kernel版本变化的影响,driver部分采用FUSE(file system in userspace)架构,也就是driver部分运行在userspace中,虽然FUSE架构写的非常稳定和高效,但是还是会影响性能,而且AES算法使用的C实现而也没有使用x86汇编。TrueCrypt for Linux 没有像Windows本版那样提供benchmark功能,如果排除程序本身在Linux和Windows平台之间下的性能差异,性能应该比Windows版本低一些,但是本人没有测试过。
虽然TrueCrypt的Linux版本和Windows本版比起来有种种的不足,但是TrueCrypt丰富的功能,友好的界面和稳定性在Linux平台下的众多的开源加解密软件中还是非常出色,值的我们去研究和使用。
参考TrueCrypt代码包中ReadMe.txt和Makefile文件,折腾一番,成功编译出可执行文件问题不大。TrueCrypt的Makefile文件编写的非常好,ReadMe.txt也写的还行,就是还不够详细。如果你想编译Debug本版进行调试,还得花费一定的时间处理编译中出现的各种问题。本人在Ubuntu 9.04/9.10和Fedora 11/12都编译成功,下面以Ubuntu 9.10为例来演示编译步骤。
1. sudo apt-get install build-essential
2. sudo apt-get install libfuse-dev
3. 下载PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20 header files中三个文件:pkcs11.h,pkcs11f.h,pkcs11t.h放到PKCS11_INC文件夹下。
export PKCS11_INC="/路径/PKCS11_INC" #设置临时环境变量,每次重启后进行编译都必须设置。
如果你不想每次重启都设置环境变量,可以在Ubuntu的~/.bashrc文件末尾部分加入:
#Set PKCS11_INC environment variable for TrueCrypt
PKCS11_INC=/路径/PKCS11_INC
export PKCS11_INC
4.
(a)如果你不想下载wxWidgets源代码包进行编译,按下面步骤:
1-1.
(1)For release version with GUI
sudo apt-get install libwxgtk2.8-0 libwxgtk2.8-dev wx2.8-headers wx-common
(2)For release & debug version with GUI and NOGUI
sudo apt-get install libwxbase2.8-0 libwxbase2.8-dbg libwxbase2.8-dev libwxgtk2.8-0 libwxgtk2.8-dbg libwxgtk2.8-dev wx2.8-headers wx-common wx2.8-i18n
注释:
libwxbase2.8 * : non-GUI support classesof wxWidgets toolkit
libwxgtk2.8 * : wxWidgets Cross-platfrom c++ GUI toolkit
wx2.8-i18n : i18n是internationalization的缩写,i和n之间正好18个字母,好像是国际化语言包吧。
wx2.8-doc
wx2.8-examples
1-2.
make # build truecrypt release
make DEBUG=1 DEBUGGER=1 # build truecrypt debug
(b)如果你想编译wxWidgets源代码只用来支持truecrypt编译,按以下步骤:
1-1.
apt-get install gnome-core-devel
make WX_ROOT= wxWidgets源代码路径 wxbuild # build wxwidgets release library
make DEBUG=1 DEBUGGER=1 WX_ROOT=wxWidgets源代码路径 wxbuild # build wxwidgets debug library
1-2.
make WXSTATIC=1 # build truecrypt release
make DEBUG=1 DEBUGGER=1 WX_ROOT=wxWidgets源代码路径 WXSTATIC=1 # build truecrypt debug
如果只需要编译控制台界面,在make命令后面加上NOGUI=1
(c)你也可以直接编译wxWidgets全部源代码,使用make install命令安装,这里不提供具体步骤。
在编译wxWidgets-2.8.10代码的过程中可能出现socket错误,这需要在src/gtk/gsockgtk.cpp中添加一个宏定义如下:
+#define GSocket GlibGSocket
#include <gdk/gdk.h>
#include <glib.h>
+#undef GSocket
推荐大家采用4(b)中提供的方法来编译。
5. 如果编译成功,在/Main目录下面会生成一个truecrypt可执行档案(对比Windows本版会生成多个文件,Linux本版这点很好)。如果编译的是debug版本,你可以启动gdb,试试看能不能调试应用部分。