FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Podobné dokumenty
UKRY - Symetrické blokové šifry

Základní definice Aplikace hašování Kontrukce Známé hašovací funkce. Hašovací funkce. Jonáš Chudý. Úvod do kryptologie

Moderní metody substitučního šifrování


CO JE KRYPTOGRAFIE Šifrovací algoritmy Kódovací algoritmus Prolomení algoritmu

Šifrová ochrana informací věk počítačů PS5-2

Šifrová ochrana informací věk počítačů PS5-2

PA159 - Bezpečnostní aspekty

Šifrová ochrana informací věk počítačů PS5-1

Stavební bloky kryptografie. Kamil Malinka Fakulta informačních technologií

Andrew Kozlík KA MFF UK

SSL Secure Sockets Layer

Základy kryptografie. Beret CryptoParty Základy kryptografie 1/17

asymetrická kryptografie

Hashovací funkce. Andrew Kozlík KA MFF UK

Od Enigmy k PKI. principy moderní kryptografie T-SEC4 / L3. Tomáš Herout Cisco. Praha, hotel Clarion dubna 2013.

Operační mody blokových šifer a hašovací algoritmy. šifer. Bloková šifra. šifer. Útoky na operační modus ECB

Karel Kohout 18. května 2010

Seminární práce do předmětu: Bezpečnost informačních systémů. téma: IPsec. Vypracoval: Libor Stránský

Kerchhoffův princip Utajení šifrovacího algoritmu nesmí sloužit jako opatření nahrazující nebo garantující kvalitu šifrovacího systému

Data Encryption Standard (DES)

8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

Symetrické šifry, DES

5. Hašovací funkce, MD5, SHA-x, HMAC. doc. Ing. Róbert Lórencz, CSc.

kryptosystémy obecně další zajímavé substituční šifry klíčové hospodářství kryptografická pravidla Hillova šifra Vernamova šifra Knižní šifra

Informatika / bezpečnost

Kryptografie, elektronický podpis. Ing. Miloslav Hub, Ph.D. 27. listopadu 2007

MINIMÁLNÍ POŽADAVKY NA KRYPTOGRAFICKÉ ALGORITMY. doporučení v oblasti kryptografických prostředků

KPB. Režimy činnosti symetrických šifer - dokončení. KPB 2015/16, 7. přednáška 1

Základy šifrování a kódování

Návrh kryptografického zabezpečení systémů hromadného sběru dat

Identifikátor materiálu: ICT-2-04

6. Cvičení [MI-KRY Pokročilá kryptologie]

ElGamal, Diffie-Hellman

Ochrana dat Obsah. Výměna tajných klíčů ve veřejném kanálu. Radim Farana Podklady pro výuku. Kryptografické systémy s tajným klíčem,

Y36PSI Bezpečnost v počítačových sítích. Jan Kubr - 10_11_bezpecnost Jan Kubr 1/41

Konstrukce šifer. Andrew Kozlík KA MFF UK

Kryptografie a počítačová bezpečnost

Moderní kryptografické metody

Asymetrická kryptografie a elektronický podpis. Ing. Mgr. Martin Henzl Mgr. Radim Janča ijanca@fit.vutbr.cz

Šifrování. Tancuj tak, jako když se nikdo nedívá. Šifruj tak, jako když se dívají všichni! Martin Kotyk IT Security Consultnant

Návrh a implementace bezpečnosti v podnikových aplikacích. Pavel Horal

Asymetrická kryptografie

Šifrová ochrana informací věk počítačů KS - 5

Asymetrická kryptografie a elektronický podpis. Ing. Dominik Breitenbacher Mgr. Radim Janča

SHA-3. Úvod do kryptologie. 29. dubna 2013

Diffieho-Hellmanův protokol ustanovení klíče

C5 Bezpečnost dat v PC

Kryptografie založená na problému diskrétního logaritmu

Autentizace uživatelů

KRYPTOGRAFIE VER EJNE HO KLI Č E

Proudové šifry a posuvné registry s lineární zpětnou vazbou

Kryptografie - Síla šifer

Integrovaný informační systém Státní pokladny (IISSP) Dokumentace API - integrační dokumentace

symetrická kryptografie

BI-BEZ Bezpečnost. Proudové šifry, blokové šifry, DES, 3DES, AES,

Kryptoanalýza. Kamil Malinka Fakulta informačních technologií. Kryptografie a informační bezpečnost, Kamil Malinka 2008

vá ro ko Sý ětuše Kv

DSY-6. Přenosový kanál kódy pro zabezpečení dat Základy šifrování, autentizace Digitální podpis Základy měření kvality přenosu signálu

Asymetrické šifry. Pavla Henzlová FJFI ČVUT v Praze. Pavla Henzlová (FJFI ČVUT v Praze) Asymetrické šifry 28.3.

Andrew Kozlík KA MFF UK

Digitální podepisování pomocí asymetrické kryptografie

7. Proudové šifry, blokové šifry, DES, 3DES, AES, operační módy. doc. Ing. Róbert Lórencz, CSc.

Digitální podepisování pomocí asymetrické kryptografie

12. Bezpečnost počítačových sítí

Elektronický podpis. Základní princip. Digitální podpis. Podpis vs. šifrování. Hashování. Jednosměrné funkce. Odesílatel. Příjemce

Základy kryptologie. Kamil Malinka Fakulta informačních technologií

Bezpečnost vzdáleného přístupu. Jan Kubr

OPS Paralelní systémy, seznam pojmů, klasifikace

HSM a problémy s bezpečností API Masarykova univerzita v Brně Fakulta informatiky

Správa přístupu PS3-2

Pokročilá kryptologie

Vybrané útoky proti hašovací funkci MD5

Kryptoanalýza šifry PRESENT pomocí rekonfigurovatelného hardware COPACOBANA

Moderní komunikační technologie. Ing. Petr Machník, Ph.D.

III. Mody činnosti blokových šifer a hašovací funkce

Komerční výrobky pro kvantovou kryptografii

DODATEČNÉ INFORMACE K ZADÁVACÍM PODMÍNKÁM č. 2. Název veřejné zakázky: Dodávka SAN switchů včetně příslušenství pro datová centra

Středoškolská technika Encryption Protection System

Pokročilá kryptologie

Bezpečnostní mechanismy

ISMS. Autentizace ve WiFi sítích. V Brně dne 5. a 12. prosince 2013

MFF UK Praha, 22. duben 2008

Problematika náhodných a pseudonáhodných sekvencí v kryptografických eskalačních protokolech a implementacích na čipových kartách

PSK2-16. Šifrování a elektronický podpis I

Datové struktury 2: Rozptylovací tabulky

Informatika Ochrana dat

klasická kryptologie základní pojmy požadavky na kryptosystém typologie šifer transpoziční šifry substituční šifry

Správa webserveru. Blok 9 Bezpečnost HTTP. 9.1 Úvod do šifrování a bezpečné komunikace Základní pojmy

Hardwarové bezpečnostní moduly API a útoky

Čínská věta o zbytcích RSA

Kryptografie a počítačová

RSA. Matematické algoritmy (11MAG) Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. verze: :01

Složitost a moderní kryptografie

OpenSSL a certifikáty

Vzdálenost jednoznačnosti a absolutně

Jednocestné zabezpečení citlivých údajů v databázi

POPIS STANDARDU CEN TC278/WG4. 1 z 5. Oblast: TTI. Zkrácený název: Zprávy přes CN 4. Norma číslo:

SIM karty a bezpečnost v mobilních sítích

Transkript:

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS GPU AKCELEROVANÉ PROLAMOVÁNÍ ŠIFER DIPLOMOVÁ PRÁCE MASTER S THESIS AUTOR PRÁCE AUTHOR Bc. JAN SCHMIED BRNO 2014

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS GPU AKCELEROVANÉ PROLAMOVÁNÍ ŠIFER GPU ACCELERATED CRACKING OF CIPHERS DIPLOMOVÁ PRÁCE MASTER S THESIS AUTOR PRÁCE AUTHOR VEDOUCÍ PRÁCE SUPERVISOR Bc. JAN SCHMIED Ing. VLADIMÍR VESELÝ BRNO 2014

Abstrakt Tato práce se zabývá popisem jednosměrných hešovacích funkcí a kryptografických algoritmů. Také zkoumá jejich implementaci pro využití k zašifrování obsahu souborů formátů DOC, PDF a ZIP pomocí uživatelského hesla. Následně jsou tyto implementace podrobeny analýze a jsou navrženy postupy jak pomocí brute-force útoku tato zabezpečení prolomit s využitím GPU Abstract This work describes one-way hash functions and cryptographic algorithms. It also describes their implementation regarding DOC, PDF and ZIP files contents encryption. Subsequently, the implementation analyzis is provided. Following next, the brute-force attack procedure levereging GPU is proposed and evaluated Klíčová slova hešovací funkce, kryptografie, generování klíčů, útoky, OpenCL, GPU, PDF, ZIP, DOC Keywords hash functions, cryptography, key derivation functions, attacks, OpenCL, GPU, PDF, ZIP, DOC Citace Jan Schmied: GPU akcelerované prolamování šifer, diplomová práce, Brno, FIT VUT v Brně, 2014

GPU akcelerované prolamování šifer Prohlášení Prohlašuji, že jsem tuto diplomovou práci vypracoval samostatně pod vedením pana Ing. Vladimíra Veselého....................... Jan Schmied 22. května 2014 Poděkování Tímto receptem bych rád poděkoval svému vedoucímu Ing. Vladimíru Veselému za odborné vedení a pomoc při psaní této práce a také za poskytnutí potřebného vybavení. Lasagne s kuřecím masem a špenátem Krabice lasagní (asi 20 ks, tj. 5 vrstev po 4 ks), 4 kuřecí prsní řízky (nebo 5 menších), cca 300g čerstvého špenátu, 1 menší cibule, česnek (alespoň 5 velkých stroužků), olej, cca 250g sýru niva, sůl, pepř, koření na maso (dle chuti), 1l mléka, 70g másla, 70g hladké mouky. Z mouky, másla a mléka uvaříme bešamel. Maso nakrájíme na velmi malé kousky. Na oleji zpěníme drobně nakrájenou cibuli, přidáme maso, opražíme, osolíme, opepříme, přidáme koření, podlijeme trochou vody a dusíme pod pokličkou asi 20 minut. Špenát opereme, zbavíme stonků a připravíme si hrnec s vodou na spaření špenátu. Pekáč vymažeme máslem a postupně vrstvíme: Bešamel, horkou vodou protažené lasagne, masovou směs, krátce spařené listy špenátu (spařujeme vždy jen množství na 1 vrstvu, jinak zhadrovatí ), ty posypeme strouhanou nivou a nasekaným česnekem. Pak dáváme další vrstvy lasagní, masa, špenátu,.... Na poslední vrstvu lasagní dáme vrstvu bešamelu a strouhané nivy. Pečeme asi hodinu na 180 C. c Jan Schmied, 2014. Tato práce vznikla jako školní dílo na Vysokém učení technickém v Brně, Fakultě informačních technologií. Práce je chráněna autorským zákonem a její užití bez udělení oprávnění autorem je nezákonné, s výjimkou zákonem definovaných případů.

Obsah 1 Úvod 3 2 Hešovací funkce 4 2.1 MD5........................................ 5 2.2 SHA-1....................................... 5 2.3 SHA-2....................................... 7 2.3.1 SHA-256................................. 8 2.3.2 SHA-512................................. 8 2.4 Klíčované hešovací funkce............................ 8 2.5 Časová a prostorová složitost.......................... 9 2.5.1 Rychlost výpočtu a možnost paralelizace................ 10 3 Kryptografické algoritmy 12 3.1 RC4........................................ 14 3.2 DES a 3DES................................... 15 3.3 AES........................................ 16 3.4 Režimy blokových šifer.............................. 17 3.4.1 ECB.................................... 17 3.4.2 CBC.................................... 18 3.4.3 CTR.................................... 18 4 Generování klíčů 19 4.1 PBKDF1..................................... 19 4.2 PBKDF2..................................... 20 4.3 bcrypt....................................... 21 4.4 scrypt....................................... 21 5 Aplikace kryptografických prostředků 22 5.1 IPSec....................................... 22 5.2 ZIP........................................ 22 5.2.1 PKZIP Stream Cipher.......................... 23 5.2.2 Strong encryption............................ 23 5.3 PDF........................................ 23 5.4 MS Word..................................... 24 6 OpenCL 25 6.1 Model platformy................................. 25 6.2 Exekuční model.................................. 25 1

6.3 Paměťový model................................. 26 6.4 Programovací model............................... 26 6.5 Využití pro brute-force úlohy.......................... 26 7 Návrh frameworku 28 7.1 Generátory hesel................................. 28 7.1.1 Brute-force generátor.......................... 29 7.1.2 Slovníkový generátor........................... 31 7.2 Crackery...................................... 31 7.2.1 CPU.................................... 31 7.2.2 GPU.................................... 32 7.3 Modularita.................................... 32 7.4 Formáty...................................... 33 7.4.1 PDF.................................... 34 7.4.2 ZIP.................................... 35 7.4.3 DOC.................................... 37 8 Implementace 38 8.1 Jádro....................................... 38 8.1.1 Generátory................................ 38 8.1.2 Načítání formátů............................. 40 8.1.3 Crackování na CPU........................... 40 8.1.4 Crackování na GPU........................... 41 8.1.5 Spouštění a monitoring......................... 41 8.2 Moduly...................................... 42 8.2.1 PDF.................................... 42 8.2.2 ZIP.................................... 43 8.2.3 DOC.................................... 43 8.3 Aplikace...................................... 44 8.4 Překlad...................................... 44 9 Výkonnost 46 9.1 Testovací sestava................................. 46 9.2 Výsledky..................................... 46 9.2.1 PDF.................................... 47 9.2.2 DOC.................................... 48 9.2.3 ZIP.................................... 49 10 Závěr 51 10.1 Rozšíření..................................... 52 A Obsah CD 55 2

Kapitola 1 Úvod Informace jsou důležitou součástí lidské činnosti. Informace mají hodnotu a dokáží přinést zisk i změnit běh dějin. Proto je nutné citlivé informace chránit proti prozrazení případnému nepříteli a také zabránit podvržení falešné informace nepřítelem. Vědní obor, který se tímto zabývá, se nazývá kryptografie. Kryptografie je stará několik tisíc let. Nejznámější šifra je Caesarova šifra, která používá posunutí znaků ve zprávě o 3 znaky v abecedě (z A udělá D). Tento princip nebyl příliš bezpečný, protože postrádal klíč, a tak prozrazení principu vedlo k prozrazení všech zpráv zašifrovaných touto metodou. V 19. století dánský kryptograf Kerckhoffs definoval princip, podle kterého musí být šifrování závislé pouze na utajení klíče, a ne na utajení algoritmu. Podle tohoto principu se navrhují moderní kryptografické algoritmy. Ty navíc musejí splňovat i to, aby dešifrování zprávy bez znalosti klíče nebylo rychlejší než vyzkoušení všech možných klíčů. Nesmí tedy obsahovat chyby, které by umožňovaly analytické útoky. Jak se zvyšuje výkon počítačů, a podle Mooreova zákona se každých 18 měsíců zdvojnásobí výpočetní výkon, je stále nutné udržovat prostor pro klíče k šifrám mimo mez, kdy je čas, potřebný k projití celého prostoru, přijatelný. Mooreův zákon také znamená, že každých 18 měsíců jsme schopni za stejný čas prolomit klíče o 1 bit delší. Klíče pro šifry je vždy možné prodloužit, nebo použít algoritmus s delším klíčem. Problém nastává v situaci, kdy je klíč generován z hesla, které zadává uživatel. Tyto hesla nelze prodlužovat (schopnost pamatovat si delší hesla u uživatelů neroste). Tato vlastnost proto láká útočníky k brute-force útokům a zároveň motivuje návrháře, aby útočníky od těchto útoků odradili. Všechny tyto problémy popisuje tato práce a také jejich možná řešení tak, jak byla navržena bezpečnostními a standardizačními úřady. Zaměřuje se také na efektivnost implementace těchto řešení v prostředí OpenCL, které umožňuje běh programu na GPU. V druhé kapitole se zaměříme na popis hešovacích funkcí a ve třetí na kryptografické algoritmy. Čtvrtá kapitola se zabývá generováním klíčů z hesel. V páté kapitole se podíváme na některé aplikace používající šifrování. V šesté pak na framework pro akceleraci na GPU - OpenCL. Sedmá kapitola popisuje návrh systému na prolamování zabezpečených formátů a osmá se zabývá jeho implementací. V deváté kapitole jsou uvedeny rychlosti crackování a doba nutná k prolomení různých hesel. 3

Kapitola 2 Hešovací funkce Hešovací funkce je matematická funkce, která vypočte kryptograficky bezpečný kontrolní součet. Ten se používá převážně k autentizaci. Klasický kontrolní součet jako například CRC není kryptograficky bezpečný, protože nesplňuje všechny následující požadavky na hešovací funkci f(x). 1. Pro f(x) platí, že je aplikovatelná pro x libovolné velikosti. 2. Výstup f(x) má konstantní délku pro všechny vstupy (128bitů, 160bitů,... ). 3. f(x) lze rychle vypočítat. 4. Pro dané y je výpočetně nezvládnutelné nalézt takové x pro které platí f(x) = y. (first preimage resistance) 5. Pro dané x je výpočetně nezvládnutelné nalézt takové x, x <> x, aby platilo f(x ) = f(x). (second preimage resistance) 6. Je výpočetně nezvládnutelné nalézt takové x, x,x <> x, aby platilo f(x ) = f(x). (collision resistance) Body 5. a 6. vypadají velmi podobně, ale jejich rozdíl je v tom, že pro collision resistance, si mohu oba vstupy zvolit, kdežto pro second preimage resistnace mám jeden vstup pevně definován. Klasický kontrolní součet tedy splňuje pouze první tři požadavky. Pro zbylé tři požadavky jsme v případě CRC schopni nalézt neshodu ihned v bodě 4, kdy jsme schopni si podle CRC vygenerovat vstupní data (nebudou to ta data jako na vstupu, ale se shodnou CRC), a tím také porušit i další požadavky. Základní problém je v tom, že CRC bylo navrženo pro odhalování neúmyslných chyb při přenosu dat. Neumožňuje tedy zabránit úmyslné modifikaci dat, která budou i po modifikaci mít shodné CRC. Proto musely vzniknout kryptograficky bezpečné hešovací funkce, které všechny tyto vlastnosti splňují, alespoň po určitou dobu, než je objevena jejich zranitelnost (převážně v bodě 6). Ta je způsobena obrovským množstvím kolizí, které tyto funkce generují, ale jejich nalezení nesmí být rychlejší než projití všech možných kombinací vstupu. Pro funkci, která má výstup o velikosti 160 bitů má stavový prostor výstupu velikost 2 160, a proto nalezení kolize nesmí být rychlejší než 2 160 pokusů. Ve skutečnosti stačí pouze 2 80 pokusů, díky narozeninovému paradoxu[20]. 4

Takováto funkce vygeneruje obrovské množství kolizí už pro malé vstupy. Uvažme všechny možné vstupy o délce 1000bitů (tedy 125 znaků) což nám dává stavový prostor o velikosti 2 1000. Pokud všechny tyto vstupy zahešujeme funkcí s výstupem o délce 160bitů dostaneme 2 840 kolizí, což není málo. Těmito funkcemi se hešují i několik GB velké soubory, kde kolizí je exponenciálně více, a přesto nesmíme být schopni v rozumném čase nalézt ani jedinou. V následujícím textu se zaměříme na hrubý popis algoritmů MD5, SHA-1 a SHA-2. Tyto algoritmy jsou postaveny na Merkle Damgârd konstrukci hešovacích funkcí. Nový (zatím nestandardizovaný) algoritmus SHA-3/Keccak ovšem není založen na této konstrukci, ale na novém principu zvaném Sponge Construction, který je odolný proti některým analytickým útokům. 2.1 MD5 Funkce MD5(Message Digest) vychází ze starší funkce MD4. S touto funkcí je principiálně shodná a liší se pouze použitými logickými funkcemi, rotacemi a inicializačními vektory (IV). MD5 nikdy nebylo schváleno NIST 1, a proto neexistuje FIPS 2 publikace, která by ho standardizoval, vychází tedy čistě z návrhu jeho autorů. MD5 nejprve za zprávu doplní jeden bit 1 a poté doplňuje 0 dokud není délka zprávy modulo 512 rovna 448. Přidání bitu 1 odliší zprávy 1 a 10. Poté doplní 8 bajtů s délkou textu před zarovnáním jedničkou a nulami. Může se zdát, že jsme porušili podmínku, že f(x) musí být aplikovatelná na x libovolné délky, ale tato hodnota je délka vstupu modulo 2 64. Délka je tedy neomezená. Takto zarovnanou zprávu rozdělíme do 512bitových bloků, kde každý zpracováváme samostatně, ale výsledek zpracování předchozího bloku potřebujeme znát pro zpracování následujícího. Blok následně rozdělíme do 16 32bitových bloků. Inicializujeme vnitřní stav A-D pomocí definovaných inicializačních vektorů. Následně aplikujeme kompresní funkci v 64 kolech. Výsledek přičteme k vnitřnímu stavu, a poté pokračujeme dalším 512bitovým blokem. Na obrázku 2.1 je znázorněno jedno kolo funkce MD5. A, B, C, D obsahuje vnitřní stav. M i je jedna 32bitová část hešovaného vstupu. K i je definovaná konstanta. F je kompresní funkce (celkem čtyři různé funkce pro různá kola). <<< S je rotace vlevo o S bitů, kde S je v každém kole definováno. 2.2 SHA-1 SHA-1 (Secure Hash Algorithm) vychází z funkce MD5 a proto zde popíšeme jen rozdíly mezi těmito funkcemi. SHA-1 je schválen NIST v publikaci FIPS-180-4[18]. Začátek algoritmu je téměř shodný, obsahuje také zarovnání, ovšem doplněná délka již není modulo 2 64 ale maximálně 2 64. Tímto krokem jsme tedy opravdu porušili požadavek, že hešovací funkce musí být aplikovatelná na vstup libovolné délky. Avšak tato hodnota je tak vysoká (2EiB - 2 1024 6 ), že je prakticky aplikovatelná na libovolnou délku. Následuje rozdělení na 512bitové bloky, a ty jsou dále rozděleny na 16 32bitových bloků jako v případě MD5. Kompresní funkce, inicializační vektory, konstanty, počet kol a jedno kolo se ovšem liší. SHA-1 obsahuje 80 kol. Vnitřní stav je 160 bitů, místo 128 1 National Institute of Standards and Technology - americký úřad pro standardy 2 Federal Information Processing Standards - standardy pro zpracování dat v počítačovém systému 5

A B C D F Mi Ki <<< s A B C D Obrázek 2.1: Jedno kolo algoritmu MD5 u MD5. Jeden vstupní blok 16 32 bajtů je rozšířen pomocí XOR a rotací na blok 80 x 32 bajtů. Prvních 16 bloků obsahuje vstup, zbytek je vygenerován z těchto prvních 16bloků. A B C D E F <<< 5 <<< 30 W t K t A B C D E Obrázek 2.2: Jedno kolo algoritmu SHA-1 Na obrázku 2.2 je znázorněno jedno kolo funkce SHA-1. A, B, C, D, E obsahuje vnitřní stav. F je kompresní funkce (čtyři různé funkce pro kola 1-20, 21-40, 41-60, 61-80). <<< x je rotace vlevo o x bitů. W t je jeden 32bitový blok z pole, generovaného ze vstupních bloků. K t je konstanta pro každé kolo (čtyři různé konstanty pro kola 1-20, 21-40, 41-60, 61-80). 6

2.3 SHA-2 SHA-2 není pouze jeden algoritmus jako MD5 nebo SHA-1, ale celá skupina algoritmů s různou délkou výstupu. Stejně jako SHA-1 je schválen NIST v publikaci FIPS-180-4[18]. SHA-256 - délka výstupu 256 bitů, 63 kol, blok 512 bitů SHA-224 - délka výstupu 224 bitů, 63 kol, blok 512 bitů (shodný s SHA-256, rozdíl v inicializačních vektorech a výstup je zkrácen na 224bitů) SHA-512 - délka výstupu 512 bitů, 80 kol, blok 1024 bitů, 64bitové operace SHA-384 - délka výstupu 384 bitů, 80 kol, blok 1024 bitů, 64bitové operace (shodný s SHA-512, rozdíl v IV a výstup je zkrácen na 384bitů) SHA-512/256 - délka výstupu 256 bitů, 80 kol, blok 1024 bitů, 64bitové operace (shodný s SHA-512, rozdíl v IV a výstup je zkrácen na 256bitů) SHA-512/224 - délka výstupu 224 bitů, 80 kol, blok 1024 bitů, 64bitové operace (shodný s SHA-512, rozdíl v IV a výstup je zkrácen na 224bitů) SHA-512/t - délka výstupu t-bitů, 80 kol, blok 1024 bitů, 64bitové operace (shodný s SHA-512, rozdíl v IV a výstup je zkrácen na t-bitů) A B C D E F G H W t Ch K t Σ1 Ma Σ0 A B C D E F G H Obrázek 2.3: Jedno kolo algoritmu SHA-2 Na obrázku 2.3 je znázorněno jedno kolo funkce SHA-2. A, B, C, D, E, F, G, H je vnitřní stav. Ch a Ma jsou kompresní funkce. 0 a 1 jsou funkce, které provádí rotace a XOR vstupu. W t je hodnota z pole generovaného pro každé kolo ze vstupního bloku. K i je konstanta (63/80 konstant pro každé kolo jiná). 7

2.3.1 SHA-256 Algoritmus obsahuje 63 kol a velikost bloku je 512 bitů. Zarovnání se tedy provádí stejně jako v případě SHA-1/MD5 na 448 bitů modulo 512, zbytek se opět doplní délkou v bitech. A vstup se opět rozdělí na 16 32bitové bloky. Pokud je využita varianta s výstupem o délce 224bitů, jsou použity jiné inicializační vektory pro vnitřní stav A-H. Jinak by se jednalo pouze o zkrácenou verzi SHA-256 (jako bychom zkrátili SHA-1 na 128bitů). IV pro SHA-256 jsou vygenerovány z prvních 32bitů desetinné části odmocniny z prvních 8 prvočísel [18]. Tvorba IV pro SHA-224 není popsána a tyto IV jsou uvedeny ve standardu. 2.3.2 SHA-512 Algoritmus obsahuje 80 kol a velikost bloku je 1024 bitů. Zarovnání se provádí stejným principem, ale zarovnává se na délku 896 bitů modulo 1024. Zbytek se doplní délkou vstupu před zarovnáním, a délka je tedy 128bitová (délka vstupu může být tedy 32 1024 12 = pro takovou velikost neexistuje předpona v soustavě SI). Blok je rozdělen na 16 64bitových bloků. Je tedy nutné použít 64bitovou aritmetiku a také všechny konstanty a IV jsou 64bitové. Algoritmus je tedy vhodné provádět na 64bitovém procesoru. Inicializační vektory (8 vektorů) jsou vygenerovány, jako prvních 64 bitů desetinné části odmocniny z prvních 8 prvočísel [18]. Varianta SHA-512/t používá jiné inicializační vektory, které se generuje funkcí pro generování inicializačních vektorů, která přijímá t jako parametr. Funkce modifikuje IV dané pro SHA-512 pomocí SHA-512 [18]. Z původních vektorů se vytvoří upravené jako XOR všech původních 64bitových částí IV s hodnotou 0xa5a5a5a5a5a5a5a5. Upravené vektory se použijí jako IV pro zahešování textu SHA-512/t (za t se dosadí varianta) funkcí SHA-512. Výsledek jsou inicializační vektory pro funkci SHA-512/t. Po výpočtu funkce SHA-512/t je výstup zkrácen na t bitů. Za t lze dosadit libovolnou hodnotu menší než 512 a hodnota 384 je zakázána. Ve standardu jsou explicitně uvedeny IV pro SHA-512/256 a SHA-512/224, ale tyto vektory lze spočítat i pomocí výše zmíněné funkce. Pro SHA-384 jsou definovány IV jako prvních 64 bitů desetinné části odmocniny z 9. až 16. prvočísla [18]. 2.4 Klíčované hešovací funkce MAC (Message Authentication Code) se používá v symetrické kryptografii pro podpis dat tajným klíčem. Jedná se tedy o funkci f(msg, key). Výsledek této funkce tedy není závislý pouze na vstupní zprávě, ale i na použitém klíči. Tyto funkce je možné vytvořit z blokových šifer v režimu CBC (CBC-MAC), kdy se celá zpráva zašifruje klíčem key a jako MAC se použije (zkrácený) výsledek posledního bloku. Tato varianta má některé bezpečnostní nedostatky (blokové šifry byly navrženy pro jiné účely), a proto existují vylepšené varianty jako OMAC nebo CMAC. MAC funkce je také možné vytvořit z hešovacích funkcí, tento princip se nazývá HMAC (Keyed-hash Message Authentication Code). Standard definuje použití algoritmů MD5, SHA-1 a RIPEMD. Algoritmus SHA-2 není ve standardu uveden, protože v době standardizace neexistoval, ale nic nebrání jeho použití, protože standard HMAC je velmi obecný a bude použitelný i pro SHA-3 nebo libovolnou kryptografickou hešovací funkcí. Varianta algoritmu se označuje jako HMAC-h-t, kde h označuje použitý hešovací algoritmus a t délku výstupu, pokud není uvedena, je délka výstupu shodná s výstupem hešovací funkce. Příklad 8

takového zápisu je HMAC-MD5 nebo HMAC-SHA1-80 pro zkrácení výstupu na 80 bitů[13]. Funkce HMAC je definována ve vzorci 2.1 ( HMAC H (msg, key) = H (key opad) H ( (key ipad) msg )) (2.1) H je hešovací funkce key je autentizační klíč, pokud délka key > delka bloku H pak key = H(key) msg je zpráva k podepsání je operace XOR je konkatenace opad je vnější zarovnání (outer padding), které má hodnotu 0x5c5c5c... 5c o délce bloku funkce H ipad je vnitřní zarovnání (inner padding), které má hodnotu 0x363636... 36 o délce bloku funkce H Z popisu je jasné, že vstup hešovací funkce H bude mít vždy velikost minimálně 2 bloky kvůli zarovnání o délce jednoho bloku a konkatenací se zprávou. Pokud chceme výstup zkrátit, použijeme pouze prvních t bitů výstupu. Toto zkrácení nemá jednoznačnou bezpečnostní výhodu nebo nevýhodu. Výhodou je menší počet bitů, ze kterých může útočník získat méně informací a nevýhodou menší počet bitů, které musí útočník předvídat. Zároveň je doporučeno nezkracovat výstup na méně než polovinu délky výstupu funkce H[13]. 2.5 Časová a prostorová složitost Nyní se zaměříme na časovou a prostorovou složitost uvedených hešovacích funkcí, na jejich zjednodušení pro určité typy a časy potřebné k projití celého stavového prostoru těchto funkcí. Nebudeme uvažovat žádné analytické útoky na tyto heše, ale zaměříme se na bruteforce útok. Pokud útočíme na hešovaná hesla, lze využít pouze chybu v algoritmu v požadavku 4 (first preimage resistance). Takovouto chybu ovšem žádný algoritmus neobsahuje. Pro bod 5 bychom toto heslo museli znát a není tedy důvod útočit silou, když toto heslo známe. Bod 6 nám umožňuje si oba vstupy zvolit a nalézt kolizi, ale my známe pouze výstup. Všechny předchozí heše využívají Merkle Damgârd konstrukci, která se vždy skladá z preprocesingu, rozdělení na bloky a zpracování každého bloku. V preprocessingu se vstup zarovná a doplní se délka. A každý blok se zpracovává konstantní počtem kol. Můžeme tedy odvodit časovou složitost takového algoritmu. Algoritmus Merkle Damgârd je uveden v algoritmu 1. Preprocessing(1) má konstantní časovou složitost (závisí na principu měření délky vstupu - max O(n)). Bloky buď můžeme rozdělit před započetím cyklů(2) (O(n)), nebo si v cyklu pro zpracování blok zkopírujeme do bufferu (O(1)). Inicializujeme heš inicializačními vektory(3) (O(n)). Následně musíme zpracovat všechny bloky(4) (O(n)) konstantním počtem kol pro daný algoritmus(7) (O(1)). Výsledná časová složitost je tedy pro všechny algoritmy O(n), vzhledem k délce vstupu. Což odpovídá požadavku, že f(x) musí byt rychle vypočitatelná. 9

Algoritmus 1: Merkle Damgârd Hash Input: msg Output: hash 1: preprocessing 2: rozděl msg na b bloků o délce n 3: hash = IV 4: for b i = 1 to b do 5: stav = hash 6: for k i = 1 to k do 7: jedno kolo algoritmu 8: end for 9: hash = hash + stav 10: end for 11: return hash Pokud se ovšem zaměříme na brute-force útok například na hešovaná hesla, můžeme omezit délku vstupu na maximálně jeden blok (pokud je heš proveden pomocí HMAC tak 2 bloky). Hesla, která se vměstnají do jednoho bloku, mají délku 440(888 v případě SHA-512) bitů tedy 55(111) znaků, což jsou velmi dlouhá hesla a v praxi se používají mnohem kratší. Délka bloku je o 8 bitů kratší kvůli zarovnání hodnotou 0x80. Takto upravený (omezený) algoritmus má tedy časovou složitost O(1), protože vždy zpracujeme jeden (nebo dva) blok(y). Nyní se zaměříme na prostorovou složitost. Pro uložení vstupu je zapotřebí O(n). Poté už algoritmy pracují s konstantní prostorovou složitostí. Vnitřní stav má konstantní velikost, definovanou pro každý algoritmus. Celková prostorová složitost je tedy O(n) vzhledem k délce vstupu. Pokud opět upravíme algoritmus, aby zpracovával pouze jeden (nebo dva) blok(y), tak získáme prostorovou složitost O(1), protože vždy bude pro vstup zapotřebí právě jeden blok o konstantní velikosti. 2.5.1 Rychlost výpočtu a možnost paralelizace Rychlost jednotlivých algoritmů je brána z výsledků benchmarku knihovny Crypto++[2]. x86 x86-64 Algo. MiB/s bloků/s projití 2 n MiB/s bloků/s projití 2 n MD5 255 4177920 2, 58 10 24 roků 335 5488640 1, 96 10 24 roků SHA-1 153 2506752 1, 84 10 34 roků 192 3145728 1, 47 10 34 roků SHA-256 111 1818624 2, 01 10 63 roků 139 2277376 1, 61 10 63 roků SHA-512 99 811008 5, 23 10 140 roků 154 2523136 1, 68 10 140 roků Tabulka 2.1: Rychlosti hešovacích funkci Tyto výsledky vypadají beznadějně a tragicky. Je jasné, že projití prostoru 2 n není v silách dnešních počítačů a nikdy bychom se nedočkali výsledku (stáří vesmíru je cca 13, 75 10 9 roků). Pokud bychom zvolili masivní paralelizaci s 10 6 procesorů, pro nejrychlejší heš MD5 na x86-64 bychom dostali čas 1, 96 10 18 roků. 10

Proto se musíme zaměřit právě na vstupy výrazně kratší, než 2 n. Zaměřujeme se na prolamování hesel a doporučená délka hesla je kolem 12 znaků[7]. Můžeme tedy zvažovat projití prostoru 2 96. Tento prostor obsahuje i symboly, které není možné pro heslo použít především ze začátku ASCII tabulky. Pokud uživateli dovolíme zadat heslo pouze ze spodní poloviny ASCII tabulky (127-33 netisknutelných znaků) prostor se zmenší na 94 12 2 79 což je stále hodně a pro MD5 se dostáváme k času 2, 74 10 9 roků. S masivní paralelizaci 10 6 procesorů se tedy dostáváme k hodnotě 2740 let. Běžný uživatel ovšem nezadává takto dlouhá hesla a často nepoužívá ani speciální znaky, kombinaci velkých a malých písmen a číslice. Omezíme tedy prostor ještě více pouze na malé znaky a číslice o délce maximálně devět znaků[7]. Velikost tohoto prostoru je 36 9 2 46. Pro MD5 se dostáváme k hodnotě 214 dní. S masivní paralelizaci 10 6 až na hodnotu 18,5 sekundy, která je více než přijatelná. Pokud požijeme algoritmus HMAC v libovolné kombinaci s hešovací funkcí, získáme velmi podobné rychlosti, neboť HMAC vždy zpracuje stejný počet bloků jako jeho hešovací funkce a navíc pouze tři bloky. Dva bloky se zarovnaným klíčem (ipad a opad) a blok výstupu vnitřního heše. Rychlost v MiB/s tedy zůstane vice méně stejná, ale pro jedno blokové vstupy se počet bloků zvětší 4 a výpočet se tedy zhruba 4 zpomalí. Výsledek je tedy ekvivalentní ke zvětšení stavového prostoru o dva bity, což není mnoho. Autoři systémů jsou si toho ovšem vědomi, a proto různě kombinují funkce. Například vícenásobně hešují ( SHA1(SHA1(x)) ), nebo do vstupu přidají salt 3 a tím útočníkovi zabrání vytvoření rainbow table 4. Případně používají různé pokročilejší iterativní funkce pro derivaci klíčů, které si popíšeme v kapitole 4. Několikrát zde byla zmíněna paralelizace těchto algoritmů, ale je potřeba si uvědomit, jak lze tyto algoritmy paralelizovat. Výpočet jednoho bloku v n kolech není možné nijak paralelizovat. V jednom kole se mění pouze omezená část dat (jeden word v případě MD5/SHA-1, dva wordy v SHA-2) a zbytek vnitřního stavu se pouze přeskládá. Vstup následujícího kola je závislý na výstupu předchozího, zde tedy není možnost paralelizace. Více bloků také nelze současně zpracovávat, neboť vstup každého bloku je opět závislý na výstupu zpracování předcházejícího bloku. Jediná možnost, jak tento útok paralelizovat, je počítat současně více hešů, každý na jiném procesoru. Škálovatelnost takovéhoto přístupu je neomezena. Všechny tyto heše se dají bez problému implementovat na GPU a díky velké paralelizaci se výrazně zrychlí počet hešů za sekundu. 3 Salt - náhodná hodnota spojená se vstupem hešovací funkce např. konkatenací 4 Rainbow table - databáze před-vypočítaných hešu 11

Kapitola 3 Kryptografické algoritmy Doposud jsme se zabývali hešovacími algoritmy. Nyní se zaměříme na kryptografické algoritmy, které se využívají pro dosažení několika cílů. Důvěrnost - data jsou chráněna před prozrazením. Autentizace - příjemce ví, kdo data zašifroval. Integrita - příjemce ví, že zpráva nebyla během přenosu pozměněna. Nepopiratelnost - autor zašifrovaných dat nemůže popřít své autorství. Pro dosažení těchto cílů, je nutné použít kombinací s hešovacími funkcemi, někdy i použití více typů šifer. Kryptografické algoritmy se dělí na dvě skupiny. První jsou symetrické algoritmy, pro které se pro zašifrování i dešifrování používá stejný klíč a ten tedy musí obě komunikující strany sdílet. Druhá skupina jsou asymetrické algoritmy, kdy se používají dva klíče, jeden pro šifrování a druhý pro dešifrování. Klíče se nazývají privátní a veřejný, kdy privátní zná pouze jeho majitel a veřejný může znát kdokoliv. Pokud šifrujeme privátním klíčem, dešifrujeme veřejným a obráceně. Operace s privátním klíčem je podpis/dešifrování a s veřejným ověření podpisu/šifrování. Tyto tři typy šifrování (sdílený klíč, privátní a veřejný) splňují vždy pouze některé cíle kryptografie. Sdílený Privátní Veřejný Důvěrnost Autentizace Integrita Nepopiratelnost Tabulka 3.1: Vlastnosti klíčů Z tabulky 3.1 vyplývá, že při šifrování sdíleným klíčem nejsme schopni dosáhnout nepopiratelnost, neboť nemůžeme přesvědčit třetí nezávislou stranu o tom, kdo z majitelů sdílených klíčů zprávu vytvořil. Při šifrování privátním klíčem není zajištěna důvěrnost, protože veřejný klíč pro dešifrování může mít kdokoli a zprávu tedy může také dešifrovat. Pokud zprávu zašifrujeme veřejným klíčem, pak je možné ji dešifrovat pouze privátním 12

klíčem, a ten má pouze jeho majitel, ovšem takovou zprávu může vytvořit kdokoli, kdo má veřejný klíč toho, komu zprávu posílá. Další dělení algoritmů je na proudové a blokové šifry. Asymetrická kryptografie používá pouze blokové šifry. Blokové šifry vždy zašifrují celý blok dat (64 bajtů, 128 bajtů,... ). Proudové šifry šifrují data bajt po bajtu XORováním dat s generovaným keystreamem 1. Proudové šifry jsou náchylnější na implementační chyby, kde se některých chyb autoři dopouští i dnes. První možnou chybou je znovu použití keystreamu pro dvě zprávy. Keystream se XO- Ruje s daty, a pokud odchytíme dvě různé zprávy (A, B) zašifrované stejným keystreamem (K), můžeme obě zašifrované zprávy zxorovat. (A K) (B K) = A B (3.1) Keystream (K) se eliminuje (K K = 0 a A 0 = A) a dostaneme XOR plaintextu zpráv. Pokud známe obsah jedné zprávy, získání obsahu druhé je triviální. Tato chyba je například v zabezpečení WiFi WEP, kdy autoři sice přidali před klíč pro keystream inicializační vektor, ale pouze 24bitový a je tedy velká pravděpodobnost, že se stejný IV použije vícekrát (s narozeninovým útokem po 2 12 zprávách), a tím i stejný keystream. Chyba je navíc znásobena i chybou v generátoru pseudonáhodných čísel, který generuje IV, kdy čísla je možné predikovat. Druhá chyba je možnost otočení bitu. Pokud známe formát zprávy, i bez znalosti obsahu jsme schopni otočit bity v plaintextu. Opět je to způsobeno XORováním dat s keystreamem. A K 1 K = A (3.2) Tomuto útoku se dá zabránit přidáním heše nebo HMACu do zprávy. Obecně se útoky na šifry dělí do čtyř kategorií. Útočník se vždy snaží získat klíč pro dešifrování zprávy. Cipher-text only attack(coa) - útočník zná pouze zašifrovaný text. Known-plaintext attack(kpa) - útočník zná zašifrovaný i otevřený text (nebo alespoň jeho část). Chosen-plaintext attack(cpa) - útočník si může zvolit otevřený text, který bude zašifrován neznámým klíčem. Chosen-ciphertext attack(cca) - podobné jako CPA, ale útočník si volí zašifrovaný text. Pokud je algoritmus navržen tak, aby odolal pouze COA, je velmi slabý (např. Caesarova šifra). Proto moderní kryptografie uvažuje minimálně útok KPA, aby byl algoritmus dostatečně silný. Útoky CPA a CCA vypadají podobně, ale některé algoritmy jsou odolné proti CPA, proti CCA však ne. Symetrické šifry dnes běžně používají délky klíčů od 112 do 256 bitů. Asymetrické používají řádově tisíce bitů. To je způsobeno tím, že asymetrická kryptografie je postavena na matematických operacích, které jsou velmi rychle vypočitatelné pro délky klíčů symetrických algoritmů (200 bitový RSA klíč je prolomen za cca 2s). Proto musí být tato čísla větší, aby se prodloužila doba výpočtu, ale to má také negativní dopad na dobu šifrování, kdy asymetrické algoritmy jsou až 1000x pomalejší než symetrické. 1 Keystream - kryptograficky bezpečná pseudonáhodná posloupnost bitů vytvořená z klíče 13

U symetrických algoritmů se brute-force útočník snaží projít celý klíčový prostor 2 n jako v případě hešů. Na rozdíl od hešů zde ale nelze hledat zkratky jako při hešování hesel. U asymetrických algoritmů jsou tyto klíče prodlouženy, aby snaha o jejich prolomení odpovídala také 2 n pokusů, kde n má velikost jako u symetrických algoritmů. Není tedy pro klíč o délce 1024 nutné procházet prostor 2 1024, ale zhruba jen 2 73. Pro algoritmus RSA se jedná o faktorizaci na prvočísla a pro DSA a DH o problém diskrétního logaritmu. 3.1 RC4 RC4 je proudová šifra vytvořená Ronaldem Rivestem (autor MD5, RSA). Ve starších aplikacích je velmi populární (Office Word 97-2003, PDF, WiFi WEP,... ). Algoritmus není patentován, ale název RC4 byl chráněn ochranou známkou, a tak se open-source implementace nazývají také někdy ARC4 (anglická výslovnost je stejná jako RC4). Délka klíče je 40 až 2048 bitů, ale maximální efektivní délka je pouze 1684 bitů. Zajímavostí je, že Google používá šifru RC4 při komunikaci přes TLS1.0, kdy při této implementaci existuje na blokové šifry v režimu CBC BEAST 2 útok. Šifra se skládá ze dvou bloků - KeySchedule (algoritmus 2 a KeystreamGenerator (algoritmus 3). KeySchedule vytvoří permutaci pole ze vstupního klíče, které se použije pro generování keystreamu. KeystreamGenerator poté pole přeskládává, na základě jeho hodnot a ze stavu pole se následně generuje výstup do keystreamu. Šifrování i dešifrování je stejné díky operaci XOR, která je inverzní sama k sobě. Algoritmus 2: RC4 KeySchedule Input: key, keylen Output: S 1: for i = 0 to 255 do 2: S[i] = i 3: end for 4: j = 0 5: for i = 0 to 255 do 6: j = (j + S[i] + key[i mod keylen]) mod 256 7: swap(s[i],s[j]) 8: end for 9: return S KeySchedule se provádí pouze při inicializaci algoritmu a obsahuje dva cykly přes velikost permutačního pole s 256hodnotami. Časová i prostorová složitost je tedy O(1). KeystreamGenerator pouze v poli vyhledá dvě položky a ty prohodí a z jejich hodnot vytvoří výstup do keystreamu. Opět časová i prostorová složitost O(1). Následně je ovšem nutné keystream aplikovat na data o délce n a celková časová i prostorová složitost je tedy O(n). Můžeme ovšem uvažovat systém, který příjme jeden bajt a na ten aplikuje jeden bajt keystreamu a takto zašifrovaný bajt odešle. Dostaneme O(1) a záleží tedy na konkrétní implementaci a pohledu na věc. Protože algoritmus má konstantní paměťovou složitost a šifrovanou zprávu lze většinou omezit délkou. Implementace v GPU není příliš efektivní, protože je nutné paměť neustále měnit a tyto operace jsou na GPU pomalé. 2 BEAST - Browser Exploit Against SSL/TLS 14

Algoritmus 3: RC4 KeystreamGenerator Input: S Output: K 1: i, j jsou perzistentní mezi voláním funkce 2: if f irstcall then 3: i = 0 4: j = 0 5: end if 6: i = (i + 1) mod 256 7: j = (j + S[i]) mod 256 8: swap(s[i],s[j]) 9: K = S[(S[i] + S[j]) mod 256] 10: return K 3.2 DES a 3DES Nyní se dostáváme k algoritmům, které byly schváleny NSA pro používání vládou USA. Algoritmus DES(Data Encryption Standard) vyvinulo v 70. letech IBM na zakázku NIST. Oproti návrhu IBM NIST (po konzultaci s NSA) algoritmus pozměnila. Spekuluje se, že tato změna umožňovala NSA dešifrovat data. Tato domněnka byla vyvrácena po odtajnění dokumentů o změnách. Základem algoritmu je šifra Lucifer, která je postavena na Feistlově principu. Délka klíče je 56 bitů, exportní verze DES má klíč zkrácen na 40 bitů, kvůli legislativě USA. Šifrování je shodné s dešifrováním, stačí tedy jedna implementace pro obě činnosti (pouze obracené pořadí subklíčů). Algoritmus je blokový s délkou bloku 64 bitů a data šifruje v 16 kolech podobně jako hešovací funkce. Klíčový prostor 2 56 je na dnešní dobu velmi malý a proto se šifra v této základní formě již nepoužívá. Místo ní se používá vylepšená varianta 3DES oficiálně označována jako TDEA (Tripple Data Encription Algorithm). Tato verze má délku klíče 56, 112 nebo 168 bitů, kde poslední dvě délky jsou pro dnešní použití přijatelné. Klíče se skládají z jednoho až tří 56bitových klíčů. Provádí se tři šifrování po sobe (ve skutečnosti šifrování-dešifrováníšifrování) a to s kombinacemi klíčů 1-1-1 pro délku 56(kompatibilní s DES), 1-2-1 pro délku 112 a 1-2-3 pro délku 168. Šifrovat 3 je nutné, protože pokud bychom šifrovali pouze 2 útočník může využít meet-in-the-middle útok, kdy stačí projít pouze 2 56 pro první i druhou šifru. Efektivní délka klíče je tedy 2 56 + 2 56 = 2 57 a klíč jsme prodloužili pouze o jeden bit a ne 2 (pouze jsme 2 zvětšili klíčový prostor)[16]. 15

Jak již bylo řečeno, algoritmus je postaven na Feistlově principu (3.3) L i+1 = R i R i+1 = L i F (R i, K i ) (3.3) Kde L a R je levá resp. pravá polovina vstupního bloku, K i je subklíč kola i a F je šifrovací funkce. Funkce F pro DES obsahuje tyto bloky. E - permutace a expanze 32 bitového vstupu na 48 bitů. SBox - nelineární krok, který provádí substituci z 48 bitů na 32 bitů. P - permutace. ( F (L, K) = P SBox ( E(L) K )) (3.4) Subklíče pro každé kolo se generují pomocí rotací. Ze vstupního 56 bitového klíče se vyrobí dva 28 bitové klíče, které se zarotují a pomocí permutace a komprese se z nich vyrobí 48 bitový subklíč pro každé kolo. Funkce navíc před začátkem 16kol doplňuje počáteční permutaci a po 16kolech koncovou permutaci. Tyto dodatečné permutace se vzájemně vyruší a nemají tedy žádný vliv na zvýšení bezpečnosti. Jelikož algoritmus obsahuje 16 kol a každé kolo má časovou i prostorovou složitost O(1), má i celé zpracování bloku obě složitosti O(1). Algoritmus není v GPU příliš efektivní, protože obsahuje bitové operace a permutace. 3.3 AES Bezpečnost algoritmu DES není dostačující. Proto NIST vypsal soutěž o algoritmus AES (Advanced Encryption Standard). Vítězem se stal algoritmus Rijndael. Jedná se o blokovou šifru o velikosti bloku v násobcích 32 bajtů (matice o čtyřech řádcích) s maximální délkou bloku 256 bitů. Délka klíče je neomezena. Tyto vlastnosti platí pouze pro Rijndael a AES má tyto hodnoty přesně definovány standardem. Délka bloku je pouze 128 bitů (matice 4 4) a délka klíče je 128, 192 a 256 bitů. Počet kol roste s délkou klíče 10 kol pro klíč 128, 12 pro 192 a 14 pro 256 bitů. Klíč je rozgenerován pomocí násobení matic na subklíče pro každé kolo jeden subklíč jako matice 4 4[17]. AES obsahuje tyto bloky AddRoundKey - vstupní blok 4 4 bajtů se XORuje se subklíčem 4 4. SBox - substituce jako v případě DES. ShiftRows - každý řádek je rotován doleva, i-tý řádek rotuje o i 1 bajtů vlevo. MixColumn - každý sloupec je vynásoben maticí M v GF (2 8 ) 3. Tvorba hodnot SBoxu je narozdíl od DESu známa. Hodnoty jsou tvořeny rotací a XORy konstanty v GF (2 8 ), lze tedy vytvořit tabulku. Pro operaci MixColumn je také možno vytvořit několik tabulek pro výpočty. Matice M obsahuje pouze hodnoty 1, 2 a 3 pro šifrování a hodnoty 9, 11, 13 a 14 pro dešifrování. Lze tedy pro každou hodnotu vytvořit tabulku (celkem sedm tabulek o 256-ti prvcích). 3 GF - Galoisovo pole 16

Algoritmus 4: AES Input: PlainText, Key Output: CipherText 1: subkeys = ScheduleKeys(Key) 2: rounddata = P laint ext 3: for i = 1 to k 1 do 4: keyeddata = rounddata subkeys[i] 5: subsdata = SBox(keyedData) 6: shdata = ShiftRows(subsData) 7: rounddata = MixColumn(shData) 8: end for 9: keyeddata = rounddata subkeys[k] 10: subsdata = SBox(keyedData) 11: CipherT ext = ShiftRows(subsData) 12: return CipherText V algoritmu 4 je vidět, že se v posledním kole neprovádí MixColumn. Dešifrování je opačný proces, při kterém se pouze změní pořadí aplikování funkcí a obsahy tabulek. Algoritmus obsahuje opět pouze bloky, které pracují s konstantní časovou i prostorovou složitostí. Obsahuje konstantní počet kol, a proto je časová i prostorová složitost opět O(1). Algoritmus je dnes již implementován v instrukční sadě procesorů jako instrukční sada AES-NI (AES New Instructions). Jedná se o částečnou HW akceleraci šifrování a dešifrování. Částečnou proto, že není v HW implementován celý algoritmus ale pouze jeho klíčové kroky. Jedná se o jedno normální a poslední kolo šifrování/dešifrování, generování subklíčů, a násobení v GF (2 8 ). Celý algoritmus se musí tedy z těchto instrukcí poskládat. Zrychlení oproti běžné SW implementaci je zhruba 8. Ani tento algoritmus není v GPU příliš efektivní z důvodu příliš velkého množství přístupu do paměti a tak je zrychlení na GPU oproti CPU pouze zhruba 14 [12]. 3.4 Režimy blokových šifer Protože blokové šifry umožňují zašifrovat blok dat a většinou potřebujeme zašifrovat více než jeden blok dat, musíme blokovou šifru použít k vícekrát. Data pro zašifrování musí být rozdělena na bloky a zarovnána na velikost bloku. Jak blokovou šifru použijeme pro šifrování a dešifrování definuje právě režim. Režimy šifer jsou univerzální a mohou pracovat s libovolnou blokovou šifrou. Nejběžnější režimy jsou ECB, CBC a CTR. Relativně nový režim GCM(Galois/Counter Mode), který velice rychlý a bezpečný, je poměrně složitý a v této práci ho vynecháme. Další režimy OFB(Output Feedback) a CFB(Cipher Feedback) vytváří z blokových šifer něco jako proudové šifry. V případě režimu OFB je to skutečně proudová šifra a tento režim je tedy náchylný na implementační chyby. 3.4.1 ECB Základní režim ECB (Electronic Code Book) je bezpečný, pouze pokud se jedním klíčem zašifruje pouze jeden blok. 17

Šifrování Dešifrování C i = E(P i, key) (3.5) P i = D(C i, key) (3.6) Pokud bychom tímto režimem šifrovali více bloků, které budou obsahovat stejná data, budou i výsledná zašifrovaná data stejná. Tento režim lze lehce detekovat pomocí kompresních algoritmů. Protože taková data obsahují opakující se bloky a kompresní algoritmus je najde a zkomprimuje. Tento režim lze paralelizovat jak pro šifrování tak při dešifrování. 3.4.2 CBC CBC (Cipher Block Chaining) je asi nejpoužívanější režim, protože se považuje za nejbezpečnější. I když v implementaci TLS1.0 na něj existuje BEAST útok. Pro šifrování i dešifrování je nutné vytvořit kryptograficky bezpečná IV, který není třeba uchovávat v tajnosti, ale je třeba chránit jeho integritu. Šifrování C 0 = IV C i = E(P i C i 1, key) (3.7) Dešifrování C 0 = IV P i = D(C i, key) C i 1 (3.8) Šifrování není možné paralelizovat, neboť neznáme všechny C i a musíme je získat šifrováním, a tak se musí provádět sekvenčně. Naopak dešifrování paralelizovat lze. Všechna C i známe a můžeme tedy dešifrovat více bloků současně. 3.4.3 CTR Další velmi používaný režim je CTR(Counter), především z důvodu možnosti paralelizovat šifrování bloků. Někteří kryptologové tvrdí, že režim je méně bezpečný, jiní zase že je bezpečný stejně jako režim CBC. Je ovšem velmi podobný proudové šifře a lze tedy opakovat implementační chyby v proudových šifrách. Šifrování C i = E(IV CT R, key) P i (3.9) Dešifrování P i = E(IV CT R, key) C i (3.10) Pro šifrování i dešifrování se vždy zašifruje vstup vytvořený inicializačním vektorem spojený s počítadlem, které je inicializováno na 0. Operace, která spojuje počítadlo s IV může být, libovolná funkce, která bude mít výstup o délce bloku šifry např. XOR, OR, konkatenace apod. Paralelizovat lze jak šifrování tak dešifrování. 18

Kapitola 4 Generování klíčů Šifrovací algoritmus potřebuje ke své činnosti klíč, který je jediný parametr, který může ovlivnit šifrování a dešifrování dat. Klíče mají délku 56 až 256 bitů. Problém nastává v situaci, kdy potřebujeme vytvořit šifrovací klíč z hesla, které zadává uživatel. Taková hesla jsou výrazně kratší, například 8 znakové heslo obsahuje pouze 64 bitů (pro DES zase až příliš). Proto je nutné tato hesla prodlužovat na délku klíče dané šifry. Existuje mnoho způsobů jak to udělat dobře, ale ještě více jak to udělat špatně. Nyní se tedy zaměříme na ty dobré metody, které navíc, aby zabránili vytvoření slovníku, vyžadují salt. Některé také vyžadují další parametry, které ztěžují brute-force útoky. 4.1 PBKDF1 Nejjednodušší metoda jak vytvořit klíč z hesla je PBKDF1(Password Based Key Derivation Function 1 ). Heslo se konkatenuje se saltem a výsledek se zahešuje. Výstupem je blok o délce n bitů, která odpovídá délce výstupu hešovací funkce. Pokud chceme vytvořit další blok, opět tuto hodnotu zahešujeme a dostaneme dalších n bitů. Pokud tedy chceme vytvořit klíč o délce m s pomocí hešovací funkce, která má na výstupu n bitů, musíme takových bloků vytvořit m n a výsledek oříznout na m bitů. Tato metoda je velmi rychlá, a proto nijak neztěžuje útok silou[10]. P S H H... H T1 T2 Tn Obrázek 4.1: Schéma funkce PBKDF1 19

4.2 PBKDF2 Jak již z názvu vyplývá jedná se o pokročilejší verzi funkce pro derivaci klíče. Funkce nevyužívá heše ale funkce pseudonáhodného generatoru (PRF). Funkce má dva parametry a můžeme ji definovat jako P RF (P assword, Salt). Tato funkce až nápadně připomíná funkci HMAC (obecně MAC) a ta se také používá. Navíc se tato funkce zopakuje c-krát. PBKDF2 tedy potřebuje heslo, salt, funkci HMAC, počet iterací a délku výstupu. Jednotlivé bloky jsou na sobě nezávislé, a je tedy možné je generovat paralelně. V první iteraci se konkatenuje salt s číslem bloku od 1 v little-endian a tato hodnota se použije jako zpráva pro HMAC a heslo jako klíč. Výsledek se XORuje s výstupním blokem, který je inicializován na 0. Další iterace použije výstup funkce HMAC jako zprávu pro další zpracování HMAC s klíčem je opět heslo. Výsledek se XORuje s výstupním blokem. Pro vytvoření klíče o délce m je opět nutné vytvořit m n bloků a výsledek oříznout na m bitů. S int(n) P PRF Tn Obrázek 4.2: Schéma funkce PBKDF2 pro jeden blok Použití funkce je definováno ve standardu PKSC #5 [10]. Je tedy velmi často používaná, ale někdy chybně. Minimální doporučený počet iterací je 1000, aby byl případný útok silou co nejpomalejší. Pro jeden blok se tedy musí HMAC provést 1000 a jelikož HMAC potřebuje zpracovat čtyři bloky hešovací funkce, je útok 4000 pomalejší než při použití PBKDF1. Ale protože musíme pro 256 bitový klíč při použití funkce SHA-1(160bitů) vytvořit dva bloky, je výsledný útok až 8000 pomalejší. Funkce se také používá pro hešování hesel, kdy je výsledek se saltem uložen do databáze a poskytuje větší rezistanci proti útoku silou[10]. Funkci používá ve svých produktech řada společností, ale některé používají příliš malý počet iterací. Například BlackBerry pro zálohování dat telefonu používalo pouze jednu iteraci. Podobný problém je v Cisco IOS a IOS XE ve verzi 15. Autoři chtěli použít HMAC- SHA256, 80 bitů pro salt a 1000 iterací pro uložení hešovaného hesla. Při implementaci ale došlo k chybě a místo PBKDF2 použili pouze SHA-256 bez saltu. Tento typ uložení hesla je v IOS označován jako type 4 password. Cisco proto označuje type 4 za deprecated a doporučuje použít type 5, který obsahuje 1000 iterací osolené MD5[6]. Na druhou stranu existuje i software, který naopak používá velký počet iterací a činí tak heslo prakticky neprolomitelné (WinRAR 4000 iterací, záloha ios7 10000, django framework 10000). 20

4.3 bcrypt Předchozí metody vyžadují malé množství paměti, a proto je možné je efektivně implementovat v GPU. Proto vznikly další metody, které vyžadují naopak velké množství paměti a implementace v GPU je tak neefektivní, kvůli paměťovému modelu, jaký využívá. Algoritmus bcrypt, využívá upravenou blokovou šifru blowfish, která je známá svým paměťově náročným procesem vytvářením subklíčů. Blowfish potřebuje 4KiB paměti pro uložení SBoxů. Blowfish nemá tyto SBoxy konstantní, ale generují se z klíče a algoritmus obsahuje čtyři SBoxy s 256 32bitovými čísly. Po vygenerování SBoxů se 64 krát zašifruje text OrpheanBeholderScryDoubt a ten slouží jako klíč. Metoda není v HW implementaci efektivní kvůli tomu, že test každého hesla vyžaduje 4KiB rychlé paměti. Implementovat efektivně v HW je tedy možné jen s nejmodernějšími FPGA čípy, které mají dostatek rychlé paměti. Jinak je potřeba tato data ukládat do hlavní paměti, která je pomalá a neumožňuje přístup více procesorům současně. 4.4 scrypt Pokud bcrypt byl navržen pro znesnadnění paralelizace a HW implementace, tak algoritmus scrypt dovedl tuto myšlenku k dokonalosti. Umožňuje paralelizaci za použití malého množství paměti, ale data je nutné vytvářet neustále znovu a tím se proces zpomalí. Nebo je možné data uložit do paměti, ale je tedy nutná opět rychlá paměť. Algoritmus využívá proudovou šifru Salsa20/8 (zkrácená varianta používá pouze 8 kol místo 20) a algoritmus PBKDF2. Nejprve se vygeneruje dlouhý náhodný vektor r 1024 bitových čísel o délce n pomocí PBKDF2 (s pouze jednou iterací). Počet bitů je tedy r n 1024 bitů. Prvek vektoru je následně procházen po 32 bitových slovech a je na náhodných pozicích šifrován, aby bylo zajištěno, že bude využito mnoho přístupů do paměti. Jakmile jsou zpracovány všechny prvky vektoru, je celý vektor použit jako salt pro PBKDF2, která vygeneruje klíč[19]. Algoritmus je tak efektivní ve zneefektivňování akcelerace pomocí GPU, že GPU implementace je maximálně 10 rychlejší, což je na GPU málo. V porovnání se zrychlením MD5 kdy CPU zvládne 5,5Mh/s a GPU 8,5Gh/s, kdy je zrychlení téměř 1500 krát. V souboji mezi výrobci GPU zde jasně vyhrává ATI a naopak GPU od NVIDIE dosahuje velmi podobných výsledků jako CPU a vetšinou jsou i pomalejší. Například Intel Core i7 4770-95kh/s, NVIDIA GTX 670-190kh/s, ATI Radeon 7990 1310kh/s. Na zrychlení je vidět, že přestože není algoritmus efektivní, může být rychlý [14]. 21

Kapitola 5 Aplikace kryptografických prostředků 5.1 IPSec IPSec je protokol pro zabezpečený přenos dat v počítačové síti. Zajišťuje jak autentizaci, tak důvěrnost. Protokol pracuje tak, že do sebe zapouzdřuje data na síťové vrstvě (L3) ISO/OSI modelu. Toto zapouzdření tak vytvoří logický kanál mezi stanicemi v síti. Umožňuje zapouzdření dat dvěma způsoby. V transportním režimu je IP hlavička zapouzdřených dat zkopírována před IPSec paket, který může být zašifrován (hlavička ESP) nebo autentizován (hlavička AH). V tunelovém režimu jsou data zapouzdřena a odeslána na druhý konec tunelu, kde jsou data odpouzdřena a jsou dále odeslány na stanici s IP, která je uvedena v zapouzdřené IP hlavičce[11]. Transportní režim je tak vhodný pro komunikaci mezi dvěma koncovými stanicemi, zatímco tunelový je vhodný například pro spojování LAN sítí přes Internet. Při spojení se vytvoří logický kanál (Security Association), který je jednosměrný a definuje určité zabezpečení. Pro duplexní komunikaci je tedy zapotřebí dvou kanálů[11]. Na začátku spojení se klienti musí domluvit na šifrování a autentizaci. Pro šifrování se využívá algoritmy AES nebo 3DES v režimu CBC a HMAC-SHA1 pro autentizaci. Pro výměnu klíčů a autentizaci se používá protokol IKEv2 (Internet Key Exchange), který využívá asymetrický kryptografický algoritmus Diffie-Hellman. Pro autentizaci se při navazování spojení užívá princip challenge-response, kdy je připojující se stanice ověřena pomocí heše několika hodnot a PSK (před-sdílený-klíč)[8]. Pokud tedy odchytíme pakety z ustavení spojení, je možné provést brute-force útok na heš a získat tak PSK. Existuje také bezpečnější varianta používající certifikáty (X.509) pro ověření klienta. 5.2 ZIP ZIP je formát komprimovaného souboru. Tento formát vyvinula společnost PKWARE a původní aplikace pro kompresi a dekompresi se jmenuje PKZIP (PK jsou iniciály zakladatele společnosti Phila Katze). Komprese se provádí pomocí algoritmu DEFLATE a Huffmanova kódování. Šifrování obsahu je dostupné od verze 2.0, kdy byla vytvořena jednoduchá proudová šifra PKZIP Stream Cipher. Šifrování bezpečným algoritmem AES je dostupné až od verze 5.1. Existuje také varianta zvaná SecureZIP, která je proprietární; obsahuje téměř všechny dostupné bezpečnostní algoritmy, ale není příliš rozšířená. 22