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,試試看能不能調試應用部分。