Можно ли зашифровать жесткий диск с помощью файла-ключа вместо пароля?

Можно ли зашифровать жесткий диск с помощью файла-ключа вместо пароля?

Рассматриваю шифрование жесткого диска. Решение, похоже, 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илиЮбикей НЕОсреди прочего для этой цели.

Заметки по реализации: Эта функция имеет грубые края и, по-видимому, не работает из коробки, так что YMMV. В последний раз, когда мне это удалось, мне пришлось добавить следующие хаки:

  • Отключить systemd, потому что он катастрофически пытается взять на себя весь процесс настройки зашифрованных устройств, /etc/crypttabно он ничего не знает о keyscriptтом, что приводит к большому ПРОВАЛУ. К счастью, в Debian вы все еще можете отказаться от systemd.
  • Установите этот скрипт fixer-upper, так /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

Вы должны иметь возможность повторить этот подход для нескольких томов (либо с разными паролями, либо с одним общим паролем, по вашему выбору).

Связанный контент