Skip to content
Snippets Groups Projects
Select Git revision
  • 143dfddfe3c51438cf0637c520eb08115e799070
  • master default protected
2 results

intro.tex

Blame
  • Forked from Martin Mareš / Úvod do kryptografie
    Source project has a limited visibility.
    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