Schemat szyfrowania LUKS oparty jest na algorytmie AES-256. AES (Advanced Encryption Standard), czy bardziej precyzyjnie Rijndael, został wybrany z uwagi na połączenie oczekiwanego poziomu bezpieczeństwa z bardzo dobrą wydajnością procesów szyfrowania i deszyfrowania - a do tego algorytm ten jest tak zaprojektowany, że relatywnie łatwo jest go zaimplementować sprzętowo. W efekcie od czasu jego wyboru jako standard FIPS-197, powstał cały szereg różnych rozwiązań sprzętowych, włączając w to rozszerzenie AES-NI dla wielu (obecnie większości) procesorów Intela.
Funkcjonariusz z jednej strony potrafi eksfiltrować dane z dysków zaszyfrowanych LUKS (oraz trzema innymi popularnymi metodami), z drugiej zaś używa szyfrowania LUKS, aby chronić Twoje dane przed dostępem osób trzecich - a więc pośrednio Ciebie przed konsekwencjami utraty nośnika.
Na procesorach wspierających AES-NI, szyfrowanie LUKS będzie powodować większe obciążenie procesora (widoczne szczególnie gdy komputer pracuje w trybie graficznym, albo obsługuje jednocześnie jakieś intensywne obliczeniowo aplikacje), natomiast nie powinno w żaden sposób spowalniać procesów I/O - szczególnie że wąskim gardłem i tak są napędy dyskowe oraz kontrolery SATA.
Aby to zweryfikować, przeprowadziliśmy kilka testów:
Porównaliśmy ze sobą 2 warianty: w pierwszym oba dyski były nieszyfrowane. W drugim dysk docelowy (T5) był szyfrowany LUKS (aes-xts-plain64
z kluczem 512 bitów, algorytmem hashującym sha512
i czasem przetwarzania hasła zwiększonym do 5 sekund - dokładnie takie ustawienia sugerujemy w instrukcji instalacji).
Uśrednione wyniki czasowe (mniejszy czas jest lepszy):
Więcej ciekawych testów znajdziesz na tej stronie.
Szyfrowanie LUKS wymaga działającego generatora liczb losowych crng
. Na większości sprzętu, nawet bardzo starego, to działa bez żadnych problemów. Natomiast w trakcie testowania Funkcjonariusza na różnych platformach sprzętowych, zidentyfikowaliśmy kilka modeli komputerów, na których crng
nie działa prawidłowo.
Kali Linux, zależnie od ustawień BIOS/UEFI, może w trakcie rozruchu wyświetlać ekran tekstowy (z typowymi komunikatami rozruchowymi jądra Linuxa, a następnie uruchamiania poszczególnych usług przez systemd) lub graficzny (z logotypem Kali Linux). W trybie tekstowym na większości komputerów, tuż przed pytaniem o hasło LUKS, zobaczysz następujący komunikat:
random: crng init done
Na problematycznych komputerach zobaczysz zamiast tego:
uninitialized urandom read (4 bytes read)
a następnie pytanie o hasło - przy czym niezależnie od tego, co odpowiesz, po wciśnięciu Enter zobaczysz mniej więcej taki komunikat błędu:
Please unlock disk /dev/sda3:*****************************
There was an error decrypting /dev/sda3 ... Retry (Y/n)
Not enough available memory to open a keyslot.
Nie ma na to rozwiązania - po prostu aby być w stanie eksfiltrować dane z takich komputerów, przygotuj sobie jeden zapasowy dysk z Funkcjonariuszem, z nieszyfrowaną partycją na dane. I używaj go tylko jako ostatniej szansy.