====== 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í ======
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".
* Confusion -- statistické závislosti mezi plaintextem a ciphertextem musejí být co nejvíce komplexní, to zajišťují tzv. S-boxy.
* Diffusion -- každý znak změněný v plaintextu změní celý ciphertext využitím permutací, tzv. P-boxů.
==== Feistelovy šifry ====
{{http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Feistel_cipher_diagram_en.svg/410px-Feistel_cipher_diagram_en.svg.png?250 | 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:
- Algoritmus, který určí klíč pro každé kolo.
- Funkce aplikovaná v každém kole.
Výhodou je, že šifrování i dešifrování je prakticky stejné. Funkce 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 -- .
*
*
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 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 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 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 zvolených plaintextů. Při použití lineární kryptoanalýzy je potřeba 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ů.
Pro 56b klíč a 3DES je stejný jako DES. Pouze z důvodu zpětné kompatibility.
Pro 112b klíč .
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:
* nelineární substituce bytů,
* posunutí řádků matice,
* promíchání sloupců matice (neprovádí se v posledním kole),
* XOR se subklíčem pro dané kolo.
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í
- Generování klíčového páru
- Šifrování
- Dešifrování
=== Generování klíčového páru ===
- výběr 2 prvočísel a podobné bitové délky
- , délka v bitech je délka klíče
- , je Eulerova funkce
- vyber číslo a , dvojce je veřejný klíč
- , dvojce je soukromý klíč
=== Šifrování ===
* a
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.
- vytvoří digitální podpis, značí hash zprávy .
- , pokud , 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 a a do jisté míry i volba . Malé hodnoty a špatně implementovaný nebo žádný padding zvyšují riziko útoku. Často , to je považováno za kompromis mezi předcházením těchto útoků a efektivitou šifrovacích operací (pro velká jsou výpočty složitější). Také je důležitá volba soukromého klíče . Pokud je dostatečně malé, pak je možné jej efektivně spočítat z a .
== Timing attack ==
Při znalosti specifikace HW a době trvání operací je možné odvodit hodnotu soukromého klíče .
Jako obrana před tímto útokem se místo počítá . je potom možné odstranit. Pro každý ciphertext je použita nová náhodná hodnota . 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.
- Alice zvolí .
- Alice pošle Bobovi.
- Bob zvolí .
- Alice spočítá a pošle Bobovi.
- Bob spočítá a pošle Alici.
- Alice spočítá .
- Bob spočítá .
- Obě strany nyní sdílejí .
Běžně používaná hodnota je 2, 3 nebo 5. Čísla a a prvočíslo 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íč , kde 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 ===
* Zvol kryptografickou hashovací funkci , například SHA-1 nebo SHA-2.
* Zvol délku klíče a , například 2048 nebo 3072. Doporučené hodnoty pro jsou (1024, 160), (2048, 224), (2048, 256) a (3072, 256). musí být menší nebo rovno délce výstupu hashovací funkce.
* Zvol -bitové prvočíslo .
* Zvol -bitové prvočíslo (modulus) takové, že je násobek .
* Zvol číslo , jehož stupeň modulo je , tedy , například mod pro volitené (). Je nutno zvolit jiné pokud je výsledek .
* Zvol náhodné , .
*
Veřejný klíč je . Soukromý klíč je .
=== Podepisování ===
* Zvol (pro zprávu) náhodné , .
*
* Pokud je , zvol jiné a začni znovu.
*
* Pokud je , zvol jiné a začni znovu.
* Podpis je .
=== OVěření podpisu ===
* Odmítni podpis pokud není splněno nebo .
*
*
*
*
* Podpis je platný pokud .
==== ====
Hodnota je pro DSA kritická. Použití stejného opakovaně, předvídatelného nebo prozrazení několika bitů 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íčů ===
- Popis multiplikativní cyklické grupy řádu s generátorem .
- Zvol náhodné , .
-
- je veřejný klíč.
- je soukromý klíč.
=== Šifrování ===
- Zvol náhodné , .
-
-
- , je prvek , který odpovídá zprávě .
- je ciphertext.
=== Dešifrování ===
-
- , protože platí .
==== ====
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:
* výstup pevné délky pro libovolný vstup,
* malá změna na vstupu vede k velké změně na výstupu ("avalanche effect"),
* ideálně jednosměrná funkce -- z hashe je prakticky nemožné zrekonstruovat původní data,
* pro stejný vstup vrátí vždy stejný výstup,
* uniformní rozdělení výstupů -- každý možný výstup je generován s přibližně stejnou pravděpodobností,
* slabá bezkoliznost -- pro dané najít tak, že ,
* silná bezkoliznost -- výpočetně je velmi náročné najít a takové, že .
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.
* Eliptické křivky jsou takové, které splňují a,b racionální nebo integer.
* Počítá se modulo n
* Pracujeme jen s křivkami, které nemají vícečetné kořeny. (4a^3 + 27b^2 = 0)
* 2 možné tvary grafů
* Lze jednoduše sčítat body na křivce (asi i násobit)
* Křivky mají konečně mnoho bodů, které lze generovat z daných bodů pomocí sčítání
Problém diskrétního algoritmu na eliptických křivkách:
* hledat k takové, že A.k = B. A,B jsou body na křivce
* Není znám takový efektivní algoritmus
* Je třeba hledat eliptickou křivku nad velkými poli.
Převod diskrétního alg. klasického na EC diskr. alg.
* Plaintext -> bod na eliptické křivce
* Změnit krypto protokol z modulární multiplikace na sčítání bodů na křivce, exponenciální fce změň na násobení bodů
* Spočítej bod, přiřaď cyphertext.
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 , kde . Pro srovnání RSA potřebuje 3072bitové klíče pro dosažení stejné úrovně bezpečnosti.
====== Materiály ======
* [[https://is.muni.cz/auth/el/1433/podzim2012/PV181/um/std/|Kapitola o kryptografických standardech, Labak I]]
* [[https://is.muni.cz/auth/el/1433/jaro2011/PA018/um/PA018_2011_L2.pdf| PA018 - Cryptography, its application, key management, standards]]
* Něco je ve vypracované [[mgr-szz:in-psk:4-psk|4. otázce oboru PSK]]
====== Vypracoval ======
Ondra Mokoš
Předělané eliptické křivky: Marcel Poul
~~DISCUSSION~~