Hlavní navigace

Š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.