<<

MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

Linux dm-crypt šifrovanie disku v prostredí Windows

BAKALÁRSKA PRÁCA

Mario Majernik

Brno, jar 2017 Namiesto tejto stránky vložte kópiu oficiálneho podpísaného zadania práce a prehlásenie autora školského diela. Prehlásenie

Prehlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pramene a literatúru, ktoré som pri vypracovaní používal alebo z nich čerpal, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj.

Mário Majernik

Vedúci práce: Ing. Milan Brož

i Poďakovanie

Týmto chcem poďakovať Ing. Milanovi Brožovi za pomoc, rady a pripomienky, ktoré mi ochotne poskytol pri spracovaní tejto ba- kalárkej práce. Taktiež by som chcel poďakovať rodine a známym za pomoc a podporu počas celého štúdia.

ii Zhrnutie

Práca sa zaoberá symetrickým blokovým šifrovaním obrazu disku na úrovni sektorov. Skúma použitie multiplatformových kryptogra­ fických knižníc s voľne dostupným zdrojovým kódom v operačnom systéme Windows. Taktiež popisuje algoritmy, ktorými sa šifrovanie dá implementovat. Jednoduchá aplikácia ukazuje, že je možné po­ mocou knižnice OpenSSL implementovat šifrovanie obrazu disku v operačnom systéme Windows tak, aby bol potom obraz disku čita­ teľný v operačnom systéme Linux. Následné demonštračné rozšírenie do programu Total Commander taktiež predvádza túto funkcionalitu.

iii Kľúčové slová blokové šifrovanie, módy blokových šifier, kryptografické knižnice, OpenSSL, šifrovanie disku, rozšírenie, Total Commander

iv Obsah

1 Úvod 1

2 Šifrovanie disku 2 2.1 Motivácia 2 2.2 Teória diskového šifrovania 3 2.2.1 Spôsoby ako implementovat' diskové šifrovanie . 4 2.3 Blokové šifrovanie 5

3 Módy blokových šifier a inicializačně vektory 7 3.0.1 Značky použité v texte 7 3.1 ECBmód 8 3.2 CBCmód 9 3.3 XTSmód 11 3.4 Inicializačné vektory 14

4 Motivácia pre diskovú integritu 15 4.1 Typy chýb 15 4.2 Propagácia jednobitové] chyby 16 4.2.1 ECBmód 16 4.2.2 CBCmód 16 4.2.3 XTS mód 18 4.3 Integrita pre "chudobných" 18 4.4 Príklad integritného útoku ako motivácia pre použitie sil­ ných integritných nástrojov 19 4.4.1 Autentizačné kódy správy 20 4.4.2 Autentizačné módy 21

5 Knižnice 22 5.1 OpenSSL 22 5.2 22 5.3 Microsoft Cryptographic Application Programming Interface 23 5.4 NaCl ("salt ) a Libsodium 23 5.5 Výber knižnice 24 5.5.1 Použitie vybranej knižnice OpenSSL 24

6 Aplikácia 26

v 6.1 Fungovanie programu 26 6.1.1 Problémy a detaily implementácie 27

7 Rozšírenie do programu Total Commander 29 7.1 Total Commander 29 7.2 Rozšírenia 29 7.3 Rozhranie kompresného rozšírenia 30 7.3.1 OpenArchive 31 7.3.2 ReadHeader 31 7.3.3 ProccessFile 32 7.3.4 CloseArchive 33 7.3.5 SetChangeVolProc a SetProcessDataProc .... 33 7.4 Fungovanie kompresného rozšírenia 34

7.4.1 Implementácia a fungovanie rozšírenia 35

8 Záver 36

A Ako používať aplikáciu 42

B Ako používať plugin 44

vi Zoznam obrázkov

2.1 Rozdiel medzi širokým a úzkym blokom 4 2.2 Sektor v blokovom šifrovaní 5 2.3 Šifrovanie bloku 6 3.1 ECB mód šifrovanie [6] 8 3.2 ECB mód dešifrovanie [6] 8 3.3 Ukážka nevhodného použitia ECB módu [6] 9 3.4 CBC šifrovanie [6] 9 3.5 CBC dešifrovanie [6] 10 3.6 XTS šifrovanie [9] 12 3.7 XTS mód [39] 13 4.1 Typy chýb 15 4.2 Šírenie chyby v CBC móde pri šifrovaní 17 4.3 Obmedzené šírenie chyby v CBC móde pri dešifrovaní 18 5.1 Logická štruktúra OpenSSL [17] 24 7.1 Fungovanie kompresného rozšírenia 34

vii 1 Úvod

V dnešnej modernej dobe stúpa počet počítačov každým rokom. Preto sa rieši otázka ochrany súkromia čím ďalej, tým viac. Problémom sú najmä prenosné počítače, ktoré je oveľa lahšie ukradnúť ako klasické stolové. Najjednoduchším spôsobom ochrany dát na diskoch týchto prenosných počítačov je šifrovanie disku. To v ideálnom prípade za­ bráni útočníkovi v prístupe k dátam. Práve diskovému šifrovaniu je venovaná táto práca. Mojím cieľom bolo naštudovať si, akými spôsobmi sa dá realizovať šifrovanie disku. Aké algoritmy, módy a inicializačně vektory sa na tento účel využí­ vajú. Potom ich pomocou vhodnej multiplatformovej kryptografickej knižnice využiť na implementáciu aplikácie alebo rozšírenia do prog­ ramu Total Commander. Obe implementácie by mali dokázať šifrovať aj dešifrovať obraz disku. To všetko v prostredí operačného systému Windows tak, aby bolo možné ďalej s týmito obrazmi diskov pracovať aj v prostredí operačného systému Linux. Kapitola 2 sa venuje diskovému šifrovaniu. Najprv je predstavená teória, ktorá stojí za diskovým šifrovaním a potom sú popísané mož­ nosti, akými sa šifrovanie disku dá realizovať. Záver kapitoly vysvet­ ľuje blokové šifrovanie disku. V tretej kapitole sú popísané módy blokových šifier a detailne predstavené módy, ktoré sa prakticky vy­ užívajú pri šifrovaní disku. Táto kapitola taktiež opisuje inicializačné vektory podľa špecifikácie dm-crypt, ktoré som aj implementoval ako v aplikácií, tak aj v rozšírení pre program Total Commander. Kapitola 4 sa venuje diskovej integrite. Najprv sú predstavené typy chýb, ktoré môžu nastať pri diskovom šifrovaní a ako sa tieto chyby propagujú. Neskôr je popísaná disková integrita a spôsoby ako ju ove­ rovať. V piatej kapitole je popis niektorých kryptografických knižníc s voľne dostupným zdrojovým kódom. Šiesta kapitola je venovaná mojej aplikácii, najmä návrhu, jej fungovaniu a takisto problémom pri vývoji. Posledná kapitola sa venuje rozšíreniu do programu Total Commander, hlavne teórii, ktorá stojí za vývojom môjho rozšírenia.

1 2 Šifrovanie disku

V tejto kapitole sa venujem konceptu, prečo šifrovať disky, a taktiež teórii, ktorá sa skrýva za šifrovaním disku.

2.1 Motivácia

Digitálne informácie alebo dáta sú nesporne jednou z najdôležitej­ ších súčastí dnešného moderného človeka, firmy či inej organizácie. Je to výsledok dlhodobého procesu všetko zdigitalizovať, ktorý začal už pred mnohými rokmi. Napriek tomu, že digitalizácia priniesla zníženie papierovania, zvýšila efektivitu, automatizáciu a celkovú produktivitu, tak sa často zabúda na zvýšenie povedomia o bezpeč­ nosti v tejto sfére. V dnešnej dobe je enormné množstvo dát. Všetky musia byť niekde uložené a jedno z najpoužívanejších úložísk je disk počítača. Ten by mal byť šifrovaný, ak chceme ochrániť citlivé údaje pred útočníkmi. Citlivé dáta na diskoch sú napríklad:

• U fyzickej osoby

- fotografie - videá - heslá (internet banking, email, sociálne siete)

• U firiem a iných organizácií

- účtovníctvo - zmluvy - heslá (internet banking, email) - know-how - rôzne právne dokumenty

Ak útočník získa prístup k disku počítača, všetky uvedené dáta je možné nejakým spôsobom zneužiť.

2 2. ŠIFROVANIE DISKU

2.2 Teória diskového šifrovania

Diskové šifrovanie je spôsob ochrany dát ich zmenou do takej formy, ktorá je ťažko prelomitelhá pre útočníka. Šifrovanie dát na disku sa dá realizovať na týchto 4 úrovniach: [1]

• Úroveň súborov

• Úroveň zložiek

• Úroveň partícií

• Úroveň disku

Šifrovanie na každej úrovni má svoje výhody aj nevýhody Preto sa nedá tvrdiť, že šifrovanie na jednej úrovni je lepšie ako na druhej. Vždy záleží na okolnostiach, napr. ak je disk zdieľaný medzi viacerými užívateľmi, tak je nevhodné použiť iba šifrovanie na úrovni disku. Pri šifrovaní súborov a zložiek sa zvyčajne šifrujú len samotné dáta. Všetky ostatné metadata, napríklad názov súboru, časová známka modifikácie alebo veľkosť, ostávajú nezašifrované, a teda voľne prí­ stupné všetkým. To môže byť problémom v prípade, že aj metadata sú citlivý údaj. Pri šifrovaní na úrovni partícií a disku sa šifruje všetko vrátane metadát. Ak je na disku iba jedna partícia, ktorá zaberá celý disk, ide v skutočnosti o šifrovanie na úrovni disku. Ďalší podstatný rozdiel je, že zašifrované súbory a zložky sa dajú ľahko prekopírovať, alebo poslať mailom a tým získať prístup k dátam. Na druhej strane disk po vybratí a zapojení do iného zariadenia zostane zašifrovaný bez možnosti prístupu k dátam. Táto práca sa sústredí na tú najvšeobecnejšiu úroveň šifrovania, a to na šifrovanie na úrovni disku. Každé korektné šifrovanie by malo spĺňať nasledujúce vlastnosti: [39]

• K dátam na disku by sa mala dostať len oprávnená osoba (ang. confidentiality).

• Detekcia, že dáta boli pozmenené (ang. integrity).

• Šifrovanie by malo byť efektívne a neplytvať dostupnou kapaci­ tou disku.

3 2. ŠIFROVANIE DISKU

• Umiestnenie dát na disku by nemalo spomaľovať operácie načí­ tania a ukladania dát.

2.2.1 Spôsoby ako implementovat' diskové šifrovanie

Existuje niekoľko typov, ako implementovat diskové šifrovanie. [2]

• Hardvérovo alebo softvérovo

Hneď na začiatku treba zdôrazniť, že hardvérové šifrovanie nie je protiklad softvérového. Hardvérové šifrovanie má minimálny dopad na ostatné programy a procesy, pretože využíva vlastné zdroje. Na druhej strane softvérové šifrovanie zdieľa zdroje s ostatnými pro­ cesmi, čo môže mať vplyv na ich výkon. Obecne platí, že hardvérové šifrovanie je rýchlejšie ako softvérové, ale nemusí to platiť vždy.

• Šifrovanie po úzkych alebo širokých blokoch

Ako už z názvu vyplýva, šifrovanie po úzkych blokoch využíva malé bloky dát. Neexistuje žiadny štandard, ktorý by určoval ich veľkosť, ale bežne sa pracuje s veľkosťou 16 bytov, tj. 128 bitov. Na druhej strane šifrovanie po širokých blokoch znamená, že veľkosť bloku sa rovná veľkosti celého sektora. V dnešnej dobe je štandardná veľkosť sekto­ rov 512 bytov, ale vzhľadom na kapacitu diskov sa už začali vyrábať aj disky s veľkosťami sektorov 4096 bytov. Obrázok 2.1 znázorňuje rozdiel vo veľkosti úzkeho a širokého bloku.

512BM096B 1

Sektor

Široký blok (wide block)

Úzky blok (narrow block} 163

Obr. 2.1: Rozdiel medzi širokým a úzkym blokom

4 2. ŠIFROVANIE DISKU

• Transparentne alebo autentizovane

Transparentné šifrovanie nazývané aj šifrovanie v reálnom čase je metóda, pri ktorej sú dáta automaticky šifrované (dešifrované) vtedy, keď sa ukladajú (načítavajú). Oproti autentizovanému šifrovaniu však nemôže zaručiť integritu (neporušenosť) dát. Autentizovane šifrovanie zase na rozdiel od transparentného potrebuje extra pamäť na kontrolu integrity. Z tohto dôvodu autentizovane šifrovanie nie je vhodné pri šifrovaní disku, kde sa šifruje po blokoch s pevnými dĺžkami dát. Taktiež by porušovalo vlastnosť, že šifrované dáta nesmú byť väčšie ako pôvodné.

2.3 Blokové šifrovanie

Blokové šifrovanie alebo bloková šifra je deterministický algoritmus, ktorý pracuje s pevne danou dĺžkou dát nazývanou aj blok. Na šifro­ vanie aj dešifrovanie sa používa rovnaký kľúč, čiže ide o symetrické šifrovanie. [3] Okrem typických parametrov každého šifrovania, ako je napr. typ šifry alebo kľúč je bezpečnosť blokovej šifry závislá aj na veľkosti blokov (príliš malé bloky znižujú bezpečnosť šifrovania).[40]

• • •

Sektor 2

Obr. 2.2: Sektor v blokovom šifrovaní

V blokovom šifrovaní diskov vždy platí, že veľkosť bloku, ktorý chceme šifrovať, nemôže byť väčšia ako veľkosť sektora na disku

5 2. ŠIFROVANIE DISKU

(tzn. viac ako 512 resp. 4096 bytov). Šifrovanie v rámci sektora je zná­ zornené na obrázku 2.2. Vo väčšine módov, ktoré popisuje nasledujúca kapitola, sa ako iniciálna hodnota zoberie inicializačný vektor, ktorý je zvyčajne odvodený od čísla sektora. Viac v sekcii 3.4. Na obrázku 2.3 je znázornené šifrovanie v rámci jedného bloku. Otvorený blok sa zašifruje blokovou šifrou pomocou kľúča do výstup­ ného bloku. Dešifrovanie prebieha opačným smerom.

Kľúŕ K n ii 1 1 OntireHY hluík l :> ÍBliifcuviiiiľi i Zaíifrovaný lil u k E(K.P) C

Obr. 2.3: Šifrovanie bloku

Formálne zápisy šifrovania a dešifrovania bloku vyzerajú takto:

k n EK(P):=E(K,P) : {0,l} x {0,l} -> {0,1}" (2.1)

k n DK(C) := D(K,C) : {0,l} x {0,l} {0,1}W (2.2) Kde:

• E je šifrovacia funkcia

• D je dešifrovacia funkcia

• K je použitý kľúč

• k je veľkosť kľúča

• P je otvorený blok

• C je zašifrovaný blok

• n je veľkosť oboch blokov

6 3 Módy blokových šifier a inicializačně vek­ tory

Módy blokových šifier sú módy, ktorých hlavnou úlohou je zabezpečit dátovú bezpečnosť, ako je dôvernosť alebo autentizácia v blokových šifrách. Medzi blokové šifry patria napríklad šifry DES alebo AES. Najbežnejšie používané módy sú:[4]

• ECB (Electronic CodeBook)

• CBC (Cipher Block Chaining)

• CFB (Cipher FeedBack)

• OFB (Output FeedBack)

• CTR(Counter)

• XTS (XEX-based tweaked-codebook mode with ciphertext stea- ling)

Pri diskovom šifrovaní však nie sú všetky módy použiteľné či vhodné. Ako bolo už vyššie spomenuté, disk šifrujeme po blokoch dát. Tým pádom sa prúdové módy CFB a OFB nemôžu použiť. Takisto nie je vhodné použiť CTR mód, pretože jeho výstup nie je závislý na šifrovaných dátach a taktiež je možnosť meniť jednotlivé bity dát. [28] V tejto kapitole sa venujem zvyšným trom módom, z ktorých sa v praxi implementujú dva na šifrovanie disku (CBC a XTS) a jednému, ktorý pre svoje vlastnosti nieje vhodný na tento účel (ECB).

3.0.1 Značky použité v texte

• ® je operácia XOR.

• C?> je násobenie dvoch polynómov nad binárnym poľom GF(2) modulo x128 + x7 + x2 + x + 1, kde GF znamená Galois Field.[5]

7 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

3.1 ECBmód

Prvým a najjednoduchším blokovým módom je ECB mód. Vstupné dáta sú rozdelené do blokov rovnakej veľkosti. Následne sa šifrujú alebo dešifrujú nezávisle od seba. Preto šifrovanie aj dešifrovanie môže prebiehať paralelne, čo zvyšuje rýchlosť týchto procesov. [4]

Plaintext Plaintext Plaintext I 1 1 _±_ Black: Cipher Block Cipher Key Encryption Key Encryption Key Encryption

1 I 1 I I M I 1 1 I I I ľ I I I ľ I Ciphertext Ciphertext Ors hertext

Obr. 3.1: ECB mód šifrovanie [6]

Šifrovanie je znázornené na obrázku 3.1. Vezme sa otvorený blok (plaintext) a zašifruje sa kľúčom (key) do zašifrovaného bloku (cipher- text).

Ciphertext Ciphertext Ciphertext

Block ICiphe r Block iCiphe r Block ICiphe r Decryption Key - Decryption Key - Decryption L I I 1 1 Plaintext Plaintext Plaintext

Obr. 3.2: ECB mód dešifrovanie [6]

Dešifrovanie je popísané pomocou obrázka 3.2. Prebieha presne opačným spôsobom ako šifrovanie. Vezme sa zašifrovaný blok a de­ šifruje sa pomocou rovnakého kľúča ako pri šifrovaní. Každý blok je šifrovaný rovnakým kľúčom a práve tam nastáva problém. Vždy keď sa dva rovnaké bloky zašifrujú rovnakým kľú­ čom, tak výsledkom sú totožné výstupné bloky. [3] To je z hľadiska bezpečnosti neprípustné, preto tento mód nie je vhodný pri šifrovaní disku.

8 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

Original image Encrypted using ECB mode Modes other than ECB result in pseudo-randomness

Obr. 3.3: Ukážka nevhodného použitia ECB módu [6]

Obrázok 3.3 ukazuje, ako vyzerá obrázok tučniaka zašifrovaný ECB módom a ostatnými. Pri ECB móde je jasne vidieť obrysy tučniaka, no pri ostatných módoch je vidieť pseudonáhodné usporiadanie bitov obrázka.

3.2 CBCmód

CBC mód vymysleli Ehrsam, Meyer, Smith a Tuchman v roku 1976. [29] V dnešnej dobe je to jeden z najpoužívanejších módov štandardu AES. Bloky dát sú v tomto móde od seba závislé na rozdiel od ECB módu, kde sa každý šifroval individuálne. Obrázky 3.4 a 3.5 ukazujú, ako vyzerá šifrovanie a dešifrovanie.

Plaintext III 1 1 1 1 (IV) ') Block Cipher Block Cipher Block Cipher Key Encryption Key Encryption Key Encryption

n Ciphertext n n Ciphertext Ciphertext

Obr. 3.4: CBC šifrovanie [6]

Využíva sa vlastnosť reťazenia a to tak, že pri šifrovaní každého otvoreného bloku sa najprv na otvorený blok a predchádzajúci zašif­ rovaný blok použije operácia © a až následné dáta sa šifrujú. V praxi

9 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY to znamená, že každý blok je závislý od bloku pred ním a nielen od neho, ale aj od všetkých doposiaľ zašifrovaných.Problém nastáva pri prvom bloku, keďže ten nemá žiadny predchádzajúci blok. Preto sa tu zavádza špeciálny blok tzv inicializačný vektor označovaný aj IV. [4] Viac o inicializačných vektoroch v sekcii 3.4.

r.:iphertex1 Cipher lesl l-.ilialiiülion Vecto- (IV: Z pher;e«; II I I I I I M I I I I III I Block Cipher Block Ciphet r Block Cipher Decryption Key Decryption Key Decryption

n n r Plaintext p s -le*l Plaintext

Obr. 3.5: CBC dešifrovanie [6]

Formálny zápis šifrovania:

Ci = Ek(Pi®Ci-1),C0 = IV (3.1)

A dešifrovania:

Pi = Dk(Ci)®Ci-1,C0 IV (3.2)

Kde:

• P je otvorený blok dát

• C je zašifrovaný blok dát

• E je šifrovacia funkcia

• D je dešifrovacia funkcia

• k je kľúč

• i je i -tý blok v poradí

• IV označuje inicializačný vektor

10 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

Najväčšou nevýhodou CBC módu je, že operácia šifrovania nemôže prebiehať paralelne, keďže najprv sa musí zašifrovať prvý blok a až potom sa môže šifrovať druhý, tretí atď. Ďalšia vlastnosť je, že ak nastane chyba v jednom bite zašifrovaného bloku, poškodia sa len dva susediace bloky. Ostatné bloky sa dešifrujú správne. Táto vlastnosť sa v literatúrach označuje aj obmedzené šírenie chýb (ang. limited error-propagation). Podrobnejšie sa šíreniu chýb venuje sekcia 4.2. Nasledujúca vlastnosť sa týka výhradne dešifrovania. Ak sa pri de­ šifrovaní použije nesprávny inicializačný vektor (kľúč je správny), po­ škodí sa iba prvý otvorený blok, ostatné sa dešifrujú správne. Vyplýva to z toho, že pri dešifrovaní nasledujúceho bloku sa pri ope­ rácii ® použije predchádzajúci zašifrovaný blok. Pre dešifrovanie jed­ ného otvoreného bloku preto potrebujeme dva susediace zašifrované bloky. Z tohto dôvodu dešifrovanie môže prebiehať paralelne. [42]

3.3 XTSmód

XTS (XEX-based tweaked codebook mode with ) mód bol predstavený ako štandard skupinou SISWG (IEEE PI 619 Security in Storage Working Group) v decembri 2007. [7] Neskôr v roku 2010 bol spoločnosťou NIST (National Institute of Standards and Technology) [8] schválený na ochranu dát na diskoch. [7] Je odpo­ ručené ho používať iba na tento jediný účel. Je založený na móde XEX (xor-encrypt-xor), ktorý predstavil pán Rogaway v roku 2003. [19] Šifrovanie môže prebiehať paralelne, čo zvyšuje rýchlosť, no aj tak je tento mód pomalší ako CBC. Dôvodom je väčší počet matematických operácií. XTS mód využíva na rozdiel od iných módov dva kľúče. Tie sa získajú z XTS kľúča rozdelením na polovicu (tzn. kľúč = kľúči | kľúč2, kde | znamená zreťazenie).[30] Navyše spoločnosť NIST odporúča obmedziť počet blokov v jed­ nom šifrovanom sektore na maximálne 220. [7] Šifrovanie jedného bloku je znázornené na obrázku 3.6 a dalo by sa rozdeliť do 4 krokov: [9]

1. Najprv sa zašifruje kľúčom 2 číslo sektora(i) a následne prebehne operácia (g) s hodnotou od . Tento medzivýsledok je označený na obrázku ako T.

11 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

2. V ďalšom kroku sa vezme otvorený blok a prebehne operácia © s hodnotou T. Výsledok je na obrázku zobrazený ako hodnota PP.

3. Následne sa hodnota PP zašifruje kľúčom 1. Na obrázku hodnota CC.

4. Finálny krok je, že sa aplikuje operácia © na hodnoty T a CC. Výsledkom je zašifrovaný blok.

Key,

AES-enc

AES-enc * Key,

Obr. 3.6: XTS šifrovanie [9]

Dešifrovanie je rovnaké až na 3. krok, kde sa namiesto šifrovania dešifruje. Následne obrázok 3.7 ukazuje ako prebieha postupné šifrovanie všetkých blokov. Podobne ako u CBC módu tu prebieha reťazenie hodnôt. Avšak nie sú to samotné dáta čo sa reťazia, ale hodnota, ktorá je na obrázku 3.6 označená ako Tav anglickej literarúre sa nazýva "tweak value".

12 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

block cipher encryption Plaintext Plaintext Plaintext ~n 111 i-m I 1 I II I I I I I m

—e block cipher :) ock c phei" o oc k cpher encryption encryption encryption

i n 1111 rm • M 11 ii 11 rm Ciphertext Ciphertext Ciphertext

Obr. 3.7: XTS mód [39]

Formálny zápis šifrovania vyzerá nasledovne:

C = EKeyi (T © P) © T, T = EKey2(i) (g) oú (3.3)

A dešifrovania takto:

P = DKeyi(T © C) © T, T = EKeyi(i) (g> cú (3.4)

Kde:

• i je číslo sektora na disku

• ® je násobenie nad GF(2)

• DL je primitívny element GF(2128)

• j je číslo bloku v danom sektore

• © je operácia XOR

• P je vstupný blok dát

• C je výstupný blok dát

• Keyi, Ke\/2 sú dve rovnako veľké časti XTS kľúča

13 3- MÓDY BLOKOVÝCH ŠIFIER A INICIALIZAČNĚ VEKTORY

3.4 Inicializačně vektory

Nasledujúca krátka sekcia sa venuje inicializačným vektorom a ich typom. Inicializačný vektor (ďalej iba IV) je číslo, ktorým sa zaisťuje, aby sa dve rovnaké správy (v našom prípade bloky) nezašifrovali do rovnakej zašifrovanej správy (bloku). Z hľadiska bezpečnosti môže byť každý IV použitý iba raz v jednom šifrovaní. V našom prípade veľ­ kosť IV závisí od velkosti bloku, keďže ako bolo znázornené v módoch vyššie, na blok dát a IV sa aplikuje operácia ©. Typy IV podľa špecifikácie dm-crypt:[10]

• null: IV tvorený stále zo samých núl.

• plain : IV je tvorený 32 bitovým číslom sektora uloženého spô­ sobom little-endian. Je zarovnaný nulami, ak je to potrebné.

• plain64 : IV je tvorený 64 bitovým číslom sektora uloženého spôsobom little-endian. Je zarovnaný nulami, ak je to potrebné.

• ESSIV (Encrypted Sector Salt Initial Vector) : Číslo sektora je zašifrované príslušnou šifrou (AES v našom prípade) použitím "soli" ako kľúča. "Soľ'sa získa z kľúča príslušnej šifry pomo­ cou hašovania. Podľa špecifikácie sa používa hašovacia funkcia SHA256.

• benbi: IV je tvorený 64 bitovým číslom sektora, ktoré je posu­ nuté o hlavičku zväzku + 1 uloženého spôsobom big-endian. Bol zavedený pre použitie s módom LRW. [11]

14 4 Motivácia pre diskovú integritu

Táto kapitola najprv predstavuje typy chýb, ktoré môžu nastať pri šifrovaní a ako sa tieto chyby ďalej prejavujú. Ďalej predstavuje slabé riešenie zabezpečenia integrity. V závere popisuje príklad integritného útoku a stručne predstavuje spôsoby ako lepším spôsobom zabezpečiť integritu dát.

41 Typy chýb

Ako prvé je potreba predstaviť typy chýb. Existujú dva typy a to:[12] • Špecifická bitová chyba (SBE-specific bit error)

• Náhodná bitová chyba (RBE-random bit error) Ďalej v texte budem používať iba anglické skratky. RBE je chyba, pri ktorej je zmena bitov v bloku náhodná. Na druhej strane SBE je chyba, ktorá postihne dopredu známy bit. Pri manupulácií s vyššie spome­ nutými módmi môžu tieto chyby nastať pri dvoch operáciách, ktoré popisuje nasledujúci obrázok 4.1.

l.Blok 1 m

< í í 5 f B í) 9 í) «)

Šifrovacia/dešifrovacia 2. Blok funkcia

Výstupný 1 blok | | | M

Obr. 4.1: Typy chýb

SBE nastane ak sa na blok dát aplikuje operácia © s iným blokom dát. Výstupné dáta budú poškodené len na rovnakej pozícií ako bol

15 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU poškodený vstupný blok. Vyplýva to z aplikácie operácie ® na bloky dát. Ta prebieha tak, že sa zoberie prvý bit prvého bloku a prvý bit druhého bloku a na ne sa aplikuje operácia ©. Takto postupne na druhý s druhým, tretí s tretím atď. Z tohto dôvodu sa chyba nemôže preniesť na inú bitovú pozíciu v bloku. Na druhej strane RBE nastane, ak sa na blok dát aplikuje nejaká pseudonáhodná funkcia (napr. AES). Každá takáto funkcia obsahuje viacero operácií, ktoré rôzne pracujú s jednotlivými bitmi dát. Vzhľa­ dom na tieto operácie sa jednobitová chyba môže rôzne prejaviť. Vý­ stupné dáta sa môžu zmeniť v niekoľkých náhodných bitoch alebo sa môžu prevrátiť aj všetky bity dát. To záleží na viacerých faktoroch, ako je napríklad typ použitej funkcie (napr. šifrovacia, hašovacia atď.) alebo pozícia chyby.

4.2 Propagácia jednobitovej chyby

Táto sekcia popisuje, ako sa šíria chyby vo všetkých troch vyššie spome­ nutých módoch. V každom móde sa bude meniť jeden bit v otvorenom a aj v zašifrovanom texte a následne bude objasnené, ako sa táto zmena ďalej prejaví.

4.2.1 ECBmód

Pri ECB móde je očividné, že chyba ostane iba v jednom cykle, keďže bloky nijako od seba nezávisia. Napríklad, ak sa zmení jeden bit v poradí šiestom otvorenom bloku, tak počas šifrovania sa chyba prejaví v šiestom zašifrovanom bloku. Ani predchádzajúci, ani nasle­ dujúci blok nie je touto chybou nijako ovplyvnený. To isté zrkadlovo platí aj u dešifrovania. Táto chyba je typu RBE.

4.2.2 CBCmód

Pri CBC móde je šírenie chýb u šifrovania a dešifrovania rozdielne, preto sú vysvetlené osobitne.

16 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU

Šifrovanie: Ak nastane chyba v otvorenom bloku pri šifrovaní, tak sa chyba po­ stupne prejaví na všetkých nasledujúcich zašifrovaných blokoch ako to ilustruje obrázok 4.2.

Otvorený i-tý blok Otvorený i+1 blok m

Šifrovacia funkcia Šifrovacia funkcia

i r TI

Zašifrovaný i-tý blok Zašifrovaný i+1 blok

| Značí poškodenúinfoimáciu

Obr. 4.2: Šírenie chyby v CBC móde pri šifrovaní

Vo všetkých blokoch ide o chybu typu RBE. Napríklad, ak chyba opäť nastane v šiestom otvorenom bloku, tak zmení šiesty zašifro­ vaný blok a začne postupne prebublávať do siedmeho, ôsmeho atď. Vyplýva to zo základnej myšlienky CBC módu a tou je zreťazenie (ang. chaining).

Dešifrovanie: Chyba v zašifrovanom bloku sa pri dešifrovaní prejaví iba v dvoch po sebe idúcich blokoch, ako uvádza aj obrázok 4.3. Príkladom môže byť zase šiesty zašifrovaný blok. Ak sa zmení bit v ňom, tak sa chyba prejaví v šiestom otvorenom bloku a prenesie sa aj do nasledujúceho, čiže siedmeho otvoreného bloku. V šiestom bloku ide o chybu typu RBE. V siednom o chybu SBE, pretože chyba sa presúva do tohoto bloku pomocu operácie ©. Ďalej sa však nešíri a ostatné bloky sa dešifrujú správne. Vyplýva to z toho, že pri dešifrovaní sa vždy ako IV berie predchádzajúci zašifrovaný blok, ktorý je pri dešifrovaní ôsmeho bloku nepoškodený.

17 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU

Zašifrovaný i-tý blok Zašifrovaný i+1 blok

l l 111 l l l l l l l 111 l

Dešiŕrovacia funkcia Deiiírovacia fuiikcia

LL Dešifrovaný i-tý blok Dešifrovaný i+1 blok

Q Znacipoškcdaiúinformáciu

Obr. 4.3: Obmedzené šírenie chyby v CBC móde pri dešifrovaní

4.2.3 XTSmód

Pri XTS móde je šírenie chýb totožné s ECB módom. To znamená, že ak nastane chyba v šiestom otvorenom (zašifrovanom) bloku, tak sa chyba prejaví iba v šiestom zašifrovanom (otvorenom) bloku. Rovnako ide o chybu typu RBE. Pri šifrovaní aj dešifrovaní sa podobne ako pri CBC móde využíva koncept reťazenia. Retazí sa však hodnota, ktorá nie je závislá ani na otvorenom bloku, ani na šifrovanom. To je dôvodom, prečo sa chyba neprenáša ďalej. Viď obrázok 3.7

4.3 Integrita pre "chudobných"

Integrita pre "chudobných" (z ang. Poor-man's authentication) je kon­ cept, ktorý hovorí, že ak nastane chyba v zašifrovaných dátach, tak nastane jedna z týchto situácií. Prvá situácia hovorí, že chyba sa pre­ javí po dešifrovaní dát takým spôsobom, že dáta ostanú poškodené a nečitateľné. Tým je detekované, že bola porušená vlastnosť integ­ rity. Druhá situácia zase hovorí, že dešifrovanie prebehne správne a dáta sú čitateľné, ale aplikácia, prípadne užívateľ dokáže detekovat', že došlo k nejakej zmene dát a tým k narušeniu integrity. Vo väčšine prípadov nastane niektorá z týchto situácií a detekuje sa, že dáta boli zmenené.[26] Existujú však prípady kedy tomu tak nie je. Ukážkou je

18 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU názorný jednoduchý prípad, kedy sa nezaznamená porušenie integ­ rity. Nech sú v zašifrovanom súbore uložené náhodné binárne dáta, ktoré sú používané ako kľúč k nejakému inému šifrovaniu. Po binárnej zmene v tomto súbore sa dáta dešifrujú správne a do takej podoby, že aplikácia nezaznamená, že došlo k zmene hoci len jedného bitu a tým k porušeniu integrity. Následne tento dešifrovaný kľúč može užívateľ použiť k dešifrovaniu nejakých iných dát a zistí, že sa dešifrujú nesprávne. Vzhľadom na to, že dešifrovanie kľúča dopadlo dobre bude mať užívateľ tendenciu myslieť si, že chyba je v samotných dátach nie v kľúči.

4.4 Príklad integritného útoku ako motivácia pre použitie silných integritných nástrojov

Ukážkovým integritným útokom na CBC mód je útočníkova úmyselná zámena jedného alebo viacerých bitov šifrovných dát. Tento útok je možno ilustrovať aj obrázkom 4.3. Na realizovanie tohto útoku musí byť splnených viacero podmienok. Útočník musí mať prístup k šifro­ vaným dátam a musí mať možnosť ich meniť. Ďalšou podmienkou je, že útočník má znalosti o šifrovanom obsahu. Útok prebieha tak, že po zmenení jedného alebo viacerých bitov v šifrovanom bloku dát sa tento blok po dešifrovaní poškodí. To nie je problémom, ak útočník vie, že sa v tomto bloku nachádzajú nejaké binárne dáta, ktoré systém nedetekuje ako poškodené. Navyše sa tieto zámeny prejavia aj v nasle­ dujúcom bloku, kde zmenia bity na rovnakých pozíciách ako to bolo v predchádzajúcom zašifrovanom bloku. Týmto spôsobobom môže útočník zmeniť pôvodné zašifrované dáta a ani systém, ani človek to nemusí detekovat ako porušenie integrity dát. Jednoduchým riešením na tento útok by sa mohlo zdať použitie parity alebo paritného bitu. [31] No toto riešenie nie je postačujúce k zaručeniu silnej integritnej bezpečnosti. Útočník totiž môže zmeniť párny počet bitov v bloku a tým pádom parita nasledujúceho bloku bude po zmenení bitov rovnaká. Preto pre zaistenie silnej integritnej bezpečnosti je potrebné použiť lepšie a silnejšie nástroje. Medzi najpoužívanejšie riešenia patrí použi­ tie nejakého autentizačného kódu správy (ang. message authentication

19 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU code) a priamo použitie módu s autentizáciou. Oba typy používajú k overovaniu integrity dát autentizačnú značku (ang. authentication tag), čo sú dáta naviac oproti bežným konštrukciám, ktoré neoverujú integritu šifrovaných dát. Nižšie sú stručne popísané príklady týchto nástrojov.

4.4.1 Autentizačné kódy správy

Táto sekcia ukazuje príklady autentizačných kódov správy.

• CBC-MAC (CBC - Message Authentication Code) [34]

Prvým príkladom autentizačného kódu správy je konštrukcia CBC- MAC. Kedže základom tejto konštrukcie je CBC mód, tak sa táto technika používa pri zaistení integrity dát, ktoré je možné rozdeliť na bloky. Dáta sa najprv zašifrujú bežným CBC módom. Následne sa vezme posledný zašifrovaný blok dát a ten sa ešte raz zašifruje s kľúčom, ktorý nie je nijako závislý na kľúči, ktorý sa použil na pred­ chádzajúce šifrovanie. Je dôležité použiť rozdielne kľúče na obe operá­ cie, pretože inak táto konštrukcia stráca na bezpečnosti. [32] Tento dvakrát zašifrovaný blok je potom priložený k samotným zašifrovaným dátam ako autentizačná značka . Overovanie, či dáta neboli zmenené potom prebieha tak, že po dešifrovaní sa opäť vy­ počíta autentizačná značka a porovná sa s tou, ktorá bola priložená k šifrovaným dátam. Ak sa zhodujú potom dáta neboli zmenené. [33]

• HMAC (Hashed Message Authentication Code)

Ďalším veľmi používaným typom autentizačného kódu správy je HMAC. Je založený na použití nejakej hašovacej funkcie. Tá nie je striktne určená. HMAC funguje takým spôsobom, že sa najprv po­ mocou kľúča a konštanty špecifickej pre HMAC vypočíta iniciálna hodnota, ktorá sa pripojí k dátam. Všetko sa to postupne zahašuje príslušnou hašovacou funkciou. Potom sa vypočíta ďalšia hodnota z kľúča a druhej konštanty, ktorá sa pripojí pred predchádzajúce zaha- šované dáta. To celé sa ešte raz zahašuje a výsledkom je autentizačná značka. Pomocou nej sa potom overuje, či správa bola pozmenená alebo nie. [35]

20 4- MOTIVÁCIA PRE DISKOVÚ INTEGRITU

4.4.2 Autentizačné módy Táto sekcia ukazuje príklady módov s autentizáciou.

• CCM (Counter with CBC-MAC)

Ako už z názvu vyplýva tento mód kombinuje counter mód s kon­ štrukciou CBC-MAC. Šifrovanie prebieha vo dvoch krokoch. Prvým je vytvorenie autentizačnej značky pomocou konštrukcie CBC-MAC. Následne sú samotné dáta zašifrované pomocou counter módu. Výstu­ pom je spojenie zašifrovaných dát a autentizačnej značky. Dešifrovanie prebieha tak, že sa najprv dešifrujú samotné dáta, potom sa vypočíta hodnota autentizačnej značky a nakoniec sa skontroluje zhodnosť oboch značiek. [36]

• GCM (Galois/Counter Mode)

Tento mód opäť využíva counter mód tentokrát v spojení s hašovaním. Prvým krokom je zašifrovanie dát pomocou counter módu. Následne sa vypočíta autentizačná značka. Tá je počítaná zo zahašovaných zašif­ rovaných blokov ich reťazením podobne ako je to u CBC módu. Ako iniciálna hodnota sa zoberie zašifrovaný a zahašovaný nulový counter. Dešifrovanie prebieha opačným spôsobom a rovnako ako u ostatných nástrojov sa overuje integrita porovnaním oboch autentizačných zna­ čiek. [37] [38]

Ohľadom autentizačných módov je aktuálne vyhlásená súťaž na nový autentizačný mód. Názov súťaže je CAESAR (Competition for : Security, Applicability, and Robustness) a jej cieľom je nájsť autentizačnú šifru, ktorá bude ponúkať výhody oproti módu AES-GCM a bude vhodná k širokému použitiu. Na šifru sú kladené ako funkčné požiadavky, tak aj softvérove a hardvérové. [41]

21 5 Knižnice

V tejto kapitole sú stručne popísané kryptografické knižnice, ktoré im- plementujú vyššie spomenuté šifrovanie. Samozrejme nie sú popísané všetky kryptografické knižnice, ale len tie, ktoré boli skúmané. Ďalej je popísaný výber knižnice na implementáciu aplikácie a detaily jej použitia.

5.1 OpenSSL

OpenSSL je otvorená knižnica, ktorá poskytuje sadu nástrojov pre protokoly TLS (Transport Layer Security) a SSL (Secure Sockets Layer) a taktiež širokú škálu kryptografických funkcií. Je založená na knižnici SSLeay, ktorú vyvinuli Erik A. Young a Tim J. Hudson. Je napísaná v jazyku C. Sada nástrojov je licencovaná pod Apache licenciou, čo v praxi znamená, že je voľne dostupná na použitie na komerčné aj nekomerčné účely. OpenSSL je navyše multiplatformová knižnica, ktorá je podporovaná v operačných systémoch Linux, Windows, Mac, Android a ďalších. [13]

5.2 Libgcrypt

Libgcrypt je univerzálna kryptografická knižnica založená na kóde programu GnuPG. Je vyvinutá a stále udržiavaná hlavným autorom Wernerom Kochom. Rovnako ako OpenSSL je napísaná v jazyku C. Sada nástrojov je licencovaná pod GNU Lesser General Public License (GNU LGPL) lincenciou, niektoré jej časti pod GNU General Public License (GNU GPL) licenciou. V praxi to znamená, že časti, ktoré sú licencované pod GNU LGPL, môžu byť šírené, ale nie mě­ něné. Na druhej strane časti, ktoré su licencované pod GNU GPL, môžu byť menené aj šírené, ale je potrebné implementácie, ktoré tieto časti využívajú, licencovat pod touto licenciou. Taktiež ako OpenSSL je multiplatformová. Funguje na väčšine POSIX-ových systémoch a operačných systémoch Windows. [14]

22 5- KNIŽNICE

5.3 Microsoft Cryptographic Application Programming Interface

Microsoft Cryptographic Application Programming Interface alebo taktiež známe ako Microsoft Cryptography API či MS-CAPI je apli­ kačné programové rozhranie, ktoré je zahrnuté v operačných systé­ moch Windows. Jeho účelom je pomôcť programátorom, ktorí vyvíjajú programy na tejto platforme, pracovať s dátami v bezpečnom prostredí. Je napísané v jazyku C resp. C++. Je súčasťou všetkých operačných systémov Windows od verzie NT 4.0. Viac informácií na oficiálnych stránkach spoločnosti Microsoft. [15]

5.4 NaCl ("salt") a Libsodium

NaCl (Networking and Cryptography library) je "ľahko použiteľná vysokorýchlostná knižnica na sieťovú komunikáciu, šifrovanie, de­ šifrovanie, podpisy atď. Jej cieľom je poskytnúť všetky základné ope­ rácie potrebné k vybudovaniu vysokoúrovňových kryptografických nástrojov."[24] Autormi sú Daniel J. Bernstein, Tanja Lange a Peter Sch- wabe. Je napisná v jazyku C, ale poskytuje rozhrania aj pre jazyky C++ a Python ako obaly nad implementáciou v jazyku C. Celá knižnica je voľne dostupná a licencovaná verejnou licenciou. Knižnicu je možno použiť len v UNIX-ových systémoch. [24] Knižnica nie je rozšírená z niekolkých dôležitých dôvodov. Jedným z nich je, že nie je možnosť ju nainštalovať, ale je potrebné si kód knižnice skompilovať. Ďalším je neprenositeľnosť knižnice. To znamená, že funguje iba na stroji, na ktorom bol kód skompilovaný. [27] Libsodium (Sodium library) je knižnica, ktorá je akousi vylepšenou a rozšírenou verziou knižnice NaCl. Authorom myšlienky je Frank De­ nis. Oproti knižnici NaCl poskytuje rozhrania pre velký počet jazykov napríklad .NET, Perl, Java, Javascript a dalšie. Je licencovaná licenciou ISC, ktorá dovoľuje používať, kopírovať, meniť a distribuovať, či už komerčne alebo nekomerčne za predpokladu, že ISC licencia bude uvedená vo všetkých vytvorených kópiách. Platformovú dostupnosť rozširuje na systémy Windows, Android a iOS. Narozdiel od NaCl je knižnica prenosná a je možnosť systémovej inštalácie. [25]

23 5- KNIŽNICE

5.5 Výber knižnice

Aplikácia je vyvíjaná v prostredí Windows, preto by sa rozhranie od Microsoftu mohlo javiť ako najlepšia možnosť. Navzdory tomu, rozhranie je ako súčasť operačných systémov Windows, takže nie je licencované žiadnou voľne šíriteľnou licenciou. Z tohto dôvodu som toto rozhranie nepoužil pri implementácii. Knižnica libgcrypt sa nedá použiť z dôvodu, že podľa referencie neobsahuje implementáciu XTS módu. [16] Knižnice NaCl a Libsodium neboli použiteľné z viacerých hľadísk. Napríklad kedže sa jedná o vysokoúrovňové knižnice tak ne­ poskytujú nízkourovňové nástroje potrebné na moju implementáciu. Navyše knižnica NaCl nie je dostupná na operačných systémoch Win­ dows. Najreálnejšou možnosťou teda bolo použitie OpenSSL knižnice. Tá je robustná a pomerne rozšírená. Taktiež podporuje XTS mód a je licencovaná pod benevolentnou Apache licenciou.

5.5.1 Použitie vybranej knižnice OpenSSL

OpenSSL knižnica je pomerne rozsiahla, a preto je rozdelená do lo­ gických modulov. Kedže som nepotreboval všetku jej funkcionalitu, tak som využil len niektoré jej moduly. Na obrázku 5.1 je znázornená logická štruktúra knižnice. Na implementáciu bola použitá verzia knižnice 1.0.2.

Command Line Interface

SSUTLS EVP Crypto API

BIO ERR Error Data Abstract Handling Structure Soft Crypto Impl Engine API I/O

Hard Crypto Accelerator

Obr. 5.1: Logická štruktúra OpenSSL [17]

Konkrétne som v práci využil moduly, ktoré sú na obrázku 5.1 označené ako Soft Crypto Impl a EVP Crypto API. Implementácia týchto modulov je rozdelená do viacerých hlavičkových súborov.

24 5- KNIŽNICE

Ja som v práci využil tieto tri: aes.h je hlavičkový súbor, ktorý definuje štandard AES so základnými módmi sha.h je hlavičkový súbor, ktorý definuje všetky hašovacie funkcie SHA evp.h je hlavičkový súbor, ktorý ponúka vysoké rozhranie pre nízko- úrovňové operácie poskytované modulom crypto.h

Prvým hlavičkovým súborom som naimplementoval šifrovanie a de­ šifrovanie pomocou šifry AES a jej módu CBC. Druhým som zase naimplementoval inicializačný vektor ESSIV, v ktorom je potrebná hašovacia funkcia SHA256. Tretím som naimplementoval šifrovanie a dešifrovanie pomocou šifry AES s módom XTS.

25 6 Aplikácia

Mojím cieľom bolo naimplementovať jednoduchú aplikáciu v ope­ račnom systéme Windows, ktorá by dokázala šifrovať, či dešifrovať obraz disku, ktorý by bol potom čitateľný ako v operačnom systéme Windows, tak aj v operačnom systéme Linux. Ako je už vyššie spo­ menuté, na implementáciu som použil časť knižnice OpenSSL, ktorá implementuje rozhrania, ktoré som potreboval. Z dôvodu, že knižnica je napísaná v jazyku C, tak aj moja aplikácia je napísaná v rovnakom jazyku. Ako šifru som si vybral štandard AES (Advanced Encryption Standard) s veľkosťami blokov 16 bytov (128 bitov), čo je štandardná veľkosť, ktorú používa špecifikácia cryptsetup/LUKS.[18] Aplikácia je vo forme programu, ktorý je spustitelný z príkazového riadka. Aplikácia nepodporuje autentizované šifrovanie. Dôvodom je, že špecifikácia dm-crypt vo verzii 1.7.1, ktorá bola predlohou tejto práce, túto možnosť nepodporuje. Program ponúka šifrovanie aj dešif­ rovanie obrazu disku pomocou šifry AES a módov CBC alebo XTS. V oboch módoch sú dostupné všetky inicializačně vektory podľa špe­ cifikácie dm-crypt. [10] Pri CBC móde sú podporované veľkosti kľúčov 16 alebo 32 bytov a pri XTS móde 32 alebo 64 bytov. Kľúč je načrtá­ vaný zo súboru a musí mať presnú veľkosť, inak sa šifrovanie alebo dešifrovanie nevykoná. Taktiež je možné, aby program nešifroval a nedešifroval celý obraz disku, ale iba jeho časť, ktorú je možno vyme­ dziť rozmedzím sektorov. Program počíta so štandardnými obrazmi diskov s veľkosťou sektora 512 bytov.

6.1 Fungovanie programu

Program na vstupe očakáva šesť alebo osem argumentov. To záleží na tom, či používateľ chce šifrovať, resp. dešifrovať celý súbor alebo iba časť. Ak sa rozhodne pre celý súbor, tak je potrebných len šesť parametrov. Ak sa rozhodne iba pre časť disku, tak sú potrebné ešte dva argumenty naviac, ktoré vymedzujú tie sektory, ktoré majú byť spracované. Vstupné argumenty programu sú: 1. Cesta k obrazu disku, ktorý sa má šifrovať alebo dešifrovať

2. Cesta k súboru s kľúčom

26 6. APLIKÁCIA

3. Príznak toho, či sa má obraz disku zašifrovať alebo dešifrovať

4. Príznak šifovacieho módu

5. Príznak inicializačného vektora

6. Príznak toho, či sa má šifrovať celý disk alebo iba časť

7. Číslo sektora, od ktorého sa má začať spracovávať

8. Číslo sektora, po ktorý má byť obraz disku spracovaný

Program všetky tieto argumenty načíta, spracuje a nastaví všetky potrebné premenné. Potom sa podľa nich začne spracovávať obraz disku postupne po sektoroch spomínanej dĺžky 512 bytov. Každý z nich následne šifra AES spracuváva po štandardných 16 bytových blokoch. Výstupom programu je obraz disku, ktorý je buď zašifrovaný alebo dešifrovaný podľa argumentu číslo tri. Podrobnejšie informácie, ako používať aplikáciu, sa nachádzajú v prílohe A.

6.1.1 Problémy a detaily implementácie

Na začiatku som mal problémy s pochopením fungovania OpenSSL knižnice, lebo dokumentácia k nej nie je veľmi zrozumiteľne napísaná a knižnica je pomerne rozsiahla.

AES_cbc_encrypt(block , // vstupný blok dat out_block , // výstupný blok dat SECTOR_SIZE, // velkost bloku &key , // kluc initialVector, // inicializacny vektor AES_ENCRYPT) ; // príznak šifrovania

Ukážka kódu 6.1: Šifrovanie jedného sektora módom AES-CBC

Problematická bola aj implementácia AES-XTS módu, ktorý bol do OpenSSL pridaný oveľa neskôr ako ostatné módy. V hlavičkovom súbore aes.h, kde sú definované všetky ostatné módy so šifrou AES, sa definícia XTS módu nenachádza. Z toho dôvodu som sa snažil zistiť, či sa spomínaný mód dá implementovat pomocou tejto knižnice. Zistil som, že dá, ale implementácia prebieha na vyššej úrovni, ako

27 6. APLIKÁCIA tomu je pri CBC móde. Túto úroveň poskytuje hlavičkový súbor evp.h. No šifrovanie, rovnako aj dešifrovanie sa implementuje menej intu­ itívne ako mód AES-CBC. Názorné ukážky kódov 6.1 a 6.2 to ukazujú na príklade šifrovania.

EVP._EncryptInit (ctx , // EVP context EVP_aes_128_xts () , // identifikátor šifry keyStr , // kluc initialVector ) ; // inicializacny vektor

EVP._EncryptUpdat e (ctx , out_block , // výstupný blok dat &len, // dlzka výstupného bloku block , // vstupný blok dat SECTOR_SIZE); // dlzka vstupného bloku

EVP._EncryptFinal (ctx , out_block + len, &len); Ukážka kódu 6.2: Šifrovanie jedného sektora módom AES-XTS

Pri AES-CBC móde sa použije iba jedna funkcia. No na zašifrova- nie jedného bloku pomocou AES-XTS módu sú potrebné tri funkcie, pri ktorých argumenty nie sú úplne intuitívne. Ďalším zaujímavým problémom bolo implementovanie iniciali- začného vektora ESSIV. Pri jeho tvorbe je potrebné zahašovať kľúč hašovacou funkciou SHA256. Riešením bolo použitie hlavičkového súboru sha.h, ktorý obsahuje definície všetkých hašovacích funkcií SHA. Opäť ale bolo potrebné použiť viacero funkcií k správnemu zahašovaniu kľúča.

SHA256. _Init(&sha_key); // context pre SHA256

SHA256. _Update(&sha_key , keyStr , // retazec obsahujúci kluc size) ; // velkost kluca

SHA256. _Final(hash_key , // výstupný has kluca &sha_key) ; Ukážka kódu 6.3: Hašovanie pomocou SHA256

28 7 Rozšírenie do programu Total Commander

V tejto kapitole sa venujem rozšíreniu do programu Total Comman- der [20], ktoré je postavené na vyššie spomenutej aplikácii. Jeho úlo­ hou je, rovnako ako v aplikácii, šifrovať alebo dešifrovať obraz disku, no v prostredí programu Total Commander. Najprv v tejto kapitole predstavím program Total Commander, typy jeho rozšírení a potom popíšem typ rozšírenia, ktoré som použil.

7.1 Total Commander

Total Commander je správca súborov, ktorý bol predstavený v roku 1993 jeho vývojárom Christianom Ghislerom. Práve ním je udržiavaný a vylepšovaný dodnes. Je napísaný v jazyku Delphi a je podporo­ vaný na väčšine operačných systémoch Windows, Android, Windows Phone a ďalších. Program ma názov Total Commander od roku 2002. Predtým bol známy ako Windows Commander, no kvôli sporom mu­ sel byť názov zmenený.

7.2 Rozšírenia

V čistej inštalácii programu Total Commander nemusí byť taká funkci­ onalita, ktorú potrebuje špecifický používateľ. Ten má však možnosť vylepšiť si program rozšíreniami, ktoré on sám potrebuje. Rozšírenia (ang. plugins) programu Total Commander sú dynamicky prepojené knižnice (ang. DLL - dynamic link library), ktoré rozširujú a vylep­ šujú jeho funkcionalitu. Väčšina z nich používa softvér tretích strán k jeho funkčnosti v tomto programe. Typov rozšírení je veľa a Total Commander momentálne podporuje tieto štyri: [21]

Kompresné rozšírenia: Tieto rozšírenia sa používajú na komprimo­ vanie súborov, prezeranie a extrahovanie archívov, ktoré nie sú priamo podporované programom Total Commander.

Rozšírenia súborového systému: Pomocou týchto rozšírení môžete pracovať s diskami, ktoré nie sú štandardne dostupné. Napr. Linux partícia alebo externé zariadenia typu Palm/PocketPC.

29 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

Rozšírenia zobrazovania: Rozšírenia umožnia zobraziť súbory rôz­ nych formátov, napríklad obrázky, tabuľky, databázy atď. v okne s náhľadom (vyvolané stlačením klávesy F3).

Obsahové rozšírenia: Tieto rozšírenia umožnia zobraziť napr. infor­ mácie o súbore MP3, atribúty obrázkov pri ich zobrazovaní, prípadne ich použiť pri hľadaní a premenovávaní.

7.3 Rozhranie kompresného rozšírenia

Každé z týchto rozšírení má vlastné rozhranie, ktoré je potrebné im­ plementovat. Moje rozšírenie je typu kompresného rozšírenia, preto sa ďalej venujem iba tomuto typu. V tejto sekcii som vo veľkej miere čerpal z oficiálnych stránok programu Total Commander.[22] Rozhranie pre toto rozšírenie je dostupné pre jazyky C++, Delphi a Euphoria.[23] V tomto rozšírení je povinná implementácia týchto funkcií:

• OpenArchive

• ReadHeader

• ProccessFile

• CloseArchive

• SetChangeVolProc

• SetProcessDataProc

Taktiež je možnosť implementovat aj niekoľko voliteľných funkcií, ktoré však nebudem uvádzať v tejto práci, pretože som ich pri imple­ mentácii môjho rozšírenia nepotreboval implementovat'. Ich popis je však dostupný na oficiálnych stránkach. [22] Taktiež je tam možné nájsť popis chybových hodnôt a štruktúr, ktoré budú spomenuté nižšie. Následne všetky vyššie spomenuté povinné funkcie postupne predstavím.

30 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

7.3.1 OpenArchive

Táto funkcia je volaná ako prvá a mala by vykonať všetky potrebné operácie pre archív, ktorý má byť otvorený. Hlavička vyzerá nasle­ dovne:

HANDLE __stdcall OpenArchive (tOpenArchiveData *ArchiveData) ;

Funkcia by mala vracať jedinečnú hodnotu HANDLE, ktorá reprezen­ tuje archív. Tá bude s najväčšou pravdepodobnosťou uložená na halde, z ktorej bude možné dáta načrtávať, a taktiež do nej za­ pisovať. Keďže rozhranie bolo vytvorené okolo rozhrania Windows, tak hodnota HANDLE sa rovná ukazatelů na typ void. Z toho dôvodu je možné ju explicitne pretypovať na typ dát, ktoré sa spracúvavajú. Táto hodnota by mala ostať validná, až pokiaľ sa nezavolá funkcia CloseArchive, ktorá túto hodnotu bezpečne vymaže. Ak počas behu funkcie nastane chyba, funkcia by mala vrátiť hodnotu 0 a nastaviť archívu ArchiveData chybovú hodnotu do premennej OpenResult.

7.3.2 ReadHeader

Nasledujúca funckia ReadHeader je volaná hneď po skončení funkcie OpenArchive. Total Commander volá túto funkciu, aby zistil, aké prie­ činky či súbory sa nachádzajú v archíve, ktorý bol vrátený funkciou OpenArchive. Hlavička funckie vyzerá takto:

int __stdcall ReadHeader (HANDLE hArcData, tHeaderData *HeaderData) ;

Táto funkcia je volaná v cykle dovtedy, kým jej návratová hodnota je 0. V každom behu cyklu musí argument HeaderData poskytnúť proramu Total Commander informácie o súboroch nachádzajúcich sa v archíve. Keď sa všetky súbory v archíve prečítali, funkcia ReadHeader by mala vrátiť hodnotu E_END_ARCHIVE, ktorá ukončí cyklus volania fun­ kcie. Ak nastane chyba, tak funkcia by mala vrátiť jednu z chybových hodnôt. Argument funkcie hArcData je hodnota HANDLE, ktorá bola vrátená funkciou OpenArchive.

31 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

7.3.3 ProccessFile Po skončení funkcie ReadHeader (s návratovou hodnotou 0) je hneď volaná funkcia ProccessFile, ktorá by mala rozbaliť špecifický súbor, alebo otestovať integritu archívu. Hlavička funkcie vyzerá nasledovne:

int __stdcall ProcessFile (HANDLE hArcData, int Operation, char *DestPath, char *DestName);

Funkcia by mala vracať hodnotu 0, v prípade chyby jednu z chybo­ vých hodnôt. Argument hArcData obsahuje dáta vrátené funkciou OpenArchive. Funkcia v jednom behu spracuváva iba jeden súbor z archívu. Argumenty DestPath a DestName môžu nadobúdať jednu z dvoch hodnôt. Buď hodnota DestName obsahuje celú cestu k súboru vrátane jeho názvu a hodnota DestPath je NULL, alebo DestName obsa­ huje len názov súboru a DestPath cestu k nemu. Argument Operation môže nadobúdať jednu z týchto troch hodnôt:

PK_SKIP preskočí spracovávaný súbor

PK_TEST otestuje integritu spracovávaného súboru

PK_EXTRACT rozbalí spracovávaný súbor

KeďTotal Commander prvýkrát otvorí archív, preskúma všetky názvy súborov tak, že funkcia ReadHeader je volaná v cykle a funkcia ProccessFile má argument Operation nastavený na hodnotu PK_SKIP. Hodnotu PK_TEST nadobúda argument Operation vtedy, keď pou­ žívateľ chce otestovať integritu archívu. Keď používateľ označí ne­ jaký súbor a začne ho rozbaľovať, tak argument nadobudne hodnotu PK_EXTRACT.

32 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

7.3.4 CloseArchive

Funkcia sa volá po spracovaní všetkých súborov. Mala by vykonať všetky potrebné operácie s archívom, ktorý sa zatvára. Typicky sa tu uvoľňuje pamäť. Hlavička funkcie vyzerá takto:

int __stdcall CloseArchive (HANDLE hArcData);

Funkcia by mala vracať hodnotu 0, v prípade chyby jednu z chybových hodnôt. Argument HArcData obsahuje opäť dáta vrátené funkciou OpenArchive.

7.3.5 SetChangeVolProc a SetProcessDataProc

Pomocou funkcie SetChangeVolProc je možné informovať používateľa o zmene jednotky (ang. volume). Hlavička vyzerá nasledovne:

void __stdcall SetChangeVolProc (HANDLE hArcData, tChangeVolProc pChangeVolProcl) ;

Argument pChangeVolProcl obsahuje ukazatel' na funkciu, ktorá má byť volaná pri oznamovaní používateľovi o zmene jednotky. Pomocou funkcie SetProcessDataProc je možné informovať používa­ teľa o pokroku zabaľovania či rozbaľovania súborov. Hlavička vyzerá nasledovne:

void __stdcall SetProcessDataProc (HANDLE hArcData , tProcessDataProc pProcessDataProc);

Argument pProcessDataProc obsahuje ukazatel'na funkciu, ktorá má byť volaná pri oznamovaní používateľovi o pokroku. Obe funkcie obsahujú argument hArcData. Podobne ako pri ostá­ ných funkciách tento argument obsahuje dáta, ktoré sú vrátené fun­ kciou OpenArchive.

33 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

7.4 Fungovanie kompresného rozšírenia

Nasledujúci obrázok 7.1 približuje, ako celkovo funguje kompresné rozšírenie.

OpenArcliHet, l

i

RíuJhľdJťi:i

F.BÚ i

END .ARCHÍVE processFilco

Obr. 7.1: Fungovanie kompresného rozšírenia

Na začiatku je požadovaný archív, ktorý má byť týmto rozšíre­ ním spracovaný. Hneď ako prvá sa volá funkcia OpenArchive, ktorá otvára a nastavuje požadovaný archív. V prípade vrátenia chyby sa archív neotvorí a beh programu končí. Ak všetko prebehne v po­ riadku, funkcia vracia hodnotu HANDLE, ktorá obsahuje dáta archívu. Hneď nato sa volá funkcia ReadHeader, ktorá načíta jeden súbor z hod­ noty HANDLE. Tento súbor je predávaný funkcii ProccessFile na spra­ covanie. Tá ho buď preskočí, otestuje alebo spracuje. To záleží na akcii. Takto sa postupne v cykle spracúvavajú všetky súbory. Keď funkcia ReadHeader nedokáže načítať ďalší súbor z hodnoty HANDLE kvôli tomu, že sa už všetky načítali a spracovali, mala by vrátiť hodnotu

34 7- ROZŠÍRENIE DO PROGRAMU TOTAL COMMANDER

E_END_ARCHIVE, ktorá signalizuje, že sa dosiahol koniec archívu. Nakoniec sa zavolá funkcia CloseArchive, ktorá zatvorí archív a spra­ vidla aj uvoľní pamäť.

7.4.1 Implementácia a fungovanie rozšírenia

V mojom rozšírení sú implementované všetky vyššie spomenuté fun­ kcie. Keďže ide o demonštračné rozšírenie, nie sú implementované všetky možnosti použitia kompresného rozšírenia. Konrétne akcia roz­ baliť (unpack) súbor nie je implementovaná. Aj preto funkcia ProccessFile nevykonáva vyššiu funkcionalitu. Taktiež akcia na otesto­ vanie archívu nie je dostupná. Toto rozšírenie dokáže po akcii otvorenia obrazu disku zašifro­ vať alebo dešifrovať tento obraz. Upresnenie, či sa má šifrovať alebo dešifrovať, a ostatné parametre sa musia nachádzať v textovom sú­ bore s názvom parameters.txt, ktorý musí byť umiestnený v zložke s obrazom disku. Viac informácií, ako má tento súbor vyzerať a ako je možné toto rozšírenie nastaviť v programe Total Commander, sa nachádza v prílohe B.

35 8 Záver

Bakalárska práca sa zaoberala symetrickým blokovým šifrovaním obrazu disku v operačnom systéme Windows. V textovej časti práce je objasnené, ako funguje šifrovanie disku. Potom sú postupne po­ písané aj algoritmy na diskové šifrovanie špecifikované nástrojom Linux dm-crypt. Časť práce je taktiež venovaná chybám, ktoré môžu nastať (ako náhodne, tak aj úmyselne) a diskovej integrite, ktorá do­ káže tieto chyby detekovat. Ako knižnicu na implementovanie algormitmov šifrovania som si vybral kryptografickú knižnicu OpenSSL, ktorá je pomerne rozšírená a robustná, ale hlavne podporuje škálu funkcií, pomocou ktorých som neskôr implementoval ako aplikáciu, tak aj rozšírenie. Implementačná časť práce má dva výstupy. Prvým je aplikácia ovládaná z príkazového riadka. Pomocou nej je možné šifrovať a dešif­ rovať obraz disku v systéme Windows. Druhým výstupom je demon- štrančné rozšírenie do programu Total Commander. Pomocou neho sa dá šifrovať a dešifrovať obraz disku v tomto programe jednodu­ chým dvojitým kliknutím na požadovaný obraz disku. Implementácia rozšírenia nebola jednoduchá vzhľadom na to, že existuje len málo dokumentácie k vývoju rozšírení do programu Total Commander. Preto som vo veľkej miere musel pracovať z voľne dostupnými zdro­ jovými kódmi iných rozšírení. Pomocou týchto kódov som potom pochopil fungovanie kompresného rozšírenia a práve preto je časť práce venovaná popisu, ako funguje kompresné rozšírenie. Námetom na budúcu prácu je rozšíriť toto rozšírenie o ďalšie al­ goritmy, keďže momentálne podporuje len šifru AES. Taktiež je mož­ nosťou rozšíriť ho o schopnosť pracovať aj s hlavičkou špecifikácie LUKS (Linux Unified Key Setup).

36 Bibliografia

[1] YOUSUF, Usman. Security of Hard . Degree pro• ject in Information and Communiation Systems Security [online]. Stockholm (Sweden), 2013 [cit. 10.3.2017]. Dostupne z: http: //www. diva-portal.org/smash/get/diva2:646660/FULLTEXT01.pdf

[2] ALAM, Adnan Vaseem. Disk Encryption [online]. Norwegian Uni• versity of Science and Technology, 2009 [cit. 10.3.2017]. Dostupne z: https://brage.bibsys.no/xmlui/bitstream/handle/11250/ 261806/347753_FULLTEXT01.pdf?sequence=3&isAllowed=y

[3] MENEZES, Alfred, Paul C. VAN OORSCHOT a Scott A. VANS- TONE. Handbook of applied cryptography. Boca Raton: CRC Press, 1997.

[4] PAAR, Christof a Jan PELZL. Understanding Cryptography : A Textbook for Students and Practitioners. Berlin: Springer, 2010.

[5] LIDL, Rudolf a Harald NIEDERREITER. Finite Fields. Cambridge University Press, 1997.

[6] Block cipher mode of operation. Wikipedia: the free encyclo• pedia [online]. San Francisco (CA): Wikimedia Foundation, [cit. 12.3.2017]. Dostupne z: https: //en. wikipedia. org/wiki/Block_ cipher_mode_of_operation

[7] DWORKIN, Morris. Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentia• lity on Storage Devices [online]. 2010 [cit. 8.3.2017]. Do• stupne z: http://nvlpubs.nist.gov/nistpubs/Legacy/SP/ nistspecialpublication800-38e.pdf

[8] About NIST [online], [cit. 5.4.2017]. Dostupne z: http: //www. nist. gov/public_affairs/nandyou.cfm

37 BIBLIOGRAFIA

[9] IEEE P16191M/D16 Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices [online]. New York, 2007 [cit. 5.4.2017]. Dostupne z: http: //grouper. ieee. org/groups/1619/ email/pdf00086.pdf

[10] BROZ, Milan. Dm-crypt: Linux kernel device-mapper crypto target. Gitlab.com [online], [cit. 5.4.2017]. Dostupne z: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt# iv-generators

[11] GUYOT, Cyril. Draft Proposal for Tweakable Narrow-block Enc• ryption [online]. 2004 [cit. 15.4.2017]. Dostupne z: http: //grouper. ieee.org/groups/1619/email/pdf00017.pdf

[12] BURDA, Karel. Error Propagation in Various Cipher Block Modes [online]. Brno University of Technology, 2006 [cit. 15.4.2017]. Dostupne z: http://paper.ijcsns.org/07_book/ 200611/200611B14.pdf

[13] OpenSSL: Cryptography and SSL/TLS Toolkit [online], [cit. 17.4.2017]. Dostupne z: https: //www. . org

[14] GnuPG [online], [cit. 17.4.2017]. Dostupne z: https : //www. gnupg. org/related_software/libgcrypt/index.html

[15] Microsoft Corporation. Cryptography [online], [cit. 23.3.2017]. Dostupne z: https://msdn.microsoft.com/en-us/library/ windows/desktop/aa380255(v=vs.85).aspx

[16] KOCH, Werner a Moritz SCHULTE. The Libgcrypt Reference Manual [online]. 2015, s. 28-29 [cit. 23.3.2017]. Dostupne z: https: //gnupg.org/documentation/manuals/gcrypt/gcrypt.pdf

[17] ZHI, Guan. Crypto With OpenSSL [online]. Peking Uni• versity: Network and Information Security Lab, 2008 [cit. 19.4.2017]. Dostupne z: http://www.slideshare.net/guanzhi/ crypto-with-openssl

[18] Cryptsetup and LUKS - open-source disk encryption. Git• lab.com [online], [cit. 19.4.2017]. Dostupne z: https://gitlab. com/cryptsetup/cryptsetup

38 BIBLIOGRAFIA

[19] ROGAWAY, Phillip. Efficient Instantiations of Tweakable Block- ciphers and Refinements to Modes OCB and PMAC. Advances in Cryptology—Asiacrypt 2004, Lecture Notes in Computer Science, Springer-Verlag, 2004.

[20] GHISLER, Christian. Total Commander [online]. Switzerland: Ghisler Software, ©1995-2016 [cit. 1.3.2017]. Dostupné z: https: //www.ghisler.com/

[21] Total Commander [online]. Švajčiarsko: C. Ghisler & Co [cit. 1.3.2017]. Dostupné z: http://www.totalcmd.sk/prevzatie.htm

[22] Packer plugins developer guide [online]. Švajčiarsko: C. Ghisler & Co, C2000-2003 [cit. 1.3.2017]. Dostupné z: http: //www. ghisler. ch/wiki/index.php/Packer_plugins_developer_guide

[23] CRAIG, Robert a Junko C. MIURA. What is Euphoria? [online]. Rapid Deployment Software [cit. 7.4.2017]. Dostupné z: http: // www.rapideuphoria.com/hotnew.htm

[24] BERNSTEIN, Daniel J., Tanja LANGE a Peter SCHWABE. NaCl: Networking and Cryptography library [online], [cit. 1.4.2017]. Do­ stupné z: https://nacl.cr.yp.to/

[25] DENIS Frank. The Sodium crypto library (libsodium) [online]. 2017 [cit. 1.4.2017]. Dostupné z: https://download.libsodium. org/doc/

[26] FERGUSON, Niels. AES-CBC + Elephant diffuser: A disk encryp­ tion algorithm for Windows Vista [online]. Microsoft Corporation, 2006 [cit. 10.4.2017]. Dostupné z: https : //ess. csail. mit. edu/6. 858/2012/readings/.pdf

[27] Introducing Sodium, a new cryptographic library [on­ line]. OpenDNS Security Research, 2013 [cit. 10.4.2017]. Dostupné z: https://umbrella.cisco.com/blog/blog/2013/ 03/06/announcing-sodium-a-new-cryptographic-library

39 BIBLIOGRAFIA

[28] HUDDE, Hans Christoph. Building Stream Ciphers from Block Ciphers and their Security [online]. Bochum, 2009 [cit. 17.4.2017]. Dostupne z: https : //www. emsec. rub. de/media/ crypto/attachments/files/2011/03/hudde.pdf

[29] BAUER, Craig R Secret history: the story of cryptology. Boca Raton: CRC Press/Taylor, 2013. Discrete mathematics and its app• lications.

[30] ALOMARI, Mohammad Ahmed, Khairulmizam SAMSUDIN a Abdul Rahman RAMLI. Implementation of a Parallel XTS Enc• ryption Mode of Operation [online]. Serdang, Malaysia, 2014 [cit. 17.4.2017]. Dostupne z: www. indjst. org/index .php/indjst/ article/download/41468/43240

[31] SALOMON, D. Coding for data and computer communications. New York, NY: Springer, 2005

[32] GREEN, Matthew. Why I hate CBC-MAC [on• line]. 2013 [cit. 25.4.2017]. Dostupne z: https:// blog.cryptographyengineering.com/2013/02/15/ why-i-hate-cbc-mac/

[33] BONEH, Dan. CBC-MAC and NMAC [online], [cit. 25.4.2017]. Do• stupne z: https://www.coursera.org/learn/crypto/lecture/ QYT6i/cbc-mac-and-nmac

[34] KUMAR, Bharath a KS TANWAR. CBC-MAC [online]. 2015 [cit. 25.4.2017]. Dostupne z: https : //www. coursera. org/learn/ crypto/lecture/QYT6i/cbc-mac-and-nmac

[35] KRAWCZYK, Hugo, Mihir BELLARE a Ran CANETTI. HMAC: Keyed-Hashing for Message Authentication [online]. 1997 [cit. 25.4.2017]. Dostupne z:https: //tools. ietf . org/pdf/rf c2104. pdf

[36] WHITING, Doug, Russ HOUSLEY a Niels FERGUSON. Coun• ter with CBC-MAC (CCM): AES Mode of Operation [online], [cit. 25.4.2017]. Dostupne z: http://csrc.nist .gov/groups/ST/ toolkit/BCM/documents/proposedmodes/ccm/ccm.pdf

40 BIBLIOGRAFIA

[37] DWORKIN, Morris. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GM AC [online]. 2007 [cit. 25.4.2017]. Dostupné z: http://nvlpubs.nist.gov/ nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf

[38] MCGREW, David A. a John VIEGA. The Galois/Counter Mode of Operation (GCM) [online]. 2005 [cit. 25.4.2017]. Dostupné z: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/ proposedmodes/gcm/gcm-revised-spec.pdf

[39] Disk encryption theory. Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, [cit. 26.4.2017]. Do• stupné z: https://en.wikipedia.org/wiki/Disk_encryption_ theory

[40] Block Cipher [online], tutorialspoint.com [cit. 27.4.2017]. Do• stupné z: https://www.tutorialspoint.com/cryptography/ block_cipher.htm

[41] BERNSTEIN, Daniel J. Cryptographic competitions [online]. 2013 [cit. 1.5.2017]. Dostupné z: https://competitions.cr.yp. to/index.html

[42] ABIDI, Abdessalem, Qianxue WANG, Belgacem BOUALLEGUE, Mohsen MACHHOUT a Christophe GUYEUX. Proving chaotic behaviour of CBC mode of operation [online]. 2016 [cit. 11.5.2017]. Dostupné z: https: //arxiv. org/pdf /1608.05838 .pdf

41 A Ako používať aplikáciu

Tento dokument obsahuje návod, ako používať aplikáciu SymetricBlockCipher. Použitie v príkazovom riadku:

SymetricBlockCipher [ ]

- cesta k obrazu disku, ktorý sa má spracovať

- cesta k súboru, v ktorom sa nachádza kľúč

- môže nadobudnúť hodnoty:

e pre šifrovanie

d pre dešifrovanie

- upresnenie módu. Môže nadobudnúť hodnoty:

cbc pre CBC mód

xts pre XTS mód

- upresnenie inicializačného vektora. Môže nadobudnúť hodnoty:

null IV tvorený stále zo samých núl.

plain IV je tvorený 32 bitovým číslom sektora uloženého spôsobom little-endian.

plain64 IV je tvorený 64 bitovým číslom sektora uloženého spôsobom little-endian.

essiv Encrypted Sector Salt Initial Vector.

42 A. AKO POUŽÍVAŤ APLIKÁCIU

benbi IV je tvorený 64 bitovým číslom sektora, ktoré je po­ sunuté o hlavičku zväzku + 1 uloženého spôsobom big-endian.

- značí, či sa má spracovať celý súbor alebo iba časť. Môže nadobudnúť hodnoty:

y pre šifrovanie celého obrazu

n pre šifrovanie časti

- je povinnosťou zadať tento parameter v prípade, že argument je "y " inak nepovinný. Môže nadobud­ núť hodnoty od 0 do veľkosti počtu sektorov obrazu. Ak je číslo väčšie, súbor sa nespracuje.

- je povinnosťou zadať tento parameter v prípade, že argument je "y " inak nepovinný. Môže nadobud­ núť hodnoty od 0 do veľkosti počtu sektorov obrazu. Ak je číslo väčšie, súbor sa spracuváva do veľkosti počtu sektorov.

Ukážka použitia:

SymetricBlockCipher C:\image.img C:\key.txt e cbc plain64 y

43 B Ako používať plugin

Tento dokument obsahuje návod, ako rozšírenie spustiť v programe Total Commander a taktiež ako ho použiť.

1. Skopírujte rozšírenie wcx.dll do zložky obsahujúcej program Total Commander, napr. C:\totalcmd

2. Otvorte Total Commander

3. V ponuke kliknite Configuration -> Options

4. Otvorte záložku Packer a kliknite na tlačidlo "Configure packer extension WCXs"

5. Koncovku súboru nastavte na ".img", kliknite na New type, vy­ berte rozšírenie wcx.dll a kliknite na OK.

Rozšírenie po dvojitom kliknutí na ľubovoľný súbor s koncovkou .img zašifruje alebo dešifruje tento obraz disku. Taktiež vytvorí textový súbor ErrorFile.txt, ktorý pri neúspechu obsahuje chybovú hlášku. Požiadavkou je, aby sa v zložke s obrazom disku nachádzal textový súbor parameters.txt obsahujúci parametre spracovávania.

Súbor musí mať presne takúto štruktúru:

Riadok 1 cestu k súboru s kľúčom. Cesta musí obsahovať zdvojené spätné lomky. Príklad: C: \ \ testovanie \ \ mojeSubory\ \ key txt

Riadok 2 Jednu z hodnôt:

e pre šifrovanie obrazu disku d pre dešifrovanie obrazu disku

Riadok 3 Mód, ktorým sa má obraz spracovávať. Môže nadobudnúť hodnoty:

cbc pre CBC mód xts pre XTS mód

44 B. AKO POUŽÍVAŤ PLUGIN

Riadok 4 Inicializačný vektor, ktorý sa má použiť. Môže nadobudnúť hodnoty:

null IV tvorený stále zo samých núl. plain IV je tvorený 32 bitovým číslom sektora ulože­ ného spôsobom little-endian. plain64 IV je tvorený 64 bitovým číslom sektora ulože­ ného spôsobom little-endian. essiv Encrypted Sector Salt Initial Vector. benbi IV je tvorený 64 bitovým číslom sektora, ktoré je posunuté o hlavičku zväzku + 1 uloženého spôsobom big-endian.

Riadok 5 Číslo sektora, od ktorého sa má začať spracovávať. Môže nadobudnúť hodnoty od 0 do veľkosti počtu sektorov obrazu. Ak je čislo väčšie, súbor sa nespracuje.

Riadok 6 Číslo sektora, po ktorý sa má súbor spracovať. Môže nado­ budnúť hodnoty od 0 do veľkosti počtu sektorov obrazu. Ak je čislo väčšie, súbor sa spracuváva do veľkosti počtu sektorov.

45