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?
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).
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.
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
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.
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:
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/crypttab
wygląda tak:Trzecie pole to plik klucza
none
dla głównego systemu plików, ale/etc/crypt-data.key
dla systemu plików danych./etc/crypt-data.key
zawiera hasło Luksa: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:
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).
źródło
/etc/crypttab
. Dodałem trochę dodatkowego tekstu, aby było to jaśniejsze.