Objavljeno:

Šifriranje zunanjih nosilcev podatkov ter ustvarjanje šifrirnih kontejnerjev (mala šola informacijske varnosti, 4. del)

V prejšnjem delu smo si ogledali kako lahko šifriramo celoten disk na računalniku iz katerega zaženemo operacijski sistem ter kako s kriptografskim datotečnim sistemom šifiramo uporabniške mape. Tokrat pa si bomo ogledali kako s pomočjo LUKS šifriranja in aplikacije TrueCrypt šifriramo zunanje nosilce podatkov. Šifriranje zunanjih nosilcev podatkov (prenosnih diskov, USB ključkov, itd.) je smiselno zlasti zato, ker v primeru izgube ali kraje prenosnega medija vsebina le-tega ostane zavarovana.

Za šifriranje lahko uporabimo geslo (ang. password, passphrase), datoteko s ključem (ang. key file – gre za datoteko, katere vsebina predstavlja šifrirni ključ) ali kombinacijo obojega.

Sodobni šifrirni programi (TrueCrypt, Cryptsetup z LUKS, itd.) pri šifriranju uporabljajo zelo koristen trik. Geslo, ki ga vnesemo v šifrirni program namreč ne predstavlja tudi dejanskega šifrirnega ključa (tim. master key). Podatki se namreč šifrirajo z tim. glavnim (statičnim) šifrirnim ključem, ki je shranjen v glavi (ang. header) šifriranega razdelka. Ta ključ pa je nato zašifriran z našim geslom oz. našo datoteko s ključem. Dešifriranje torej poteka takole: najprej vnesemo geslo (ali podamo datoteko s ključem), s katerim odklenemo glavni statični šifrirni ključ do naših podatkov, s tem ključem pa potem odklenemo naše podatke.

Ta način šifriranja podatkov nam omogoča enostavno spreminjanje gesel. Če bi namreč želeli spremeniti oz. zamenjati glavni statični šifrirni ključ, bi morali ob vsaki spremembi le-tega vse podatke v šifriranem razdelku na novo prekodirati (z novim ključem). To pa je precej zamudno in nepraktično. V primeru hrambe glavnega statičnega ključa v glavi šifriranega razdelka pa se ob spremembi gesla prekodira samo kriptogram statičnega šifrirnega ključa, kar je bistveno hitreje kot prekodiranje vseh podatkov, poleg tega to lahko izvedemo ob priklopljenem šifriranem razdelku.

Načini šifriranja podatkovnih nosilcev

Pri šifriranju podatkovnih nosilcev lahko uporabimo dva koncepta. Šifriramo lahko:

  • celoten nosilec podatkov ali posamezen razdelek (celotno bločno napravo),
  • ali pa na nosilcu podatkov ustvarimo posebno šifrirano datoteko (tim. kontejner), ki jo kasneje priklopimo kot virtualni razdelek.

Šifriranje celotnega razdelka

Če si nosilec podatkov predstavljamo v obliki plasti, lahko rečemo, da fizični nosilec predstavlja najnižjo plast, najvišjo plast pa predstavlja datotečni sistem. V primeru šifriranja celotne bločne naprave med te dve plasti vrinemo še dodatno “plast”, ki skrbi za šifriranje. Tako neka aplikacija, ki podatke zapiše na disk “vidi” običajno datoteko na datotečnem sistemu, preden pa se ta datoteka zapiše na fizični nosilec podatkov (npr. disk), se podatki šifrirajo in se potem v šifrirani obliki zapišejo na ta fizični nosilec podatkov.

Naj še omenimo, da na SSD nosilcih podatkov, ki podpirajo funkcijo TRIM, uporaba te funkcije skupaj s šifriranjem predstavlja določeno varnostno tveganje. Kakšno in zakaj, bo podrobneje razloženo v enem prihodnjih prispevkov (v šestem delu), naj pa omenimo, da je na Linux sistemih z Linux jedrom od 3.1 dalje uporaba funkcije TRIM v primeru uporabe šifriranja privzeto onemogočena.

Šifrirni kontejnerji

Drugi koncept pa je uporaba šifrirnih kontejnerjev. Gre za poebne datoteke, ki jih s pomočjo šifrirnega programa priklopimo kot virtualno napravo (npr. virtualni disk oz. razdelek). Vse, kar sedaj shranjujemo na ta virtualni razdelek, se v resnici šifrira in zapisuje v to datoteko (kontejner).

LUKS šifriranje s pomočjo Crytsetup in programa Diskovna orodja

S pomočjo programa Cryptsetup je mogoče šifrirati tako celotne razdelke kot tudi ustvariti šifrirne kontejnerje. Cryptsetup lahko poganjamo iz ukazne vrstice, najbolj enostavno pa je ustvarjati šifrirane razdelke s pomočjo programa Diskovna orodja.

Nosilec podatkov (USB disk,…) najprej vstavimo v računalnik, nato pa iz zaganjalnika zaženemo Diskovna orodja. V levem meniju z miško izberemo nosilec in nato na levi strani kliknemo na gumb Formatiraj nosilec. Še opozorilo – nosilec oziroma razdelek, ki ga želimo formatirati moramo pred tem odklopiti (to storimo z gumbom Odklopi nosilec). Program Diskovna orodja omogoča formatiranje v različne datotečne sisteme: FAT, ext2, ext3, ext4, btrfs, xfs, ReiserFS, Minix, NTFS in nilfs2. V Linux sistemih se v zadnjem času najpogosteje uporablja ext4 (v prihodnosti pa se bo verjetno btrfs), a če želimo, da bo naš nosilec združljiv tudi z Windows okolji, je smiselno izbrati FAT ali NTFS, saj Windows operacijski sistemi brez dodatnih podpornih programov poznajo le ta dva datotečna sistema. Napravi lahko dodamo tudi ime, če pa želimo napravo šifrirati, to označimo s kljukico.

Šifriranje in formatiranje nosilca podatkov

Šifriranje in formatiranje nosilca podatkov.

Ker formatiranje nosilca praviloma uniči vse podatke na njem (včasih je predhodne podatke vseeno mogoče obnoviti s forenzično analizo), nas program Diskovna orodja pred nadaljevanjem vpraša za potrditev formatiranja. V nadaljevanju moramo določiti še šifrirno geslo ter določiti ali naj si ga sistem zapomni ali ne.

Določanje gesla LUKS šifrirane naprave

Določanje gesla LUKS šifrirane naprave.

Ubuntu ima podporo za šifriranje zelo dobro integrirano v sam operacijski sistem. Ko namreč LUKS šifriran nosilec priklopimo (npr. USB ključek vstavimo v računalnik), sistem sam ugotovi, da gre za šifriran nosilec podatkov in nas vpraša za geslo. Ko geslo vnesemo lahko označimo ali naj sistem geslo takoj pozabi, ali naj si ga zapomni do odjave iz sistema ali pa naj si geslo zapomni za vedno. Če označimo zadnjo možnost, si bo Ubuntu naše geslo zapomnil in ga shranil v posebno shrambo gesel in šifrirnih ključev (tim. keystore). Ko bomo ta USB ključek naslednjič vstavili v ta računalnik (v sejo danega uporabnika), vnos gesla ne bo več potreben, saj ga bo operacijski sistem sam poiskal v shrambi ključev in šifriran nosilec podatkov samodejno odklenil.

Gesla in šifrirni ključi v shrambi

Gesla in šifrirni ključi v shrambi.

Po končanem formatiranju se bo nosilec podatkov obnašal kot običajna naprava. Le s to razliko, da nas bo ob priklopu na računalnik operacijski sistem vprašal za geslo (razen če si je geslo že zapomnil oz. shranil v shrambo gesel in šifrirnih ključev), da je nosilec podatkov šifriran, pa nas bo opozarjala ikonica ključavnice na oznaki tega nosilca.

Šifrirani nosilec podatkov v pregledovalniku datotek Nautilus

Šifrirani nosilec podatkov v pregledovalniku datotek Nautilus.

S programom Cryptsetup lahko sicer šifriramo tudi kontejnerje oz. virtualne razdelke, vendar za to trenutno še ne obstaja grafično orodje, pač pa je vsaj v enem delu potrebno uporabiti ukazno vrstico. Kot rečeno, gre za posebne datoteke s tim. sliko (virtualnega) razdelka (ang. volume image). Edina zahteva Cryptsetupa je, da so kontejnerske datoteke večje od 1 Mb.

Za poznavalce Linux okolja naj na hitro opišemo postopek. Najprej v pregledovalniku datotek Nautilus ustvarimo kontejnersko datoteko. To storimo tako, da z desnim miškinim gumbom kliknemo na prazen prostor in iz menija izberemo možnost Ustvari nov dokument – Prazen dokument. Datoteki damo ime npr. mojtest.img (uporabimo lahko kakšnokoli končnico, konvencija pa je da imajo slike datotek končnico .img).

Nato ustvarjeno kontejnersko datoteko raztegnemo (na npr. 100 Mb). To storimo s pomočjo ukazne vrstice (prikličemo jo s pritiskom na Ctrl-Alt-t) in sicer tako, da vstopimo v mapo, kjer se datoteka nahaja in jo z orodjem shred “napolnimo” z naključnimi podatki:

shred -n1 -s100M mojtest.img

V naslednjem koraku je ta kontejner potreba priklopiti kot virtualni razdelek na prvo zankovno napravo (ang. loop device). Najprej v ukazni vrstici pogledamo katera je prva prosta zankovna naprava:

sudo losetup -f

Dobimo približno tak izpis, ki pomeni, da je prva prosta zankovna naprava loop0:

/dev/loop0

Sedaj datoteko mojtest.img priklopimo na to zankovno napravo:

sudo losetup /dev/loop0 mojtest.img

Ko smo to naredili, se ta kontejnerska datoteka prikaže kot nova virtualna naprava v programu Diskovna orodja. Napravo sedaj lahko šifrirano formatiramo in v končni fazi tudi priklopimo v sistem (z gumbom Priklopi nosilec).

Kontejnerska datoteka kot zankovna naprava v Diskovnih orodjih

Kontejnerska datoteka kot zankovna naprava v Diskovnih orodjih.

Če hočemo kontejnersko datoteko odklopiti iz sistema, jo v programu Diskovna orodja najprej odklopimo in zaklenemo, nato pa v ukazni vrstici vnesemo ukaz:

sudo losetup -d /dev/loop0

Kot rečeno, Cryptsetup omogoča uporabo šifrirnih kontejnerjev, vendar je za njihovo uporabo potrebno nekaj poznavanja ukazne vrstice in internega delovanja Linux sistema (zankovnih naprav). Je pa uporaba kontejnerskih datotek praktična v primeru, če želimo te datoteke prenašati med različnimi sistemi. Kontejnersko datoteko namreč lahko pošljemo na drug sistem, jo tam po zgoraj opisanem postopku priklopimo in uporabljamo kot (šifriran) virtualni nosilec podatkov.

Mimogrede, če poganjamo program Cryptsetup iz ukazne vrstice, lahko ob ustvarjanju šifriranega nosilca določimo tudi dolžino šifrirnega ključa (s parametrom –key-size). Včasih je namreč Cryptsetup uporabljal 128 bitne ključe, vendar se sedaj privzeto uporablja 256-bitno AES šifriranje. Šifrirna gesla lahko spreminjamo v programu Diskovna orodja, ali pa v ukazni vrstici s pomočjo programa Cryptsetup.

LUKS šifrirane razdelke lahko uporabljamo tudi v okolju Windows. Pri tem si pomagamo s programom FreeOTFE oziroma FreeOTFE Explorer, seveda pa moramo šifrirano napravo formatirati z datotečnim sistemom FAT ali NTFS saj v nasprotnem primeru operacijski sistem Windows ne bo prepoznal datotečnega sistema. Uporaba programa je precej enostavna, podrobna navodila pa so na njegovi spletni strani. Tudi Cryptsetup ponuja številne druge možnosti, podrobnosti je mogoče najti v priročniku za uporabo (tim. man page).

Šifriranje s pomočjo šifrirnega programa TrueCrypt

TrueCrypt je brezplačen in odprtokoden program za šifriranje diskov, ki deluje v okolju Linux, Windows 7/Vista/XP in Mac OS X. Dostopen je na naslovu http://www.truecrypt.org/.

Izgled programa TrueCrypt v Linuxu

Izgled programa TrueCrypt v Linuxu.

TrueCrypt ima številne uporabne funkcije, med drugim lahko znotraj šifriranega razdelka ustvari še skriti razdelek, kar omogoča tim. verodostojno zanikanje (ang. plausible deniability).

Za kaj gre pri verodostojnem zanikanju? Povedano preprosto – gre za skrivanje šifrirnih kontejnerjev v druge šifrirne kontejnerje. V primeru, da smo prisiljeni razkriti svoje šifrirne ključe, lahko razkrijemo samo ključ prvega šifrirnega kontejnerja, z običajno kriptoanalizo pa ni mogoče ugotoviti, da se znotraj le-tega skriva še eden kontejner s podatki, ki jih zares želimo skriti. Uporabno zlasti za tiste, ki živijo v nedemokratičnih državah.

TrueCrypt omogoča tako uporabo gesel, kot tudi datotek s ključem, šifrirati pa je mogoče celotne razdelke ali ustvarjati šifrirne kontejnerje. Seveda so šifrirani razdelki oz. kontejnerji med seboj združljivi na različnih platformah (Linux, Windows, Mac OS), paziti pa moramo, da uporabimo datotečni sistem, ki ga razumejo različni operacijski sistemi. TrueCrypt za Linux sicer s pomočjo čarovnika omogoča formatiranje v FAT, ext2, ext3 in ext4 datotečne sisteme.

Grafični vmesnik je v okoljih Linux, Windows in Mac OS enak in zelo enostaven za uporabo. Program zaženemo iz zaganjalnika, s pritiskom na gumb “Create Volume” pa zaženemo čarovnika za ustvarjanje šifriranih razdelkov oz. kontejnerskih datotek. Čarovnik ima izdatno pomoč, pri izbiri šifrirnih algoritmov pa je najbolj smiselno uporabiti privzete vrednosti.

Ustvarjanje šifrirane naprave v programu TrueCrypt

Ustvarjanje šifrirane naprave v programu TrueCrypt.

Izbira vrste šifrirane naprave

Izbira vrste šifrirane naprave.

Ustvarjeni šifrirni kontejner (ali razdelek) priklopimo tako, da najprej izberemo kontejnersko datoteko (z gumbom Select File…) ali napravo (z gumbom Select Device…), nato pa pritisnemo gumb Mount. Priklop šifrirnega kontejnerja je mogoč v poljubno mapo (za nastavitve si je potrebno ogledati dodatne možnosti priklopa), privzeto pa se priklopi v mapo /media/truecrypt1 (2, itd…).

Priklopljen šifrirni kontejner v programu TrueCrypt

Priklopljen šifrirni kontejner v programu TrueCrypt.

S klikom na Dismount oz. Dismount All lahko šifrirano napravo oz. vse šifrirane naprave odklopimo. Naj še dodamo, da TrueCrypt omogoča tudi uporabo tim. strojnih žetonov (ang. security tokens) – gre za posebne naprave, kamor lahko shranimo svoje šifrirne ključe ali digitalna potrdila.

Zaključek

Kot smo torej videli, je uporaba šifriranja nosilcev podatkov enostavna in precej dobro integrirana v Ubuntu Linux. LUKS in TrueCrypt šifrirane naprave je mogoče uporabiti na različnih platformah, zato šifrirane podatke lahko brez večjih težav prenašamo med različnimi sistemi, opisane aplikacije za šifriranje pa so odprtokodne in popolnoma brezplačne.

Do sedaj smo si torej pogledali kako izbrati dovolj varna gesla in kako jih shraniti v varno shrambo gesel, kako dostop do te shrambe s pomočjo kriptografskega deljenja skrivnosti omogočiti v primeru smrti ali nesreče, kako si namestiti popolnoma šifriran operacijski sistem in kako poskrbeti za šifiranje zunanjih nosilcev podatkov. V nadaljevanju pa si bomo ogledali kako na te zunanje šifrirane nosilce podatkov shraniti varnostno kopijo podatkov oziroma kako s pomočjo odprtokodne programske opreme ustvariti šifrirane varnostne kopije na zunanje nosilce podatkov ali v oblak.

Kategorije: Informacijska tehnologija, Informacijska varnost, Odprta koda, Zasebnost
Ključne besede: LUKS, mala šola informacijske varnosti, šifriranje, TrueCrypt