Symetrické a asymetrické šifrování

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: ScheRas
Datum: 23.10.2013
Hodnocení/Hlasovalo: 2.15/41

Tento článek se pokouší o jednoduché vysvětlení toho, jak funguje symetrické a asymetrické šifrování, jaké jsou mezi těmito typy šifrování rozdíly, a vše se také pokusí ukázat v praxi, totiž na příkladu jednoduchého e-mailového systému.

Tento článek je překladem originálu "Symmetric and Asymmetric Encryption" od Dawida Czagany, který vyšel na webu www.infosecinstitute.com.

Symetrické šifrování

Předpokládejme, že Alice chce mluvit s Bobem. Jelikož je zpráva, kterou mu chce poslat, důvěrná, nechce Alice, aby si jí mohl přečíst někdo jiný krom Boba. Alice tedy použije k zašifrování původní zprávy (angl. "plaintext") klíč. Šifrovaná zpráva (angl. "ciphertext") je odeslána Bobovi, který zná klíč a použitou symetrickou šifru (např. AES nebo 3DES). Jen díky tomu je Bob schopen zprávu dešifrovat a přečíst.

Alice a Bob sdílejí tzv. symetrický klíč. Oni jsou jediní, kdo tento klíč zná, a nikdo jiný tak není schopen jejich komunikaci číst. Tímto způsobem je dosaženo důvěrnosti.

Délka klíče vs. Bezpečnost

Přidáním jediného bitu ke klíči se jejich možný počet zdvojnásobí. Lze tedy říci, že delší klíče jsou lepší, ale nemusí nutně zvýšit bezpečnost. Lidé mají často tendenci používat lehce odhadnutelná hesla a pro útočníka je mnohem jednodušší připravit slovníky a pokusit se o slovníkový útek, než hrubou silou zkoušet všechny možné klíče.

Klíč sezení

Symetrický klíč může být pro každé sezení, kdy spolu Alice a Bob komunikují, rozdílný. V takovém případě se klíč nazývá "klíč sezení" (angl. "session key") a je pokaždé náhodně generovaný a platný právě pro jednu relaci. Pokud se útočníkovi podaří takový klíč získat, dokáže dešifrovat zpráva pouze z jednoho sezení, zatímco pokud se klíč nemění, může útočník při odposlechnutí klíče číst celou komunikaci.

Škálovatelnost a bezpečná distribuce klíčů

Používání symetrických šifer má i některé mouchy. Například to, že klíče nejsou škálovatelné. Pokud máme 1000 lidí, kteří spolu chtějí navzájem komunikovat, každý potřebuje 999 různých klíčů k vytvoření odděleného a důvěrného komunikačního kanálu. Dalším problémem je distribuce klíčů, jelikož není lehké útočníkovi zabránit v odposlechnutí klíče v době přenosu mezi Alicí a Bobem.

Asymetrické šifrování

Asymetrické šifry (např. RSA) používají klíče dva - soukromí a veřejný (angl. "private" a "public"), přičemž veřejný klíč je dostupný každému a soukromý zná pouze vlastník klíče. Pokud je zpráva zašifrována veřejným klíčem, lze jí dešifrovat pouze pomocí odpovídajícího soukromého klíče. Krom toho nelze z veřejného klíče žádný způsobem odvodit klíč privátní.

Asymetrické šifrování zcela řeší problém s předáváním klíčů. Alici stačí vzít Bobův veřejný klíč a používá ho k šifrování zpráv. Bob je totiž jediný, kdo vlastní odpovídající soukromý klíč, a tím pádem je také jediný, kdo si může původní zprávu přečíst. Ve srovnání se symetrickými šiframi jsou asymetrické šifry velice pomalé, a proto se většinou používají pouze k distribuce symetrického klíče sezení. Alice a Bob pak mohou používat pouze symetrický klíč a nemusejí mít strach o důvěrnost svých zpráv.

Použití asymetrické šifra také řeší problém škálovatelnosti, každý totiž potřebuje pro komunikaci s ostatními lidmi pouze jeden veřejný a jeden privátní klíč.

E-mailová bezpečnost

Nyní se pojďme podívat na to, jak mohou být symetrické a asymetrické šifry použity při vytváření bezpečného e-mailového klienta.

Důvěrnost zpráv

Alice se chystá poslat e-mail Bobovi. Je v jejím zájmu, aby si zprávu mohl přečíst jen a pouze Bob. Důvěrnosti může být dosaženo díky symetrickému šifrování, ale jelikož potřebuje "session key" dostat bezpečně k Bobovi, použijeme pro výměnu klíčů asymetrické šifrování.

Pojďmě si projít celý proces detailněji krok po kroku. Alice vygeneruje klíč sezení (SESSION_KEY) a zašifruje ho pomocí Bobovy veřejného klíče (PUB_KEY_BOB). Výsledkem je tedy PUB_KEY_BOB(SESSION_KEY), což je označováno jako část 1 (PART1). Poté zašifrujeme klíčem sezení samotnou zprávu (MESSAGE), díky čemuž vznikne část 2 (PART2) ve tvaru SESSION_KEY(MESSAGE). Nakonec Alice zašle Bobovi obě části. Pouze Bob je schopný dešifrovat PART1, protože je jediný, kdo zná odpovídající soukromí klíč (PRIV_KEY_BOB). Po dešifrování části 1 Bob získá SESSION_KEY, který následně použije k rozšifrování části 2, díky čemuž se mu dostane původní zprávy.

Důvěrnost zpráv, integrita a ověření odesílatele

Což takhle trochu komplikovanější případ? Alice pošle e-mail Bobovi. Bob chce ověřit, jestli je odesílatelem zprávy opravdu Alice, a zároveň chce zkontrolovat, jestli mu zpráva přišla celá. Zároveň musí být zpráva čitelná pouze pro Boba.

Rozeberme si tento příklad podrobněji. Alice opět vygeneruje klíč relace (SESSION_KEY) a zašifruje ho Bobovým veřejným klíčem (PUB_KEY_BOB). Vznikne tedy PART1 ve tvaru PUB_KEY_BOB(SESSION_KEY).

V dalším kroku Alice zprávu (MESSAGE) zahashuje. Výsledkem je tedy H(MESSAGE). Připomeňme si, že ideální hashovací funkce je nevratná (z hashe nelze získat zprávu) a dvě rozdílné zprávy MESSAGE1 a MESSAGE2 nemají nikdy stejný hash. Následně Alice zašifruje pomocí vlastního soukromého klíče H(MESSAGE), takže vznikne PRIV_KEY_ALICE(H(MESSAGE)), což je nazýváno digitální podpis (DIGITAL_SIGNATURE).

Těsně před odesláním zprávy ještě Alice zašifruje pomocí klíče sezení (SESSION_KEY) samotnou zprávu a digitální podpis (vzniká tedy něco jako SESSION_KEY(MESSAGE DIGITAL_SIGNATURE)). Takto vytvořená část 2 je společně s částí 1 odeslána Bobovi.

Bob je i v tomto případě jediný, kdo dokáže dešifrovat PART1 a získat tak SESSION_KEY. Ten pak použije k rozšifrování části 2, z které získá zprávu společně s digitálním podpisem.

Dále musí Bob použít Alicin veřejný klíč (PUB_KEY_ALICE) k dešifrování DIGITAL_SIGNATURE. Výsledkem bude zahashovaná zpráva H(MESSAGE). K ověření pravosti a celistvosti zprávy Bobovi stačí, aby také zahashoval příchozí zprávu (tedy vytvořil H(MESSAGE)). V případě, že hashe souhlasí, nemá se Bob čeho bát.

Závěr