Szyfrowanie całego dysku: ochroń swoje dane przed wścibskimi

Bez względu na to, jak skrycie będziemy prowadzili nasząkomunikację, iloma warstwami szyfrowania otoczymy nasze pliki,pocztę, wiadomości czy rozmowy, zawsze trzeba liczyć sięz najgorszym. W tym wypadku najgorszym jest uzyskanie przeznapastnika fizycznego dostępu do naszych urządzeń. Wykorzystującnarzędzia informatyki śledczej do analizy śladów w systemieoperacyjnym, można pozyskać bardzo dużo informacji, częstowystarczających do odszyfrowania naszych danych, można też wsystemie umieścić w sposób niepostrzeżony dla użytkownikaoprogramowanie inwigilujące. Mówi się, że przed takim atakiem niema obrony, a jednak historia pokazuje inaczej: pełne szyfrowaniedysków stanowi dla napastników twardy orzech do zgryzienia. Jeślichcecie się dowiedzieć, jak to działa i jak samodzielniezabezpieczyć swoje wrażliwe dane na dysku przed nieupoważnionymdostępem zapraszamy do lektury.

Szyfrowanie całego dysku: ochroń swoje dane przed wścibskimi

Dlaczego szyfrować dyski?

Wierzących w prawo do prywatności (zapisane przecież wPowszechnej Deklaracji Praw Człowieka ONZ: Nie wolno ingerowaćsamowolnie w czyjekolwiek życie prywatne, rodzinne, domowe, ani wjego korespondencję, ani też uwłaczać jego honorowi lub dobremuimieniu. Każdy człowiek ma prawo do ochrony prawnej przeciwkotakiej ingerencji lub uwłaczaniu) przekonywać tu specjalnie nietrzeba. Być może są wśród nas tacy, którzy naprawdę nie mająnic do ukrycia i gotowi byliby podzielić się każdym aspektemswojego życia z obcymi, ale niech to się dzieje z ich wyboru –nie można oczekiwać, że każdy będzie tak „otwarty”.

Wątpiącym w to prawo można powiedzieć, że w wielu wypadkachjest to konieczne dla ochrony interesów innych ludzi – koronnymprzykładem niech tu będzie lekarz-psychiatra, któremu wykradnąlaptopa z dokumentacją medyczną jego pacjentów, czy prawnik, któryna swoim komputerze przechowuje materiały niezbędne dla obronyswoich klientów.

Jeśli te argumenty Was nie przekonały, pozostaje argumenttechniczno-biznesowy. Bez szyfrowania dysków, sprzedaż czy nawetwyrzucenie na śmietnik starych nośników wiąże się zkoniecznością porządnego ich „wyczyszczenia”, czyli zapisanialosowymi ciągami zer i jedynek. Trwa to bardzo długo i niegwarantuje, że dane zostaną na pewno zniszczone. Znane są wypadki,że za pomocą specjalistycznych narzędzi udało się odczytaćzawartość dysku, który był w ten sposób wielokrotnie „czyszczony”. Tymczasem dobrze zaszyfrowany nośnik możemywyjąć z komputera i sprzedać tak, jakby niczego na nim nie było.

Dlaczego stosować pełne szyfrowanie dysku?

W przeciwieństwie do szyfrowania danych na poziomie systemuplików, pełne szyfrowanie dysku na poziomie sektorowym wiąże sięz zaszyfrowaniem (prawie) wszystkich danych znajdujących się nadysku. Zabezpieczone w ten sposób zostają nie tylko pliki naposzczególnych partycjach, ale też wrażliwe na analizę przestrzeńwymiany (swap) i zwykle niewidoczne dla użytkownika plikitymczasowe, pozwala też ukryć wszystkie metadane – strukturękatalogów, nazwy plików, ich rozmiary oraz czasy modyfikacji idostępu.

Uwaga: szyfrowanie całego dysku chroni dane na komputerze tylko wtedy, gdy komputer jest fizycznie wyłączony. W wypadku, gdy napastnik przejmie komputer włączony, ma on możliwość przejęcia kluczy kryptograficznych z RAM. Dlatego dla najbardziej wrażliwych danych, szczególnie na laptopach, warto łączyć szyfrowanie całodyskowe z szyfrowaniem na poziomie plików.

Zarazem cała zawartość zaszyfrowanego dysku jest udostępnianazaraz po przedstawieniu przez użytkownika właściwego klucza/hasła,tak że w czasie pracy komputera mamy dostęp do wszystkich danych.To może być uznane za główną słabość pełnego szyfrowaniadysku – napastnik, który przejmie działający komputer, nie musiprzejmować się szyfrowaniem, może też wydostać przechowywane wpamięci operacyjnej klucze. Dlatego też niekiedy łączy się pełneszyfrowanie dysku z szyfrowaniem na poziomie plików, pozwalającymzabezpieczyć te najbardziej newralgiczne dane nawet w takiejsytuacji.

Szyfrowanie zawierających system operacyjny dysków na poziomiesektorowym jest zadaniem nieco paradoksalnej natury. Z jednej stronychcemy mieć zaszyfrowany cały dysk, z drugiej uruchomić z niegosystem. Jak jednak załadować system z zaszyfrowanego dysku, skorooprogramowanie deszyfrujące jest zaszyfrowane w systemie? Pomijającrozwiązania sprzętowej natury, zwykle realizuje się to za pomocąmechanizmu przedstartowego uwierzytelniania, które pozwala nazaładowanie minimalnego środowiska, w którym zachodziuwierzytelnienie użytkownika i odszyfrowanie jądra systemu iprzekazanie działającym tam sterownikom kluczy deszyfrującychdysk.

Warto pamiętać, że większośćkomercyjnych systemów szyfrowania dysków jest pisanych z myślą oużytkownikach biznesowych, których potrzeby w tej kwestii nie tylkosą inne od potrzeb użytkowników indywidualnych, ale wręcz stojąw opozycji do nich – ot np. w wypadku tych komercyjnych systemówoczekuje się wręcz, że administrator będzie w stanie zdalniezawartość dysku odszyfrować.

Przyjrzymy się bliżej temu wszystkiemu na przykładzieoprogramowania dm-crypt, będącego standardową częścią Linuksa.Czemu akurat dm-crypt, a nie inne narzędzia szyfrujące, np.BitLocker czy TrueCrypt? Powodów jest kilka. Po pierwsze,korzystanie z linuksowych systemów operacyjnych do przechowywaniawrażliwych danych jest o tyle rozsądne, że łatwiej niż np. wwypadku Windowsów skroić je na własne potrzeby, uszczelnić i iograniczyć powierzchnię ataku. Po drugie, używanie do celówosobistego szyfrowania danych narzędzi, których kod źródłowy niezostał dokładnie zbadany przez ekspertów, jest dość ryzykowne (nie mówiąc już o narzędziach, które wgrywają klucze recovery dochmury Microsoftu).

Po trzecie, dm-crypt wraz z towarzyszącymi mu narzędziami jestaktywnie rozwijanym oprogramowaniem, które zostało dobrzezintegrowane z popularnymi linuksowymi dystrybucjami, tak żepozwalają one dziś na zautomatyzowanie procesu pełnego szyfrowaniadysku przy instalacji systemu. Po czwarte wreszcie, dm-crypt jest fundamentem mechanizmu szyfrowania w urządzeniach z Androidem, a co za tym idzie, jest prawdopodobnie najpopularniejszym tego typu narzędziem na świecie.

Zdajemy sobie sprawę, że w wielu przypadkach Linux nie jest wstanie zastąpić Windowsa czy OS-a X, opublikujemy więc takżeporadnik pełnego szyfrowania dysków także dla tych systemów.

Jak działa szyfrowanie na poziomie sektorowym?

Szyfrowanie przez dm-crypt zostało tak pomyślane, by działać wwielu różnych scenariuszach. Sprawdza się zarówno w obsłudzekarty microSD włożonej do minikomputerka takiego jak Raspberry Pi,dysku SSD wbudowanego w laptopa, czy macierzy dyskowej podpiętej doserwera po sieciowym systemie plików. Rodzaj pamięci masowej nie matu znaczenia czy zastosowany system plików – oprogramowanie todziała w warstwie pośredniej, między systemem plików a sprzętem,bez względu na to, co z tymi warstwami robimy. Dlatego właśnieprzy zastosowaniach „biurkowych” najczęściej łączy siędm-crypt z inną warstwą abstrakcji, tj. wolumenami logicznymi(LVM), by ułatwić obsługę zaszyfrowanych partycji.

Kiedyś zarządzanie tymi zaszyfrowanymi dyskami było dośćskomplikowane i niezbyt bezpieczne, wiązało się z ręcznympisaniem tabel odwzorowania urządzeń (device-mapper tables), którebyły zwykłymi plikami tekstowymi, zawierającymi przekazywaną dokernela konfigurację. Dzisiaj korzystamy ze standardu LUKS (LinuxUnified Key Setup), będącym implementacją systemu zarządzaniakluczami dla szyfrowanych na poziomie sektorów dysków TKS1.Zapewnia on dwupoziomowe szyfrowanie, rozłączając hasło od kluczagłównego, jak również pozwala na bezpieczne przechowywanie tychdanych. Poniżej będziemy pisali wyłącznie o kombinacjiLUKS/dm-crypt.

Możliwe scenariusze użycia dm-crypta
Możliwe scenariusze użycia dm-crypta

Naszym celem jest uzyskanie z niezaszyfrowanego urządzeniablokowego (np. dysku /dev/sda1) zaszyfrowanego wirtualnego urządzeniablokowego (/dev/mapper/szyfrowanydysk). Będziemy mieli do czynieniaz dwoma rodzajami zaszyfrowanej informacji: samym zaszyfrowanymurządzeniem oraz informacją niezbędną do obsłużeniazaszyfrowanych danych, obejmującą typ szyfru, hasło i klucz orazkonfigurację skrótu. Dzięki standardowi LUKS wszystkie te dane,oprócz hasła i klucza znajdują się w nagłówku zaszyfrowanejpartycji. Użytkownikowi pozostaje tylko wprowadzić hasło.

To hasło o dowolnej długości służy do wyprowadzenia klucza. Wtym celu wykorzystywana jest funkcja PBKDF2(Password Based Key Derivation Function 2), generująca klucz ostałej długości, algorytmem tak zaprojektowanym, by był skrajnietrudny obliczeniowo (utrudniając w ten sposób atak siłowy).Dopiero ten klucz służy do odszyfrowania klucza głównego,służącego do de/szyfrowania danych odczytywanych/zapisywanych nawirtualne urządzenie blokowe. Dzięki temu właśnie możemydowolnie zmieniać hasła, bez konieczności reszyfrowania danych –i przechowywać klucz główny wraz z zaszyfrowanymi danymi, wnagłówku wirtualnego urządzenia.

LUKS oferuje możliwość przechowywania w tzw. slotach wieluzaszyfrowanych reprezentacji klucza głównego w nagłówku partycji,z których każda może być użyta do odszyfrowania danych. Pozwalato na zastosowanie konfiguracji dla wielu użytkowników, z którychkażdy ma swoje własne hasło. W slocie opróczzaszyfrowanej kopii klucza głównego znajdują się jeszcze parametrsoli oraz parametr rozciągania. Sól pozwala wzmocnić hasłododatkową entropią, sprawiając, że wyprowadzonego klucza niesposób zgadnąć z hasła (ani vice versa). Rozciąganie pozwalaukryć realną długość posolonego hasła, dopełniając gopseudolosowymi wartościami, tak by udopornić system na atakiwykorzystujące tęczowe tablice.

LUKS i dm-crypt w działaniu
LUKS i dm-crypt w działaniu

Wiemy już jak obsługiwane są klucze. By zrozumieć działaniecałodyskowego szyfrowania, trzeba przyjrzeć się takim zagadnieniomjak typy algorytmów szyfrowania, wektory inicjujące (IV) czy trybydziałania, które są tu wykorzystywane.

Kluczowym pojęciem jest tu szyfr blokowy – czyli taki, który nawejściu przyjmuje bloki jawnych danych określonej długości oraztajny klucz, a na wyjściu zwraca przekształcony blok z szyfrogramemo tej samej długości. Każdy blok jest przetwarzany w taki samsposób. Różni się on tym od szyfru strumieniowego, w którymposzczególne bity tekstu jawnego są łączone z pseudolosowymstrumieniem danych z klucza, a transformacja zmienia się w trakcieszyfrowania.

Kryptosystemy różnią się od siebie pod względem szybkości działania. dm-crypt pozwala to przetestować
Kryptosystemy różnią się od siebie pod względem szybkości działania. dm-crypt pozwala to przetestować

Jako że szyfrujemy sektory dyskowe o stałej długości, mamy doczynienia z szyfrem blokowym. Domyślnie wykorzystuje się tutajdobrze znany AES – 14 rund szyfrujących (dla klucza 256 bitów)podstawienia-permutacji, praktycznie odporny na wszelkie znanetechniki kryptoanalityczne (ładną animację Flash przedstawiającądziałanie AES znajdziecie tutaj).

W jakim trybie są zapisywane te bloki na wyjściu? Tu mamy wielemożliwości. Zacznijmy od najprostszej (i najmniej bezpiecznej) znich, tzw. ECB, Electronic Code Book. Tutaj jawna treść dzielonajest na bloki, a każdy blok szyfrowany oddzielnie. Tak więc wzór wciągu niezaszyfrowanych bloków zostanie odwzorowany w ciąguzaszyfrowanych bloków, łatwo ujawniając swoją naturę podczaskryptoanalizy. Dlatego ta klasyczna metoda ma dziś zastosowaniewyłącznie edukacyjne.

W CBC (Cipher Block Chaining) przed zaszyfrowaniem na każdym zbloków jawnego tekstu stosowana jest funkcja XOR (suma poprzeczna) zpoprzedzającym go blokiem. W ten sposób każdy blok szyfrogramuzależy od uprzedniego przetworzenia wszystkich poprzedzających gobloków jawnego tekstu. Oczywiście pierwszy blok musi otrzymać cośna „dzień dobry”, dostaje więc losowo generowany wektorinicjujący (IV). Jest to blok pozwalający na uzyskanie unikatowychszyfrogramów za pomocą tego samego klucza, dostarczający procesowiodpowiedniej losowości i używany tylko raz dla danego klucza (wprzeciwnym razie może ujawnić pewne informacje o pierwszym bloku).Jako jednak że pracujemy na oddzielnych sektorach dysku i musimymieć do nich niezależny dostęp, każdy z nich samodzielniewykorzystuje wektor inicjujący. I ten tryb ma jednak swoje słabości,przede wszystkim niemożliwość paralelizacji oraz podatność nauszkodzenia, propagowane wraz z szyfrowaniem do kolejnych bloków.

Tryb XTS-AES: rekomendowany dziś standard szyfrowania dysków na poziomie sektorowym
Tryb XTS-AES: rekomendowany dziś standard szyfrowania dysków na poziomie sektorowym

Obecnie w dm-crypcie (ale i w większości innych programówszyfrujących) stosuje się najczęściej tryb XTS (XEX-basedtweaked-codebook mode with ciphertext stealing), łączony z szyfremsymetrycznym AES. Wykorzystuje on dwa klucze AES, z których jedensłuży do szyfrowania blokowego AES, a drugi do do szyfrowaniawartości modyfikującej. Na tej wartości działa następnie funkcjawielomianowa Galois i funkcja XOR, wykonywane na jawnym tekście orazna szyfrogramie każdego bloku. Wykorzystanie funkcji Galoiszapewnia, że z identycznych bloków jawnego tekstu nie powstanąidentyczne bloki szyfrogramu.

Szyfrowanie dysków dla ludu

To wszystko pewnie może brzmieć dość skomplikowanie dlaZwykłego Użytkownika, dlatego należy z uznaniem wyrazić się ostaraniach Canonicala, które wraz z wydaniem Ubuntu 12.10 w swoiminstalatorze Ubiquity wprowadziło prosty mechanizm szyfrowaniacałego dysku. [img=ubiquity1]Możliwość szyfrowania była oczywiście dostępnawcześniej, ale wyłącznie przez instalator tekstowy, o którymwiększość osób nawet nie wiedziała że istnieje. W ślad zaCanonicalem poszli inni twórcy dystrybucji, nie tylko tychwyprowadzonych z Ubuntu – coraz więcej desktopowych systemówlinuksowych pozwala na zaszyfrowanie dysku „jednym kliknięciem”.No może nie jednym, ale prościej się już nie da, w 14.04 LTSwystarczy zaznaczyć „ptaszkiem” szyfrowanie i podaćhasło, by system automatycznie skonfigurował nam wolumeny logiczne,ustawił partycję wymiany, zaszyfrował wszystko i skonfigurowałtak, by po podaniu hasła przy starcie normalnie uruchomić komputer(i to z działającą opcją hibernacji, z czym często systemyszyfrowania mają kłopoty).

Domyślne ustawienia LUKS-a w Ubuntu są całkiem dobre: AES zXTS w trybie plain64, 256-bitowy klucz z haszowaniem SHA1,wyprowadzony przez 1 sekundę pracy PBKDF2. System, katalog domowy iprzestrzeń wymiany zostają wrzucone do jednego zaszyfrowanegowolumenu logicznego. Do tego instalator zakłada mającą ok. 250 MBpartycję /boot, która nie jest zaszyfrowana, i gdzie znajdziemypliki niezbędne do rozruchu systemu. Dla większości osób, którenie mają skomplikowanej konfiguracji systemowej i nie są ściganeprzez NSA, takie szyfrowanie jest wystarczające.

Domyślne ustawienia całodyskowego szyfrowania w Ubuntu 14.04 LTS
Domyślne ustawienia całodyskowego szyfrowania w Ubuntu 14.04 LTS

Konfiguracja przystosowana dla wszystkich nie musi jednak pasowaćkażdemu. Podstawowe problemy to wymuszanie często zbędnej partycjiwymiany (jeśli ktoś ma w komputerze 16 GB RAM, po co mu 16 GBswapa?), niemożliwość współdzielenia dysku z innymi systemami(czy to Windowsami czy Linuksami), używanie nielubianych przez wieluwolumenów logicznych (kiedyś mieliśmy normalne partycje, po co namjakieś wolumeny?), oraz konieczność korzystania z tablicy partycjiw starym formacie MBR, co oznacza, że z nowych firmware UEFI musimykorzystać w trybie kompatybilności (legacy), czyli nie zadziałaSecure Boot w Windowsach, wymagający tablicy GPT.

Obraz

Pomóc może w tej sytuacji ręczna konfiguracja. Jeśli winstalatorze wybierzemy na ekranie Rodzaj instalacji opcję Użycieinnego rozwiązania. Tutaj możemy zbudować dopasowane do własnychpotrzeb zestawienie partycji, pamiętając o założeniu na początkupartycji /boot 250 MB. Pozostałe partycje możemy skonfigurowaćdowolnie, trzeba jedynie pamiętać, że ustalając ich format należyw polu Użyj jako wybrać fizyczny wolumen do szyfrowania.

Obraz

Gdy to zrobimy, instalator sam wygeneruje wirtualne szyfrowanedyski. Pozostaje jeszcze oznaczyć punkt montowania przynajmniej dlagłównej partycji (root, /) i to wszystko – klikając zainstalujuzyskamy taką konfigurację, jaka nam pasuje (zachowując przy tymnp. wcześniej zainstalowanego Windowsa na dysku). To wszystko.Minusem tej konfiguracji będzie to, że podczas logowania będziemymusieli oddzielnie podawać hasło dla każdej zaszyfrowanejpartycji, w tym dla swapa.

Obraz

Takiej półautomatycznej konfiguracji szyfrowania wciąż jednakdaleko jest do elastyczności, jaką może zaoferować LUKS/dm-crypt,wykorzystywany wraz z narzędziem cryptsetup. W następnym artykuleprzedstawimy metody dla zaawansowanych, za pomocą których możnastworzyć konfiguracje szyfrowania dysków zarówno bezpieczniejsze,jak i bardziej dostosowane do naszych potrzeb.

Programy

Zobacz więcej
Wybrane dla Ciebie
Komentarze (76)