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
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
Generování klíčů:
- Zvolíme dvě velká prvočísla
paq(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
etakový, že1 < e < nagcd(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.
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
Protokol DH:
- Veřejně dohodnuté parametry: prvočíslo
m(cca 2⁴⁰⁹⁶) a generátoragrupy Z*m. - Alice zvolí tajné číslo
k_A, spočítáy_A = a^k_A mod ma odešle Bobovi. - Bob zvolí tajné číslo
k_B, spočítáy_B = a^k_B mod ma 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_Aay_B, ale bez znalostik_Anebok_Bnemůž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.
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
Generování klíčů (Alice):
- Alice zvolí prvočíslo
ma generátorggrupy 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.
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
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 na porovná sH(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.
Š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
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.
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-1 | 160 b | < 2⁶⁴ b | 512 b | 32 b | 80 | 80 b (prolomena!) |
| SHA-256 | 256 b | < 2⁶⁴ b | 512 b | 32 b | 64 | 128 b |
| SHA-384 | 384 b | < 2¹²⁸ b | 1024 b | 64 b | 80 | 192 b |
| SHA-512 | 512 b | < 2¹²⁸ b | 1024 b | 64 b | 80 | 256 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
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)
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.
- 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.
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.
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í
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
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
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).
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
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
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íčů.
- 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
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 |
|---|---|---|---|---|---|
| ECB | Bloková | ✅ Ano | ✅ Ano | 1 blok | Stejné bloky OT → stejné ŠT. Nepoužívat! |
| CBC | Bloková (asyn.) | ❌ Ne | ✅ Ano | 2 bloky | Samosynchronizující. Nejpoužívanější. |
| CFB | Proudová (asyn.) | ❌ Ne | ✅ Ano | 2 bloky | Jen E_K. Samosynchronizující. |
| OFB | Proudová (syn.) | ❌ Ne (ale heslo ano) | ❌ Ne (heslo lze) | Chyba = jen změna bitu | Jen E_K. Citlivý na desynchronizaci. |
| CTR | Proudová (syn.) | ✅ Ano | ✅ Ano | Chyba = jen změna bitu | Nesmí 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).