Select Git revision
-
David Mareček authoredDavid Mareček authored
intro.tex 5.75 KiB
\ifx\chapter\undefined
\input adsmac.tex
\singlechapter{1}
\fi
\chapter[intro]{Úvodem: Příhody Alice a Boba}
V~této kapitole si představíme čtyři základní \em{kryptografická primitiva} --
\uv{krabičky}, ze kterých je vystavěna většina kryptografických protokolů:
symetrické a asymetrické šifry, hešovací funkce a náhodné generátory. Zatím je
budeme popisovat neformálně (detaily ještě pár kapitol počkají), ale vyzkoušíme
si, jak se o~nich přemýšlí.
\section{Symetrické šifry}
Začneme jednoduchou úlohou. Alice chce svého kamaráda Boba pozvat do čajovny.
Chce mu proto po síti poslat \em{zprávu} -- nějaký řetězec znaků, pro jednoduchost
předpokládejme, že jedniček a nul. Jenže na síti nejsou sami: vždycky se najde někdo,
kdo zvědavě poslouchá, co se šustne, a~pak šíří drby. Říkejme mu třeba Eva\foot{V~angličtině
to funguje lépe: je to Eve podle slova \em{eavesdrop} s~významem \em{potají naslouchat.}}
nebo CIA.\foot{Autor zajisté ví, že americká třípísmenková agentura starající se o~odposlech
zpráv není CIA, ale NSA. Jenže copak se tady dá odolat zkratce začínající na~C?}
Alice s~Bobem se proto dohodli, že zprávy budou \em{šifrovat.} Alice zprávu zakóduje
nějakým algoritmem, který je známý jenom jí a Bobovi. Eva stále může zprávu odposlechnout,
jen už jí nebude dávat žádný smysl.
Utajovat (potenciálně složitý) algoritmus je ovšem docela nepraktické.
Místo toho algoritmus parametrizujeme \em{klíčem} -- nějakým dalším řetězcem, který ovlivňuje
šifrování a~který utajíme místo algoritmu. Alice a Bob se dopředu bezpečnou cestou shodnou
na klíči. Cokoliv Alice pomocí klíče zašifruje, Bob pomocí téhož klíče dešifruje. Ale Eva klíč
nezná, takže jí zpráva nebude srozumitelná. Tomu říkáme \df{symetrická šifra,} protože Alice a Bob
používají stejný klíč.
Obecně bychom se na symetrickou šifru mohli dívat jako na dvojici \uv{krabiček} $E$ a~$D$.
\em{Šifrovací krabička}~$E$ (\em{encryption box}) dostane \em{otevřenou zprávu (plain text)}
a~klíč a spočítá z~nich \em{zašifrovanou zprávu (cipher text)}.
\em{Dešifrovací krabička}~$D$ (\em{decription box}) dostane zašifrovanou zprávu a klíč
a spočítá původní otevřenou zprávu.
Většinou chceme, aby šifrování zachovávalo délku zprávy.
\examplen{Caesarova šifra}{
Podívejme se na triviální příklad symetrické šifry pocházející prý od Julia Caesara.
Alice chce poslat zprávu složenou z~písmen abecedy {\tt ABC}\dots{\tt Z}.
Zvolí si klíč~$k\in\{0,\ldots,25\}$ a její šifrovací krabička místo každého písmena
pošle takové, které je v~abecedě o~$k$ pozic dál (cyklicky).
Takže zprávu {\tt AHOY} při $k=3$ zašifruje na {\tt DKRB}.
Bobova dešifrovací krabička posouvá o~$k$~písmen v~opačném směru.
}
Pravidlu, že utajujeme klíč a~nikoliv algoritmus, se říká \df{Kerckhoffsův princip.}\foot{
Přišel s~ním koncem 19. století nizozemský kryptograf Auguste Kerckhoffs.}
Proč je tak důležitý?
\list{o}
\:Dobrých šifer je známých málo a je těžké je vytvořit.
\:U~prakticky žádné šifry neumíme dokázat, že je bezpečná. Je tedy lepší použít
veřejně známou šifru, kterou už hodně kryptografů studovalo a nenašli v~ní žádnou
slabinu.
\:Pokud se protivník dozví část našeho tajemství, je mnohem snazší vyměnit zkompromitovaný
klíč než algoritmus.
\endlist
\note{
Ještě dodejme, že Alice a Bob nemusí být konkrétní osoby. Jsou to \em{role} v~protokolu.
Chceme-li na zprávu odpovědět, postavy si role prohodí.
Pokud chceme bezpečně zálohovat data, Bob bude Alice někdy v~budoucnosti.
A~tak dále.
}
\section{Asymetrické šifry}
Představte si, že bychom místo dvojice Alice a Bob měli $N$~lidí, kteří si chtějí
navzájem vyměňovat šifrované zprávy. Každé zprávě přitom smí rozumět jenom odesílatel
a adresát. Použití symetrické šifry by vyžadovalo, aby se každá dvojice lidí předem
shodla na svém klíči. To znamená vytvořit a bezpečně distribuovat řádově $N^2$ klíčů,
což je moc.
Pořídíme si \df{asymetrickou šifru.} Ta má dva klíče: \em{šifrovací} a \em{dešifrovací.}
Ty lze vyrobit jen jako pár (máme-li jen jeden, nepomůže nám to k~získání druhého).
Co zašifrujeme šifrovacím klíčem, dá se dešifrovat jen příslušným dešifrovacím klíčem.
Pak stačí, aby každý z~$N$~účastníků protokolu zveřejnil svůj šifrovací klíč
(třeba v~nějakém veřejném adresáři) a ponechal si ten dešifrovací. Tím pádem
Alici stačí najít v~adresáři Bobův šifrovací klíč, zašifrovat pomocí něj zprávu
a tu pak umí dešifrovat jen Bob.
Pozor na to, že klíče mají dva druhy vlastností:
\em{veřejný} vs. \em{soukromý} a \em{šifrovací} vs. \em{dešifrovací}.
V~našem protokolu je šifrovací klíč veřejný a dešifrovací soukromý.
Zajímavá je i~opačná kombinace: zveřejníme-li dešifrovací klíč a ponecháme si šifrovací,
získáme něco, co se chová jako \em{podpis.} Každý si může zprávu přečíst, ale jenom majitel
příslušného soukromého klíče ji umí vytvořit. Všimněte si rozdílu: šifra zajišťuje \em{utajení}
obsahu zprávy (nepovolané osoby ji neumí přečíst), zatímco podpis zajišťuje \em{integritu}
(pokud nepovolaná osoba zprávu změní, přijde se na to). Často budeme chtít kombinovat obojí.
Časem se ukáže, že naše triviální použití veřejných klíčů má zásadní slabinu:
Nic nebrání útočníkovi podstrčit do veřejného adresáře svůj klíč místo klíče oběti.
Později tento problém vyřeší certifikační autority.
\section{Hešovací funkce}
\section{Náhodné generátory}
\endchapter