是否可以使用密钥文件而不是密码来加密硬盘?

是否可以使用密钥文件而不是密码来加密硬盘?

研究硬盘加密。解决方案似乎是 dm-crypt 和 LUKS 使用密码。我使用安装到磁盘池中的多个独立硬盘进行读取。在这种情况下,我必须多次输入密码。

有没有办法让我用密钥文件加密硬盘,也许把它放在 USB 驱动器上,然后在需要时插入?

答案1

实现此目的的最佳方法之一是使用带有加密密钥的智能卡来解锁加密块设备的密钥。您只需要输入密码(工具称为“PIN”,但它实际上是密码)一次,之后它将被缓存。这具有使用您拥有的东西(智能卡本身,无法从中提取私钥)和您知道的东西(密码)保护加密数据的额外优势。

/etc/crypttab像这样格式化你的:

mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
    luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc

在 Debian 及其衍生版本中,initramfs-tools 将注意到 keyscript 并自动将访问智能卡所需的所有工具和守护程序复制到 initramfs。

有关设置智能卡和创建(和加密)密钥的信息可在 中找到/usr/share/doc/cryptsetup/README.opensc.gz

您可以使用尤比奇4或者尤比奇NEO除其他外,为此目的。

实施说明:这个功能有粗糙的边缘,显然不能开箱即用,所以 YMMV。上次我成功实现它时,我必须添加以下技巧:

  • 禁用,systemd因为它灾难性地试图接管设置加密设备的整个过程,但它对导致重大失败的/etc/crypttab原因一无所知。keyscript幸运的是,在 Debian 中,您仍然可以选择退出systemd.
  • 安装此修复程序上部脚本是/etc/initramfs-tools/hooks/yubipin因为内置功能没有安装足够的支持来使 Yubikey 可以从 initramfs 中使用。您可能需要对此进行调整。

    #!/bin/sh
    
    PREREQ=cryptroot
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    # /scripts/local-top/cryptopensc calls pcscd with the wrong path
    ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
    mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
    # opensc-tool wants this dynamically, copy_exec doesn't know that
    cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
    mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
    # without this, pcscd aborts with a pthread_cancel error
    cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
    # this gets copied as a dangling symlink, fix it
    rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    # pcscd needs this to open the reader once it has found it
    cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
    
  • 安装另一个脚本来/etc/initramfs-tools/scripts/local-bottom/killpcscd清理:

    #!/bin/sh
    
    set -e
    
    PREREQ=cryptopensc
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
        prereqs)
            prereqs
            exit 0
            ;;
    esac
    
    # because cryptopensc does not do it properly
    killall pcscd
    

答案2

可以简单地将 luks 密码存储在文件中。

我在我的家用电脑上使用这个;根文件系统位于常规 luks 卷上,我在启动时使用密码解锁该卷。附加驱动器包含带有生成密码的 luks 卷。

该附加卷由位于加密根文件系统上的密码文件解锁。如果根文件系统解锁,则在引导期间会自动解锁。

我的/etc/crypttab看起来像这样:

crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks

第三个字段是密钥文件,none用于根文件系统,但/etc/crypt-data.key用于数据文件系统。/etc/crypt-data.key包含 luks 密码:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

请注意,换行符或任何其他空格将被视为密码的一部分!请注意生成此文件时不要尾随换行符。另外,确保它具有严格的权限:

-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key

您应该能够对多个卷复制此方法(使用不同的密码或一个共享密码,您可以选择)。

相关内容