Czy można zaszyfrować dysk twardy za pomocą pliku klucza zamiast hasła?

14

Patrząc na szyfrowanie dysku twardego. rozwiązaniem wydaje się być dm-crypt z LUKS za pomocą hasła. Pracuję z wieloma niezależnymi dyskami twardymi zamontowanymi w puli dyskowej do odczytu. W takim przypadku muszę wpisać hasło wiele razy.

Czy istnieje sposób na zaszyfrowanie dysków twardych za pomocą pliku klucza, może umieścić go na dysku USB i po prostu podłączyć w razie potrzeby?

Nithin
źródło

Odpowiedzi:

11

Jednym z najlepszych sposobów na to jest użycie karty inteligentnej z kluczem kryptograficznym, aby odblokować klucze do zaszyfrowanych urządzeń blokowych. Wystarczy, że wpiszesz hasło (nazywane przez narzędzia „PIN”, ale tak naprawdę jest to hasło) tylko raz, po czym zostanie ono zapisane w pamięci podręcznej. Ma to tę dodatkową zaletę, że chroni zaszyfrowane dane za pomocą czegoś, co masz (sama karta inteligentna, z którego nie można wyodrębnić klucza prywatnego) i czegoś, co wiesz (hasło).

Sformatuj swój w /etc/crypttabten sposób:

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

W Debianie i pochodnych narzędzia initramfs zauważą skrypt klawiszy i skopiują wszystkie niezbędne narzędzia i demony do automatycznego dostępu do karty inteligentnej do initramfs.

Informacje na temat konfigurowania karty inteligentnej i tworzenia (i szyfrowania) kluczy znajdują się w /usr/share/doc/cryptsetup/README.opensc.gz.

Możesz użyć między innymi Yubikey 4 lub Yubikey NEO .

Uwagi dotyczące implementacji : Ta funkcja ma ostre krawędzie i najwyraźniej nie działa od razu po wyjęciu z pudełka, więc YMMV. Ostatnim razem, gdy udało mi się to osiągnąć, musiałem dodać następujące hacki:

  • Wyłącz, systemdponieważ katastrofalnie próbuje przejąć cały proces konfigurowania zaszyfrowanych urządzeń, /etc/crypttabale nic nie wie o tym, keyscriptco prowadzi do dużego błędu. Na szczęście w Debianie nadal możesz zrezygnować systemd.
  • Zainstaluj ten górny skrypt /etc/initramfs-tools/hooks/yubipinnaprawiający, ponieważ wbudowana funkcja nie zainstalowała wystarczającej obsługi, aby Yubikey mógł być używany z initramfs. Może być konieczne dostosowanie tego.

    #!/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"
    
  • Zainstaluj kolejny skrypt, /etc/initramfs-tools/scripts/local-bottom/killpcscdaby wyczyścić:

    #!/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
źródło
1
Bardzo fajna zachęta do korzystania z kart inteligentnych i uznania dla osiągnięcia tego, ale powiedziałbym, że metoda specyficzna dla dystrybucji, która polega na zmianie skryptu hakerskiego systemu init i stron trzecich włożonych do katalogów systemowych z nieczytelnymi ścieżkami, nie może być uważana za odpowiedź na pytanie, w jaki sposób użyć pytania dotyczące plików kluczy. Podkreśla niesamowity bałagan tych programów.
dbanet
@dbanet, w pełni się zgadzam i mam nadzieję, że ktoś inny przyjdzie i doda odpowiedź opisującą, jak to zrobić w inny prostszy sposób. Następnie OP może wybrać swojego ulubionego.
Celada,
dbanet i @Celada, dokładnie moje myśli. Jest to o wiele zbyt skomplikowane i nawet jeśli uda mi się to zrobić, to jest zastrzeżona, co oznacza, że ​​inny dostawca zastosowałby inną metodę. :(
Nithin,
3

Można po prostu zapisać hasło Luks w pliku.

Używam tego na moim komputerze domowym; Główny system plików żyje na zwykłym woluminie Luks, który odblokowuję za pomocą hasła podczas uruchamiania. Dodatkowy dysk zawiera wolumin Luks z wygenerowanym hasłem.

Ten dodatkowy wolumin jest odblokowywany przez plik hasła, który znajduje się w zaszyfrowanym systemie plików root. Jest automatycznie odblokowywany podczas uruchamiania, jeśli główny system plików jest odblokowany.

Mój /etc/crypttabwygląda tak:

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

Trzecie pole to plik klucza nonedla głównego systemu plików, ale /etc/crypt-data.keydla systemu plików danych. /etc/crypt-data.keyzawiera hasło Luksa:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Uwaga: nowa linia lub dowolna biała spacja zostanie uwzględniona jako część hasła! Staraj się wygenerować ten plik bez kończenia nowej linii. Upewnij się również, że ma on ścisłe uprawnienia:

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

Powinieneś być w stanie powielić to podejście dla wielu woluminów (z odrębnymi hasłami lub jednym wspólnym hasłem, twój wybór).

marcelm
źródło
czy możesz również wspomnieć, jak skonfigurować LUKS, aby używał pliku klucza zamiast hasła?
Nithin,
@Nithin Plik klucza jest trzecim polem w moim przykładzie /etc/crypttab. Dodałem trochę dodatkowego tekstu, aby było to jaśniejsze.
marcelm