Szyfrowany system plików w OpenWrt
Ostatnia zmiana: 2018-07-14 17:53
Zdarza się potrzeba posiadania szyfrowanego systemu plików. Co na nim trzymamy to już indywidualna sprawa: być może np. lista haseł bankowych, do serwisów internetowych itd. OpenWrt, podobnie jak w inne systemy linuksowe, umożliwia stworzenie i obsługę szyfrowanego systemu plików. Wydajność routerów pozwala na miarę bezproblemowe korzystanie z takich partycji. W tym przykładzie zostanie wykorzystany
LUKS - Linux Unified Key Setup, który może być także używany przez systemy Windows. Porównanie poszczególnych programów do szyfrowania można znaleźć np. w
Wikipedii.
W sieci znajduje się bardzo dużo przepisów i porad dotyczących sposobów odpowiedniego przygotowania dysków i zabezpieczenia danych. Omówione są także poszczególne algorytmy, ich zalety i wady, więc w razie wątpliwości - należy posłużyć się
mocą.
Rozwiązanie przetestowano w LEDE 17.01.
Przygotowanie nośnika
Konieczny będzie zewnętrzny nośnik, na którym zostanie umieszczony szyfrowany system plików. Może to być pendrive, dysk USB czy karta SD. Zakładamy że całość zostanie wykonana na pierwszej partycji (sda1) nośnika. Partycja nie może być zamontowane w systemie.
Niezbędnym elementem jest wyczyszczenie zawartości tej partycji. Można wykonać to na co najmniej na kilka sposobów - w systemach linuksowych często wykorzystywany jest program
shred. W OpenWrt można wykonać nadpisanie partycji losowymi danymi:
# dd if=/dev/urandom of=/dev/sda1
Szybszą metodą, choć mniej bezpieczną z punktu widzenia kryptografii jest po prostu wyzerowanie zawartości:
# dd if=/dev/zero of=/dev/sda1
Instalacja oprogramowania
# opkg update
# opkg install kmod-crypto-misc kmod-crypto-xts kmod-crypto-iv kmod-crypto-sha256
# opkg install cryptsetup
Zostanie zainstalowanych także sporo zależności. Jeżeli podczas dalszych czynności pojawi się komunikat typu
"Failed to open temporary keystore device..." należy doinstalować pakiet
kmod-crypto-user.
Przygotowanie partycji
Przed wykonaniem jakichkolwiek czynności należy załadować jeden z modułów w celu obsługi określonego algorytmu:
Można tą linię dodać np. do pliku
/etc/rc.local, aby automatycznie wykonywała się po starcie systemu.
Zakładamy teraz partycję LUKS. Wykonuje się to przez polecenie:
# cryptsetup -v -c aes-cbc-essiv:sha256 -s 256 -y luksFormat /dev/sda1
Można wykorzystać różne algorytmy szyfrowania,
aes-cbc-essiv jest domyślnym. Jeżeli nasz router posiada sprzętowy akcelerator kryptograficzny (Alix, Asus WL-500gP, Iomaga iConnect), można wykorzystać algorytm wspierany przez to urządzenie, dzięki czemu operacje wykorzystujące szyfrowany system plików będą o wiele szybsze.
NIST zaleca stosowanie XTS-AES, jest on szybszy (co przy stosunkowo słabej mocy routerów może mieć znaczenie), ale też w mniejszym stopniu sprawdzony. Jeżeli chcemy użyć tego algorytmu to polecenie przyjmie następującą postać:
# cryptsetup -v -c aes-xts-plain -y luksFormat /dev/sda1
Potwierdzamy chęć utworzenia partycji ("YES" pisane dużymi literami!), a następnie wprowadzamy silne i skomplikowane hasło:
WARNING!
========
This will overwrite data on /dev/sda1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
Tworzenie systemu plików
"Otwieramy" partycję:
# cryptsetup luksOpen /dev/sda1 tajne
(zostaniemy zapytani o hasło). W katalogu
/dev/mapper pojawi się nowe urządzenie blokowe o nazwie
tajne z którego będziemy korzystać:
# ls /dev/mapper/*
/dev/mapper/control /dev/mapper/tajne
Tworzymy na nim normalny system plików, np. ext2:
# mkfs.ext2 -m0 /dev/mapper/tajne
I to wszystko. Można zamontować taki system:
# mkdir -p /mnt/dysk
# mount -t ext2 /dev/mapper/tajne /mnt/dysk
i normalnie z niego korzystać jak z każdego innego nośnika.
Odmontowanie partycji
Po zakończeniu pracy należy partycję odmontować:
# umount /dev/mapper/tajne
oraz koniecznie odłączyć szyfrowaną partycję
# cryptsetup luksClose tajne
Praca z zaszyfrowaną partycją
Podłączenie dysku
# cryptsetup luksOpen /dev/sda1 tajne
# mkdir -p /tmp/tajne
# mount /dev/mapper/tajne /tmp/tajne
Odłączenie dysku
# sync
# umount /dev/mapper/tajne
# cryptsetup luksClose tajne
Zakończenie
Tak przygotowany dysk jest kompatybilny w nowszymi wydaniami dystrybucji Linuksa - po podłączeniu nośnika w większości przypadków nastąpi pytanie o hasło i będzie można zamontować daną partycję.