Šifry kolen más - Díl první - přehled algoritmů

1. 3. 2002

Sdílet

DES, HAVAL, SSH, PGP... Také vám tyto pojmy něco říkají, ale nejste si přesnějisti co? Tak právě vám je určen tento článek. Jak už jistě tušíte, bude řeč o šifrování. Ši...

DES, HAVAL, SSH, PGP… Také vám tyto pojmy něco říkají, ale nejste si přesně
jisti co? Tak právě vám je určen tento článek. Jak už jistě tušíte, bude řeč o

šifrování.





Šifrování jako obor



Nejprve by bylo namístě, vysvětlit si několik pojmů. Definujme si obory, které

mají s šifrováním něco společného. Jistě jste se už setkali s pojmem jako

kryptologie, kryptografie, kryptoanalýza. Pak tedy vězte, že kryptografie je

věda, která se zabývá tvorbou šifer, kryptoanalýza jejich luštěním a obě

současně označujeme názvem kryptologie. Šifrování se v dnešní době stalo

nutností. Už nejen vládní organizace a tajné služby potřebují šifrovat svá

data. Ochránit si vlastní soukromí a data dnes potřebuje i běžný uživatel.

Směšně dnes zní již téměř legendární výrok ministra obrany Spojených států

Henry Stimsona, který v roce 1929 prohlásil: „Gentlemani si navzájem nečtou

dopisy.“ Po krátkodobém zrušení luštitelské služby však i Američané pochopili,

že bez kryptologie se dnes žádný stát neobejde. A nejen stát, ale v dnešní době

informačních technologií ani běžný uživatel.





Historie a šifry



Kryptologie není jako samostatný vědní obor příliš stará, ale s šifrováním se

setkáváme již ve starověku. Pojďme se nyní stručně podívat na historii

kryptologie. Někomu následující řádky možná přijdou neužitečné, ale pochopení

základů je nezbytné pro pokročilejší metody šifrování, navíc si myslím, že

následující řádky budou zajímavější než pouhé přepisování algoritmů a

matematických funkcí, které stejně nikomu nic neřeknou (s výjimkou několika

matematiků a kryptologů). Ne nadarmo se říká: chceš-li létat, nauč se nejdříve

chodit.



Vznik kryptologie se odhaduje někdy v pátém století před naším letopočtem.

Jisté to sice není, ale logicky musela vzniknout až po vzniku písma. Utajování

zpráv nemuselo mít vždy charakter šifry. Například řecký vyslanec v Persii

jménem Histiaios oholil hlavu svému otrokovi, vytetoval mu na ni zprávu, nechal

otrokovi dorůst vlasy a pak jej poslal do Řecka. Příjemce zprávy (mimochodem

jakýsi Aristagoros, který vedl vzpouru proti Dáreiovi I.) pak otrokovi hlavu

oholil a mohl si zprávu přečíst a zahájit povstání. I takovéto události řadíme

do kryptografie, sice ne takové, jakou známe dnes, ale přece.



Za prvního známého kryptologa lze považovat řeckého vojevůdce Aenea Tacita,

který kolem roku 350 před naším letopočtem navrhl 22 šifrovacích klíčů a

rozdělil je do dvou skupin. Toto dělení používáme dodnes. Vrátíme se k němu za

chvíli.





Caesarova šifra



I Římané používali primitivní způsob šifrování svých zpráv, zejména těch

vojenských. Proto z této doby známe takzvanou Caesarovu šifru. Princip

šifrování těchto zpráv byl opravdu primitivní, ale proti Barbarům, Galům a

dalším národům, se kterými Římané bojovali, byl zřejmě dostatečně odolný.



Takováto šifra vypadala a fungovala následovně:



Základem je tato primitivní transpoziční tabulka, která slouží jak pro

zašifrování, tak pro čtení zašifrované zprávy. Pokud by tedy chtěl někdo

zašifrovat zprávu, napsal by ji na papír (či kamkoliv jinam), a pak by podle

příslušné tabulky nahradil jednotlivá písmena ve svislém směru. Každému písmenu

z horní poloviny tabulky odpovídá jedno písmeno z poloviny dolní. Pokud bychom

například chtěli napsat slovo AHOJ, dostali bychom zašifrovaně BIPK.

Dešifrování probíhá opačným postupem. Jak již jistě mnozí z vás tuší, důležité

je číslo, které udává posun dolní poloviny tabulky (zde číslo 1). Pokud někdo

znal číslo posunu, mohl zprávu lehce dešifrovat. Proč je tato šifra poměrně

důležitá? Můžeme se s ní setkat i dnes. Nejčastěji se tento způsob šifrování

používá v některých diskusních fórech a na Usenetu, kdy se tímto způsobem

„kódují“ zprávy s obsahem, řekněme poněkud kontroverzním. Pro tento „jazyk“

bylo dohodnuto číslo posunu na +13 a někteří lidé se tímto způsobem naučili

číst téměř stejně rychle jako čtou normální text. Odborně tomuto algoritmu

říkáme ROT13. Někteří z vás by jistě lehce zvládli napsat krátký prográmek nebo

skript (C, PHP, Bash atd.), který by zprávu zašifroval (respektive dešifroval).





Trittheim



Za otce moderní kryptografie lze považovat Němce Johannese Trittheima,

benediktinského opata. Trittheim je autorem tříčíselné substituce, při jejímž

použití je každé písmeno otevřeného textu nahrazeno tříčíselnou kombinací čísel

123. Například A=111, B=112, C=113 atd.





Šifra Richelieu



Další poměrně důležitou šifrou minulosti byla takzvaná šifra kardinála

Richelieu, kterého všichni dobře známe z Dumasova románu Tři mušketýři. Tento

způsob šifrování se používal v zemích třetího světa ještě na konci 80. let 20.

století(!) a v některých zemích (čtvrtého, pátého atd. světa) se používá

dodnes. Princip této šifry spočívá ve využití transpoziční tabulky, které

spočívá v přeházení písmen otevřeného textu podle hesla (tedy transpozici):



Tato šifra byla později rozvinuta a vedla ke vzniku transpoziční tabulky, což

je ta, která se dodnes používá. Otevřený text vepíšeme do tabulky, šifru pak

dostaneme přepsáním jednotlivých sloupců podle pořadí, jež určuje heslo.



Zde je ukázka tabulky podle hesla 257194368:



Šifrovaný text pak vypadá následovně:



OJETT ZUKUN BAEDA LOKCY KOUST AHSAD LEJET A



Text jsme rozdělili do skupin po pěti písmenech jen z důvodu konvence, nebo

případnému zmatení nepovolaného kryptoanalytika. Dešifrování je opět

jednoduché, známe-li heslo. Ale pozor na falešnou představu, že použití dvou

hesel (jedno k transpozici řádek, druhé k transpozici sloupců) zvýší bezpečnost.



Šifer na tento způsob lze vymyslet, a taky se tak stalo, velké množství.

Namátkou vyjmenujme například Portovu tabulku složité záměny, Vigenérovu

tabulku (základ strojů Hagelin), Baconovo binární šifrování a mnoho dalších.

Není naším cílem všechny vyjmenovávat a popisovat, pro nás je důležité, že tyto

šifry lze rozdělit do dvou skupin, jak jsme se zmínili výše. Nyní si tyto

skupiny ukážeme.





Dělení šifer



Dříve (rozuměj v předpočítačové éře) bylo možno šifry dělit do dvou základních

skupin.



Transpoziční šifry, kde šifrování spočívá ve využití transpozičního klíče, jsou

skupinou první. V principu jde o změnu pořadí písmen otevřené zprávy, právě

pomocí transpozičního klíče.



Substituční šifry jsou skupinou druhou a jejich princip spočívá v nahrazování

(substituci) písmen otevřeného textu jinými písmeny, číslicemi a/nebo znaky.



S využitím počítačů se možnosti při tvorbě šifry prudce zvýšily. Lze tak použít

tisíce operací, složité algebraické operace a další věci, přičemž doba

šifrování i dešifrování bude, právě díky moderním počítačům, trvat přijatelně

dlouho.





Síla šifry



To, jak je šifra silná, ovlivňuje několik věcí. Zde jsou ty nejdůležitější:



1.Nezašifrovaný text možná se to zdá paradoxní, ale nezašifrovaný text má na

sílu šifry obrovský vliv. Pokud se v několika zprávách, kódovaných stejným

algoritmem, vyskytne tatáž pasáž textu, může tato případná pravidelnost leccos

o algoritmu napovědět, a ve svém důsledku vést až k prolomení šifry. Dobrá rada

tedy je nezačínat a nekončit stejnými frázemi, mít bohatou slovní zásobu.



2.Zadní vrátka zadní vrátka mohou být i součástí šifrovacího algoritmu. Tvůrce

šifry si tak může vytvořit způsob, jakým lze zašifrovanou zprávu přečíst i bez

znalosti klíče. Často se spekuluje o tom, zdali právě toto nečiní nějaké vládní

agentury při tvorbě a publikování algoritmů (nejčastěji se v této souvislosti

mluví o agentuře NSA National Security Agency, tedy agentuře, která se tvorbou

a prolamováním šifer primárně zabývá).



3.Délka klíče délka klíče je zcela zásadní. Krátké klíče jsou náchylné k

prolomení pomocí metody brute force attack, tedy zkoušením všech možností.

Obecně lze říci, že čím delší klíč, tím bezpečnější.



4.Otočení šifrovacího algoritmu pokud lze šifrovací algoritmus lehce otočit,

nemůže být o bezpečném šifrování ani řeč.



5. Odolnost proti útoku se znalostí textu při tomto útoku se používá část

otevřeného textu, který má luštitel k dispozici, a pomocí něhož se snaží

prolomit algoritmus. Proti tomuto druhu útoku musí být šifra také náležitě

odolná.



6.Utajení klíče poslední, neméně důležitá podmínka pro zachování silné šifry. K

čemu by byla nejsložitější a nejbezpečnější možná šifra, podaří-li se někomu

získat klíč k jejímu rozluštění?







Šifrovací algoritmy



V současné době se používají tři hlavní šifrovací algoritmy. Pro úplnost si

ještě uveďme definici algoritmu. Algoritmus je matematická funkce, která

provádí samotné šifrování a dešifrování dat. Nyní již k typům algoritmů.





Algoritmy se symetrickým klíčem



U těchto algoritmů dochází k zašifrování i dešifrování za použití stejného

šifrovacího klíče. Tento klíč slouží na obou stranách k šifrování i

odšifrovávání dat. Je zřejmé, že před první výměnou zpráv se partneři musí

dohodnout na společném tajném klíči, a to buď formou osobního setkání, nebo

jeho posláním prostřednictvím důvěrného kanálu. Jedná se o jednoduché řešení,

ale v praxi použitelné pouze v malé skupině uživatelů. Šifrování pomocí

symetrické kryptografie je relativně rychlé, a tím pádem vhodné pro komunikaci

v reálném čase.





Asymetrická kryptografie



Asymetrická kryptografie je založena na použití klíčového páru, tj. veřejného a

soukromého klíče. Každý uživatel vlastní dvojici klíčů: veřejný klíč, který

vlastník zveřejní, a soukromý klíč, který musí tajit. Veřejným klíčem se

šifrují data určená pro vlastníka daného soukromého klíče, který potom slouží k

dešifrování dat. Nevýhodou této metody je pomalé zpracování dat.



Z výhod a nevýhod obou metod se proto v praxi používá kombinace těchto dvou

řešení: asymetrická kryptografie je využita k autentizaci a bezpečné výměně

symetrického šifrovacího klíče, který může být při každé relaci generován nový,

a následné šifrované spojení je realizováno pomocí symetrické kryptografie.







Symetrická kryptografie



crypt



Jedná se o původní unixový šifrovací systém. V dnešní době už není příliš

využíván, kvůli poměrně snadné prolomitelnosti i bez znalosti klíče. Rada:

nebezpečné nepoužívat!





DES



Stále se jedná o jeden z nejpoužívanějších šifrovacích algoritmů (spíše však

jeho „potomků“). Byl vyvinut a patentován firmou IBM začátkem 70. let. Pro ty,

kdo by chtěli nahlédnout do kryptografické hantýrky, je zde uveden popis

činnosti tohoto algoritmu: DES provádí sérii bitových permutací, substitucí a

rekombinačních operací s bloky 64 bitů dat a 56bitovým klíčem. Vstupní 64bitová

posloupnost projde vstupní permutací a poté se předá funkci, která používá

statické tabulky permutací a substitucí. Pomocí klíče se vstupní data permutují

na dvě posloupnosti o délce 48bitů, které se pak předávají jako vstup statickým

tabulkám permutací a substitucí. Tento postup se opakuje šestnáctkrát, vždy s

jinými tabulkami a jinými bity klíče. Jejich výstupem jsou dvě 32bitová slova,

která po finální permutaci dávají 64 bitů zašifrovaného textu. (zdroj IBM).



Zlatá Caesarova substituce, že? Vraťme se nyní zpět do češtiny. Je to tedy

hardwarový šifrátor, který využívá 56bitový tajný klíč na šifrování 64bitových

bloků dat, a v rámci bloku každý výstupní bit šifrátoru je závislý na každém

vstupním bitu.



Někteří z vás z předchozího popisu činnosti nebo ze zkušenosti vědí, že v

dnešní době již není algoritmus DES právě nejbezpečnější (pro běžného uživatele

je bezpečný více než dostatečně, ale…). S využitím dnešního hardwaru lze

tento algoritmus prolomit prostým vyzkoušením všech hesel. Proto vznikly další

algoritmy, vycházející z DES, avšak řádně vylepšené a bezpečnější. Rada: pokud

nejde o život s klidným svědomím použít.





Double DES



Tento algoritmus není o mnoho bezpečnější (pro NSA nebo CIA určitě ne) než jeho

předchůdce, což je také důvodem, proč nebyl nikdy příliš rozšířen. Neznamená to

sice, že může být prolomen, ale teoretická možnost existuje. O to silnější a

rozšířenější je však „druhý potomek“ DESu, kterým je Triple DES. Rada když už

ne jednoduchý, tak rovnou Triple DES.





Triple DES



Tento algoritmus pracuje na principu tří šifrovacích operací. Postup při

zašifrování nějaké zprávy je následující:



1. Šifrování klíčem 1

2. Dešifrování klíčem 2

3. Šifrování klíčem 3



Postup při dešifrování je přesně opačný:



1. Dešifrování klíčem 3

2. Šifrování klíčem 2

3. Dešifrování klíčem 1



Nutno ještě dodat, že první a třetí klíč mohou být shodné, aniž by to výrazně

ovlivnilo sílu celé šifry. Nyní si ještě pro úplnost uveďme některé další

algoritmy se symetrickým klíčem.





RC 2,4,5



Všechny tyto algoritmy byly vyvinuty Ronaldem Rivetsem (dobře si to jméno

zapamatujte, ještě se s ním několikrát setkáme) a lze je považovat za přiměřeně

bezpečné.



Teď zřejmě čekáte, že budeme mluvit o algoritmech, které využívají

asymetrického klíče, ale není tomu tak. Jelikož je toto téma poměrně rozsáhlé a

souvisí s používáním různých prográmků, jimž se budeme rovněž věnovat, necháme

si toto téma na příště. Dnes se ještě stručně zmíníme o takzvaných hash kódech.





Hash kód



Kontrolní součet, checksum, message digest, hash kód. Ať již použijeme

kterýkoliv z těchto názvů, budeme mluvit stále o tom samém. My se budeme v

dalším textu držet zavedeného termínu kontrolní součet.



Vstupem hashovací funkce H je datový soubor M (zpráva) o proměnné a prakticky

neomezené délce, jejímž výstupem je hashovací hodnota (hashovací kód) H(M)

pevné a velmi malé délky. Hashovací funkce plní dvě role. První z nich je

„komprese“. Velmi dlouhý vstup je komprimován na velmi krátký výstup. Původní

informace není v hashovacím kódu obsažena celá, takže z něj nelze původní

zprávu obnovit (nejedná se tedy o klasickou kompresi např. celého souboru).



Druhou rolí je hashování vstupních dat, kdy výstupní data jsou jakýmsi vzorkem

dat vstupních. U člověka by hashovací hodnotě mohl odpovídat např. otisk prstu

vstupem je celý člověk, výstupem otisk jeho prstu. Všimněte si zde jedné

důležité vlastnosti: z otisku prstu nelze člověka vytvořit, ale lze jej podle

něj jednoznačně identifikovat.



Příkladem použití může být stahování nějakého softwaru, zejména pro unixové

systémy. Nejčastěji se totiž tato funkce používá k podepisování a ověřování

souborů (unixovým uživatelům dobře známá checksum, někdy MD5sum). Princip je

jednoduchý. Pokud stahujete z nějakého serveru data, obvykle bývá u tohoto

souboru přiložena i jeho signatura (soubor .sig/md5). Můžete si pak pomocí

jednoduchého příkazu ověřit, že jste stáhli data, která nebyla cestou žádným

způsobem modifikována.



Nejčastěji používané algoritmy jsou tyto:





MD5



Toto je jeden z nejrozšířenějších algoritmů používaných ke generování

kontrolního součtu. Distribuuje jej společnost RSA, se kterou se ještě v našem

miniseriálu setkáme, a navrhl jej Ronald Rivest, s nímž jsme se již setkali.

Princip tohoto algoritmu je poměrně jednoduchý. MD5 generuje z libovolně

dlouhého vstupu 128bitový výtah. Jeho jedinou nevýhodou je snížená rychlost,

ale při výkonu dnešních počítačů již není tento problém aktuální. Tento

algoritmus se používá na novějších unixových systémech v souvislosti s

uživatelskými hesly. Odpadá tak nutnost heslo uchovávat v systému. Při jeho

zadání v programu login se provede „pouze“ kontrolní součet tohoto hesla,

porovná se s kontrolním součtem uloženým v systému, a pokud souhlasí, je

uživatel „vpuštěn“ do systému. Tohoto principu lze využít i v jiných

aplikacích, namátkou mě napadá PHP a ukládání hesel do SQL databáze. Problém je

v případě, kdy heslo zapomeneme, neboť z kontrolního součtu, který je uložen v

systému, bychom teoreticky nikdy neměli vygenerovat zpět původní heslo. Nicméně

existují programy, jež generují náhodné součty a zkouší je porovnávat s těmi

„pravými“. Proto je důležité dodržovat princip silných hesel. Předchůdci MD5

jsou algoritmy MD2 a MD4, ve kterých však byly v polovině 90. let minulého

století objeveny závažné nedostatky, a proto se nedoporučuje tyto algoritmy

používat.





HAVAL



Tento algoritmus je modifikací MD5. Může volitelně generovat výstup o délce až

256 bitů, což ovšem neznamená, že je bezpečnější. Výhodou tohoto algoritmu je

větší rychlost, což, jak jsme už řekli, nemá v dnešní době příliš velký význam.



A to je pro dnešek vše. Příště se podíváme na algoritmy využívající

asymetrických klíčů, povíme si něco o digitálních podpisech a s nimi

souvisejících programech (PGP), také si povíme o věcech, které mohou ohrozit i

ten nejsložitější a nejbezpečnější algoritmus.



Všechny vaše rady, náměty na další články nebo seriál, názory a prosby opět rád

uvítám na adrese igm@centrum.cz.