Jak działa FDE (pełne szyfrowanie dysku) tak szybko?

13

Jestem ciekawy, jak działa pełne szyfrowanie dysku Ubuntu pod maską. Oto przykład:

Biorąc pod uwagę następujący ciąg znaków jako całą zawartość dysku:

hello world

Po zastosowaniu jakiejś metody szyfrowania wyglądałoby to mniej więcej tak:
(Użyłem szyfru Cezara z przesunięciem +1 w tym przykładzie, np. A → B; B → C ...)

ifmmp xpsme

Jak rozumiem, gdy komputer jest wyłączony, zawartość dysku będzie ciągiem powyżej. Ale po ponownym włączeniu Ubuntu potrzebuje ponownie zawartości hello world, aby pomyślnie uruchomić komputer.

Naprawdę nie rozumiem, że w prawdziwym świecie zawartość dysku jest o wiele większa, a algorytm szyfrowania o wiele bardziej skomplikowany, a komputerowi trudno jest zaszyfrować / odszyfrować wszystko w ciągu kilku sekund (uruchomienie lub zamknięcie nie trwa dłużej).

Jak to jest możliwe?

Hewbot
źródło

Odpowiedzi:

10

Jak ogólnie działa szyfrowanie AES / Rijndael?

Na tej stronie znajduje się ciekawy „Przewodnik po rysunkach” do AES (Advanced Encryption Standard), który wygląda na łatwy do zrozumienia, chociaż wygląda na ponad 50 obrazów, na przykład te dwa:

wprowadź opis zdjęcia tutaj

i

wprowadź opis zdjęcia tutaj

To o wiele za dużo, żeby powielić to wszystko tutaj, ale jeśli musisz mieć obraz typu „wszystko w jednym”, to jest to:

wprowadź opis zdjęcia tutaj


Lub jest bardziej zwięzłe wyjaśnienie na http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

Metoda szyfrowania Rijndael polega na zamianie, zmianie i wykonywaniu operacji xor na bajtach. Metoda wygląda następująco:

  • Z 128-bitowego klucza Rijndael generuje 10 kluczy po 128 bitów każdy.
  • Te klucze są umieszczane w tablicach 4x4.
  • Zwykły tekst jest również podzielony na tablice 4x4 (128 bitów każda).
  • Każdy z 128-bitowych elementów zwykłego tekstu jest przetwarzany w 10 rundach (10 rund dla kluczy 128-bitowych, 12 dla 192, 14 dla 256).
  • Po 10 rundzie generowany jest kod.
  • Każdy pojedynczy bajt jest podstawiany w ramce S i zastępowany przez wzajemność na GF (28).
  • Następnie stosuje się bitową matrycę modulo-2, a następnie operację XOR z 63.
  • Linie macierzy są sortowane cyklicznie.
  • Kolumny mnożenia macierzy są zamieniane na GF (28).
  • Podklucze każdej rundy są poddawane operacji XOR.

Poziom bezpieczeństwa tej metody szyfrowania wzrasta, jeśli Rijndael jest wykonywany kilka razy z różnymi podkluczami.


Jak działa pełne szyfrowanie dysku Ubuntu?

I wierzę , że działa poprzez szyfrowanie partycji z LUKS (ustawienia domyślne z AES), a następnie umieszcza kilka woluminów LVM na nim (jak /, swap) i odszyfrowuje i montuje je w bagażniku po wpisaniu hasła. Istnieje też zwykła (niezaszyfrowana) partycja rozruchowa, która uruchamia się na tyle, aby poprosić o hasło.

The_simple_computer's Guide to Full Disk Encryption with Ubuntu (zaktualizowany 28 czerwca 2015) mówi, że chodzi o to, jak działa szyfrowanie domyślnego instalatora, i wspomina, że ​​podwójne uruchamianie nie zadziałałoby (przynajmniej nie po wyjęciu z pudełka), napędu musisz użyć MBR, więc „ jeśli twój komputer ma UEFI, dystrybucja zostanie zainstalowana w starszym trybie BIOS, więc nie możesz używać Bezpiecznego rozruchu ”, a takżedaje ci rozmiar wymiany równy rozmiarowi RAM systemowej (często niepotrzebny), a ty nie mam wyboru, jakiego rodzaju szyfrowania się używa.


Jak szybkie jest szyfrowanie?

Jeśli uruchomisz cryptsetup benchmark, uruchomią się testy i powiedzą, jak szybko zajmuje samo szyfrowanie, uważaj na (obecnie) domyślne linie aes-xts:

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s

Średnia prędkość odczytu dysku twardego może wynosić 80-160 MB / s, więc nie będziesz dużo dłuższy niż zwykły odczyt, i możliwe jest, że sektory właśnie odczytane zostały już odszyfrowane, gdy wciąż czekasz na dysk twardy, aby przeczytać więcej.

Dysk SSD może być szybszy, może 200-550 MB / s, więc możesz to zauważyć. Ale losowe odczyty mogą być wolniejsze i przeczytałem, że prędkości SSD mogą spowolnić po użyciu (może gdy dysk zapełni się całkowicie i musi zacząć „kasować” sektory?)

W jaki sposób komputer może całkowicie zaszyfrować / odszyfrować cały dysk w ciągu zaledwie kilku sekund (uruchomienie lub zamknięcie nie trwa dłużej)?

Nie musi najpierw wszystkiego odszyfrowywać. Szyfrowanie (LUKS) działa na blokach danych , może losowo odszyfrować dowolny blok i działa jak warstwa między zaszyfrowanymi danymi dysku a tym, co widzi system plików.

Gdy system plików chce zobaczyć dowolny blok danych, LUKS najpierw odszyfrowuje ten blok, a następnie przekazuje odszyfrowane dane do systemu plików. Najpierw musisz poczekać, aż dysk odczyta blok danych (tak jak bez szyfrowania), a masz tylko dodatkowe opóźnienie w odszyfrowaniu tego pojedynczego bloku (lub kilku bloków) danych - i jeśli odszyfrowanie jest szybsze niż dysk można odczytać, deszyfrowanie może być zakończone, zanim dysk odczyta następny blok danych.

Tak jak zwykły system plików nie musi czytać całego dysku, aby odczytać plik, po dodaniu szyfrowania nie musi on również czytać całego dysku i nie powoduje to o wiele wolniejszego działania.

Dane na dysku twardym są zawsze szyfrowane , więc przy wyłączaniu nie ma nic do roboty poza zapomnieniem klucza.

Xen2050
źródło
@Hewbot Dodałem (na dole) informacje o szybkości odszyfrowywania plików i bloków, ponieważ tytuł Twojego Q został edytowany, aby dodać „tak szybko?” (czy tytuł wciąż jest tym, o co chciałeś zapytać?)
Xen2050
3

To będzie trochę uproszczenie, ale postaram się przejść przez proces uzyskiwania dostępu do pliku w zaszyfrowanym systemie plików.

Załóżmy na przykład, że na początku zaszyfrowanego systemu plików znajduje się tabela plików; powiedzmy, że chcemy przeczytać /foo.bar. Najpierw czytamy początek partycji, odszyfrowujemy ją i szukamy odpowiedniego pliku; powiedzmy, że mówi, że plik zaczyna się od 0x10000000 bajtów. Aby przeczytać, zaczynamy czytać z dysku w tej lokalizacji i odszyfrowywać go; podobnie, aby napisać, możemy zaszyfrować nową zawartość i zapisać ją w tej nowej lokalizacji.

Mamy nadzieję, że pomoże to rozwiązać wszelkie nieporozumienia związane z tym procesem.

Nick Mertin
źródło
1
Myślę, że jest to odpowiedź, która faktycznie odpowiada na pytanie OP - jego błędne przekonanie jest takie, że musi on całkowicie szyfrować / odszyfrowywać cały dysk, a nie tylko bity, które są odczytywane / zapisywane podczas ich używania.
SomeoneSomewhereSupportsMonica
2

Procesor używa dedykowanego zestawu instrukcji. Jest to możliwe dzięki temu, AES-NI . Umożliwia szybkie szyfrowanie i deszyfrowanie lub można powiedzieć, że zmniejsza obciążenie. Jest szybki, ponieważ jest to implementacja sprzętowa, jak wyjaśniono tutaj .

Można sprawdzić o oddziaływań wydajności tutaj i są warto dla zwiększenia bezpieczeństwa.

shsh
źródło
1
Ponadto dane na dysku są szyfrowane / odszyfrowywane tylko w razie potrzeby; na przykład podczas uruchamiania odszyfrowywane są tylko skrypty startowe, informacje o użytkowniku, pliki wykonywalne DM / WE itp.
Nick Mertin
Wiele procesorów nie obsługuje AES, a szyfrowanie Ubuntu nadal działa na nich ... nawet jeśli tak, to tak naprawdę nie odpowiada na pytanie, jak działa szyfrowanie Ubuntu
Xen2050 30.04.16
@shsh Zatem gdybym był na naprawdę starym komputerze, korzystanie z FDE byłoby niemożliwe, ponieważ nie byłoby implementacji sprzętowej? Czy powinienem zrozumieć, że cały dysk jest szyfrowany i odszyfrowywany podczas uruchamiania i zamykania systemu?
Hewbot 30.04.16
@ MagikM18 Jeśli tak, to skąd algorytm wie, od czego zacząć odszyfrowywanie całego „ciągu”? Mam na myśli to, że jeśli otworzę dokument, to skąd on zna „współrzędne”, gdzie on jest?
Hewbot 30.04.16
@Hewbot tak samo jak by to zrobiło; w zasadzie szyfrowanie jest warstwą między dyskiem fizycznym a demonem systemu plików. więc gdy żąda odczytu danych z dysku, jest on odczytywany, a następnie odszyfrowywany; tak jak w zwykłym fs, najpierw przeczyta tabelę plików, znajdzie pozycję początkową pliku, a następnie będzie czytał stamtąd.
Nick Mertin 30.04.16
0

Nowoczesne komputery mogą wykonywać miliardy operacji na sekundę, więc nie dziwi mnie, że szyfrowanie i deszyfrowanie są szybkie.

W ten sposób intuicyjnie oceniłbym szybkość komputerów w robieniu rzeczy:

  1. Wykonywanie obliczeń w pamięci (szczególnie w pamięci L1 i L2), niezwykle szybko
  2. Odczytywanie z lokalnego magazynu, mniej szybko (dyski półprzewodnikowe są szybsze niż dyski twarde)
  3. Odczytywanie z sieci, jeszcze mniej szybko.

Innym kluczem do zrozumienia jest to, że system operacyjny nie musi odszyfrowywać całego dysku twardego, aby uruchomić system. Przeciwnie, system operacyjny wie, jak odszyfrować tylko te części dysku twardego, których potrzebuje w locie, to samo dotyczy pisania.

Tak intuicyjnie, nie dziwię się, że pełne szyfrowanie dysku nie ma większego wpływu na wydajność, ponieważ wyobrażam sobie, że szyjką butelki jest dysk.

Oczywiście te intuicje nie zawsze pasują do rzeczywistości. Na przykład w rzeczywistości zdarzały się przypadki, gdy szyfrowanie całego dysku spowodowało zauważalny spadek wydajności. Ale zwykle są one rozwiązywane po tym, jak programiści przechodzą przez kilka rund opracowywania optymalizacji.

Flimm
źródło
1
Nie mogę znaleźć sposobu, aby ta odpowiedź była możliwa. Samo skopiowanie 1 TB za pomocą USB 3.0 zajmuje kilka minut, jeśli trzeba wykonać środkowy proces (odszyfrowanie), uruchomienie komputera z FDE może zająć kilka minut.
Hewbot 30.04.16
@Hewbot Zredagowałem swoją odpowiedź, aby wyjaśnić, że odszyfrowywanie odbywa się w locie. System operacyjny nie musi czytać 1 TB danych, aby rozpocząć korzystanie z szyfrowanego dysku 1 TB.
Flimm