跳转至内容

VeraCrypt

来自 ArchWiki
(重定向自 TrueCrypt

本文或本章节已过时。

原因: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

如果使用自定义的个人迭代乘数 (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。继续之前请确保已正确配置。

方法一:添加 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

作为普通用户。

方法二:简化的 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-1.26.20 起,NOPASSWD: /usr/bin/veracrypt 部分必须替换为 NOPASSWD: /usr/bin/veracrypt, /usr/bin/true,如上游 issue #1498 报告。但是,之前从 veracrypt-1.2.4-hotfix1veracrypt-1.26.18 使用的是 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 正在运行”时,请检查该用户的主目录中是否存在一个名为 .TrueCrypt-lock-username 的隐藏文件。将 username 替换为用户的具体用户名。删除该文件,然后再次启动 TrueCrypt。

已删除陈旧的锁定文件

如果您在启动 TrueCrypt 后总是收到“Delete stale lockfile [....]”的消息,则在 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

命令。

也可以考虑在 TrueCrypt GUI(设置 > 首选项 > 挂载选项)中设置以下选项

rw,noatime

等等。

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 起,loop 设备模块不再自动加载,此处描述的过程是必要的。

使用较新的内核版本,启动时不会创建环回设备。如果首次挂载容器文件时没有环回设备,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(如果您不知道这是什么,很可能您正在使用),请使用以下命令在重启前使用 US 键盘映射

# 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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.