VeraCrypt

来自 ArchWiki

此文章或章节已过时。

原因:TrueCrypt 存档页面的启发 (在 Talk:VeraCrypt 中讨论)

VeraCryptTrueCrypt 的一个分支,是一个免费开源的即时加密 (OTFE) 程序。它的一些功能包括

  • 文件内的虚拟加密磁盘,可以像真实磁盘一样挂载。
  • 整个硬盘分区或存储设备/介质的加密。
  • 所有加密算法都使用 LRW 操作模式,对于存储加密,这种模式比具有可预测初始化向量的 CBC 模式更安全。
  • 普通“外部”加密卷内的“隐藏卷”。在没有密码和/或密钥文件的情况下,隐藏卷无法与随机数据区分开来。

有关 TrueCrypt 与其他磁盘加密解决方案的比较的更多详细信息,请参阅 静态数据加密#比较表

安装

注意: 对于打开和访问现有的 TrueCrypt 容器,cryptsetup 是首选方法,因为它与系统的其余部分集成良好。可以使用 truecrypt 创建新的 TrueCrypt 容器,之后可以使用 cryptsetup 打开它。

安装 veracrypt 软件包。

此文章或章节需要扩充。

原因: 在自定义内核中启用 FUSEloop 和您的加密算法(例如 AESXTSSHA512)仍然很重要。(在 Talk:VeraCrypt 中讨论)

使用 cryptsetup 访问 TrueCrypt 或 VeraCrypt 容器

cryptsetup 支持原生打开 VeraCrypt 和 TrueCrypt 容器,而无需 veracrypt 软件包。使用以下命令作为指南。

$ cryptsetup --type tcrypt open container-to-mount container-name

要挂载 VeraCrypt 容器,您必须将 --veracrypt 选项与 --type tcrypt 一起使用。如果使用自定义个人迭代乘数 (PIM),请使用 --veracrypt-query-pim 选项来提示输入 PIM。

container-to-mount 替换为您要打开的设备文件(在 /dev 下)或文件的路径。成功打开后,明文设备将显示为 /dev/mapper/container-name,您可以像挂载任何普通设备一样 mount 它。

如果您使用密钥文件,请使用 --key-file 选项提供它们;要打开隐藏卷,请提供 --tcrypt-hidden 选项;对于以系统模式加密的分区或整个驱动器,请使用 --tcrypt-system 选项。

有关更多详细信息和所有支持的选项,请参阅 cryptsetup(8) § TCRYPT (TRUECRYPT AND VERACRYPT COMPATIBLE) EXTENSION

使用 /etc/crypttab 自动挂载

自 206 版本起,systemd 支持在启动或运行时使用 /etc/crypttab (自动)挂载 TrueCrypt 容器。

以下示例设置将在访问 /mnt/truecrypt-volume 时立即以系统加密模式挂载 /dev/sda2,使用 systemd 的自动挂载逻辑。打开卷的密码在 /etc/volume.password 中给出。请注意,/etc/fstab 中给出的设备文件需要来自 /dev/mapper/ 的文件,而不是例如来自 /dev/disk/by-uuid/ 的文件,以便自动挂载逻辑生效。除此之外,您仍然可以使用来自 /dev/disk/ 的设备文件名在 /etc/crypttab 中可靠地识别加密卷本身。

/etc/crypttab
truecrypt-volume    /dev/sda2    /etc/volume.password    tcrypt-system,noauto

对于标准 truecrypt 卷,请使用 tcrypt 而不是 tcrypt-system。对于隐藏卷,请使用 tcrypt-hidden。对于 veracrypt 卷,请将 tcrypt-veracrypttcrypt 一起使用。

/etc/fstab
/dev/mapper/truecrypt-volume    /mnt/truecrypt-volume    auto    noauto,x-systemd.automount    0    0

您可以直接放入您的文件系统,而不是 auto,并放入常用的挂载选项。这对于 NTFS 非常有用,可以作为普通用户挂载。

有关更多详细信息和支持的选项,请参阅 crypttab(5)

将文件加密为虚拟卷

以下说明将创建一个文件,该文件将充当虚拟文件系统,允许您挂载它并在加密文件中存储文件。这是一种存储敏感信息的便捷方法,例如财务数据或密码,可以将其存储在单个文件中,并可以从 Linux、Windows 或 Mac 访问。

要以交互方式创建新的 truecrypt 文件,请在终端中键入以下内容

$ veracrypt -t -c

按照说明操作,选择默认值,除非您知道自己在做什么

Volume type:
 1) Normal
 2) Hidden
Select [1]: 1
Enter file or device path for new volume: /home/user/EncryptedFile.tc
Enter volume size (bytes - size/sizeK/sizeM/sizeG): 32M
Encryption algorithm:
 1) AES
 2) Blowfish
 3) CAST5
 4) Serpent
 5) Triple DES
 6) Twofish
 7) AES-Twofish
 8) AES-Twofish-Serpent
 9) Serpent-AES
10) Serpent-Twofish-AES
11) Twofish-Serpent
Select [1]: 1
Hash algorithm:
 1) RIPEMD-160
 2) SHA-1
 3) Whirlpool
Select [1]: 1  

文件系统

1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4

选择 [2]

Enter password for new volume '/home/user/EncryptedFile.tc': *****************************
Re-enter password: *****************************
Enter keyfile path [none]: 
Please type at least 320 randomly chosen characters and then press Enter:
Done: 32.00 MB  Speed: 10.76 MB/s  Left: 0:00:00  
Volume created.

您现在可以将新的加密文件挂载到先前创建的目录

$ veracrypt -t /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
注意: Truecrypt 需要 root 权限,因此,以用户身份运行上述命令将尝试使用 sudo 进行身份验证。要以普通用户身份处理文件,请参阅以普通用户身份挂载卷

挂载后,您可以像在任何普通目录中一样在加密目录中复制或创建新文件。当您准备好重新加密内容并卸载目录时,请运行

$ veracrypt -t -d

同样,这将需要通过使用 sudo 获得管理员权限。运行后,检查要加密的文件是否确实不再在目录中。(可能想先尝试不重要的数据)如果它们仍然存在,请注意 rm 不会使数据无法恢复。

有关 truecrypt 的更多信息,请运行

$ man veracrypt
注意: 从 1:7.1a-1 开始,没有看到 man 或 info 页面。

可以在命令行上传递多个选项,从而使自动化访问和创建变得简单。强烈建议阅读 man 页面。

加密物理卷

注意: 如果您在使用图形界面时遇到问题,可以使用 -t 标志在 CLI 模式下运行。

如果您想使用密钥文件,请使用以下命令创建一个

veracrypt --create-keyfile /etc/disk.key

默认情况下,需要密码和密钥才能解锁卷。

在设备 /dev/sda1 中创建一个新卷

# veracrypt --volume-type=normal -c /dev/sda1

将卷映射到 /dev/mapper/truecrypt1

# veracrypt -N 1 /dev/sda1

如果此命令对您不起作用,请尝试此命令来映射卷

# veracrypt --filesystem=none --slot=1 /dev/sda1

只需像往常一样格式化磁盘,选择您喜欢的文件系统,但使用路径 /dev/mapper/truecrypt1。例如,对于 ext4,请使用

# mkfs.ext4 /dev/mapper/truecrypt1

挂载卷

# mount /dev/mapper/truecrypt1 /media/disk

映射和挂载卷

# veracrypt /dev/sda1 /media/disk

卸载和取消映射卷

# veracrypt -u /dev/sda1
注意:veracrypt-1.26.18 起,可能需要 --use-dummy-sudo-password 参数才能以具有 sudo 权限的非 root 用户身份挂载和卸载卷。更多信息请访问 [1]

创建隐藏卷

首先,按照#加密物理卷中所述创建一个普通的外部卷。

将外部卷映射到 /dev/mapper/truecrypt1

# veracrypt -N 1 /dev/sda1

在外部卷的可用空间中创建一个隐藏的 truecrypt 卷

 # veracrypt --type hidden -c /dev/sda1

您需要在此处使用与外部卷不同的密码和/或密钥文件。

取消映射外部 truecrypt 卷并映射隐藏卷

# veracrypt -d /dev/sda1
# veracrypt -N 1 /dev/sda1

只需使用您为隐藏卷选择的密码,TrueCrypt 将自动选择它,而不是外部卷。

在其上创建一个文件系统(如果您尚未创建),并挂载它

# mkfs.ext4 /dev/mapper/truecrypt1
# mount /dev/mapper/truecrypt1 /media/disk

映射和挂载带有隐藏的写保护的外部卷

veracrypt -P /dev/sda1 /media/disk

挂载特殊文件系统

注意: 当前版本的 truecrypt 似乎默认支持 NTFS 写入支持,因此 --filesystem 标志似乎不再是必需的。

在以下示例中,我想挂载 ntfs 卷,但 TrueCrypt 默认不使用 ntfs-3g(因此没有写入权限;在 6.1 版本中已检查)。以下命令对我有效

veracrypt --filesystem=ntfs-3g --mount /file/you/want/to/mount

您可能还希望挂载 ntfs 卷,而不在所有文件上使用执行标志

veracrypt --filesystem=ntfs-3g --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002

通过 fstab 挂载卷

首先,我们需要编写一个脚本来处理通过 fstab 完成的挂载方式。将以下内容放在 /usr/bin/mount.truecrypt

#!/bin/sh
DEV="$1"
MNTPT="$2"
OPTIONS=""
TCOPTIONS=""

shift 3
IFS=','
for arg in $*; do
    case "$arg" in
        system)                   TCOPTIONS=(${TCOPTIONS[*]} --m=system);;
        fs*)                      TCOPTIONS=(${TCOPTIONS[*]} --filesystem=${arg#*=});;
        keyfiles*)                TCOPTIONS=(${TCOPTIONS[*]} --keyfiles=${arg#*=});;
        password*)                TCOPTIONS=(${TCOPTIONS[*]} --password=${arg#*=}) && echo "password triggered" ;;
        protect-hidden*)          TCOPTIONS=(${TCOPTIONS[*]} --protect-hidden=${arg#*=});;
        *)                        OPTIONS="${OPTIONS}${arg},";;

    esac
done

/bin/veracrypt --text --non-interactive ${DEV} ${MNTPT} ${TCOPTIONS[*]} --fs-options="${OPTIONS%,*}"

也不要忘记使该文件可执行

最后,将设备添加到 fstab,如下所示

/dev/sdb3 /mnt truecrypt fs=vfat,defaults 0 0

以普通用户身份挂载卷

TrueCrypt 需要 root 权限才能工作:此过程将允许普通用户使用它,并且还授予对已挂载卷的写入权限。

以下两种方法都需要 Sudo。在继续之前,请确保已配置它。

方法 1:添加 truecrypt 组

创建一个名为 truecrypt 的新组,并为其授予必要的权限。任何属于该组的用户都将能够使用 TrueCrypt。

# groupadd truecrypt

编辑 sudo 配置

# visudo

将以下行附加到 sudo 配置文件底部

# Users in the truecrypt group are allowed to run TrueCrypt as root.
%truecrypt ALL=(root) NOPASSWD:/usr/bin/truecrypt

您现在可以将用户添加到 truecrypt 组

# gpasswd -M first_user,second_user,etc truecrypt
注意: 为了使这些更改生效,已添加到 truecrypt 组的任何用户都必须注销。

之后,您可以通过以下方式挂载设备

# veracrypt --mount /path/to/device /path/to/mountpoint

默认挂载点是 /media/truecrypt1。通常,没有必要使用 --filesystem 标志显式指定设备的文件系统。

为 truecrypt 提供一些权限掩码绝对是合理的。否则,已挂载设备上的每个文件都将是可执行的。因此,您可以改为使用

# veracrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /PATH/TO/DEVICE /PATH/TO/MOUNTPOINT

并将此行添加到您的 bash 配置文件 ~/.bashrc 中作为别名

alias tc1='veracrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /path/to/device"" /path/to/mountpoint'

要挂载此特定设备,请使用

# tc1

作为普通用户。

方法 2:简化的 sudo

只需允许所需用户在没有密码的情况下运行 truecrypt

# visudo

附加以下内容

USERNAME ALL = (root) NOPASSWD:/usr/bin/veracrypt

或者,如果您使用 wheel 组

%wheel ALL = (root) NOPASSWD:/usr/bin/veracrypt

如果您作为普通用户在权限方面遇到任何困难,只需将 -u 标志添加到 truecrypt 挂载命令,例如

$ veracrypt -u /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
注意: 如果您使用的是 VeraCrypt,从 veracrypt-1.2.4-hotfix1 开始,NOPASSWD: /usr/bin/veracrypt 部分必须替换为 NOPASSWD: /usr/bin/veracrypt, /usr/bin/uptime。更多信息请访问 FS#64431[2]

登录时自动挂载

只需添加

$ veracrypt /home/user/Encrypted File.tc /home/user/Encrypted File Folder <<EOF
password
EOF

到您的启动程序中。不要使用 -p 开关,此方法更安全。否则,每个人都可以通过 ps 和类似工具查找密码,因为它在进程名称中! 来源

最新的 truecrypt 有几个后续问题。如果您安装了 expect,这将有效(假设没有密钥文件,也不希望保护隐藏卷),保存到具有 root 权限的文件中,并从 /etc/rc.local 调用

#! /bin/bash
expect << EOF
spawn /usr/bin/truecrypt ''/path/to/EncryptedFile'' ''/mount/point''
expect "Enter password"
send "volume password\n"
expect "Enter keyfile"
send "\n"
expect "Protect hidden volume"
send "\n"
expect eof;
EOF

当然,这不如手动输入密码安全。但对于某些用例,例如当您的 TrueCrypt 文件系统位于共享存储上的文件中时,它比未加密更好。

安全地卸载和取消映射卷(在关机时)

您可以通过以下方式卸载特定设备

# veracrypt -d /path/to/mountpoint

或省略路径以卸载所有 truecrypt 卷。

如果您希望 truecrypt 设备在关机时自动卸载,请将以下内容添加到文件 /etc/rc.local.shutdown

if (/usr/bin/veracrypt --text --list)
then {
/usr/bin/veracrypt -d
sleep 3
}
fi

您也可以省略 sleep 命令,它只是为了给卸载一些时间在实际关机前完成。

故障排除

TrueCrypt 已经在运行

如果在启动 TrueCrypt 时出现消息框TrueCrypt 已经在运行,请检查相关用户的 home 目录中是否有名为 .TrueCrypt-lock-username 的隐藏文件。将 username 替换为个人用户名。删除该文件并再次启动 TrueCrypt。

已删除过时的锁定文件

如果您在启动 Truecrypt 后总是收到消息“删除过时的锁定文件 [....]”,则必须在 Gnome 注销期间杀死 ID 最低的 Truecrypt 进程。编辑 /etc/gdm/PostSession/Default 并在 exit 0 之前添加以下行

kill $(ps -ef | grep veracrypt | tr -s ' ' | cut -d ' ' -f 2)

Unicode 文件/文件夹名称问题

NTFS

如果包含 Unicode 字符的文件或文件夹名称在 TrueCrypt NTFS 卷上显示不正确或根本不显示(而在例如未加密的 NTFS 分区上可以正确处理),请首先验证您是否已安装 NTFS-3G 驱动程序,然后以 root 身份创建以下符号链接

ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs

这将导致 TrueCrypt 自动将此驱动程序用于 NTFS 卷,效果与显式使用相同

truecrypt --filesystem=ntfs-3g /path/to/volume

通过控制台。

还可以考虑设置例如

rw,noatime

TrueCrypt GUI 中的其他选项(设置 > 首选项 > 挂载选项)。

FAT

同样,使用 Windows 创建的 FAT32 卷可能使用 Unicode 而不是 ISO 8859-1。为了全局使用 UTF-8,请设置挂载选项

iocharset=utf8

或者,在本地挂载卷时使用

--fs-options=iocharset=utf8

自 linux-4.14.4 起,默认启用 UTF8 字符集。因此,为了使用 ISO 8859-1 编码挂载卷,您需要使用 --fs-options=utf8=no,请参阅 FS#56781

卸载错误(设备映射器)

如果您在尝试卸载 truecrypt 卷时总是收到消息“device-mapper: remove ioctl failed: Device or resource busy”,解决方案是转到:设置 > 首选项 > 系统集成 > 内核服务并选中该框

Do not use kernel cryptographic services

挂载错误(设备映射器,truecrypt 分区)

尝试挂载 truecrypt 卷时,可能会出现如下消息

Error: device-mapper: create ioctl failed: Device or resource busy
Command failed

如果是这样,请运行

# cryptsetup remove /dev/mapper/truecrypt1

无法设置循环设备

如果您在尝试创建/挂载 TrueCrypt 卷时收到消息“Failed to set up a loop device”,可能是因为您最近更新了内核而没有重启。重启应该可以解决此错误。

否则,请检查是否已将 loop 加载为内核模块

$ lsmod | grep loop

如果未列出,请在 modprobe loop 后重试 TrueCrypt 命令。如果有效,请考虑将 loop 添加到 /etc/modules-load.d 中的模块。

# tee /etc/modules-load.d/truecrypt.conf <<< "loop"
注意: 从 udev 181-5 开始,循环设备模块不再自动加载,此处描述的过程是必要的。

对于较新的内核版本,启动时不会创建循环设备。如果在首次挂载容器文件时没有循环设备,TrueCrypt 将失败(“Failed to set up a loop device”),但也会创建最大数量的循环设备(通常为 256 个),现在应该可以进行挂载。

为了避免这种情况,您可以在挂载文件之前创建一个循环设备

# mknod -m 0660 /dev/loop8 b 7 8

这将创建 /dev/loop8。或者在启动时创建一些循环设备

# echo "options loop max_loop=8" > /etc/modprobe.d/eightloop.conf

max_loop=8 更改为您需要的设备数量。

系统分区密码需要 en_US 键盘布局

如果您正在使用 Xorg(如果您不知道那是什么,那么您很可能正在使用),请使用以下命令来使用美国键盘布局,直到重启

# setxkbmap us

NTFS 卷上权限被拒绝

如果您无法修改文件系统,即使权限看起来是正确的,这也可能是由于未安装 NTFS-3G 造成的,请参阅 NTFS

损坏的标准卷文件系统

如果您无法再访问 VeraCrypt 卷或容器,请安装 testdisk。有关更多信息,请参阅 CGSecurity 页面

$ ./truecrypt -t --filesystem=none /data/data_for_testdisk/truecrypt.dd 
Enter password for /data/data_for_testdisk/truecrypt.dd: 
Enter keyfile [none]: 
Protect hidden volume? (y=Yes/n=No) [No]: 
Enter system administrator password: 
$ mount
...
truecrypt on /tmp/.truecrypt_aux_mnt1 type fuse.truecrypt (rw,nosuid,nodev,allow_other)
# testdisk /tmp/.truecrypt_aux_mnt1/volume

参见