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?

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
    

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).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.