18 个版本
0.2.19 | 2021年7月26日 |
---|---|
0.2.16 | 2021年2月8日 |
0.2.14 | 2020年9月6日 |
0.2.9 | 2020年6月23日 |
0.2.1 | 2019年10月10日 |
#339 在 身份验证 中
每月32次下载
105KB
1.5K SLoC
fido2luks
这将允许您使用兼容 FIDO2 的密钥解锁您的 LUKS 加密磁盘。
注意:此程序已在 Fedora 31、Ubuntu 20.04、NixOS 下使用 Solo Key、Trezor Model T、YubiKey (fw >= 5.2.3) 进行测试。
设置
先决条件
dnf install clang cargo cryptsetup-devel -y
设备
git clone https://github.com/shimunn/fido2luks.git && cd fido2luks
# Alternativly cargo build --release && sudo cp target/release/fido2luks /usr/bin/
sudo -E cargo install -f --path . --root /usr
# Copy template
cp dracut/96luks-2fa/fido2luks.conf /etc/
# Name is optional but useful if your authenticator has a display
echo FIDO2LUKS_CREDENTIAL_ID=$(fido2luks credential [NAME]) >> /etc/fido2luks.conf
# Load config into env
set -a
. /etc/fido2luks.conf
# Repeat for each luks volume
# You can also use the `--token` flag when using LUKS2 which will then store the credential in the LUKS header,
# enabling you to use `fido2luks open-token` without passing a credential as parameter
sudo -E fido2luks -i add-key /dev/disk/by-uuid/<DISK_UUID>
# Test(only works if the luks container isn't active)
sudo -E fido2luks -i open /dev/disk/by-uuid/<DISK_UUID> luks-<DISK_UUID>
Dracut
cd dracut
sudo make install
Grub
将 rd.luks.2fa=<CREDENTIAL_ID>:<DISK_UUID>
添加到 /etc/default/grub 中的 GRUB_CMDLINE_LINUX
注意:这仅适用于您的根磁盘,如果使用 fido2luks add-key
添加了密钥,systemd 将尝试使用相同的密钥解锁所有其他 LUKS 分区。
grub2-mkconfig > /boot/grub2/grub.cfg
我还建议将可执行文件复制到 /boot,以便在您需要从救援系统访问磁盘时能够访问它。
mkdir /boot/fido2luks/
cp /usr/bin/fido2luks /boot/fido2luks/
cp /etc/fido2luks.conf /boot/fido2luks/
测试
重新启动并查看是否正常工作,如果是这样,您应该从您的 LUKS 标头中删除旧的不太安全的密码。
# Recommend in case you lose your authenticator, store this backupfile somewhere safe
cryptsetup luksHeaderBackup /dev/disk/by-uuid/<DISK_UUID> --header-backup-file luks_backup_<DISK_UUID>
# There is no turning back if you mess this up, make sure you made a backup
# You can also pass `--token` if you're using LUKS2 which will then store the credential in the LUKS header,
# which will enable you to use `fido2luks open-token` without passing a credential as parameter
fido2luks -i add-key --exclusive /dev/disk/by-uuid/<DISK_UUID>
附加设置
无密码
如下一节所述,删除您之前添加的密钥,如果已经添加过。
打开 /etc/fido2luks.conf
并将 FIDO2LUKS_SALT=Ask
替换为 FIDO2LUKS_SALT=string:<YOUR_RANDOM_STRING>
,但请注意,此密码将被包含在 initramfs 中。
将新配置导入到 env
set -a
. /etc/fido2luks.conf
然后将新的密钥添加到每个设备,之后更新 dracut dracut -f
多个密钥
支持附加/备份密钥,可以将多个 fido2luks 凭证添加到 /etc/fido2luks.conf 文件中。凭据令牌用逗号分隔。
FIDO2LUKS_CREDENTIAL_ID=<CREDENTIAL1>,<CREDENTIAL2>,<CREDENTIAL3>
移除
从 /etc/default/grub 中的 GRUB_CMDLINE_LINUX
移除 rd.luks.2fa
set -a
. fido2luks.conf
sudo -E fido2luks -i replace-key /dev/disk/by-uuid/<DISK_UUID>
sudo rm -rf /usr/lib/dracut/modules.d/96luks-2fa /etc/dracut.conf.d/luks-2fa.conf /etc/fido2luks.conf
工作原理
fido2luks 基于 LUKS(Linux 磁盘加密的抽象)和 FIDO2 扩展(hmac-secret
)两个基本构建块。该 hmac-secret
扩展允许从两个输入中推导出密钥,即用户提供的盐/密码/密钥文件以及 FID2 设备内部包含的另一个密钥。然后,hmac-secret
函数的输出将用于解密 LUKS 头,进而用于解密磁盘。
+-------------------------------------------------------------------------------+
| |
| +-----------------------------------------+ |
| | FIDO2 device | |
| | | |
| | | |
+-------+--------+ +------+ | +---------------+ | | +------------------------+
| Salt/Password +-> |sha256+------------------------> | | | v | LUKS header |
+----------------+ +------+ | | | | | | +---------------+
| | | | +--------+ +------------------------+--------> |Disk master key|
| | sha256_hmac +---------> | sha256 +-------> | Keyslot 1 | +---------------+
+----------------+ | +----------+ | | | +--------+ +------------------------+
| FIDO credential+---------------> |Credential| +----> | | | | Keyslot 2 |
+----------------+ | |secret | | | | +------------------------+
| +----------+ +---------------+ |
| |
| |
+-----------------------------------------+
由于所有这些组件都相互依赖,丢失或损坏其中任何一个都会使磁盘无法解密,因此备份 LUKS 头至关重要,理想情况下设置备份密码或利用多个 FIDO2 设备。每个附加的凭据和密码组合都需要自己的 LUKS 密钥槽,因为凭据密钥对于每个新的凭据都是随机生成的,这将导致完全不同的密钥。
许可证
许可下
- Mozilla Public License 2.0,(LICENSE-MPL 或 https://www.mozilla.org/en-US/MPL/2.0/)
贡献
除非你明确声明,否则你提交的任何旨在包含在作品中的贡献,如 MPL 2.0 许可证中定义的,将按照上述方式许可,不附加任何额外条款或条件。
依赖
~17MB
~390K SLoC