Obsah

2. Kryptografické algoritmy

Principy základních symetrických blokových algoritmů (Feistelovy šifry, DES, AES) a asymetrických algoritmů (RSA, Diffie-Hellman, DSA/ElGamal). Principy konstrukce hašovacích funkcí. Kryptosystémy založené na principu eliptických křivek.

Vypracování

Kerckhoffsův princip

Bezpečnost kryptosystému by měla záviset pouze na utajení klíče, nikoli algoritmu. Algoritmus byl měl být všem znám a všemi ověřitelný, že je bezpečný.

Principy základních symetrických blokových algoritmů (Feistelovy šifry, DES, AES)

Symetrické blokové algoritmy používají tajný klíč sdílený mezi komunikujícími stranami, pracují s bloky dat stanovené délky, na kterou se data musejí zarovnat pomocí paddingu.

Blokové šifry typicky pracují na principu „confusion and diffusion“.

Feistelovy šifry

 Feistelova síť

Šifry, které jsou navrženy jako Feistelova síť.

Tento přístup umožňuje problém návrhu dobré šifry rozdělit na dva podproblémy:

  1. Algoritmus, který určí klíč pro každé kolo.
  2. Funkce F aplikovaná v každém kole.

Výhodou je, že šifrování i dešifrování je prakticky stejné. Funkce F nemusí být invertibilní, stačí pouze otočit pořadí subklíčů.

V každém kole se pracuje pouze s polovinou vstupu. Feistelovy šifry tedy předpokládají vstup sudé délky, který je rozdělen na poloviny – (L_0, R_0).

Následkem toho mají Feistelovy šifry většinou více kol než jiné algoritmy. Ale v jednotlivých kolech jsou opakovány poměrně jednoduché operace. Pro každé kolo je odvozen čerstvý subklíč z klíče.

Zástupci jsou např. Lucifer, DES, Blowfish, Twofish, CAST-128 a další.

Feistelovy šifry je možné zobecnit tak, že šifra pracuje s nestejně velkými částmi vstupu místo polovin. Také je možné vytvořit nehomogenní Feistelovu síť, kde funkce F není ve všech kolech stejná.

Zdroje

http://en.wikipedia.org/wiki/Feistel_cipher http://cs.wikipedia.org/wiki/Feistelova_%C5%A1ifra.

DES

Data Encryption Standard

Horst Feistel z IBM navrhnul šifru Lucifer, která se po drobných změnách provedených NSA stala FIPS standardem pod názvem DES v roce 1977.

DES má definovanou délku bloku 64 bitů. Délka klíče je 64 bitů (56 bitů bez parity), původní Lucifer pracoval se 128bitovým klíčem.

Feistelova šifra s 16 koly.

Obsahuje iniciální a finální permutace, které po zveřejnění nepřidávají žádnou bezpečnost.

Algoritmus generování subklíčů

Klíč je rozdělen na poloviny (28 bitů dlouhé). V každém kole je zvoleno prvních 24 bitů z každé poloviny a použito jako subklíč (délka 48 bitů). Obě poloviny jsou mezi koly rotovány o jeden nebo dva bity doleva v závislosti na kole.

Funkce F pro každé kolo

Pracuje vždy s polovinou vstupu (32 bitů). Vstup funkce F je rozšířen na 48 bitů. Provede se XOR se subklíčem pro dané kolo. Výsledek projde přes S-boxy, kde se každých 6 bitů nahradí 4 bity podle tabulky (nelineární substituce). Nakonec v každém kole jsou data přeskládána podle dané permutace, P-box.

Pro dnešní použití je klíčový prostor 2^{56} příliš malý, také velikost bloku není dostatečná.

Nejpraktičtější známý útok je útok hrubou silou. DES šifra je odolná vůči diferenciální kryptoanalýze. Pro prolomení všech 16 kol je potřeba 2^{49} zvolených plaintextů. Při použití lineární kryptoanalýzy je potřeba 2^{43} známých plaintextů.

Změny provedené NSA se týkaly použitých S-boxů, jejichž kriteria návrhu nebyly zveřejněny. Tyto změny vedly ke spekulacím, že NSA přidala backdoor. Po zveřejnění vyšlo najevo, že takto upravené S-boxy zvýšily bezpečnost DES.

Triple DES

3DES je varianta DES, která používá klíče větší délky.

Délka bloku je původních 64 bitů. Délka klíče může být 56, 112 a 168 bitů.

ciphertext = E_{K_3}(D_{K_2}(E_{K_1}(plaintext))) plaintext = D_{K_1}(E_{K_2}(D_{K_3}(ciphertext)))

Pro 56b klíč K_1 = K_2 = K_3 a 3DES je stejný jako DES. Pouze z důvodu zpětné kompatibility.
Pro 112b klíč K_1 = K_3.

112b klíč odpovídá asi 80b bezpečnosti kvůli útokům se známým plaintextem, případně se zvoleným plaintextem.
168b klíč odpovídá 112b bezpečnosti kvůli meet-in-the-middle útoku.

Zdroje

http://en.wikipedia.org/wiki/Data_Encryption_Standard http://en.wikipedia.org/wiki/Triple_DES

AES

Advanced Encryption Standard

NIST vypsal soutěž o novou symetrickou blokovou šifru, která by nahradila DES. Podmínky byly délka bloku 128 bitů, podporované délky klíče 128, 192 a 256 bitů a nová šifra měla být zároveň výkonnější než DES. Z 15 přihlášených vzešlo 5 finalistů: Rijndael, Serpent, Twofish, RC6 a MARS. V roce 2001 byla vítězem vyhlášena šifra Rijndael.

Původní Rijndael mohl pracovat s libovolnou délkou bloku, která byla násobek 32. V AES je délka bloku fixována na 128 bitů.

AES není Feistelova šifra, ale je to tzv. substitution permutation network, tedy také využívá S-boxy a P-boxy. Počet kol závisí na použité délce klíče.

Délka klíče Počet kol Označení
128 bitů 9+1 AES-128
192 bitů 11+1 AES-192
256 bitů 13+1 AES-256

V každém kole se provede:

Na rozdíl od DES pro šifrování a dešifrování AES jsou potřeba různé obvody.

Známé útoky

Side-channel útoky na některé implementace, např. OpenSSL.

Nejlepší známé útoky na vlastní šifru jsou pro 7 kol AES-128, 8 kol AES-192 a 9 kol AES-256.

Zdroje

http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

Principy asymetrických algoritmů (RSA, Diffie-Hellman, DSA/ElGamal)

Při použití asymetrických algoritmů má každá strana vlastní klíčový pár skládající se z veřejného a soukromého klíče. Pro zajištění stejné úrovně bezpečnosti jsou potřeba výrazně delší klíče než u symetrických algoritmů.

Výhodou těchto algoritmů je, že odpadá nutnost ustavit sdílený klíč mezi komunikujícími stranami. Na druhou stranu je nějakým způsobem nutné věrohodně propojit veřejný klíč a identitu jeho majitele. PGP využívá tzv. „web of trust“, certifikáty vydané ověřenými certifikačními autoritami, atd.

RSA

Autoři Ron Rivest, Adi Shamir a Leonard Adleman, 1977.

Podobný systém byl vyvinut britskou tajnou službou v roce 1973.

Použití tohoto algoritmu je možné rozdělit do několika fází

  1. Generování klíčového páru
  2. Šifrování
  3. Dešifrování

Generování klíčového páru

  1. výběr 2 prvočísel p a q podobné bitové délky
  2. n = p \cdot q, délka n v bitech je délka klíče
  3. \varphi (n) = (p-1)(q-1), \varphi (n) je Eulerova funkce
  4. vyber číslo e : 1 < e < \varphi (n) a \gcd(e,\varphi (n)) = 1, dvojce (n,e) je veřejný klíč
  5. d = e^{-1} \mod \varphi (n), dvojce (n,d) je soukromý klíč

Šifrování

Před šifrováním zprávy je zpráva doplněna paddingem, který zajistí, že plaintext nepatří mezi tzv. „insecure plaintexts“. Používal se padding definovaný v PKCS#1, ale bylo ukázáno, že pro některé zprávy tento padding neposkytuje dostatečnou úroveň bezpečnosti. Do PKCS#1 byla přidána definice nového schématu OAEP.

Dešifrování

Kromě šifrování je možné RSA algoritmus použít i pro digitální podpis.

  1. sig = h(m)^d \mod n vytvoří digitální podpis, h(m) značí hash zprávy m.
  2. hash = sig^e \mod n, pokud hash = h(m), podpis je úspěšně ověřen.

Stejný klíč by neměl být použit pro šifrování a podepisování zpráv zároveň. Výpočty lze urychlit využitím čínské věty o zbytku (CRT).

Bezpečnost

RSA je považován za bezpečný algoritmus, protože není známý způsob, jak efektivně faktorizovat velká čísla. Není známý žádný polynomiální algoritmus.

Shorův algoritmus umožňuje faktorizovat čísla v polynomiálním čase na kvantovém počítači, tedy existence kvantového počítače by znamenala rozbití RSA.

Bezpečnost RSA závisí na volbě prvočísel p a q a do jisté míry i volba e. Malé hodnoty e a špatně implementovaný nebo žádný padding zvyšují riziko útoku. Často e = 65537, to je považováno za kompromis mezi předcházením těchto útoků a efektivitou šifrovacích operací (pro velká e jsou výpočty složitější). Také je důležitá volba soukromého klíče d. Pokud je d dostatečně malé, pak je možné jej efektivně spočítat z n a e.

Timing attack

Při znalosti specifikace HW a době trvání operací je možné odvodit hodnotu soukromého klíče d.

Jako obrana před tímto útokem se místo c^d \mod n počítá r^e \cdot c^d \mod n. r^e je potom možné odstranit. Pro každý ciphertext je použita nová náhodná hodnota r. Této metodě se říká „cryptographic blinding“.

Zdroje

http://en.wikipedia.org/wiki/RSA_(algorithm)

Diffie-Hellman

Algoritmus pro ustavení sdíleného klíče mezi dvěma stranami na nezabezpečeném kanálu bez žádné předchozí sdílené znalosti.

Autoři Whitfield Diffie a Martin Hellman, 1976. Podobný algoritmus byl opět o něco dříve vyvinut britskou tajnou službou.

  1. Alice zvolí p, g, a.
  2. Alice pošle p, g Bobovi.
  3. Bob zvolí b.
  4. Alice spočítá A = g^a \mod p a pošle A Bobovi.
  5. Bob spočítá B = g^b \mod p a pošle B Alici.
  6. Alice spočítá K = B^a \mod p.
  7. Bob spočítá K = A^b \mod p.
  8. Obě strany nyní sdílejí K = (g^a)^b \mod p = (g^b)^a \mod p.

Běžně používaná hodnota g je 2, 3 nebo 5. Čísla a a b a prvočíslo p musejí být velká.

Diffie-Hellman využívá problém diskrétního logaritmu.

Algoritmus ve své původní podobě nezahrnuje autentizaci stran, je tedy možný man-in-the-middle útok.

Toto schéma je možné rozšířit i pro libovolný počet stran. Tyto strany pak sdílejí jeden tajný klíč g^{x_1 \cdots x_n} \mod p, kde x_1, \ldots, x_n jsou tajné exponenty všech zůčastněných stran.

Zdroje

http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DSA

Digital Signature Algorithm, FIPS standard pro digitální podpisy z roku 1991.

Generování klíče

Veřejný klíč je (p, q, g, y). Soukromý klíč je x.

Podepisování

OVěření podpisu

Hodnota k je pro DSA kritická. Použití stejného k opakovaně, předvídatelného k nebo prozrazení několika bitů k může vést k rozbití DSA.

Zdroje

http://en.wikipedia.org/wiki/Digital_Signature_Algorithm

ElGamal

Autor je Taher ElGamal, 1984.

Generování klíčů

  1. Popis multiplikativní cyklické grupy G řádu q s generátorem g.
  2. Zvol náhodné x, 1 \le x \le q-1.
  3. h = g^x
  4. (h, G, q, g) je veřejný klíč.
  5. x je soukromý klíč.

Šifrování

  1. Zvol náhodné y, 0 \le y \le q-1.
  2. s = h^y
  3. c_1 = g^y
  4. c_2 = m' \cdot s, m' je prvek G, který odpovídá zprávě m.
  5. (c_1, c_2) = (g^y, m' \cdot h^y) = (g^y, m' \cdot (g^x)^y) je ciphertext.

Dešifrování

  1. s = c_1^x
  2. m' = c_2 \cdot s^{-1}, protože platí c_2 \cdot s^{-1} = m' \cdot h^y \cdot (g^{x \cdot y})^{-1} = m' \cdot g^{x \cdot y} \cdot g^{-x \cdot y} = m'.

ElGamal je většinou využíván v hybridních kryptosystémech, symetrický klíč je zašifrován použitím ElGamal a zpráva samotná je šifrovaná symetrickou šifrou.

Bezpečnost ElGamal je založena na problému diskrétního logaritmu.

Existuje i ElGamal algoritmus pro digitální podpisy, který je podobný DSA.

Zdroje

http://en.wikipedia.org/wiki/ElGamal_encryption

Principy konstrukce hašovacích funkcí

Požadované vlastnosti hashovací funkce:

Hashovací funkce mohou být vytvořeny ze symetrických blokových šifer například pomocí konstrukcí Miyaguchi-Preneel nebo Matyas-Meyer-Oseas.

Kryptosystémy založené na principu eliptických křivek

Asymetrická kryptografie, která využívá eliptické křivky nad konečnými tělesy.

Problém diskrétního algoritmu na eliptických křivkách:

Převod diskrétního alg. klasického na EC diskr. alg.

Založeno na problému hledání diskrétního logaritmu náhodné eliptické křivky s ohledem na zvolený bod.

Např. ECDH (Elliptic curve Diffie–Hellman), ECDSA (Elliptic Curve DSA) a další.

Pro zajištění 128bitové bezpečnosti je potřeba křivka nad F_q, kde q \approx 2^{256}. Pro srovnání RSA potřebuje 3072bitové klíče pro dosažení stejné úrovně bezpečnosti.

Materiály

Vypracoval

Ondra Mokoš
Předělané eliptické křivky: Marcel Poul