我有Ubuntu14.04桌面,我使用Truecrypt存储我的机密文件。我读过这样的文章,因为Truecrypt可以动态加密,所以它只存储解密的内容(以及用户的密码和他的密钥文件,我认为呢?)在内存中。如果这一切都是真的,那么这是否意味着即使我不加密交换,我的数据也不会被存储在Truecrypt容器中(以及我的密码和密钥文件)?是否会以未加密的形式出现在交换分区上?
发布于 2016-08-29 00:07:15
通常,如果您有任何加密的存储,那么您应该加密您的交换。这适用于任何加密系统,而不仅仅是TrueCrypt。任何程序的数据都可能以交换结束,包括操纵机密数据的程序。内核根据访问频率选择它放入交换中的数据,它不知道数据的哪一部分更机密。
TrueCrypt本身确实要求操作系统为其提供内存,内存锁在内存中,不能交换。我认为,如果操作系统不愿意给它足够的RAM,它不会拒绝操作,所以这种行为不能得到保证。即使是这样,也于事无补:那些操纵机密数据的程序不会有这样的保护。例如,如果在TrueCrypt分区中的文件上运行编辑器,编辑器的内存可能会被交换。
您还应该确保存储临时数据的所有位置都是加密的。在Linux上,这包括/tmp (也有/var/tmp,但它的使用是显式的,而任何程序都可能最终使用/tmp)。许多现代的Linux系统,包括Ubuntu14.04,都在/run下放置临时文件,它总是在内存中(虚拟内存,即:它可以被交换),但是有些应用程序是硬代码/tmp。临时数据可能以临时数据结束的其他常见位置包括/var/spool/cups (打印机假脱机程序,如果您打印机密文档)、/var/spool/mail (传入邮件)、/var/spool/postfix (发送邮件,如果使用不同的- adapt目录名,则使用不同的MTA)、~/.cache。
发布于 2016-08-28 23:25:17
这更像是一个Linux问题。由于Truecrypt作为用户空间程序运行,它无法控制其内存页,也就是说,它将内存管理留给内核。
内核从未被告知Truecrypt所使用的内存页是机密的,因此它可能会将这些页面放在交换中。永远也不会被告知它的版面被交换了。对于用户空间进程(Truecrypt)来说,虚拟内存只是虚拟内存,不管它目前是在RAM芯片中还是在交换设备上。
因此,如果您不加密交换分区并使用Truecrypt您的密钥(某种PBKDF之后的密码)是不安全的。如果某个键恰好位于被交换的内存中,则可以从磁盘读取该键。
在运行Truecrypt之前,执行cat /proc/swaps并对每个可用的交换空间执行sudo swapoff <partition or file> (或者最好使用加密的交换空间)。
(我说的是一个用户空间进程,因为它不同于cryptsetup,它作为内核模块工作,并保护其内存页不被交换。)
Truecrypt自2014年5月以来不再收到任何更新(正如它在项目主页上说的那样)。您应该认真考虑使用不同的工具来加密您的文件。一些备选办法是:
cryptsetup在每个linux发行版上都是可用的(您正在使用Ubuntu)。尽管它需要使用循环设备。cryptsetup和gnupg,并抽象出循环设备的使用。https://security.stackexchange.com/questions/135175
复制相似问题