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

14

Заглядывая в шифрование жесткого диска. Похоже, что переход к решению - это dm-crypt с LUKS с использованием пароля. Я работаю с несколькими независимыми жесткими дисками, смонтированными в пул дисков для чтения. В этом случае мне приходится вводить пароль несколько раз.

Есть ли способ для меня зашифровать жесткие диски с помощью ключевого файла, может быть, положить его на USB-накопитель и просто подключить его при необходимости ??

Nithin
источник

Ответы:

11

Один из лучших способов сделать это - использовать смарт-карту с криптографическим ключом для разблокировки ключей зашифрованных блочных устройств. Вам нужно будет ввести кодовую фразу (называемую «PIN-кодом» инструментами, но на самом деле это пароль) один раз, после чего она будет кэширована. Это дает дополнительное преимущество защиты зашифрованных данных с помощью чего-то, что у вас есть (самой смарт-карты, из которой не может быть извлечен закрытый ключ) и чего-то, что вы знаете (ключевая фраза).

Отформатируйте /etc/crypttabэто так:

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

В Debian и его производных инструменты initramfs заметят скрипт и скопируют все необходимые инструменты и демоны для автоматического доступа к смарт-карте в initramfs.

Информация о настройке смарт-карты и создании (и шифровании) ключей находится в /usr/share/doc/cryptsetup/README.opensc.gz.

Для этого вы можете использовать Yubikey 4 или Yubikey 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
    
Celada
источник
1
Очень хороший стимул использовать смарт-карты и репутацию для достижения этой цели, но я бы сказал, что метод, специфичный для дистрибутива, который включает в себя изменение системы инициализации и сторонних хакерских сценариев, помещаемых в системные каталоги с нечитаемыми путями, не может рассматриваться как ответ на вопрос: использовать файлы паролей вопрос. Подчеркивает невероятный беспорядок, эти программы, хотя.
дбанет
@dbanet, я полностью согласен и надеюсь, что кто-то еще придет и добавит ответ, описывающий, как это сделать каким-то другим более простым способом. Тогда ОП может выбрать своего любимого.
Селада
dbanet и @Celada, именно мои мысли. Это слишком сложно, и даже если мне удастся сделать это, это запатентовано, то есть у другого поставщика будет другой метод. :(
Нитин
3

Можно просто сохранить пароль 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

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

marcelm
источник
Вы также можете упомянуть, как настроить LUKS для использования ключевого файла вместо пароля?
Nithin
@ Nithin Ключевой файл - это третье поле в моем примере /etc/crypttab. Я добавил немного дополнительного текста, чтобы сделать это понятнее.
марта