在 Ubuntu 14.04 上构建 TrueCrypt

在 Ubuntu 14.04 上构建 TrueCrypt

在整个 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:

  1. $ 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
  2. $ mkdir -p $HOME/src/pkcs-11
  3. 将 truecrypt 源放到/home/USERNAME/truecrypt-7.1a-source
  4. 开始建造:$ 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

相关内容