}w!"#$%&'()+,-./012345<ya



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

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u.

Hashovací funkce. Andrew Kozlík KA MFF UK

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Datové struktury 2: Rozptylovací tabulky

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

Vzdálenost jednoznačnosti a absolutně

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

Jak funguje asymetrické šifrování?

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Data Encryption Standard (DES)

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

. Bezpečnost mobilních telefonů. David Machač

NÁHODNÁ ČÍSLA. F(x) = 1 pro x 1. Náhodná čísla lze generovat některým z následujících generátorů náhodných čísel:

[1] samoopravné kódy: terminologie, princip

1 Linearní prostory nad komplexními čísly

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Generování pseudonáhodných. Ing. Michal Dorda, Ph.D.

ANALYTICKÁ GEOMETRIE V ROVINĚ

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

12. Lineární programování

Dijkstrův algoritmus

Nejdřív spočítáme jeden příklad na variaci konstant pro lineární diferenciální rovnici 2. řádu s kostantními koeficienty. y + y = 4 sin t.

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Interpolace Lagrangeovy polynomy. 29. října 2012

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmy I, složitost

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

5. Lokální, vázané a globální extrémy

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

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

Jednofaktorová analýza rozptylu

8 Kořeny cyklických kódů, BCH-kódy

Parametrické programování

5.1. Klasická pravděpodobnst

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

0.1 Úvod do lineární algebry

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

Arnoldiho a Lanczosova metoda

Stavový model a Kalmanův filtr

vyhledávací stromové struktury

Příklad 1. Řešení 1a. Řešení 1b ŘEŠENÉ PŘÍKLADY Z M1B ČÁST 5

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

BCH kódy. Alena Gollová, TIK BCH kódy 1/27

(4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74,

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Báze a dimenze vektorových prostorů

Markovské metody pro modelování pravděpodobnosti

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

0.1 Úvod do lineární algebry

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

řešeny numericky 6 Obyčejné diferenciální rovnice řešeny numericky

Časová složitost / Time complexity

Generující kořeny cyklických kódů. Generující kořeny. Alena Gollová, TIK Generující kořeny 1/30

J.Breier, M.Vančo, J.Ďaďo, M.Klement, J.Michelfeit, Masarykova univerzita Fakulta informatiky

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Odhad parametrů N(µ, σ 2 )

Bayesovské metody. Mnohorozměrná analýza dat

1. července 2010

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

ANTAGONISTICKE HRY 172

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

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

Bakalářská práce Nejslabší! Máte padáka! Strategie ukládání

KTE/TEVS - Rychlá Fourierova transformace. Pavel Karban. Katedra teoretické elektrotechniky Fakulta elektrotechnická Západočeská univerzita v Plzni

Lingebraické kapitolky - Analytická geometrie

Aplikovaná numerická matematika - ANM

1 Vektorové prostory.

asymetrická kryptografie

Věta 12.3 : Věta 12.4 (princip superpozice) : [MA1-18:P12.7] rovnice typu y (n) + p n 1 (x)y (n 1) p 1 (x)y + p 0 (x)y = q(x) (6)

Elegantní algoritmus pro konstrukci sufixových polí

Matematika I 2a Konečná pravděpodobnost

13. cvičení z PSI ledna 2017

4. Kombinatorika a matice

6 Ordinální informace o kritériích

Lineární algebra : Metrická geometrie

vnější profesionál vnitřní profesionál organizace opakuje podsouvá

Základy algoritmizace. Pattern matching

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

Intuitivní pojem pravděpodobnosti

Aplikace. vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin

Binární vyhledávací stromy pokročilé partie

3 Bodové odhady a jejich vlastnosti

South Bohemia Mathematical Letters Volume 23, (2015), No. 1, DĚLENÍ KRUHU NA OBLASTI ÚVOD

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

(Cramerovo pravidlo, determinanty, inverzní matice)

2. Určete jádro KerL zobrazení L, tj. nalezněte alespoň jednu jeho bázi a určete jeho dimenzi.

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Prohledávání do šířky = algoritmus vlny

1. Náhodný vektor (X, Y ) má diskrétní rozdělení s pravděpodobnostní funkcí p, kde. p(x, y) = a(x + y + 1), x, y {0, 1, 2}.

1 0 0 u 22 u 23 l 31. l u11

Markov Chain Monte Carlo. Jan Kracík.

10. cvičení z PST. 5. prosince T = (n 1) S2 X. (n 1) s2 x σ 2 q χ 2 (n 1) (1 α 2 ). q χ 2 (n 1) 2. 2 x. (n 1) s. x = 1 6. x i = 457.

Cvičení 5 - Inverzní matice

Dynamické programování

5 Orientované grafy, Toky v sítích

Transkript:

}w!"#$%&'()+,-./012345<ya Masarykova univerzita Fakulta informatiky Time-memory tradeoff útoky v kryptografii Diplomová práce Martin Sedlář Brno, podzim 2012

Prohlášení Prohlašuji, že tato diplomová práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Martin Sedlář Vedoucí práce: Mgr. et Mgr. Jan Krhovják, Ph.D. ii

Poděkování Rád bych poděkoval Mgr. et Mgr. Janu Krhovjákovi, Ph.D. za vedení této práce. iii

Shrnutí V první části práce jsou shrnuty poznatky o současném stavu Time-memory tradeoff útoků. Ve druhé části jsou odvozeny vzorce pro určení počtu dosažených různých rozlišitelných bodů v Hellmanově tabulce s rozlišitelnými body. Také jsou tu popsány tabulky vytvořené s různými šifrovacími algoritmy a porovnány skutečné výsledky s odhadnutými hodnotami. V závěru této části je uveden útok pomocí těchto tabulek na šifru RC4 se čtyřicetibitovým klíčem. V poslední části jsou popsány experimenty zkoumající strukturu grafu stavů A5/1 s její přechodovou funkcí. iv

Klíčová slova A5/1, Hellmanovy tabulky, proudové šifry, rainbow tabulky, rozlišitelné body, time-memory tradeoff útoky v

Obsah 1 Úvod.................................. 2 2 Techniky time-memory tradeoff kryptoanalýzy....... 4 2.1 Blokové šifry........................... 4 2.1.1 Hellmanovy tabulky................... 4 2.1.2 Rozlišitelné body..................... 7 2.1.3 Rainbow tables...................... 8 2.2 Proudové šifry.......................... 9 2.2.1 Model proudové šifry................... 9 2.2.2 Babbageova metoda................... 9 2.3 Biryukova a Shamirova metoda................. 10 2.3.1 Možnost použití u blokových šifer............ 11 2.4 Rozlišitelné body pro proudové šifry.............. 11 2.4.1 Popis šifry A5/1 a jejího vzorkování.......... 12 2.5 Útok na proudové šifry používající inicializační vektory.... 14 2.6 Metody efektivního uložení předpočítaných tabulek...... 15 2.6.1 Rozlišitelné body a počáteční stavy........... 16 2.6.2 Proudové šifry s nízkou odolností proti vzorkování.. 16 3 Kolize v Hellmanových tabulkách s rozlišitelnými body.. 17 3.1 Pravděpodobnost a očekávaný počet kolizí........... 17 3.2 Metody výpočtu tabulek..................... 22 3.2.1 DES s fixní nešifrovanou zprávou........... 22 3.2.2 DES s fixním klíčem.................. 23 3.2.3 A5/1 s plnou délkou klíče............... 23 3.2.4 A5/1 s nulovým prvním registrem.......... 24 3.2.5 A5/1 s nulovým druhým registrem.......... 24 3.2.6 A5/1 s nulovým třetím registrem........... 24 3.2.7 RC4 s 64 bitovým klíčem............... 24 3.2.8 RC4 se 40 bitovým klíčem............... 25 3.2.9 KASUMI s 64 bitovým klíčem............ 25 3.3 Získané výsledky......................... 25 3.4 Útok na RC4 se 40 bitovým klíčem............... 29 4 Cykly v šifře A5/1......................... 32 4.1 Efektivní implementace šifry A5/1............... 32 4.2 Výskyt cyklů v A5/1....................... 34 4.3 Počty předchůdců stavů A5/1.................. 36 4.4 Rekonstrukce větví vedoucích do cyklů............. 37 5 Závěr.................................. 40 1

1 Úvod Pro mnoho obtížných problémů existují metody, kterými je možné snížit čas potřebný k jejich vyřešení za cenu zvýšení paměťových nároků. Příkladem je například problém diskrétního logaritmu nebo batohu. Pro tyto problémy existují algoritmy složitosti N. Naivní řešení hrubou silou by mělo složitost N, kde N je velikost celého prostoru řešení, který je nutné prohledat. Tento princip je možné využít i v kryptoanalýze. Uvažujme kryptosystém využívající N možných různých klíčů. Nechť C = E K (P ) značí, že C je výsledek aplikace šifrovacího algoritmu s klíčem K na zprávu P. Jestliže útočník zná odpovídající si dvojici P a E K (P ), nejpřímočařejší varianta útoku na obecný kryptosystém je postupný průchod přes všechny možné kombinace klíčů. Pro každé K si spočítá E K (P ) a porovná, jestli výsledkem je odpovídající hodnota C. Tato metoda vyžaduje v nejhorším případě N šifrovacích operací. Paměťové nároky tohoto přístupu jsou minimální. Existují metody, kterými je možné kryptosystém prolomit rychleji za cenu vyšších paměťových nároků. Většina těchto metod vyžaduje silnější pozici útočníka, než tomu bylo v předchozím případě. Nejen že útočník potřebuje znát dvojici P a E K (P ), musí být schopný získat hodnotu E K (P ) pro jím zvolené P. V tomto případě si útočník může předpočítat tabulku obsahující hodnoty K a E K (P ) pro nějaké pevně dané P. Tabulka je následně seřazena podle hodnot E K (P ). Toto předpočítání vyžaduje provedení N šifrovacích operací, na následné seřazení je potřeba N log N operací. V okamžiku, kdy má útočník hotovou takovou tabulku, je prolomení kryptosystému redukováno na vyhledání klíče v této tabulce. Pokud je použit nový klíč K, útočník si nechá zašifrovat zprávu P tímto klíčem. Protože tabulka je seřazená podle hodnot E K (P ), má vyhledání klíče složitost log N. Vytvoření tabulky je možné provést předem a následně ji využít pro všechny útoky na tento kryptosystém. Nevýhodou tohoto přístupu je paměťová složitost, kdy útočník musí být schopen uložit N dvojic K, E K (P ). Toto jsou dva extrémní přístupy k řešení problému nalezení klíče, ze kterých ani jeden není příliš výhodný. V současnosti existuje několik pravděpodobnostních metod, jak snížit čas potřebný k nalezení klíče za cenu navýšení potřebné paměti a opačně. Ve druhé kapitole této práce popíšu současný stav poznatků o problematice time-memory tradeoff útoků. V závěru této kapitoly shrnu možnosti, jak efektivněji ukládat tabulky předpočítané v offline fázi útoku. V první části třetí kapitoly se budu zabývat odhadem počtu kolizí v Hellmanových tabul- 2

1. Úvod kách s rozlišitelnými body. Vyjdu z Hellmanových vzorců pro odhad počtu bodů pokrytých tabulkami bez rozlišitelných bodů a odvodím vzorec pro případ s rozlišitelnými body. Ve druhé části třetí kapitoly se zabývám tvorbou tabulek pro vybrané blokové a proudové šifrovací algoritmy. Následně provedu útok pomocí těchto tabulek na šifru RC4 se 40 bitovým klíčem. Pro výpočet tabulek s šifrou A5/1 jsem musel tuto šifru implementovat, protože jediná dostupná implementace je příklad demonstrující její fungování a je velmi neefektivní. Výpočet všech tabulek v této kapitole byl velmi časově náročný a celkem trval přibližně 3 měsíce. Ve čtvrté kapitole se podrobněji zabývám fungováním šifry A5/1 a její přechodovou funkcí mezi vnitřními stavy. 3

2 Techniky time-memory tradeoff kryptoanalýzy V této kapitole shrnu dosavadní poznatky o time-memory tradeoff kryptoanalýze. Postupně se budu věnovat těmto útokům od prvního představení této myšlenky M. Hellmanem až po novější přístupy pro time-memory-data kryptoanalýzu proudových šifer. Jednotlivé techniky je možné rozdělit do dvou základních kategorií podle typu algoritmů, na které je možné je použít blokové šifry, proudové šifry a hashovací funkce. Obecně je možné tento druh útoků použít na libovolnou jednosměrnou funkci. V této kapitole se budu postupně věnovat útokům na blokové a proudové šifry. 2.1 Blokové šifry V této části představím základní techniky použitelné k útokům na blokové šifry. Mezi ně patří Hellmanovy tabulky, Rivestovo vylepšení za použití rozlišitelných bodů a rainbow tabulky. 2.1.1 Hellmanovy tabulky První obecnou metodu, jak využít principu Time-memory tradeoff v kryptoanalýze, představil v roce 1980 Martin E. Hellman [10]. Tento postup je výrazně efektivnější než hledání řešení oběma naivními metodami (prohledávání hrubou silou a předpočítání celé tabulky klíčů). Tato metoda vyžaduje před samotným útokem předpočítat pomocnou tabulku. Předpočítání je možné provést předem a potom tato data využívat pro všechny útoky na daný kryptosystém. K provedení tohoto útoku je nutné aby útočník byl schopen získat dvojici nešifrovaný text (P ) odpovídající šifrovaný text (E K (P )) pro jím zvolené P (choosen plaintext attack) stejně jako při naivním přístupu k vytváření tabulky. Hellman popsal svou metodu s využitím blokové šifry DES, ale jeho postup je možné aplikovat na libovolnou jednosměrnou funkci. DES pracuje s bloky o velikosti 64 bitů a 56 bitovým klíčem. Pro libovolný pevně daný blok dat P 0 Hellman definoval funkci f(k) = R[E K (P 0 )] (2.1) kde R je nějaká redukční funkce z 64 bitů na 56 bitů. Na začátku fáze předpočítání útočník vybere hodnoty SP 1, SP 2,..., SP m (startovací body starting points) jako náhodné hodnoty z množiny {1, 2,..., N} s uniformní pravděpodobností. Hodnota m označuje počet řádků pomocné tabulky. Oz- 4

načme 2. Techniky time-memory tradeoff kryptoanalýzy SP i = X i,0 1 i m Následně zvolíme hodnotu t určující počet sloupců v předpočítané tabulce. Definujeme X i,j = f(x i,j 1 ) 1 i m 1 j t (2.2) Tento vzorec nám ukazuje postup jak spočítat celou tabulku všech hodnot X i,j 1 i m 1 j t. Označíme si X i,t = EP i hodnoty v posledním sloupci tabulky (koncové body end points). Z této tabulky si musíme zapamatovat pouze dvojice SP i, EP i 1 i m, ostatní hodnoty můžeme zapomenout. V případě potřeby je možné je dopočítat z příslušného SP i. Seznam dvojic SP i, EP i seřadíme podle EP i. Takto seřazený seznam dvojic je konečným výsledkem fáze předpočítání. Předpokládejme, že někdo zvolil klíč K a útočník získal dvojici P 0 a C 0 = E K (P 0 ). Nyní je schopen dopočítat Y 1 = R(E K (P 0 )) = f(k). Může se podívat jestli Y 1 je shodné s některým EP i v tabulce. Pokud Y 1 = EP i potom buď K = X i,t 1 nebo existuje více hodnot, na kterých dá funkce f výsledek EP i. Toto lze detekovat dopočítáním hodnoty X i,t 1 z SP i a ověřením že C 0 = E Xi,t 1 (P 0 ). Pokud tato rovnost platí, byl nalezen hledaný klíč K, v opačném případě se jedná o falešný poplach. Pokud Y 1 není mezi EP i, potom K není v předposledním sloupci tabulky. Je třeba spočítat Y 2 = f(y 1 ) a zkontrolovat, jestli Y 2 je mezi EP i. Pokud se tam vyskytuje, je třeba ověřit, že se nejedná o falešný poplach. Pokud jde o falešný poplach nebo se mezi EP i nevyskytuje, potom K není v t 2 sloupci tabulky. Tento algoritmus se aplikuje až do nalezení klíče nebo projití všech sloupců tabulky. Za předpokladu, že by všech mt položek v tabulce bylo navzájem různých, dostaneme pravděpodobnost úspěchu nalezení klíče P (S) = mt (2.3) N čímž získáváme, že pravděpodobnost úspěchu závisí na čase i použité paměti. Jelikož startovní body jsou voleny náhodně a redukční funkce nemůže být injektivní, mohou se položky v tabulce opakovat. S využitím předpokladu, že hodnoty jsou mezi položky rozdělené s uniformní pravděpodobností, dostaneme dolní odhad pravděpodobnosti [10] P (S) 1 N m t 1 ( ) N it j+1 (2.4) N i=1 j=0 Odtud vyplývá, že nemá velký smysl zvětšovat hodnoty m a t nad hodnoty ( ) j+1 kdy mt 2 N it. = N, protože N = exp ijt. N = exp mt2 N. V případě že 5

2. Techniky time-memory tradeoff kryptoanalýzy mt 2 N, většina sčítanců v sumě bude velmi malých. Pokud naopak mt 2 N, většina sčítanců se bude blížit jedné a výsledný odhad pravděpodobnosti bude P (S) mt N (2.5) K omezení, že nemá smysl zvyšovat hodnoty t a m nad hodnotu, kdy mt 2 = N, můžeme dospět také úvahou s narozeninovým paradoxem [3]. Pravděpodobnost, že dvě podmnožiny A, B množiny C mají neprázdný průnik, je velmi vysoká pokud A B C. Pokud budeme předpokládat, že prvních m řádků tabulky je navzájem různých, potom obsahují mt různých klíčů. Další přidaný řádek by obsahoval dalších t klíčů. Dohromady dostaneme omezení mt 2 N. V případě že mt 2 = N, je možné odhad pravděpodobnosti 2.4 numericky vyčíslit a získáme hodnotu 0, 8 mt N. Pokud zvolíme jednoduchý kryptosystém, kde N = 1024 a m = t = 10, získáme odhad pravděpodobnosti P (S) 0, 078125. Experiment provedený Martinem E. Hellmanem [10] s kryptosystémem DES omezeným na prostor klíčů velikosti N a dvaceti různými volbami funkce R měl úspěšnost od 6, 8% do 9, 1%. Pravděpodobnost úspěchu tedy bude malá pro takové m a t. K jejímu zlepšení je možné použít více tabulek s různě zvolenými funkcemi R. Při použití dobrého kryptosystému je možné funkci f považovat za náhodnou a tedy i malé rozdíly R zajistí různost řetězců v jednotlivých tabulkách. Pravděpodobnost úspěchu při použití více tabulek je [12] ( P s 1 1 1 N m t 1 ( i=1 j=0 1 it N ) j+1 ) l (2.6) Kde l označuje počet použitých tabulek. Zopakování předchozího pokusu s použitím dvaceti tabulek s různými volbami R přineslo úspěšnost 81, 3%. Numerické vyhodnocení výrazu 2.6 nám dává odhad pravděpodobnosti pro tuto volbu parametrů P s 0, 7846973903. Pokud si T označíme čas potřebný k realizaci online fáze, M velikost potřebné paměti a P čas trvání offline fáze, potom tento postup nabízí timememory tradeoff útok s parametry MT 2 = N 2, kde P = N, 1 T N, N M N [3]. Omezení pro M plyne z toho, že pokud by M < N, tak by potom potřebný čas byl větší než samotné zkoušení všech možných klíčů. 6

2.1.2 Rozlišitelné body 2. Techniky time-memory tradeoff kryptoanalýzy Velkou nevýhodou Hellmanovy metody je potřeba velkého množství přístupů na disk, protože náhodné čtení z disku je časově mnohem náročnější než výpočet funkce f. V roce 1982 navrhl R. Rivest [5] metodu rozlišitelných bodů (Distinguish point). Rozlišitelný bod je klíč splňující nějakou snadno ověřitelnou podmínku. Například posledních k bitů klíče je nulových. Řetězy klíčů jsou nyní generovány z daného startovního bodu až do dosažení rozlišitelného bodu, což znamená, že jednotlivé řetězy mohou mít různé délky. Také se mohou během výpočtu objevit cykly, které nikdy nedosáhnou rozlišitelného bodu. Toto je nepravděpodobné, pokud střední hodnota délky řetězce je menší než N. Cykly bez rozlišitelného bodu (např. řetězy více než dvakrát delší než je průměrná délka) mohou být vynechány. Dále jsou vynechány řetězy končící ve stejném rozlišitelném bodě [8] z důvodu omezení redundance dat. Z každé skupiny takových řetězů je ponechán pouze jeden. Takto upravené tabulky se nazývají perfektní tabulky. Tato metoda výrazně zrychluje kryptoanalýzu, protože na disku je třeba vyhledávat pouze rozlišitelné body. Z dané zprávy C se spočítá Y 1 = R(C). Odtud se dále vytváří řetěz f(y 1 ), f 2 (Y 1 ), f 3 (Y 1 ),..., f k (Y 1 ) kde f k (Y 1 ) je rozlišitelný bod. Tento bod se nyní vyhledá v tabulce koncových bodů. Pokud t je průměrná délka řetězce, potom tento postup vyžaduje t-krát méně vyhledání mezi koncovými body než původní Hellmanova metoda. Když je bod nalezen, zrekonstruuje se příslušný řetěz a zkontroluje se, jestli obsahuje hledaný klíč K. Ve většině případů řetěz tento klíč neobsahuje. To je způsobeno použitím funkce R a slučováním řetězů. V případě, že řetěz klíč K neobsahuje, je potřeba postup zopakovat s jinou volbou funkce R. Tento postup však stále spotřebuje značné množstvím času na detekci falešných poplachů. Můžeme zavést detekci falešných poplachů [6]. Definujeme množinu pozic α i v řetězci jako kontrolní body. Zvolíme si nějakou funkci G na těchto bodech. Pro každý řetězec j a kontrolní bod α i spočítáme hodnoty G(X j,αi ), které uložíme spolu s příslušným řetězcem. Když počítáme hodnoty řetězce Y 1, Y 2,..., Y s, musíme ukládat odpovídající hodnoty G(Y αi +s t). V případě, že Y s je rozlišitelný bod, který máme uložený v tabulce, provedeme test, zda se jedná o falešný poplach. Porovnáme všechny hodnoty funkce G na kontrolních bodech v řetězci získaném z Y 1 s hodnotami uloženými v tabulce u nalezeného kontrolního bodu. Pokud se tyto hodnoty liší v alespoň jednom případě, víme, že se jedná o falešný poplach. Jestliže jsou shodné, nejsme 7

2. Techniky time-memory tradeoff kryptoanalýzy schopní rozlišit, jestli se jedná o falešný poplach, a musíme provést kontrolu stejně jako v případě bez tohoto detekčního mechanismu. Funkce G by měla být snadno vypočitatelná a její výsledek by měl zabrat málo prostoru. 2.1.3 Rainbow tables Dalším vylepšením Hellmanova přístupu jsou rainbow tables [12]. Tyto tabulky jsou vytvářeny podobnou metodou jako původní varianta, pouze pro každý sloupec je použita unikátní redukční funkce R i. f i (K) = R i [E K (P 0 )] 1 i < t (2.7) X i,j = f j (X i,j 1 ) 1 i m 1 j t (2.8) Vyhledání klíče v tímto způsobem vytvořené tabulce se provádí podobně jako u klasických tabulek. Nejprve spočítáme R t 1 (C) a výsledek hledáme v posledním sloupci tabulky. Pokud jej nalezneme, zrekonstruujeme příslušný řádek a zkusíme v něm najít hledaný klíč. Pokud zjistíme že se jedná o falešný poplach nebo v posledním sloupci hledanou hodnotu nenajdeme, pokračujeme výpočtem (f t 1 R t 2 )(C), (f t 1 f t 2 R t 3 )(C) a tímto způsobem dále dokud nenajdeme příslušný klíč nebo dokud tabulku neprojdeme celou. V původní variantě pokud se ve dvou různých řetězcích objevila stejná hodnota, tyto řetězce se sloučily. V rainbow tabulce se řetězce sloučí pouze v případě že se ve dvou řetězcích objeví stejná hodnota na stejných pozicích. Pokud se objeví na různých pozicích, nedojde ke sloučení protože ve výpočtu řetězce se pokračuje u každé z těchto hodnot jinou funkcí. Pravděpodobnost úspěchu rainbow tabulky o m řádcích a t sloupcích je [12] P s = 1 Π t i=1(1 m i N ) (2.9) m 1 = m m n+1 = N(1 exp mn N ) Můžeme porovnat pravděpodobnost úspěchu rainbow tabulky a původní varianty. Rainbow tabulka o rozměrech mt t má přibližně stejnou pravděpodobnost úspěchu jako t klasických tabulek o rozměrech m t. Obě tabulky pokrývají mt 2 klíčů rovnoměrně vygenerovaných t různými redukčními funkcemi. 8

2.2 Proudové šifry 2. Techniky time-memory tradeoff kryptoanalýzy Time-memory tradeoff analýza proudových šifer má určité odlišnosti od blokových šifer. U blokové šifry potřebujeme jeden blok nešifrovaných dat a odpovídající zašifrovaný blok, ale znalost většího množství dat nám nijak neusnadní analýzu. U proudových šifer nám větší množství zachycených dat analýzu zjednoduší. V této kapitole nejprve uvedu model proudové šifry, se kterým se bude pracovat v následujících útocích. Dále popíšu způsoby time-memory tradeoff útoků na proudové šifry se zdůrazněním odlišností od blokových šifer. 2.2.1 Model proudové šifry V následujícím textu uvažujme následující model proudové šifry proudová šifra je systém stavů s přechodovou funkcí mezi nimi. V každém stavu tento systém vyprodukuje jeden výstupní pseudonáhodný bit a přejde do následujícího stavu. Pro každou šifru existuje funkce z množiny všech klíčů dané šifry do množiny stavů tohoto systému. Touto funkcí je určen iniciální stav, ze kterého jsou následně generovány pseudonáhodné bity pro samotné šifrování. V dalším textu bude pojem klíč označovat řetězec vygenerovaných pseudonáhodných bitů, nikoli původní klíč šifry použitý k výběru počátečního stavu. Šifrování následně probíhá pomocí operace xor, aplikované na nešifrovaný text a vygenerovaný klíč. Tady vidíme, že požadavky na provedení tohoto útoku jsou mírnější než u blokových šifer, jedná se pouze o known plaintext attack. U blokových šifer potřebujeme mít dvojici (nešifrovaná zpráva, šifrovaná zpráva) pro námi vybraný blok dat (chosen plaintext attack). Naším úkolem při kryptoanalýze je pro daný řetězec bitů klíče určit stav, ze kterého byl tento řetězec vygenerovaný. Není nutné počítat originální klíč, který byl použitý k výběru tohoto stavu. Zároveň není nutné určit přímo počáteční stav, stačí zjistit libovolný stav, přes který se během generování prošlo. Toto zpravidla umožní zjistit i iniciální stav, i když přechod k předchozímu stavu nemusí být deterministický. 2.2.2 Babbageova metoda Nejjednodušší metoda je opět prohledávání hrubou silou, kdy je potřeba alespoň n bitů klíče. Nechť 2 n je počet stavů našeho systému. Pro každý možný stav můžeme vygenerovat n bitů klíče a porovnat je s naším klíčem. Počet všech stavů je ovšem 2 n, takže tento útok by trval velmi dlouho. Vylepšený útok na proudové šifry popsali Steve Babbage [13] a nezávisle na 9

2. Techniky time-memory tradeoff kryptoanalýzy něm J. D. Golic [7]. Tento útok budu v textu dále označovat BG. Původní Hellmanova metoda nenabízí žádné přímočaré vylepšení parametrů útoku, pokud budeme mít k dispozici větší množství dat. Předpokládejme, že získáme 2 m + n 1 vygenerovaných bitů klíče, tedy máme D = 2 m překrývajících se podposloupností délky n. Také vybereme 2 r navzájem různých stavů šifry, kde z každého z nich vygenerujeme n bitovou posloupnost. Pokud najdeme nějakou posloupnost v obou seznamech, potom jsme s vysokou pravděpodobností našli hledaný stav. Aby tato shoda byla pravděpodobná, potřebujeme aby m + r n. Nalezení shody v takovém seznamu je mnohem rychlejší než 2 n kroků. K tomuto útoku je možné přistoupit dvěma různými způsoby. První z nich je vlastně pouze variantou útoku hrubou silou, kde nemusíme hledat jeden konkrétní klíč, ale stačí nalézt alespoň jeden klíč z dané množiny. Nejprve vytvoříme seznam 2 m překrývajících se posloupností ze zachycených dat, který následně seřadíme. Během samotného útoku následně generujeme náhodně stavy, ze kterých vypočítáme n bitovou posloupnost klíče. Tuto posloupnost potom hledáme v našem seznamu. Očekáváme, že uspějeme po 2 n m pokusech. Druhý typ útoku je analogický prvnímu, pouze využívá fázi předpočítání dat. Jedná se tedy o time-memory tradeoff útok. V offline fázi nejprve vygenerujeme 2 r stavů a odpovídajících výstupních n bitových klíčů. Tento seznam následně seřadíme. Tato fáze může být provedena pouze jednou a následně použita při všech útocích na danou šifru. Nyní jsou z našeho zachyceného klíče postupně vybírány n bitové posloupnosti, z nichž každou se pokusíme najít v předpočítaném seznamu. Očekávaný počet podposloupností, které budeme potřebovat k nalezení požadované shody, je 2 n r. Tento útok urychluje prohledání všech možných stavů kryptosystému, nikoli všech možných počátečních stavů. V případě, že počet všech stavů je výrazně větší než počet počátečních stavů (počet všech možných klíčů), potom tento útok nepřinese žádné zlepšení. 2.3 Biryukova a Shamirova metoda Vylepšený útok na proudové šifry popsali Biryukov a Shamir [3]. Tuto variantu budu dále v textu značit BS. Jejich myšlenka byla použít kombinaci Hellmanova útoku na blokové šifry a Babbageova útoku na proudové šifry. Jejich útok je založený na vytvoření tabulek pokrývajících možné výstupy proudové šifry. Předpokládejme, že máme k dispozici D překrývajících se výstupních sekvencí. Našim cílem je najít počáteční stav odpovídající 10

2. Techniky time-memory tradeoff kryptoanalýzy alespoň jedné z těchto sekvencí. Je možné redukovat množství pokrytých klíčů v předpočítaných tabulkách z N na N D se zachováním vysoké pravděpodobnosti nalezení alespoň jednoho klíče. Tuto úpravu je možné provést dvěma způsoby zmenšením počtu řádků v jednotlivých tabulkách nebo snížením počtu tabulek. Autoři tohoto postupu vybrali druhou možnost a použili pouze t D tabulek. Protože potřebujeme pokrýt pouze N D různých klíčů, trvání fáze předpočítání se zredukuje na P = N D oproti původní Hellmanově variantě P = N. Každá tabulka potřebuje velikost paměti m, ale celkové množství paměti se zredukuje na M = tm D Během online fáze útoku potřebujeme pro každý z D klíčů vypočítat funkci f i t-krát. Máme t D funkcí f i, takže dostaneme že potřebný čas je T = t 2. Pomocí rovnosti mt 2 = N je možné odvodit výsledné parametry útoku MT 2 D 2 = N 2, kde D 2 T N. 2.3.1 Možnost použití u blokových šifer Za určitých podmínek je možné tuto myšlenku použít i pro útoky na blokové šifry [2]. Předpokládejme, že máme D různých dvojic P, E K (P ) pro D navzájem různých klíčů a chceme najít klíč odpovídající alespoň jedné takové dvojici. Tento Time-Memory-Key tradeoff je principiálně identický s předchozím Time-Memory-Data tradeoff pro proudové šifry. 2.4 Rozlišitelné body pro proudové šifry Metodu rozlišitelných bodů můžeme aplikovat i na proudové šifry [3]. Uvažujme nejdříve Babbageův útok 2. typu.zatímco v případě Hellmanova útoku se rozlišitelné body s určitou pravděpodobností na počítaném řetězci vždy objeví, v tomto případě pracujeme s řetězci délky jedna. Toto nás nutí generovat stavy, zkoušet jestli výstup bude mít vlastnost rozlišitelného bodu a nevyhovující stavy zahazovat. Označme si R podíl rozlišitelných bodů mezi všemi stavy. Potom fáze předpočítání je prodloužena o pomalé hledání rozlišitelných bodů a tedy je P = M/R. Naopak čas online fáze útoku se zkrátí na T = DR, protože je potřeba vyhledávat pouze rozlišitelné body. Aby byla zachována rozumná pravděpodobnost úspěchu, musí být splněna rovnost MDR = NR, to znamená MD = T P pro všechny možné hodnoty R [3]. Toto umožní nezávislou volbu parametrů útoku tak, že T P = N a MD = N. Tato metoda nemá žádný asymptotický vliv na Biryukovu a Shamirovu metodu útoku. Pouze redukuje počet přístupů na disk z t 2 na t, což ovšem v praxi znamená velké zlepšení, protože přístup na disk je velmi pomalá 11

2. Techniky time-memory tradeoff kryptoanalýzy operace. Pro některé proudové šifry je možné určit stavy, produkující výstup začínající k nulovými bity [3, 4]. Označme si číslo R = 1 jako odolnost proti 2 k vzorkování (Sampling resistence), kde k znamená délku prefixu výstupního řetězce, pro kterou je možné určit všechny stavy produkující takový výstup. To je téměř vždy možné pro k = 1, ale pro rostoucí hodnotu k se zvyšuje obtížnost nalezení takových stavů. Například pro šifru A5/1 je možné vyjmenovat všechny stavy začínající až 16 nulovými bity. Tato vlastnost má velký dopad na Babbageův útok, protože je možné zkrátit dobu útoku bez nutnosti prodloužení fáze předpočítání dat. Zároveň umožňuje větší výběr parametrů u vylepšeného útoku BS [3]. Předpokládejme, že máme proudovou šifru mající 2 n = N stavů s odolností proti vzorkování R = 1. Potom můžeme označit plné jméno stavu n 2 k bitový řetězec definující stav, výstupní jméno stavu n bitový řetězec produkovaný tímto stavem. Každému stavu produkujícímu výstup začínající k nulami můžeme přiřadit n k bitové krátké jméno (sloužící k efektivnímu popisu speciálních stavů) a odpovídající krátké výstupní jméno (výstupní jméno bez prvních k nulových bitů). Pro každé krátké jméno můžeme snadno vypočítat krátké výstupní jméno. Nyní můžeme vylepšený útok realizovat na menším prostoru velikosti 2 n k krátkých jmen a krátkých výstupních jmen. Předpokládáme, že DR > 1, aby se v zachycených datech vyskytl alespoň jeden stav s k nulovými bity. V opačném případě musíme změnit hodnotu k. V novém prostoru máme nyní místo N pouze NR stavů a místo D máme k dispozici DR zachycených klíčů. Dostaneme MT 2 (DR) 2 = (NR) 2, což po vykrácení R 2 odpovídá rovnici původního útoku. Upravený útok ale má dvě výhody. První z nich je, že v původním útoku máme omezení D 2 T, což může být pro velké hodnoty D velmi omezující. V tomto případě dostaneme (DR) 2 T, kde (DR) 2 může být volbou k zmenšeno až na 1, pokud je odolnost proti vzorkování dané šifry dostatečně nízká. Druhou výhodou je, že počet přístupů na disk je redukován z t na tr, protože pouze DR rozlišitelných bodů musí být vyhledáno v každé z t D tabulek. 2.4.1 Popis šifry A5/1 a jejího vzorkování A5/1 [9] je proudová šifra používaná v GSM sítích vyvinutá v roce 1987. Tato šifra má ještě slabší variantu A5/2, která je snadno prolomitelná se znalostí jen malého množství vygenerovaných dat během O(2 16 ) kroků [4]. A5/1 používá klíč velikosti 64 bitů, který určuje jeden vnitřní stav šifry 12

2. Techniky time-memory tradeoff kryptoanalýzy registr délka posunovací bity obnovovací bity R1 19 8 13, 16, 17, 18 R2 22 10 20, 21 R3 23 10 7, 20, 21, 22 Tabulka 2.1: Přehled registrů, bity jsou číslovány od 0 jako iniciální. Vnitřní stav šifry je určen třemi posuvnými registry (R1, R2 a R3) o velikostech 19, 22 a 23 bitů (v tomto pořadí). Při přechodu do následujícího stavu se posunou jen některé registry. Zda se daný registr posune závisí na hodnotách posunovacích (clocking) bitů. Pozice těchto bitů jsou popsány v tabulce 2.1. Funkce majority(b1, b2, b3) určuje, které registry se při následujícím přechodu posunou. Hodnoty b1, b2 a b3 jsou postupně posunovací bity registrů R1, R2 a R3. { 0 Pokud alespoň 2 z hodnot b1 3 jsou 0 majority(b1, b2, b3) = 1 Pokud alespoň 2 z hodnot b1 3 jsou 1 (2.10) Registr Ri se posune právě když posunovací bit bi = majority(b1, b2, b3). V případě, že se registr posune, bude hodnota nejméně významného bitu rovna výsledku aplikace funkce xor na obnovovací bity posunovaného registru. Výstupní bit je hodnota funkce xor aplikovaná na nejvýznamnější bit každého registru. Pro šifru A5/1 je ovšem snadné najít všechny stavy produkující výstup začínající daným prefixem α délky k. Protože posunovací bity jsou zvolené uprostřed registrů, můžeme volit nezávisle bity produkující výstup a posunovací bity. Stavy produkující výstupní řetězec s prefixem α získáme pomocí tohoto algoritmu [4]: 1. Nastavíme 19 bitů registru R1 a bity 0-10 registrů R2 a R3 libovolně 2. V takovém částečném stavu víme, které bity se v příštích cyklech objeví na pozici ovlivňující jejich posun, a tedy také víme, které bity se objeví na nejlevější pozici produkující výstup, který můžeme ovlivnit 3. Při každém přechodu do dalšího stavu se posunou vždy alespoň dva registry, takže se vždy posune alespoň jeden z registrů R2, R3. Na pozici nejvýznamnějšího bitu se tedy posune jeden dosud nespecifikovaný bit, který můžeme vybrat takovým způsobem abychom dostali požadovaný výstup. V případě, že se posune pouze jeden z registrů 13

2. Techniky time-memory tradeoff kryptoanalýzy R2 nebo R3, máme jednoznačně dáno, jakým způsobem tento nový bit vybrat. Přibližně v polovině případů se posunou oba registry a potom můžeme volit ze dvou možností volby těchto bitů. V tomto procesu můžeme pokračovat, dokud máme v registru nějaký nespecifikovaný bit. Protože každý registr se posune průměrně ve 3 4 případů, můžeme tímto procesem najít stav generující požadovaný k-bitový prefix α. Touto metodou vždycky vygenerujeme stav produkující prefix α a jsme schopní vygenerovat všechny takové stavy. Složitost získání jednoho takového stavu s daným prefixem délky k je k posunutí registrů a určením nespecifikovaného bitu při každém posunu. To znamená, že je lineární vůči délce určeného prefixu a počtu generovaných stavů. Díky této vlastnosti můžeme v tabulce obsahující dvojice (stav pseudonáhodný výstup) ušetřit určité množství místa na disku. Celý stav A5/1 má velikost 64 bitů. My však pro uložení stavu potřebujeme pouze 41 bitů částečného stavu vybraného v kroku 1 předchozího algoritmu plus 7 bitů potřebných při volbě hodnoty registru v kroku 3. Dále můžeme zkrátit délku ukládaného prefixu o k bitů, který je pro všechny prefixy stejný. Tímto ušetříme místo na disku, které můžeme využít pro uložení většího množství dvojic (stav, výstup). 2.5 Útok na proudové šifry používající inicializační vektory Dosud zmíněné útoky pracovaly s funkcí přiřazující vnitřnímu stavu šifry její výstup. Kromě třídy útoků na proudové šifry, které se snaží k výstupnímu prefixu šifry najít odpovídající vnitřní stav, také existuje ještě druhá třída TMTO útoků na proudové šifry. To jsou útoky které nepracují s přímo s vnitřními stavy šifry, ale s klíči použitými k inicializaci těchto stavů. Nevýhoda této druhé třídy útoků je, že není možné využít většího množství zachycených dat podobně jako u blokových šifer. V této části budeme hovořit o útocích druhého typu na šifry používající veřejně známý inicializační vektor. O. Dunkelman představil útok na tyto šifry používající inicializační vektory [11]. Snaží se tedy invertovat funkci přiřazující klíči a inicializačnímu vektoru výstup šifry. Jeden typ přístupu k tomuto problému je považovat inicializační vektor za součást tajného klíče. Tento přístup ovšem nevyužívá faktu, že IV není tajný. Dunkelman navrhl pokusit se invertovat jednu z funkcí přiřazující klíči výstup šifry pro pevně zvolený inicializační vektor. Označme si V počet možných inicializačních vektorů a K počet mož- 14

2. Techniky time-memory tradeoff kryptoanalýzy ných klíčů a předpokládejme, že D V. V offline fázi nejprve zvolíme V D inicializačních vektorů a pro každý provedeme potřebné výpočty v závislosti na zvolené metodě TMTO útoku (Hellmanovy tabulky nebo rainbow tabulky). V online fázi útoku během odposlechu dat počkáme, dokud nezachytíme přenos používající jeden z námi vybraných inicializačních vektorů. Pro tento zachycený výstup proudové šifry se následně pokusíme pomocí předpočítaných tabulek najít odpovídající klíč. Časová složitost takto upraveného útoku je T = t 2, paměťová složitost M = mtv D. Celkem dostaneme T M 2 D 2 = (KV ) 2. Tento tradeoff je stejný jako varianta považující inicializační vektor za tajný uvedená na začátku této části. Oproti ní má však několik výhod. Protože vyhledávání klíče pro pevně zvolený IV se snaží najít odpovídající klíč k právě jednomu výstupnímu prefixu (nejedná se o vyhledání alespoň jednoho z množiny klíčů), nejsme v tomto případě omezeni nerovností D 2 T a proto můžeme využít mnohem větší množství dostupných dat než v předešlém případě. Zároveň je možné ukázat, že tento útok je rychlejší než prohledávání hrubou silou, pokud délka inicializačního vektoru je nejvýše 1, 5 násobek délky klíče. Další výhodou je menší paměťová náročnost. Pro uložení dvojice (SP, EP) je potřeba 2 log 2 K bitů, zatímco na předchozí případ bylo potřeba 2 log 2 K + log 2 V bitů. Tento přístup má zároveň i jednu nevýhodu a tou je nižší pravděpodobnost úspěchu. Pro úspěch je nutné zachytit zprávu šifrovanou s použitím některého vybraného inicializačního vektoru a zároveň musí být použitý klíč pokrytý předpočítanou tabulkou. Ve většině protokolů nejsou inicializační vektory voleny náhodně. Většinou je náhodně zvolený pouze první vektor a ten je následně inkrementován. Znalost o volbě inicializačních vektorů můžeme využít při volbě inicializačních vektorů v offline fázi. Proto ve většině aplikací pravděpodobnost úspěchu útoku není nižší než v předešlém případě. Tato metoda je použitelná i v případě, že máme k dispozici data vyprodukovaná pomocí několika různých klíčů a chceme určit alespoň jeden z nich. 2.6 Metody efektivního uložení předpočítaných tabulek Ve všech typech time-memory tradeoff útoků je nutné ukládat předpočítané tabulky. Tyto tabulky obsahují velké množství dat. Velikost disků, které jsou k dispozici, klade omezení na volbu parametrů útoku, které mohou znamenat neproveditelnost útoku v praxi. Proto je důležité navrhnout efektivní způsob jejich uložení, který umožní uložení většího množství dat při stejné kapacitě 15

2. Techniky time-memory tradeoff kryptoanalýzy disků. Úkolem je co nejefektivnější uložení seznamu dvojic (počáteční bod, koncový bod). Klasické Hellmanovy tabulky vyžadují uložit oba body vždy celé. Pro některé varianty time-memory útoků je ovšem dostatečné ukládat pouze části těchto bodů. V této části přiblížím některé metody, jakým způsobem je možné tabulky ukládat efektivněji. 2.6.1 Rozlišitelné body a počáteční stavy V případě použití rozlišitelného bodu s nulovými posledními k bity není nutné tyto nuly ukládat. Tímto způsobem je možné ušetřit k bitů pro každou dvojici v tabulce. Vzhledem k velkému množství dvojic v tabulce je i pro malé hodnoty k možné tímto způsobem ušetřit velké množství místa na disku, které je možné využít pro uložení většího počtu dvojic. Stejnou techniku jako u rozlišitelných bodů je v některých případech možné použít i u počátečních bodů. V případě sekvenčního výběru počátečních bodů není vždy nutné ukládat je celé. Pokud vytvoříme tabulku obsahující 2 m dvojic, kde velikost počátečního i koncového bodu je n, můžeme počáteční body ukládat s použitím m bitů paměti. Stačí, když uložíme první vygenerovaný počáteční bod a dále v tabulce ukládáme pouze inkrement daného počátečního bodu vzhledem k tomuto prvnímu bodu. Tímto postupem tedy můžeme ušetřit n m bitů. 2.6.2 Proudové šifry s nízkou odolností proti vzorkování Také můžeme ušetřit místo na disku při útoku na proudové šifry s nízkou odolností proti vzorkování s použitím BS útoku, jestliže útok realizujeme na zmenšeném prostoru krátkých jmen a krátkých výstupních jmen. Například pro útok A5/1 s R = 1 znamená, že pro uložení jedné dvojice SP, EP potřebujeme 96 bitů místo plných 128 bitů. Díky tomu můžeme uložit o třetinu 2 16 více dvojic při stejné velikosti disku. 16

3 Kolize v Hellmanových tabulkách s rozlišitelnými body V této kapitole nejprve odvodím teoretické vzorce pro odhad počtu navzájem různých rozlišitelných bodů v Hellmanově tabulce s rozlišitelnými body. V další části této kapitoly popíšu detaily výpočtů tabulek pro algoritmy, kterým jsem se v této práci věnoval a porovnám vlastnosti získaných tabulek s hodnotami získanými podle odvozených vzorců. Tyto výpočty byly velmi časově náročné, vytvoření všech tabulek trvalo zhruba tři měsíce. Pro výpočet tabulek s šifrou A5/1 jsem musel tuto šifru implementovat. Jediná dostupná implementace je demonstrační příklad, jak tento algoritmus funguje, a je velmi neefektivní. V závěru této kapitoly popíšu útok pomocí těchto tabulek na čtyřicetibitovou šifru RC4 a uvedu dosaženou úspěšnost tohoto útoku. 3.1 Pravděpodobnost a očekávaný počet kolizí V této kapitole se pokusím odhadnout očekávaný počet dosažených navzájem různých rozlišitelných bodů v tabulce. Velkou výhodou použití metody s rozlišitelnými body je možnost jednoduše detekovat kolize. V žádném řetězci končícím rozlišitelným bodem se nemohou vyskytnout dva stejné body. Pokud by se v některém z nich objevily, potom vznikne cyklus, protože tento opakující se bod se bude periodicky objevovat znovu a řetězec nikdy nedosáhne rozlišitelného bodu. Kolize dvou bodů z různých řetězců způsobí, že oba řetězce budou končit stejným rozlišitelným bodem. Protože výslednou tabulku je potřeba před online fází útoku seřadit podle koncových bodů, je snadné nalézt řetězce s duplicitními rozlišitelnými body a ponechat vždy pouze jeden z nich. Proto konečná tabulka po vynechání duplicitních rozlišitelných bodů neobsahuje žádnou kolizi. Zbývá odhadnout, kolik duplicitních řádků se objeví během předpočítávání tabulek, tedy o jakou část předpočítaných dat přijdeme. Předpokládejme, že máme prostor klíčů velikosti N a rozlišitelný bod má posledních M bitů nulových. Množinu všech rozlišitelných bodů označíme DP. Dále označme počet řádků vypočítané tabulky m. Budeme předpokládat, že přechodová funkce f mezi jednotlivými body řetězce je náhodná s uniformním rozložením mezi všechny možné klíče. Při odhadu vyjdu ze vzorce pro klasické Hellmannovy tabulky který upravím pro tabulky s DP, protože potřebujeme spočítat řetězce končící v navzájem různých rozlišitelných bodech. 17

3. Kolize v Hellmanových tabulkách s rozlišitelnými body Definujeme náhodnou proměnnou L modelující počet ne rozlišitelných bodů před dosažením rozlišitelného bodu na řádku vzniklém z počátečního bodu SP. Předpokládejme, že žádný počáteční bod nemá vlastnost rozlišitelného bodu. L = k f k (SP ) DP j N, j < k : f j (SP i ) / DP (3.1) Tato proměnná má geometrické rozložení pravděpodobnosti, takže P (L = k) = ( 1 1 ) k 1 1 (3.2) 2 M 2 M Předpokládejme, že počítáme i-tý řetězec. Definujeme náhodnou proměnnou M i. M i = 1 právě když se i-tý řetězec nesloučí s žádným předchozím, 0 jinak. Označme si množinu A i množinu všech klíčů bez vlastnosti rozlišitelného bodu na prvních i řádcích. Dále označme X i,j j-tý klíč na řádku i a NEW (X i,j ) je událost že klíč X i,j / A i 1. Vyjádříme pravděpodobnost, že M i = 1. P (M i = 1) = E(P (NEW (X i,1 ), NEW (X i,2 ),..., NEW (X i,l ))) = E(P (NEW (X i,1 ))P (NEW (X i,2 ) NEW (X i,1 ))...... P (NEW (X i, L) NEW (X i, L 1)... NEW (X i, 1))) E(P (NEW (X i,1 ))P (NEW (X i,2 ))... P (NEW (X i,l ))) = ( L ) ( L ) N A i 1 E P (NEW (X i,j )) = E = N j=1 j=1 ( ) N Ai k P (L = k) = N k=1 ( 1 1 ) k 1 ( ) 1 N 2 M 2 M Ai 1 k = N k=1 N A i 1 2 M A i 1 + N A i 1 (3.3) Definujeme si náhodnou proměnnou M i + = i j=1 M j, označující počet nesloučených řádků po vygenerování i řádků. Nyní musíme odhadnout velikost množiny A i. Zřejmě A 0 = 0. K odhadu A i pro i > 0 můžeme přistoupit několika způsoby. V nejjednodušší variantě 18

3. Kolize v Hellmanových tabulkách s rozlišitelnými body můžeme předpokládat, že na prvních i řádcích nejsou žádné kolize a tedy A i = E(L) i. E(M + 1 ) = 1 ( i ) E(M i + ) = E M j = j=1 i i E(M j ) = j=1 j=1 i j=1 N A j 1 2 M A j 1 + N A j 1. = N je(l) 2 M je(l) + N je(l) = i j=1 N 2 M j 2 M 2 M j + N 2 M j = i j=1 N 2 M j 4 M j 2 M j + N (3.4) Nepřesnost tohoto odhadu bude růst s počtem kolizí které nastanou kvůli předpokladu neexistence kolizí na prvních i řádcích. Druhou variantou je, že místo vygenerovaného počtu řádků budeme počítat s odhadem počtu nesloučených řádků na prvních i řádcích. Počet klíčů na prvních k řádcích můžeme odhadnout jako střední hodnotu počtu nesloučených řádků krát střední hodnotu počtu klíčů v řádku. Jedná se o dolní odhad počtu pokrytých klíčů. Předpokládejme, že řetězce o délkách l 1... l k kolidují do stejného rozlišitelného bodu. Potom ovšem pravděpodobně pokrývají alespoň max(l 1,..., l k ) různých klíčů, což je více než E(L). Vyjádříme si střední 19

3. Kolize v Hellmanových tabulkách s rozlišitelnými body hodnotu proměnné M + i E(M + 1 ) = 1 ( i ) E(M i + ) = E M j = j=1 i i N A j 1. E(M j ) = 2 j=1 j=1 M = A j 1 + N A j 1 i N E(L)E(M j 1 + ) 2 M E(L)E(M j 1 + ) + N E(L)E(M j 1 + ) = j=1 i j=1 N 2 M E(M + j 1 ) 2 M 2 M E(M + j 1 ) + N 2M E(M + j 1 ) = i j=1 N 2 M E(M + j 1 ) 4 M E(M + j 1 ) 2M E(M + j 1 ) + N (3.5) V obou případech dostáváme rekurzivní vzorec pro odhad počtu řádků, které se nesloučí před dosažením rozlišitelného bodu. Nyní odhadneme počet nesloučených řádků po dosažení rozlišitelného bodu. Pokud počet všech klíčů je N a M udává počet nulových bitů rozlišitelného bodu, počet rozlišitelných bodů je D = N. Toto je už jenom 2 M speciální případ předchozího modelu, kdy délka řetězce je vždy konstantní a má velikost 1. Definujeme si náhodnou proměnnou N q, která je rovna 1 právě když i-tý rozlišitelný bod se dosud na předchozích řádcích nevyskytl, 0 jinak. Zároveň definujeme náhodnou proměnnou N + q = q j=1 N i, reprezentující počet navzájem různých rozlišitelných bodů na prvních q řádcích. q 1 j=1 q 1 P (N q = 1) = j=1 P (N + q 1 = j)d D 1 D P (N 1 = 1) = 1 P (N + q 1 = j)d j D = q 1 j=1 P (N + q 1 = j)j = 1 E(N + q 1 ) D (3.6) 20

3. Kolize v Hellmanových tabulkách s rozlišitelnými body Nyní pomocí tohoto vztahu odvodíme střední hodnotu proměnných N + q. q 1 j=1 E(N 1 + ) = 1 q q E(N q + ) = E( N j ) = E(N j ) = j=1 j=1 E(N j ) + E(N q ) = E(N + q 1 ) + P (N q = 1) = E(N + q 1 ) + 1 E(N + q 1 ) D = D E(N + q 1 ) E(N + q 1 ) D + 1 = E(N q 1 + 1) )(D D + 1 = q 1 ( D ) 1 j = j=0 D ( D D ) 1 q D D (3.7) Za q nyní dosadíme počet nesloučených řádků před dosažením rozlišitelného bodu. Dostaneme konečný vzorec pro odhad U počtu unikátních rozlišitelných bodů v tabulce. U = N ( N 2 M 1 2 M N 2 M ) E(M + m ) N 2 M (3.8) Použití této metody ovšem zcela neodpovídá metodě výpočtu tabulek v praxi. Na začátku jsme použili předpoklad, že délka každého řetězce odpovídá náhodné proměnné s geometrickým rozložením. Při výpočtu ovšem může docházet ke tvorbě cyklů, které způsobí, že není možné dosáhnout rozlišitelného bodu. Používám metodu detekce cyklů [8], kdy jsou řetězce výrazně delší, než je střední hodnota jejich délky, zahazovány. Toto opatření ovšem narušuje předpoklad geometrického rozložení délky řetězců. Uvedené vzorce můžeme modifikovat pro použití s detekcí cyklů definováním náhodné proměnné L s pravděpodobnostní distribucí odpovídající zkráceným délkám řetězců. Tento vzorec je ovšem výrazně složitější než odhad 3.5 a pro výpočet odhadu počtu kolizí je nepraktický. Jeho odvození je uvedeno v příloze A. 21

3. Kolize v Hellmanových tabulkách s rozlišitelnými body 3.2 Metody výpočtu tabulek Součástí této práce je výpočet Hellmanových tabulek s rozlišitelnými body pro několik šifrovacích algoritmů a analýza počtu kolizí. Tyto tabulky jsem počítal pro následující šifrovací algoritmy: DES s fixní nešifrovanou zprávou DES s fixním klíčem A5/1 A5/1 s nulovým prvním registrem A5/1 s nulovým druhým registrem A5/1 s nulovým třetím registrem RC4 s 64 bitovým klíčem RC4 se 40 bitovým klíčem KASUMI Nyní popíšu detaily výpočtů pro jednotlivé šifrovací algoritmy. 3.2.1 DES s fixní nešifrovanou zprávou Při práci s šifrou DES jsem použil implementaci z OpenSSL [1]. Při výpočtu tabulek DES s fixní nešifrovanou zprávou jsem použil rozlišovací bod s nulovými posledními dvaceti bity. Jako nešifrovanou zprávu P jsem zvolil nulový blok. Funkce f (2.1) je definována následovně: f(x) = R(DES X (P ))) (3.9) kde funkce R je funkce použitá v knihovně OpenSSL [1] pro přiřazení klíče do struktury DES_key_schedule. Tato funkce pracuje s 64 bitovým blokem dat a z každého bajtu vezme 7 nejvýznamnějších bitů. Počáteční body jsem generoval sekvenčně každé samostatně počítající vlákno mělo unikátní hodnotu bajtu 0 a sekvenčně inkrementovaly hodnoty ostatních bajtů počínaje bajtem 7 jako nejméně významným. Protože řetězce generované tímto způsobem obsahovaly cykly, zavedl jsem prevenci cyklů [5] zahazováním řetězců delších než čtyřnásobek očekávané délky. 22

3. Kolize v Hellmanových tabulkách s rozlišitelnými body 3.2.2 DES s fixním klíčem Při výpočtu tabulek DES s fixním klíčem jsem použil rozlišovací bod s nulovými posledními dvaceti bity. Jako fixní klíč K byl použitý blok osmi bajtů 0x3B. Funkce f (2.1) je definována následovně: f(x) = DES R(K) (X)) (3.10) Kde funkce R je stejná jako v případě DES s fixní nešifrovanou zprávou. Počáteční body jsem opět generoval sekvenčně každé samostatně počítající vlákno mělo unikátní hodnotu bajtu 0 a sekvenčně inkrementovaly hodnoty ostatních bajtů počínaje bajtem 7 jako nejméně významným. Během tohoto výpočtu se neobjevily žádné cykly. 3.2.3 A5/1 s plnou délkou klíče Tento algoritmus budu nadále v textu označovat jako A5/1 R123. Při výpočtech s šifrou A5/1 jsem použil efektivnější implementaci popsanou ve článku Biryukova, Shamira a Wagnera [4], jejíž podrobnější popis je uvedený v sekci 4.1. Při práci s touto šifrou jsem nepracoval s přiřazováním stavů danému klíči, ale přímo se stavy. Díky tomuto zjednodušení jsem ušetřil výpočetní výkon při předpočítávání, který by zabralo hledání stavů, který se má přiřadit danému klíči. Nalezení stavu generujícího daný výstup je dostatečné nalezení klíče, který iniciuje stav šifry na danou hodnotu, popisuje [4]. Označme A51 64 (S) funkci, jejíž výstup je prvních 64 bitů vyprodukovaných A5/1 z iniciálního stavu S. Potom funkce f (2.1) je definována následovně: f(x) = A51 64 (X) (3.11) Při práci s A5/1 jsem použil rozlišovací bod s nulovými posledními 16 bity, protože i při použití efektivnější implementace než je uvedená v [9], je stále výrazně pomalejší než výpočet DES. Počáteční body jsem u šifry A5/1 generoval náhodně, protože sekvenční generování by mohlo produkovat podobné stavy. Při sekvenčním generování se nově přidaný stav často liší od předchozího pouze v jednom bitu. Vždycky pouze určité bity každého registru mají vliv na výstupní bit a posuny registrů. Pokud by změněný bit nebyl na žádné z těchto pozic, bude výstup stejný jako u předchozího stavu. Tento výstup by se začal lišit až v okamžiku, kdy se změněný bit při posunech registrů objeví na posledním (výstupním) místě v registru nebo na místě posunovacích bitů. Také se tento změněný bit může objevit na místě obnovovacího bitu. Toto 23

3. Kolize v Hellmanových tabulkách s rozlišitelnými body vytvoří další změnu v hodnotě bitu v registru, která by generovala další rozdíly v obsahu registru oproti předchozímu stavu. Protože řetězce generované tímto způsobem obsahovaly cykly, zavedl jsem prevenci cyklů [5] zahazováním řetězců delších než čtyřnásobek očekávané délky. 3.2.4 A5/1 s nulovým prvním registrem Tento algoritmus budu nadále v textu označovat jako A5/1 R23. Počítání tabulek s prvním nulovým registrem je podobné výpočtu A5/1 se všemi stavy popsaným v sekci 3.2.3. Liší se v délce produkovaných pseudonáhodných řetězců, který má délku 45 bitů (délka dvou nenulových registrů) a způsobem generování nových stavů, kde první registr je nastaven na nulu a zbylým dvěma registrům R2 a R3 je přiřazena náhodná hodnota. Všechny řetězce delší než čtyřnásobek očekávané hodnoty byly zahazovány. 3.2.5 A5/1 s nulovým druhým registrem Tento algoritmus budu nadále v textu označovat jako A5/1 R13. Počítání tabulek s druhým nulovým registrem je podobné výpočtu A5/1 se všemi stavy popsaným v sekci 3.2.3. Liší se v délce produkovaných pseudonáhodných řetězců, který má délku 42 bitů (délka dvou nenulových registrů) a způsobem generování nových stavů, kde druhý registr je nastaven na nulu a zbylým dvěma registrům R1 a R3 je přiřazena náhodná hodnota. Všechny řetězce delší než čtyřnásobek očekávané hodnoty byly zahazovány. 3.2.6 A5/1 s nulovým třetím registrem Tento algoritmus budu nadále v textu označovat jako A5/1 R12. Počítání tabulek s třetím nulovým registrem je podobné výpočtu A5/1 se všemi stavy popsaným v sekci 3.2.3. Liší se v délce produkovaných pseudonáhodných řetězců, který má délku 41 bitů (délka dvou nenulových registrů) a způsobem generováním nových stavů, kde třetí registr je nastaven na nulu a zbylým dvěma registrům R1 a R2 je přiřazena náhodná hodnota. Všechny řetězce delší než čtyřnásobek očekávané hodnoty byly zahazovány. 3.2.7 RC4 s 64 bitovým klíčem Při práci s šifrou RC4 jsem použil implementaci z knihovny OpenSSL [1]. V tomto případě jsem zvolil rozlišovací bod s posledními 16 nulovými bity. 24

3. Kolize v Hellmanových tabulkách s rozlišitelnými body Protože šifra RC4 má 256! 2 8 různých vnitřních stavů, což je mnohem více než je počet možných klíčů, nemohl jsem použít stejný způsob generování jako v 4.1 u šifry A5/1 a vyhnout se přiřazování stavu danému klíči. Označme RC4 64 (S) prvních 64 bitů vyprodukovaných šifrou RC4 ze stavu S a KSA(K) iniciální stav při použití klíče K. Potom funkce f (2.1) je definována následovně: f(x) = RC4 64 (KSA(X)) (3.12) Počáteční stavy jsem generoval opět jako u šifry DES sekvenčně, algoritmus KSA (Key Scheduling Algorithm) by měl zaručit že i pro podobné klíče dostaneme rozdílné iniciální stavy. Všechny řetězce delší než čtyřnásobek očekávané hodnoty byly zahazovány. 3.2.8 RC4 se 40 bitovým klíčem Generování probíhalo stejnou metodou jako u RC4 se 64 bitovým klíčem. Více informací je uvedeno v části 3.4. 3.2.9 KASUMI s 64 bitovým klíčem Při počítání tabulek pro blokovou šifru KASUMI jsem použil implementaci z knihovny LibTomCrypt. KASUMI je bloková šifra s velikostí bloku 64 bitů a velikostí klíče 128 bitů. Protože pro výpočet Hellmanovy tabulky s rozlišitelným bodem je třeba, aby velikost bloku byla stejná jako velikost klíče, použil jsem pouze prvních 64 bitů klíče, dalších 64 bitů jsem nechal nulových. Jako fixní nešifrovanou zprávu jsem opět použil nulový blok. Jako rozlišitelný bod jsem vybral blok s posledními 16 nulovými bity, stejně jako u šifer A5/1 a RC4 s 64 bitovým klíčem. 3.3 Získané výsledky V této části uvedu jak vypadaly vypočítané tabulky a porovnám jejich vlastnosti s odhadem popsaným v části 3.1. V tabulce 3.1 jsou shrnuté parametry jednotlivých algoritmů. V tabulce 3.2 jsou uvedeny velikosti tabulek a jejich odhady. V prvním sloupci je použitý algoritmus, poč. řet. udává počet vypočítaných řetězců v rámci této tabulky. Poč. DP udává počet navzájem různých rozlišitelných bodů které se v tabulce objevily. 1. odhad udává odhadovaný počet nesloučených řetězců před dosažením rozlišitelného bodu vypočítaný pomocí vzorců 3.4 a 3.8. Jedná se 25