gocryptfs

来自 ArchWiki

来自 gocryptfs

gocryptfs 使用基于文件的加密,它被实现为一个可挂载的 FUSE 文件系统。gocryptfs 中的每个文件在硬盘上存储为一个相应的加密文件。
其亮点包括:Scrypt 密码哈希,所有文件内容的 GCM 加密,以及文件名使用每目录 IV 的 EME 宽块加密。

请参阅 gocryptfs 项目主页以进一步了解其特性、基准测试等。另请参阅 静态数据加密#比较表格 以获取替代方法的概述,以及 EncFS 以了解直接的替代方案。

注意
  • 为了实现其 认证加密 的设计目标,gocryptfs 实现了 AES-EME 加密模式(对于文件名,内容使用标准库进行加密)。虽然 EME 模式尚未被广泛使用/审核,但 gocryptfs 加密模式为数据带来了完整性保护。
  • 请参阅该项目的跟踪 错误报告,了解有关首次安全审计结果的更多信息。

安装

安装 gocryptfsgocryptfs-gitAUR

作为一个 FUSE 文件系统,gocryptfs 完全由用户配置,并将其配置文件存储在用户的目录路径中。

用法

首先查看 gocryptfs(1) 及其示例。作为首次用户,接下来请查看 gocryptfs 最佳实践

在目录的密码学初始化时,主密钥会在以加密方式包装在 gocryptfs.conf 文件中之前输出。它可用于通过恢复程序重新创建配置。如果主密钥本身丢失但配置文件可用,请参阅 gocryptfs-xray(1) 以了解如何使用加密密码再次输出它。

提示
  • 执行 gocryptfs -speed 以测试可用加密模式的吞吐量。自动选择将选择系统可用的最快模式。
  • -fido2 选项允许使用 U2F 硬件令牌来方便地初始化和挂载加密数据。

使用普通模式的示例

创建 cipher 目录来存储加密数据,以及 plain 目录来访问解密后的数据。然后,运行 gocryptfs 初始化来设置加密。

$ mkdir cipher plain
$ gocryptfs -init cipher
Choose a password for protecting your files.
Password:
Repeat: 

Your master key is:
[...]

要打开加密目录 cipher 并从 plain 访问它

$ gocryptfs cipher plain
Password: 
Decrypting master key
Filesystem mounted and ready

现在您有了一个正常工作的 gocryptfs,它存储在 cipher 中并挂载到 plain。您可以通过在 plain 目录中创建一个空白文件来验证这一点。该文件将以加密形式显示在 cipher 目录中。

$ touch plain/test.txt
$ ls cipher
  gocryptfs.conf  gocryptfs.diriv  ZSuIZVzYDy5-TbhWKY-ciA==

使用反向模式的示例

基于文件的加密方法的主要应用是加密备份。基于 FUSE 的文件系统在这方面很灵活,因为它们允许使用标准工具进行各种备份目标。例如,gocryptfs 加密的 FUSE 挂载点可以轻松地直接在 Samba/NFS 共享或 Dropbox 位置上创建,使用 rsync 同步到远程主机,或者只是手动复制到远程备份存储。

警告:默认情况下,gocryptfs.conf 文件为了方便起见存储在备份目录中。如果您将 gocryptfs.conf 文件上传到在线源,如果您的密码已知或被破解,您的备份可能会被解密。使用强密码会降低成功攻击的几率。 [1] 您可以选择使用来自其他位置的 gocryptfs.conf 文件,方法是提供 -config 选项以及配置文件的路径。

gocryptfs 的反向模式对于创建加密备份特别有用,因为它几乎不需要在要备份的机器上增加额外的存储容量。

以下示例显示了用户 archie 创建 /home/archie 备份的情况

首先,archie 初始化 home 目录的配置

$ gocryptfs -init -reverse /home/archie
Choose a password for protecting your files.
Password:
...

其次,为 home 目录的加密视图创建一个空目录并挂载

$ mkdir /tmp/crypt
$ gocryptfs -reverse /home/archie /tmp/crypt
Password:
Decrypting master key

Your master key is:
...
Filesystem mounted and ready.
$
提示
  • 为了考虑到上述警告,可以在初始化期间使用 -config /home/archie/gocryptfs.conf,从而也反向加密配置文件。
  • 有许多选项可用于从反向挂载中排除文件或目录;请参阅 gocryptfs(1) § EXCLUDING_FILES。请注意,如果仅在稍后进行排除,则使用 rsync 等软件可能会发生错误或警告。[2]

第三,archie 创建加密目录的备份,在本示例中是一个简单的本地副本

$ cp -a /tmp/crypt /tmp/backup

完成。

加密目录可以保持挂载以用于用户会话,或者手动卸载

$ fusermount -u /tmp/crypt
$ rmdir /tmp/crypt

要从加密备份还原,请使用 gocryptfs 的普通模式挂载一个纯文本视图

$ mkdir /tmp/restore
$ gocryptfs /tmp/backup/ /tmp/restore
Password: 
Decrypting master key
...
Filesystem mounted and ready.
$

现在可以还原所需的文件。

使用 FIDO2 选项的示例

可以使用 U2F 硬件令牌(而不是密码)来初始化和挂载加密目录。可以强制或切换 FIDO2 令牌选项,以在解密时进行 PIN/用户存在(触摸)/用户验证(指纹)验证(请参阅 fido2-assert(1))。

以下示例使用令牌和 PIN 验证初始化、挂载和卸载加密目录

$ gocryptfs -init -fido2 /dev/hidraw0 -fido2-assert-option pin=true crypt
FIDO2 Register: interact with your device ...
Enter PIN for /dev/hidraw0: 
FIDO2 Secret: interact with your device ...
Enter PIN for /dev/hidraw0:
Your master key is:
    ea6d7d00-...
$ gocryptfs -fido2 /dev/hidraw0 crypt plain
FIDO2 Secret: interact with your device ...
Enter PIN for /dev/hidraw0: 
Decrypting master key
Filesystem mounted and ready.
$ fusermount -u plain

使用了用户存在交互(interact with your device ...),因为令牌默认为此设置。在初始化期间使用 -fido2-assert-option up=false 选项将切换它。

注意:由于该功能不会在令牌上创建 FIDO2 驻留密钥,因此生成的主密钥可用于解密和挂载目录,而无需令牌。
$ gocryptfs -masterkey=ea6d7d00-e2187a69-fab9c952-223e7821-16fb0ac2-ae4ffa1e-5469f9f1-2a7b051c crypt plain
Using explicit master key.
THE MASTER KEY IS VISIBLE VIA "ps ax" AND MAY BE STORED IN YOUR SHELL HISTORY!
ONLY USE THIS MODE FOR EMERGENCIES
Filesystem mounted and ready.

使用 pam_mount 自动挂载

如果您的加密目录使用与您的用户帐户相同的密码,您可以使用 pam_mount 在登录时自动挂载它。

虽然 gocryptfs 命令在直接调用时适用于 fuse3,但 pam_mount 尝试使用 fuse2 中的 mount.fuse

您需要按照 pam_mount#Login manager configuration 中的指定将 pam_mount 添加到 /etc/pam.d/system-login,然后您必须在 /etc/security/pam_mount.conf.xml 配置文件中配置要挂载的特定目录。下面给出一个示例

/etc/security/pam_mount.conf.xml
<!-- Example using gocryptfs -->
  <volume
      fstype="fuse"
      mountpoint="/home/YOURUSER/plain"
      path="/usr/bin/gocryptfs#/home/YOURUSER/cipher"
      options="nodev,nosuid"
      user="YOURUSER"
  />

GUI 封装器

有一些应用程序可为 gocryptfs 提供图形用户界面。

SiriKali

一个 Qt/C++ GUI 应用程序,用于管理 gocryptfs、eCryptfscryfsEncFSfscrypt 和 securefs 加密文件夹。它还可以使用 SSHFS 连接到 SSH 服务器。从 sirikaliAUR 安装它。

gocryptfs-ui

一个 bash 脚本 gocryptfs-ui 提供了一个围绕 gocryptfs 命令行实用程序的简单 zenity GUI,用于挂载和卸载加密目录。它包括一个桌面启动器。从 gocryptfs-uiAUR 安装它。

cryptor

cryptor 是一个基于 vala/gtk3 的应用程序,提供了一个 GUI 来创建和挂载加密目录。它可以存储包含加密目录列表的配置文件,具有托盘图标支持,并包含一个桌面启动器。从 cryptorAUR 安装它。

参见