是否可以使用密鑰檔案而不是密碼來加密硬碟?

是否可以使用密鑰檔案而不是密碼來加密硬碟?

研究硬碟加密。解決方案似乎是 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

您應該能夠為多個磁碟區複製此方法(使用不同的密碼或一個共用密碼,您可以選擇)。

相關內容