在整个 NSA 事件中,人们试图重建与 truecrypt.org 提供的二进制文件完全相同的二进制文件,但没有成功。因此,有些人认为它们可能是使用源代码中没有的后门编译的。-> 那么如何在最新的 Ubuntu 版本上进行编译(我使用的是 UbuntuGNOME,但这应该没关系)?我尝试了一些以前 Ubuntu 版本的教程,但它们似乎不再起作用了?
编辑:
https://madiba.encs.concordia.ca/~x_decarn/truecrypt-binaries-analysis/ 现在你可能会想“好吧,我们不需要构建”,但是:为了构建,他使用了闭源软件,并且有概念验证,其中受损的编译器仍然将后门放入二进制文件中:1.没有后门的源代码 2.二进制文件与参考二进制文件完全相同 3.二进制文件仍然包含后门
edit2(回复帖子):
使用时$ make -j 2 PKCS11_INC=$HOME/src/pkcs-11
我得到:
... /usr/include/wx-2.8/wx/dynarray.h:669:5: 注意:在宏“_WX_DEFINE_TYPEARRAY_PTR”的扩展中 _WX_DEFINE_TYPEARRAY_PTR(_wxArray##名称,名称,基础,类声明) ^ /usr/include/wx-2.8/wx/dynarray.h:655:5: 注意:在宏“WX_DEFINE_TYPEARRAY_WITH_DECL_PTR”的扩展中 WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T,名称,基数,类WXDLLEXPORT) ^ /usr/include/wx-2.8/wx/dynarray.h:829:5: 注意:在宏“WX_DEFINE_EXPORTED_TYPEARRAY_PTR”的扩展中 WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T,名称,wxBaseArrayPtrVoid) ^ /usr/include/wx-2.8/wx/bookctrl.h:26:1: 注意:在宏“WX_DEFINE_EXPORTED_ARRAY_PTR”的扩展中 定义一个 WX_DEFINE_EXPORTED_ARRAY_PTR 对象,用于将 wxWindow 对象转换为数组。 ^ 链接 truecrypt /usr/bin/ld: /home/user/src/truecrypt-7.1a-source/Volume/Volume.a(SecurityToken.o): 对符号‘dlopen@@GLIBC_2.1’未定义引用 /lib/i386-linux-gnu/libdl.so.2:添加符号时出错:命令行中缺少 DSO collect2:错误:ld 返回 1 退出状态 make[1]: *** [truecrypt] 错误 1 make:*** [全部] 错误 2 用户@用户-pc:~/src/truecrypt-7.1a-source$
使用时$ make -j 2 PKCS11_INC=$HOME/src/pkcs-11 LIBS=-ldl
:
... Forms/VolumeSizeWizardPage.o:在函数“TrueCrypt::VolumeSizeWizardPage::GetVolumeSize() const”中: VolumeSizeWizardPage.cpp:(.text._ZNK9TrueCrypt20VolumeSizeWizardPage13GetVolumeSizeEv+0x80): 对“TrueCrypt::StringConverter::ToUInt64(std::basic_string, std::allocator > const&)”的引用未定义 Forms/VolumeSizeWizardPage.o:在函数“TrueCrypt::VolumeSizeWizardPage::SetVolumeSize(unsigned long long)”中: VolumeSizeWizardPage.cpp:(.text._ZN9TrueCrypt20VolumeSizeWizardPage13SetVolumeSizeEy+0x8f): 对“TrueCrypt::StringConverter::FromNumber(unsigned long long)”的引用未定义 Forms/WizardFrame.o:在函数“TrueCrypt::WizardFrame::SetStep(int, bool)”中: WizardFrame.cpp:(.text._ZN9TrueCrypt11WizardFrame7SetStepEib+0xe6): 对“TrueCrypt::Event::Connect(TrueCrypt::EventConnectorBase const&)”的引用未定义 collect2:错误:ld 返回 1 退出状态 make[1]: *** [truecrypt] 错误 1 make:*** [全部] 错误 2 用户@用户-pc:~/src/truecrypt-7.1a-source$
(顺便说一下,没有make -j ...
参数也一样)
编辑3
现在可以正常工作了,感谢 user76204 和 GEO:
$ sudo apt-get install build-essential nasm libfuse-dev wx-common wx2.8-headers libwxbase2.8-dev libwxsvg-dev libwxgtk2.8-0 libwxgtk2.8-dev
$ mkdir -p $HOME/src/pkcs-11
- 将 truecrypt 源放到
/home/USERNAME/truecrypt-7.1a-source
- 开始建造:
$ LIBS=-ldl make -j 2 PKCS11_INC=/home/USERNAME/src/pkcs-11/
答案1
有一个计划审计 truecrypt关于软件的安全性以及对其许可证措辞的审查,您可能会觉得有趣。
这是我在 12.04 上成功编译的方法,但它应该适用于更高版本的 Ubuntu:
sudo apt-get install build-essential nasm libfuse-dev wx-common wx2.8-headers libwxbase2.8-dev libwxsvg-dev libwxgtk2.8-0 libwxgtk2.8-dev
您还需要从官方 RSA 站点获取一些特定的 PKCS-11 头文件。您可以使用 wget 一次性获取所有文件,它可*
与 ftp 下载一起使用:
mkdir -p $HOME/src/pkcs-11
wget 'ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/pkcs11*' -P $HOME/src/pkcs-11
现在从下载源代码truecrypt 网站gpg
并在获取公钥后使用 进行验证(如有必要)。然后也许将其提取到您的~/src
。
运行时,您需要提供包含头文件的 pkcs-11 文件夹的名称make
,因此如果与下面的路径不同,请提供正确的路径。当然,请在 cd 命令和下面的 cp 命令中将其替换为您自己的真实路径。(Truecrypt 二进制文件将在源文件夹的文件夹Truecrypt_source
中找到。)Main
cd Truecrypt_source
make PKCS11_INC=$HOME/src/pkcs-11
sudo cp Truecrypt_source/Main/truecrypt /usr/local/bin
有时您可能需要在 make 命令行中添加LIBS=-ldl
以下内容这个问题。
现在您新编译的 truecrypt 将可供使用,并且您可以确信它没有后门。
笔记:在安装新版本之前,truecrypt
如果已经安装了该版本,则应使用随二进制文件一起安装的卸载脚本进行卸载:
sudo /usr/bin/truecrypt-uninstall.sh
答案2
我在 Ubuntu 14.04 上遇到了同样的问题。
LIBS=-ldl make PKCS11_INC=/tmp/truecrypt/pkcs11
解决了我的问题(/tmp/truecrypt/pkcs11 是我的 pkcs11 文件存储的地方。)
对于在 14.04 上进行编译的人,请注意:不要安装 libwxgtk3.0-dev,而应使用较旧的 libwxgtk2.8-dev,否则由于 libwxgtk3.0-dev 中的错误,它将无法编译。
看https://groups.google.com/forum/#!topic/wx-users/2D_my-umcLU