🔐 BI-KAB – Kryptografie a bezpečnost

Státnicové poznámky · Bakalářské státní zkoušky · FIT ČVUT

prof. Ing. Róbert Lórencz, CSc. 2 státnicové okruhy BI-SPOL.21-9 & BI-SPOL.21-10 Katedra informační bezpečnosti
Okruh 1 · BI-SPOL.21-9

Asymetrické kryptosystémy, hešovací funkce, digitální podpis, certifikáty

RSA šifra a digitální podpis, Diffie-Hellman výměna klíčů, hešovací funkce SHA-2 a HMAC, digitální podpis – vlastnosti a principy, certifikáty X.509 a infrastruktura PKI.

🗝️ Kryptografie veřejného klíče – motivace a princip

Šifrovací systém veřejného klíče (VK): kryptosystém, ve kterém existují dva klíče – veřejný klíč (VK) pro šifrování (zveřejněn) a soukromý klíč (SK) pro dešifrování (tajný). Výpočet SK ze znalosti VK je výpočetně neschůdný.

Proč to tak je: U symetrických šifer je nutné, aby si obě strany předem bezpečným kanálem vyměnily sdílený tajný klíč. Při komunikaci n uživatelů potřebujeme O(n²) klíčů. Kryptografie VK tento problém řeší – každý má jen jeden pár klíčů, VK zveřejní a kdokoliv mu může poslat šifrovanou zprávu, přičemž dešifrovat ji může pouze on sám.

Podmínka bezpečnosti: Ze znalosti VK nelze v rozumném čase odvodit SK. Bezpečnost stojí na výpočetní složitosti určitých matematických problémů (faktorizace, diskrétní logaritmus).

  • Šifrování pro důvěrnost: odesílatel šifruje VK příjemce → dešifrovat umí jen příjemce svým SK.
  • Digitální podpis: podepisující podepisuje svým SK → ověřit může kdokoliv pomocí jeho VK.

🔢 RSA – popis a matematické základy

RSA (Rivest, Shamir, Adleman, 1977) je asymetrický kryptosystém založený na modulárním umocňování. Bezpečnost spočívá na výpočetní těžkosti faktorizace velkých čísel.

Generování klíčů:

  • Zvolíme dvě velká prvočísla p a q (cca 340 dekadických číslic každé → n je 680místné).
  • Vypočítáme n = p·q (modul) a Eulerovu funkci Φ(n) = (p−1)(q−1).
  • Zvolíme šifrovací exponent e takový, že 1 < e < n a gcd(e, Φ(n)) = 1.
  • Vypočítáme dešifrovací exponent d = e⁻¹ mod Φ(n) (inverze pomocí rozšířeného Euklidova algoritmu).
  • Veřejný klíč: (n, e)  ·  Soukromý klíč: (n, d)

Šifrování a dešifrování:

  • Šifrování: c = me mod n
  • Dešifrování: m = cd mod n

Správnost plyne z Eulerovy věty: mΦ(n) mod n = 1, takže cd = med = mkΦ(n)+1 = m.

⚠️ Bezpečnost RSA

Bez znalosti p a q není možné efektivně vypočítat Φ(n) ani dešifrovací klíč d. Faktorizace čísla n tvořeného dvěma 340místnými prvočísly by zabrala přibližně 250 let počítačového času nejrychlejšími známými algoritmy. Proto jsou p a q po vygenerování klíčů zničeny.

Doporučení: |p − q| > 2^(|n|/2 − 100), obě čísla p−1 a q−1 mají mít velké prvočíselné faktory, gcd(p−1, q−1) má být malé.

Urychlení výpočtů – RSA-CRT: Pomocí Čínské věty o zbytcích lze dešifrování provést s čísly poloviční délky (výpočty modulo p a modulo q zvlášť a spojit), což dává 4–8× zrychlení.

Volba exponentu e: Doporučuje se volit e s malou Hammingovou váhou pro rychlé šifrování (např. 2¹⁶+1 = 65537). Musí platit 2e > n, aby bylo zaručeno modulární umocňování (bez redukce mod n by šlo jednoduše odmocnit).

🤝 Diffie-Hellman – výměna klíčů a diskrétní logaritmus

Diffie-Hellmanova výměna klíčů (DH): protokol, který umožňuje dvěma stranám dohodnout se na sdíleném tajném klíči přes nezabezpečený kanál, aniž by tento klíč byl kanálem přenesen. Bezpečnost stojí na výpočetní obtížnosti problému diskrétního logaritmu (DLP).

Protokol DH:

  • Veřejně dohodnuté parametry: prvočíslo m (cca 2⁴⁰⁹⁶) a generátor a grupy Z*m.
  • Alice zvolí tajné číslo k_A, spočítá y_A = a^k_A mod m a odešle Bobovi.
  • Bob zvolí tajné číslo k_B, spočítá y_B = a^k_B mod m a odešle Alici.
  • Oba spočítají sdílený klíč: K = y_B^k_A mod m = y_A^k_B mod m = a^(k_A·k_B) mod m.
  • Útočník zná y_A a y_B, ale bez znalosti k_A nebo k_B nemůže K spočítat.

Diskrétní logaritmus (DLP): Mějme grupu G, generátor g a prvek y. Diskrétní logaritmus je číslo k takové, že g^k = y. Pro cyklické grupy Z*p (p prvočíslo) neexistuje polynomiální algoritmus pro výpočet DLP. Útok hrubou silou má složitost O(n) kde n je řád grupy.

⚠️ Diffie-Hellman a útok man-in-the-middle

Samotný DH protokol neposkytuje autentizaci – útočník Utica může podvrhnout své vlastní y_U oběma stranám a odposlouchávat komunikaci. Proto se DH kombinuje s autentizací (certifikáty, digitálním podpisem).

Diffie-Hellmanův problém (DHP): Daným g^a mod m a g^b mod m spočítej g^(ab) mod m. DHP není složitější než DLP. Zda je DHP striktně jednodušší než DLP není prokázáno, ale zdá se, že ne.

📨 El Gamal – asymetrické šifrování a digitální podpis

El Gamal (Taher ElGamal) – kryptosystém veřejného klíče pro šifrování i digitální podpis, založený na Diffie-Hellmanově protokolu. Bezpečnost stojí na DLP.

Generování klíčů (Alice):

  • Alice zvolí prvočíslo m a generátor g grupy Z*m−1.
  • Zvolí soukromý klíč k_A, spočítá y_A = g^k_A mod m.
  • Veřejný klíč: trojice (m, g, y_A). Soukromý klíč: k_A.

Šifrování (Bob → Alice):

  • Bob zvolí náhodné k_B, spočítá y_B = g^k_B mod m.
  • Sdílený klíč: K = y_A^k_B mod m.
  • Zašifruje zprávu: c = p · K mod m. Odešle dvojici (y_B, c).

Dešifrování (Alice):

  • Alice spočítá sdílený klíč: K = y_B^k_A mod m.
  • Dešifruje: p = c · K⁻¹ mod m.
⚠️ Kritická slabina El Gamal šifrování

Hodnota k_B musí být pro každou zprávu jiná (náhodná). Pokud by byl k_B (a tedy y_B) použit dvakrát pro šifrování dvou různých zpráv, útočník může zprávy rozluštit odečtením šifrových textů (viz dvojí použití hesla u aditivních šifer).

✍️ Digitální podpis – vlastnosti, princip, RSA podpis

Digitální podpis: kryptografický mechanismus umožňující ověřit autenticitu a integritu zprávy. Podepisující použije svůj soukromý klíč → ověřovatel použije jeho veřejný klíč.

Požadované vlastnosti digitálního podpisu:

  • Nezfalšovatelnost a autentizace – podpis nelze napodobit jiným subjektem než podepisujícím.
  • Ověřitelnost – příjemce musí být schopen ověřit platnost podpisu.
  • Integrita – podepsaná zpráva se nedá změnit, aniž by se podpis zneplatnil.
  • Nepopiratelnost – podepisující nesmí mít možnost podpis popřít (nemůže tvrdit, že dokument nepodepsal).

Proč podepisovat haš, ne zprávu přímo: Asymetrické operace (RSA) jsou výpočetně drahé a mají omezení na délku vstupních bloků. Proto se nejprve spočítá haš zprávy (fixní délka, typicky 256–512 bitů) a podepíše se haš. Bezkoliznost hešovací funkce zaručuje, že podpis na haši je ekvivalentní podpisu na zprávě – útočník nemůže najít jinou zprávu se stejným hašem.

RSA digitální podpis:

  • Podepisování: S = H(M)^d mod n (aplikuje dešifrovací transformaci DSK na haš zprávy).
  • Ověření: příjemce spočítá H(M)' = S^e mod n a porovná s H(M).
  • Validita plyne z faktu EVK(DSK(m)) = m.

Kategorie digitálních podpisů:

  • Přímé (direct): mezi dvěma subjekty, příjemce zná VK odesílatele. Problém: bez třetí strany nelze prokázat popiratelnost.
  • Verifikované (arbitrated): využívá důvěryhodnou třetí stranu (arbitra), který ověřuje podpisy.
✅ Podpis vs. šifrování v RSA

Šifrování: používá VK adresáta (šifruje) a SK adresáta (dešifruje). Podpis: podepisující použije svůj SK (podepisuje), ověřovatel použije VK podepisujícího (ověřuje). Matematicky se jedná o stejné operace, jen v opačném pořadí a s různými klíči.

🔀 Hešovací funkce – definice, vlastnosti, konstrukce

Kryptografická hešovací funkce h: X → {0,1}^n je jednosměrná funkce 1. typu a bezkolizní. Libovolně dlouhý vstup zobrazuje na pevnou délku n bitů (haš / hash / hašový kód / digitální otisk).

Jednosměrné funkce:

  • Typ 1 (bez padacích dvířek): z obrazu nelze najít vzor – výpočetně neproveditelné. Příklad: násobení prvočísel (snadné) vs. faktorizace (těžké).
  • Typ 2 (s padacími dvířky): vzor lze najít jen se znalostí „padacích dvířek" – klíče. Příklad: RSA (dešifrování s SK = padací dvířka).

Bezkoliznost:

  • Bezkoliznost 1. řádu (silná): výpočetně nezvládnutelné najít jakékoliv dvě různé zprávy M ≠ M' takové, že h(M) = h(M'). Složitost pro n-bitový haš: přibližně 2^(n/2) (narozeninový paradox).
  • Bezkoliznost 2. řádu (slabá): pro daný vzor x je výpočetně nezvládnutelné najít druhý vzor y ≠ x takový, že h(x) = h(y). Složitost: přibližně 2^n.
🎂 Narozeninový paradox

Pro n-bitovou hešovací funkci nastává kolize s cca 50% pravděpodobností při zahašování přibližně 2^(n/2) různých zpráv – nikoliv 2^(n−1), jak by bylo intuitivní. Pro SHA-1 (160 bitů) postačí 2^80 zpráv. Paradox: hledáme „jakoukoliv kolizi" (1. řád), ne kolizi s konkrétní zprávou (2. řád).

Damgård-Merklova (DM) konstrukce: Moderní hešovací funkce (SHA-1, SHA-256, SHA-512) iterativně zpracovávají zprávu po blocích pomocí kompresní funkce f:

  • Zpráva M se zarovná na celistvý počet bloků (padding: bit 1, pak bity 0, pak délka zprávy – Damgård-Merklovo zesílení).
  • Iterace: H_i = f(H_{i−1}, M_i), kde H_0 = IV (inicializační konstanta).
  • Výstupní haš = H_N (nebo jeho část).
  • Klíčová vlastnost DM: Pokud je kompresní funkce f bezkolizní, pak je bezkolizní i celá iterovaná hešovací funkce → stačí se soustředit na kvalitu f.

Daviesova-Meyerova konstrukce kompresní funkce: H_i = E_{M_i}(H_{i−1}) XOR H_{i−1} (bloková šifra s klíčem = blok zprávy, výstup maskován vstupem pro jednosměrnost).

Zarovnání: Musí být jednoznačně odebiratelné (jinak kolize). Standardně: doplnit bit 1, pak bity 0, pak 64 bitů s délkou původní zprávy. Délka zprávy v zarovnání (DM zesílení) eliminuje některé útoky.

🔒 SHA-x – rodina algoritmů

SHA (Secure Hash Algorithm) standardizoval NIST (FIPS 180).

Algoritmus Délka haše Délka zprávy Velikost bloku Slovo # rund f Bezpečnost
SHA-1160 b< 2⁶⁴ b512 b32 b8080 b (prolomena!)
SHA-256256 b< 2⁶⁴ b512 b32 b64128 b
SHA-384384 b< 2¹²⁸ b1024 b64 b80192 b
SHA-512512 b< 2¹²⁸ b1024 b64 b80256 b

SHA-1 (1993/1995):

  • 160bitový kontext: 5 × 32bitových slov A, B, C, D, E.
  • Zpracovává 512bitové bloky v 80 rundách (4 × 20 rund).
  • Ve 20 rundách se střídají 4 funkce F, G, H, I a různé konstanty K_i (odvozeny z odmocnin).
  • IV = pevně definovaná konstanta (A=67452301h, B=EFCDAB89h, ...).
  • Status: prolomena – Google v roce 2017 demonstroval SHA-1 kolizi (projekt SHAttered). Nepoužívat pro nové aplikace.

SHA-256 (od 2002, FIPS 180-2):

  • 256bitový kontext (8 × 32bitových slov A–H), 64 rund, stejný padding jako SHA-1.
  • Používá logické funkce Ch (choose), Ma (majority) a rotace/posuvy Σ0, Σ1, σ0, σ1.
  • Po každé rundě Davies-Meyerovo přičtení původního kontextu (XOR by byl analogický).
  • Lze zkrátit výstup na 128 nebo 192 bitů (žádné známé útoky na zkrácené verze).
  • Status: bezpečná, doporučená pro nové aplikace.

Využití hešovacích funkcí:

  • Kontrola integrity dat (srovnání hashů souborů).
  • Ukládání hesel (vždy se solí – salt – aby slovníkové útoky nefungovaly): databáze uchovává dvojici (sůl, h(heslo || sůl)).
  • Digitální podpisy (podepisujeme haš zprávy, ne zprávu celou).
  • Prokazování znalosti, autentizace původu dat, pseudonáhodné generátory, odvozování klíčů.

🛡️ HMAC – klíčovaný autentizační kód

HMAC (Hash-based Message Authentication Code): kryptografický kód autentizující zprávu i pomocí tajného klíče. Kombinuje hešovací funkci s tajným klíčem – na rozdíl od prostého haše jej nelze zfalzovat bez znalosti klíče.

Proč ne jen h(K || M)? Prostým předřazením klíče před zprávu vznikají zranitelnosti (length extension attack u DM konstrukce). HMAC toto řeší dvojitým hašováním s různými klíči.

Konstrukce HMAC (FIPS PUB 198):

  • b = velikost bloku kompresní funkce v bitech (512 b pro SHA-1/SHA-256, 1024 b pro SHA-384/SHA-512).
  • Konstanty: ipad = řetězec b/8 bajtů hodnoty 0x36; opad = řetězec b/8 bajtů hodnoty 0x5C.
  • K+ = klíč K doplněný nulami vlevo na délku b bitů (pokud K kratší).
  • Výsledek: HMAC_K(M) = H( (K+ XOR opad) || H( (K+ XOR ipad) || M ) )
  • Vnitřní haš zpracovává ipad-klíč zřetězený se zprávou; vnější haš zpracovává opad-klíč zřetězený s výsledkem vnitřního haše.

Vlastnosti HMAC:

  • Nepadělatelný integritní kód: Útočník bez znalosti klíče K nemůže ani změnit zprávu a upravit HMAC tak, aby byl správný.
  • Autentizace původu dat: Správný HMAC prokazuje, že odesílatel znal klíč K.
  • Průkaz znalosti (challenge-response): Dotazovatel pošle náhodnou výzvu (challenge), protistraha odpoví HMAC_K(challenge) – prokazuje znalost K, aniž K prozradí.
  • Nezaručuje nepopiratelnost (symetrická technika – klíč znají obě strany).

📜 Certifikáty X.509 a certifikační autority (CA)

Certifikát (dle X.509): datová struktura podepsaná soukromým klíčem důvěryhodné třetí strany (CA), která svazuje identitu subjektu s jeho veřejným klíčem.

Problém distribuce veřejných klíčů: Jak ověřit, že veřejný klíč, který jsem přijal, skutečně patří tomu, kdo tvrdí, že mu patří? Útočník může podvrhnout svůj vlastní VK.

Obsah certifikátu (formát X.509 v1/v2/v3):

  • Sériové číslo certifikátu (unique v rámci CA).
  • Identifikátor použitého algoritmu podpisu (např. SHA256withRSA).
  • Identifikační údaje vydavatele (CA).
  • Doba platnosti certifikátu (od – do).
  • Identifikační údaje držitele.
  • Veřejný klíč držitele + identifikátor algoritmu.
  • Verze 2/3: jednoznačné identifikátory CA a uživatele, rozšíření (extensions).
  • Digitální podpis CA (podepsán soukromým klíčem CA nad celou strukturou výše).

Certifikační autorita (CA):

  • Důvěryhodná třetí strana, která na základě žádosti vydává certifikáty.
  • Vydaný certifikát: CA = E_{SK_Aut}(T1, ID_A, VK_A) – podepsán SK certifikační autority.
  • Ověření: D_{VK_Aut}(CA) = (T1, ID_A, VK_A) – kdokoliv zná VK autority.
  • Registrační autorita (RA) – přijímá žádosti, kontroluje údaje, předává je CA.
✅ Vlastnosti certifikátů
  • Certifikáty jsou nefalšovatelné – podepsány SK autority.
  • Mohou být veřejně umístěny v adresáři CA bez nutnosti zvláštní ochrany.
  • Kdokoliv může pomocí VK_Aut ověřit platnost certifikátu.
  • Žádný subjekt kromě CA nemůže modifikovat vydané certifikáty.

Řetězec certifikátů a certifikační strom:

  • Při velkém počtu uživatelů je výhodné mít hierarchii CA (strom).
  • Kořenová CA (Root CA) vlastní kořenový certifikát (self-signed).
  • Řetězec certifikátů: od certifikátu uživatele až ke kořenové CA.
  • Certifikát je platný právě tehdy, když jsou platné všechny certifikáty v řetězci.
  • Kořenový certifikát musí být ověřen jinou bezpečnou cestou (předinstalován v OS/prohlížeči).

Křížová certifikace: CA1 prohlásí, že důvěřuje certifikátům vystaveným CA2 a naopak – umožňuje komunikaci uživatelů různých hierarchií CA. Může být jednosměrná nebo obousměrná.

Odvolání certifikátu (revokace):

  • Motivace: kompromitace SK držitele, změna CA, kompromitace certifikátu CA.
  • CA zveřejňuje CRL (Certificate Revocation List) – seznam odvolaných certifikátů.
  • Alternativa: OCSP (Online Certificate Status Protocol) – dotazování v reálném čase.

PKI (Public Key Infrastructure): Technická a organizační opatření pro vydávání, správu, používání a odvolávání klíčů a certifikátů. Norma vychází z X.500/X.509. Hlavní cíl: kompatibilita SW pro Internet.

📋 Shrnutí okruhu 1

  • RSA je asymetrický kryptosystém postavený na těžkosti faktorizace; šifrování = m^e mod n, dešifrování = c^d mod n. Bezpečnost závisí na délce klíče (dnes min. 2048, doporučeno 4096 bitů).
  • Diffie-Hellman umožňuje výměnu klíčů přes nezabezpečený kanál díky těžkosti diskrétního logaritmu, ale neposkytuje autentizaci (nutno kombinovat s certifikáty).
  • Hešovací funkce jsou jednosměrné a bezkolizní – podepisuje se haš zprávy, ne zpráva samotná; SHA-1 je prolomená, používá se SHA-256 a novější.
  • HMAC přidává k hešování tajný klíč → nepadělatelný autentizační kód zprávy; nezaručuje nepopiratelnost.
  • Certifikáty X.509 svazují identitu s VK pomocí podpisu CA; PKI zajišťuje distribuci a správu certifikátů v hierarchii řetězců certifikátů.

Kontrolní otázky a odpovědi

Q: Proč nemůže útočník ze znalosti n (modul RSA) a e (veřejný klíč) odvodit d (soukromý klíč)?

A: Pro výpočet d = e⁻¹ mod Φ(n) je nutné znát Φ(n) = (p−1)(q−1). Výpočet Φ(n) bez znalosti p a q je stejně těžký jako faktorizace n. A faktorizace 680ciferného čísla by zabrala stovky let nejrychlejšími algoritmy.

Q: Proč Diffie-Hellman nesmí být použit bez autentizace?

A: DH je zranitelný vůči útoku man-in-the-middle – útočník se může vmezeřit mezi Alice a Boba, vytvořit sdílený klíč s každým zvlášť a dešifrovat veškerou komunikaci, aniž to strany zjistí. Proto se DH kombinuje s autentizací (certifikáty, digitálními podpisy).

Q: Co je narozeninový paradox a jak ovlivňuje bezpečnost hešovacích funkcí?

A: Pro nalezení libovolné kolize v n-bitové hešovací funkci postačí zahašovat přibližně 2^(n/2) zpráv (ne 2^n jak by bylo intuitivní). Pro SHA-1 (160 b) → 2^80 operací. Proto SHA-1 nabízí jen 80bitovou bezpečnost proti kolizím, přestože výstup má 160 bitů.

Q: Proč se v digitálním podpisu hashuje zpráva a nepodepisuje se přímo?

A: 1) RSA operuje s bloky omezené délky (menšími než n). 2) Asymetrické operace jsou pomalé – hashování je rychlé. 3) Podpis na hashi je ekvivalentní podpisu na zprávě díky bezkoliznosti hašovací funkce.

Q: K čemu slouží HMAC a čím se liší od prostého hashe?

A: Prostý hash h(M) může kdokoliv přepočítat pro upravenou zprávu. HMAC_K(M) lze přepočítat pouze se znalostí tajného klíče K. HMAC tedy zabraňuje neautorizované modifikaci zprávy a autentizuje původ dat.

Q: Jak funguje ověření certifikátu a co je řetězec certifikátů?

A: Certifikát je podepsán soukromým klíčem CA. Příjemce ověří podpis pomocí veřejného klíče CA. Pokud VK CA není přímo důvěryhodný, je v certifikátu CA podepsaném nadřazenou CA atd. – vzniká řetězec certifikátů až ke kořenové (důvěryhodné) CA. Certifikát je platný tehdy, jsou-li platné všechny certifikáty v řetězci.

Okruh 2 · BI-SPOL.21-10

Symetrické šifry blokové a proudové, operační módy

Proudové šifry (RC4, Salsa20/ChaCha20, A5/1) a blokové šifry (DES, 3DES, AES). Základní parametry, operační módy blokových šifer (ECB, CBC, CFB, OFB, CTR, CBC-MAC) – popis, vlastnosti a slabiny.

📊 Rozdělení symetrických šifer

Symetrické šifry dělíme na klasické (substituční, transpoziční) a moderní (proudové a blokové).

Klíčový rozdíl mezi blokovými a proudovými šiframi:

  • Bloková šifra: Všechny bloky zprávy jsou šifrovány stejnou transformací E_k (stejný klíč k). Šifruje bloky pevné délky (historicky 64 b, dnes standardně 128 b).
  • Proudová šifra: Z klíče k se nejprve generuje posloupnost hesla h1, h2, … a každý znak OT se šifruje jinou transformací E_{hi}. De facto: proudová šifra = bloková šifra s blokem délky 1, ale s různou substitucí pro každý blok.
💡 Praktický dopad rozdílu

Blokové šifry mají dobré vlastnosti difúze (jeden bit vstupu ovlivní mnoho bitů výstupu) a konfúze (složitý vztah mezi klíčem a ŠT). Synchronní proudové šifry pracují jen nad jednotlivými znaky → nedostatečná difúze. Proto se blokové šifry v proudovém módu (CFB, OFB, CTR) dnes preferují.

🌊 Proudové šifry – principy, RC4, synchronní vs. asynchronní

Proudová šifra: Pro klíč k generátor G vytváří posloupnost hesla h1, h2, … Šifrování: c_i = E_{h_i}(m_i). U moderních proudových šifer (binární abeceda) E_{h_i}(m_i) = m_i XOR h_i.

Vernamova šifra (One-Time Pad):

  • Náhodné heslo stejně dlouhé jako OT, použito pouze jednou.
  • Absolutně bezpečná šifra (dokonalé utajení) – ŠT neobsahuje žádnou informaci o OT.
  • Nepraktická: distribuce klíče stejně dlouhého jako zpráva.

Synchronní vs. asynchronní proudové šifry:

  • Synchronní: Proud hesla nezávisí na OT ani ŠT → příjemce a odesílatel musí být přesně synchronizováni. Výpadek jednoho znaku ŠT zničí synchronizaci a veškerý následující OT. Příklady: RC4, Salsa20, A5/1.
  • Asynchronní (samosynchronizující): Proud hesla závisí na n předchozích znacích ŠT: h_i = f(k, c_{i−n}, ..., c_{i−1}). Po obdržení n+1 správných znaků ŠT se automaticky synchronizuje. Příklad: historický Vigenèrův autokláv.

Dvojí použití hesla – kritická slabina: Pokud jsou dvě zprávy zašifrovány tímtéž heslem, odečtením ŠT eliminujeme heslo: |c_i − c_i'| = |m_i − m_i'|. Z tohoto výsledku lze luštit OT (jako knižní šifra). Proto musí být IV vždy náhodné a unikátní pro každou zprávu.

RC4 (Rivest Cipher 4, 1987):

  • Jedna z historicky nejpoužívanějších šifer (SSL, WEP, S/MIME). Dnes považována za prolomenou.
  • Nevyužívá IV – generuje pro každé spojení nový klíč (asymetricky).
  • Princip: inicializace permutace S (256 prvků) pomocí klíče; pak konečný automat nad S generuje bajty hesla (XOR na OT).
  • Inicializace: S = {0,1,...,255}; míchání pomocí klíče k (délky n): j = (j + S[i] + k[i mod n]) mod 256; swap S[i] ↔ S[j].
  • Generování hesla: i++; j = (j + S[i]) mod 256; swap S[i] ↔ S[j]; h = S[(S[i]+S[j]) mod 256].
  • Délka klíče: typicky 40 nebo 128 bitů. Status: prolomená, nepoužívat.

🎲 Salsa20 a ChaCha20 – moderní proudové šifry

Salsa20 (D. J. Bernstein, 2005) a ChaCha20 (Bernstein, 2008) jsou synchronní proudové šifry s výbornou bezpečností a výkonem. ChaCha20 je nástupce Salsa20 s lepším rozptylem per rundu.

Princip Salsa20:

  • Pracuje s vnitřním stavem tvořeným maticí 4×4 slov (každé 32 bitů = celkem 512 bitů).
  • Počáteční stav: 8 klíčových slov (256bitový klíč), 4 pevná slova „expand 32-byte k", 2 slova nonce, 2 slova pozice (čítač).
  • Základní operace: ARX (Add-Rotate-XOR) – 32bitové sčítání, XOR, rotace o konstantní vzdálenost.
  • Základní funkce: Quarter-Round QR(a, b, c, d) – každé slovo je aktualizováno jednou.
  • Liché rundy: QR aplikována na 4 sloupce; sudé rundy: na 4 řádky.
  • Celkem 20 rund (10× opakování lichá+sudá). Výstup: 64 B keystreamu.
  • Na konci se k výsledku přičte vstupní stav (znemožňuje zpětný chod).
  • Výhoda CTR-módu: heslo na libovolné pozici lze vypočítat přímo bez předchozích bloků.

Varianty Salsa20: Salsa20/8 (8 rund), Salsa20/12 (12 rund) – rychlejší, ale méně bezpečné. Salsa20 (20 rund) je standard. XSalsa20 – rozšířená 192bitová nonce.

ChaCha20 – vylepšení oproti Salsa20:

  • Modifikovaná Quarter-Round funkce – každé slovo aktualizováno 2× (u Salsa20 jen 1×).
  • Lepší difúze: po jedné QR průměrně 12,5 změněných bitů (u Salsa20 jen 8).
  • Sudé rundy aplikují QR na 4 hlavní a vedlejší diagonály (místo řádků) → lepší lavinový efekt.
  • Efektivnější na architekturách SSE (x86).
  • Použití: TLS 1.3, QUIC/HTTP3, OpenSSH, Android (kde není HW akcelerace AES). Kombinace ChaCha20-Poly1305 pro autentizované šifrování (AEAD).

📱 Proudová šifra A5/1 – GSM

A5/1 (1987, tajná do 1999) je synchronní proudová šifra pro zabezpečení hlasové komunikace v GSM. Skládá se ze tří LFSR (Linear Feedback Shift Register) s nelineárním mechanismem clocking.

Struktura:

  • Tři posuvné registry s lineární zpětnou vazbou (LFSR): R1 (19 bitů), R2 (22 bitů), R3 (23 bitů).
  • Zpětná vazba: primitivní polynomy (zaručují maximální periodu výstupní posloupnosti).
  • Taktovací bity: R1[8], R2[10], R3[10] – jedinou nelineární součástí je mechanismus posunu.

Mechanismus clocking (majority voting):

  • V každém taktu se spočítá majorita ze tří taktovacích bitů (která hodnota převládá).
  • Posunou se jen ty registry, jejichž taktovací bit = majorita.
  • Výstupní bit keystreamu: k_i = R1[18] XOR R2[21] XOR R3[22].

Inicializace a šifrování:

  • Inicializace: XOR všech tří registrů se 64bitovým klíčem K (bity 0–63), pak s 22bitovým IV (číslo rámce), poté 100 discard taktů.
  • Pro každý GSM rámec (228 bitů): 228 taktů → 228 bitů keystreamu (114 směr base→mobil, 114 mobil→base).
  • Pro každý nový rámec se použije stejný K, ale jiný IV (číslo rámce).
⚠️ Bezpečnost A5/1

Efektivní délka klíče je pouze 64 bitů (slabé). Celková délka vnitřního stavu: 19+22+23 = 64 bitů. Jsou známy reálné útoky umožňující rozluštění v řádu minut pomocí předpočítaných rainbow tabulek. Bezpečnost dnešního GSM je kritizována, LTE/5G používají silnější algoritmy.

🧱 Blokové šifry – definice, DES, 3DES

Bloková šifra: Šifrovací systém (M, C, K, E, D), kde E_k a D_k jsou bijekce nad bloky pevné délky t. Všechny bloky OT jsou šifrovány stejnou transformací E_k a dešifrovány D_k.

Základní parametry blokových šifer:

  • Historicky: délka bloku 64 bitů (DES, 3DES, IDEA). Dnes standard: 128 bitů (AES).
  • Délka klíče: určuje odolnost vůči útoku hrubou silou.
  • Bezpečnost závisí na: délce klíče, délce bloku, kvalitě algoritmu (odolnost vůči diferenciální a lineární kryptoanalýze).

DES (Data Encryption Standard, 1977):

  • Bloková šifra Feistelova typu, délka bloku 64 bitů, délka klíče 56 bitů.
  • Iterovaná šifra: 16 rund s rundovními klíči odvozenými z hlavního klíče.
  • Stavební části rundy: expanze E (32→48 b), XOR s rundovním klíčem (48 b), 8 S-boxů (6→4 b každý), permutace P.
  • Feistelova struktura: vstup rozdělen na levou L a pravou R část; L_{i+1} = R_i; R_{i+1} = L_i XOR f(R_i, K_i). Dešifrování = šifrování s obráceným pořadím rundovních klíčů.
  • Prolomení DES: 1998 – stroj DES-Cracker (EFF) prolomil DES hrubou silou za méně než 3 dny. 56bitový klíč = pouze 2^56 ≈ 7,2 × 10^16 kombinací – dnes triviální.
  • Status: zastaralý, nepoužívat. Nahrazen 3DES a pak AES (od 2002).

3DES – Triple DES (od 1999, FIPS 46-3):

  • Prodlužuje efektivní délku klíče trojitou aplikací DES (EDE = Encrypt-Decrypt-Encrypt) se 2 nebo 3 různými klíči.
  • 3DES-EDE: c = E_{K3}(D_{K2}(E_{K1}(m))). Pokud K1 = K2 = K3 → degeneruje na DES (zpětná kompatibilita).
  • Délka klíče: K1 ≠ K2 ≠ K3 → 168 bitů (efektivně ~112 b kvůli meet-in-the-middle); K1 = K3 ≠ K2 → 112 bitů.
  • Výhoda: využívá ověřený DES. Nevýhoda: pomalý (3× DES), 64bitový blok (zranitelný birthday atakem při šifrování velkého množství dat).
  • Status: zastaralý, nahrazen AES.

AES – Advanced Encryption Standard

AES (od 2002, FIPS PUB 197): symetrická bloková šifra s délkou bloku 128 bitů a délkou klíče 128, 192 nebo 256 bitů. Vybráno ve výběrovém řízení NIST (1997–2001) – zvítězil algoritmus Rijndael (J. Daemen a V. Rijmen).

Parametry AES:

  • Délka bloku: 128 bitů (pevná).
  • Délka klíče: 128 b → 10 rund; 192 b → 12 rund; 256 b → 14 rund. Vzorec: N_r = N_k + 6, kde N_k = délka klíče / 32 bitů.
  • AES není Feistelova šifra! (Na rozdíl od DES.)
  • Pracuje s prvky Galoisova tělesa GF(2^8).

Operace v jedné rundě AES:

  • SubBytes: Nelineární substituce každého bajtu pomocí pevné S-box tabulky (inverzní prvky v GF(2^8) + afinní transformace). Jediný zdroj nelinearity v AES.
  • ShiftRows: Cyklický posun řádků matice 4×4 bajtů doleva (řádek 0 o 0, řádek 1 o 1, řádek 2 o 2, řádek 3 o 3 bajty). Difúze na úrovni bajtů.
  • MixColumns: Lineární transformace každého sloupce matice (násobení polynomem v GF(2^8)). Zajišťuje difúzi v rámci sloupce. Vynechána v poslední rundě.
  • AddRoundKey: XOR aktuálního stavu s rundovním klíčem (128 bitů). Provádí se i před první rundou (úvodní zašumění).

Odvozování rundovních klíčů (Key Expansion): Ze šifrovacího klíče se deterministicky odvozuje 1 + N_r rundovních 128bitových klíčů.

✅ Výhody AES
  • 128bitový blok (odolný vůči birthday attack na rozdíl od 64bitového DES/3DES).
  • Žádné slabé klíče (na rozdíl od DES).
  • Odolný vůči lineární a diferenciální kryptoanalýze.
  • Vhodný pro paralelní zpracování, malé nároky na paměť.
  • HW akcelerace v moderních procesorech (instrukce AES-NI).
  • Všechny operace jsou reverzibilní → symetrické dešifrování.

🔄 Operační módy blokových šifer

Operační mód: způsob použití blokové šifry pro šifrování zprávy delší než jeden blok. Různé módy nabízejí různé vlastnosti (difúze, paralelizace, odolnost vůči chybám, integrita).

Proč jsou potřeba? Samotná bloková šifra šifruje vždy jen jeden blok. Pro delší zprávy musíme definovat, jak bloky spojit. Volba módu ovlivňuje bezpečnostní vlastnosti.

ECB – Electronic Code Book (Elektronická kódová kniha)

  • Každý blok OT se šifruje nezávisle: ŠT_i = E_K(OT_i).
  • Slabiny: Stejné bloky OT → stejné bloky ŠT (determinismus). Útočník může bloky ŠT vyměňovat, vkládat, odebírat bez detekce (nezajišťuje integritu). Rozkrývá vzory v datech (famous: penguin v ECB).
  • Použití: Pouze pro šifrování jednoho bloku (např. distribuce klíčů). Nepoužívat pro delší data.

CBC – Cipher Block Chaining (Řetězení šifrových bloků)

  • Každý blok OT se před šifrováním XORuje s předchozím blokem ŠT: ŠT_i = E_K(OT_i XOR ŠT_{i−1}). Inicializace: ŠT_0 = IV (náhodný inicializační vektor).
  • Dešifrování: OT_i = D_K(ŠT_i) XOR ŠT_{i−1}.
  • Vlastnosti: Stejný OT s různým IV → různý ŠT. Chyba v ŠT_i naruší dešifrování bloků i a i+1 (propagace 2 bloků).
  • Samosynchronizace: Po 2 za sebou jdoucích správných blocích ŠT se dešifrování zotaví.
  • Nejpoužívanější mód blokových šifer. IV musí být náhodný a unikátní pro každou zprávu.
  • Slabina: Nelze paralelizovat šifrování (každý blok závisí na předchozím), lze paralelizovat dešifrování.

CFB – Cipher Feedback (Zpětná vazba šifrového textu)

  • Převádí blokovou šifru na asynchronní proudovou šifru.
  • Šifrování: ŠT_i = OT_i XOR E_K(ŠT_{i−1}). IV = ŠT_0.
  • Dešifrování: OT_i = ŠT_i XOR E_K(ŠT_{i−1}).
  • Bloková šifra se používá jen jednosměrně (jen E_K, ne D_K) → výhoda v HW.
  • Samosynchronizující (asynchronní) proudová šifra. Chyba v ŠT propaguje do 2 bloků OT, pak se synchronizuje.

OFB – Output Feedback (Zpětná vazba výstupu)

  • Převádí blokovou šifru na synchronní proudovou šifru.
  • Šifrování: H_0 = E_K(IV); ŠT_i = OT_i XOR H_i; H_{i+1} = E_K(H_i).
  • Dešifrování: totožné se šifrováním (heslo se generuje nezávisle na OT/ŠT).
  • Bloková šifra se používá jen jednosměrně (jen E_K).
  • Čistá synchronní proudová šifra: heslo generováno zcela autonomně, neovlivněno zprávou.
  • Perioda hesla: maximálně 2^N (N = délka bloku), závisí na IV. Pro b = N: střední hodnota délky periody ≈ 2^(N−1).
  • Slabina: Citlivý na desynchronizaci (výpadek bitu zruší vše).

CTR – Counter Mode (Čítačový mód)

  • Převádí blokovou šifru na synchronní proudovou šifru s garantovanou maximální periodou hesla.
  • Šifrování: CTR_i = IV + i − 1 (mod 2^B); H_i = E_K(CTR_i); ŠT_i = OT_i XOR H_i.
  • Dešifrování: totožné se šifrováním.
  • Výhody: Plně paralelizovatelný (šifrování i dešifrování). Heslo libovolné pozice lze vypočítat přímo (znáte-li IV a pozici). Maximální perioda hesla garantována čítačem.
  • Kritické: Stejný blok hesla nesmí být použit dvakrát (v různých zprávách se stejným klíčem) – jinak dvojí použití hesla → rozluštění OT.
Mód Typ Paralelizace šifrování Paralelizace dešifrování Propagace chyby Hlavní slabina / poznámka
ECBBloková✅ Ano✅ Ano1 blokStejné bloky OT → stejné ŠT. Nepoužívat!
CBCBloková (asyn.)❌ Ne✅ Ano2 blokySamosynchronizující. Nejpoužívanější.
CFBProudová (asyn.)❌ Ne✅ Ano2 blokyJen E_K. Samosynchronizující.
OFBProudová (syn.)❌ Ne (ale heslo ano)❌ Ne (heslo lze)Chyba = jen změna bituJen E_K. Citlivý na desynchronizaci.
CTRProudová (syn.)✅ Ano✅ AnoChyba = jen změna bituNesmí se opakovat CTR s týmž klíčem!

CBC-MAC – Message Authentication Code

  • Šifrování nezajišťuje integritu! CBC-MAC tento problém řeší.
  • Zpráva je „šifrována" v CBC módu s IV = 0, ale průběžný ŠT se nikam neposílá. CBC-MAC = poslední blok ŠT_N (případně ještě jednou zašifrovaný klíčem K2: E_{K2}(ŠT_N)).
  • Klíč pro CBC-MAC K1 musí být jiný než klíč pro šifrování zprávy K2.
  • Detekuje neúmyslné chyby i úmyslné modifikace zprávy (bez znalosti K1 nelze nový MAC spočítat).
  • Autentizuje původ dat (odesílatel musel znát K1).
  • Nezaručuje nepopiratelnost (symetrická technika).

Metoda solení (IV salting)

  • U CBC, OFB, CFB, CTR: komunikujícímu protějšku se předává hodnota IV, ale k šifrování se použije IV' = hash(IV || K) nebo jiná derivace.
  • Skutečně použitý IV' se nikdy neobjeví na komunikačním kanálu → vyšší bezpečnost.

📋 Shrnutí okruhu 2

  • Proudové šifry šifrují znak po znaku různou substitucí (heslem); blokové šifry šifrují celé bloky stejnou transformací. Synchronní proudové šifry vyžadují přesnou synchronizaci, asynchronní se dokážou znovu synchronizovat.
  • DES (56bitový klíč, 64bitový blok) je prolomen, nahrazen 3DES (112/168 b klíč) a AES (128/192/256 b klíč, 128 b blok). AES je dnešní standard.
  • ECB je nejslabší mód (deterministický), CBC je nejpoužívanější (řetězení). CFB a OFB převádějí blokovou šifru na proudovou, CTR umožňuje plnou paralelizaci.
  • Žádný šifrovací mód (ECB, CBC, CFB, OFB, CTR) sám o sobě nezajišťuje integritu – k tomu slouží CBC-MAC nebo HMAC.
  • IV musí být vždy náhodný a unikátní; dvojí použití hesla (nebo IV) u aditivních/XOR šifer je kritická slabina.

Kontrolní otázky a odpovědi

Q: Jaký je hlavní rozdíl mezi proudovou a blokovou šifrou z hlediska šifrování?

A: Bloková šifra šifruje všechny bloky OT stejnou transformací E_k. Proudová šifra generuje z klíče posloupnost hesla h1, h2, … a každý znak šifruje jinou transformací E_{h_i}. U moderních binárních proudových šifer: c_i = m_i XOR h_i.

Q: Proč je ECB mód nebezpečný?

A: ECB šifruje každý blok OT nezávisle. Pokud se stejný blok OT vyskytne vícekrát (např. prázdný sektor na disku nebo opakující se záhlaví zprávy), vždy vytvoří stejný blok ŠT → útočník dokáže odhalit vzory v datech. Navíc může bloky ŠT vyměňovat, přidávat nebo odstraňovat bez detekce.

Q: Co je IV (inicializační vektor) a proč musí být náhodný?

A: IV je veřejná náhodná hodnota, která se použije pro první blok (CBC: XOR s OT; OFB/CFB/CTR: nastavení počátečního stavu automatu). IV zajišťuje, že šifrování stejné zprávy dvakrát dá pokaždé jiný ŠT. Pokud by byl IV předvídatelný nebo opakující se, vzniká zranitelnost (viz dvojí použití hesla u proudových šifer, CBC padding oracle attacks).

Q: Proč CTR mód umožňuje paralelizaci a CBC ne?

A: CTR: heslo bloku i závisí pouze na CTR_i = IV + i, klíči K a poloze v proudu → každý blok lze šifrovat/dešifrovat nezávisle paralelně. CBC: ŠT_i závisí na ŠT_{i−1} → šifrování je sekvenční. Dešifrování CBC lze paralelizovat (D_K(ŠT_i) závisí jen na ŠT_{i−1}, který je znám).

Q: Jak se liší CBC-MAC od samotného šifrování a proč ho potřebujeme?

A: Šifrování zabraňuje přečtení zprávy, ale nezabraňuje útočníkovi upravit ŠT. Útočník může bloky ŠT v ECB módu přeuspořádat, v CBC/CFB módu způsobit předvídatelné změny v OT. CBC-MAC připojí za zprávu autentizační kód, který vypočítat může pouze ten, kdo zná klíč K1. Útočník bez K1 nemůže upravit zprávu a zároveň správně upravit MAC.

Q: Proč byl DES nahrazen a co je AES?

A: DES s 56bitovým klíčem byl prolomen hrubou silou v roce 1998 (DES-Cracker za méně než 3 dny). AES byl vybrán ve výběrovém řízení NIST v roce 2001 jako náhrada. AES má 128bitový blok a 128/192/256bitový klíč (10/12/14 rund). Není Feistelova šifra, pracuje s GF(2^8), má nelinearitu pouze v SubBytes, je odolný vůči všem známým útokům a má HW akceleraci v moderních procesorech.

Q: Co jsou synchronní a asynchronní proudové šifry a jak se liší v odolnosti vůči chybám přenosu?

A: Synchronní: heslo závisí jen na klíči a IV, ne na OT/ŠT → příjemce a odesílatel musí být přesně synchronizováni. Výpadek 1 bitu ŠT = ztráta synchronizace a zničení veškerého dalšího OT (RC4, Salsa20, A5/1). Asynchronní (samosynchronizující): heslo závisí na n předchozích znacích ŠT → synchronizace se obnoví po n+1 správných bitech ŠT (CFB mód blokové šifry).