UNIX a Internet

Šifrování

Autor: Jiří Hnídek / jiri.hnidek@tul.cz

Šifrování

Kryptografie

Utajení obsahu zprávy pomocí tajemství

Kryptoanalýza

Snaha číst zprávu bez znalosti tajemství

Něco z Historie

Césarova šifra

Substituční šifra

Enigma

Německý elekricko-machnický stroj podobný dálnopisu.

Utajovaný šifrovací mechanismus i šifrovací klíče.

Dělení šifer

Podle použití šifrovacích klíčů

  • Symetrické - stejný klíč pto kódování i dekódování
    • Rychlé
    • Problém přenosu klíče, který musí být tajný.
  • Asymetrické - dva klíče
    • Pomalejší
    • Pro kódování a dekódování není nutné sdílet tajemství

Podle množství zpracované informace

  • Blokové - pracují s bloky dat
  • Proudové - pracují s proudy dat

Symetrické šifry

  • Tajný klíč sloučí slouží pro šifrování i dešifrování.
  • Problém přenosu tajného klíče

Vermanova šifra

  • Pro zašifrování se používá klíč a funkce XOR
  • Klič musí být minimálně dlouhý jako zpráva
  • Klíč musí být dokonale náhodný
  • Klíč může být použit pouze jednou

Klíč symetrické šifry

  • Generátor klíče by měl být v ideálním případě zcela náhodný
  • V praxi se komninuje několik zdrojů náhodného i pseudonáhodného signálu.
  • Přerušení od síťové karty, šum zvukové karty, klávesnice, myš, specializovaná zařízení.
  • V Linuxu: /dev/random a /dev/urandom

Diffie-Hellmann

  • Algoritmus bezbečné výměny klíče symetrické šifry
  • Klíč nikdy neputuje v otevřené formě
  • Neumí řešit sám o sobě MITM útok
  • Používán v SSL/TLS

Typy symetrických šifer

Bloková

  • Operují s blokem konstantní délky
  • Na každý blok je aplikována stejná transformace
  • Př: DES, 3DES, AES

Proudová

  • Kombinace datového toku s keastreamem (XOR)
  • Rychlejší ale náchylnější na prolomení
  • Př: RC-4

MITM (Man in the Middle)

  • Mezi dvěma komunikujícími stranami je útočník, který se vydává za obě protistrany.
  • Útočník dešifruje a znovu zašifruje komunikaci
  • Lze odhalit podle nesprávného certifikátu (např. self-signed).

Asymetrická šifra

  • Pro šifrování a dešifrování se používají dva klíče
  • Privátní (P) - utajuje se
  • Veřejný (V) - dostupný v PKI
  • Jedním klíčem se šifruje, druhým dešifruje
  • Klíče mají těsnou vazbu (generují se společně)
  • Z jednoho klíče nelze v polynomiálním čase odvodit druhý klíč

Jednosměrné funkce

  • Takové funke jsou základem moderní kryptografie
  • Jednoduše lze spočítat funkční hodnotu ze vstupních dat
  • Inverzní funke je výpočetně extrémně náročná
  • Např: rozklad velkých čísel na prvočísla, eliptické křivky (ECC), apod.

Algoritmus RSA

  • Autoři: Rivest, Shamir, Adleman
  • Využívá výpočetní náročnosti rozkladu velkých čísel na prvočísla.
  • Je nutné zvolit dostatečně velký klíč (alespoň 2048 bitů). Dopručení pro rok 2016.
  • V brzké budoucnosti (současnosti?) bude možné dopočítat tajný klíč z veřejného klíče v polynomiálním čase na kvantových počítačích (Shorův algoritmus).
  • Algoritmus sám o sobě nemůže řešit MITM útok.

Algoritmus RSA

Generování klíčů

  • Zvolímě dvě velká náhodná prvočísla: $p$ a $q$.
  • Spočítáme: $n = pq$.
  • Spočítáme hodnotu Eulerovy funkce: $\varphi(n) = (p - 1)(q - 1)$.
  • Zvolíme číslo $e$ menší jak $\varphi(n)$ s tímto číslem nesoudělné.
  • Nalezneme číslo $d$, aby platilo: $de \equiv 1 (\mod \varphi(n))$
  • Veřejný klíč: $(n, e)$
  • Tajný klíč: $(n, d)$

Algoritmus RSA

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

  • Zprávu, kterou chceme šifrovat nejprve převedená dohodnutým způsobem na číslo $m < n$.
  • Šifrování zprávy $m$ provedeme pomocí veřejného klíče $(n, e)$:
  • $$ c = m^{e} \bmod n $$
  • Dešifrování původní zprávy provedeme pomocí tajného klíče $(n, d)$:
  • $$ m = c^{d} \bmod n $$

Algoritmus RSA

Digitální podpis

  • Využívá se toho, že llgoritmus je z hlediska šifrování a dešifrování záměný (lze prohodit d a e).
  • Digitální podpis vytvoříme z hashe: $m_{hash} = f_{hash}(m)$ zprávy pomocí tajného klíče $(n, d)$:
  • $$ c_{sign} = m_{hash}^{d} \bmod n $$
  • Digitální podpis ověříme porovnáním $m_{hash}$ s:
  • $$ m_{hash}' = c_{sign}^{e} \bmod n $$
  • Pokud se zpráva během přenosu nezměnila, tak $m_{hash}' = m_{hash}$

Křížová šifra

  • Obě strany komunikace mají svůj tajný a veřejný klíč
  • Oba mohou zprávy šifrovat i podepisovat
  • Samo o sobě neřejí problém MITM

Hashovací funkce

  • Jednosměrná funkce, která z libovolně dlouhého vstupního proudu dat vytvoří vytvoří výstup stejné délky.
  • Při malé změně vstupu se výrazně změní výstup.
  • Z výstupní hodnoty by nemělo být možné dopočítat kolizní proud dat v polynomiálním čase.
  • Příklady:
    • MD5: (128 bitů) kolize možné počítat na běžném PC v řádu minut. Nepoužívat!
    • SHA-1 (160 bitů) také považovaný za málo bezpečný
    • SHA-2 (SHA-256, SHA-512, atd.)

Ukázka hashe


$ echo -n "Ahoj lidi." | md5sum
f5cc93e818bca8cfd4169b575d7eec1f  -

$ echo -n "Ahoj lidi." | sha256sum
1ae927bf031f252903fb5c10676db9d8d1168af876427adfd193ac4c6b6e7687  -

$ echo -n "Ahoj lidi." | sha512sum
9fd887a45bf46a3fabe3f254b5d336488fdf756564a87cbab6e3398a5e50bd15a51f0e357e00d7dca9c8520fc6192a993555cd5a15d617a2075cfee9488db436  -

Ukázka kolize MD5 hashe


d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89 
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89 
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

MD5: 79054025255fb1a26e4bc422aef54eb4

Digitální certifikát

  • Veřejný klíč podepsaný (jiným) tajným klíčem
  • Při ověření musíme věřit příslušnému veřejnému klíči. Kde se bere?
  • Operační systémy a prohlížeče mají svoji databázi certifikátů (důvěrných veřejných klíčů).
  • Využívá se přenosu důvěry: typicky certifikační autorita (CA)
  • Doba platnosti certifikátu

Certifikační autorita (CA)

  • Hierarchická struktura přenosu důvěry
  • Typicky komerční záležitost
    • Zákazník (např. majitel web serveru) platí za vytvoření digitálního certifikátu
    • CA platí za uložení svého veřejného klíče do uložiště
    • Firmy: Comodo, Symantec, Verisign, Thawte

PKI (Public Key Infrastructure)

  • Infrastruktura distribuce veřejných klíčů
  • Umožňuje ukládání, získávání a revokování klíčů
  • PKI je součástí systému (Windows, Linux, Mac, atd.) nebo aplikace (Firefox, Chrome, atd.)
  • Aktualizace seznamu klíčů skrze aktualizace systému nebo aplikace.

Revokace klíče

  • Zneplatnění klíče z důvodu: kompromitace systému (ukradení tajného klíče), zapomenutí bezpečnostní fráze, atd.
  • Revokace zneplatňuje oba klíče (veřejný i tajný)
  • Distribuce revokací skrze PKI

Self-signed certifikát

  • Digitáltní certifikát podepsaný sám sebou
  • Po vygenerování páru tajného a veřejného klíče je veřejný klíč je podepsaný tajným klíčem
  • Použitelné pro: testování, interní síť (veřejný klíč nutné předat jinou cestou)

OpenSSL: Self-signed certifikát

Self-signed certifikát lze vygenerovat pomocí příkazu openssl:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

Následně je nutné vyplnit některé informace:

Generating a 2048 bit RSA private key
................+++
......................................+++
writing new private key to 'key.pem'
Country Name (2 letter code) [XX]:CZ
State or Province Name (full name) []:Czech Republic
Locality Name (eg, city) [Default City]:Liberec
Organization Name (eg, company) [Default Company Ltd]:Technical University of Liberec
Organizational Unit Name (eg, section) []:Institut of Novel Technologies and Applied Informatics
Common Name (eg, your name or your server's hostname) []:computer.nti.tul.cz
Email Address []:jiri.hnidek@tul.cz

OpenSSL: Vypsání obsahu certifikátu

Obsah X.509 certifikátu lze v čitelné formě vypsat například pomocí:

openssl x509 -in localhost.crt -text -noout

Vytvoření certifikátu pro web

  • Majitel serveru vygeneruje tajný a veřejný klíč
  • Vytvoří se žádost a s veřejným klíčem se pošle zabezpečeným kanálem (např. HTTPS) do CA.
  • CA ověří žadatele (telefonicky, whois, ACME, apod.)
  • CA podepíše veřejný klíč - vznikne certifikát
  • Webový server tajný i podepsaný veřejný klíč používá pro křížovou šifru

CA CESNET

Na této adrese naleznete postup, jak vytvořit certifikát u CA CESNET a jak ho nainstalovat do systému:

http://jirihnidek.github.io/2016/03/21/certificates-and-web-servers/

Formáty klíčů

  • X.509 - umožňuje přidávat ke klíči i metadata
  • Distribuční formáty:
    • DER: binární
    • PEM: textový formát používající kódování base64

ACME a Let's Encrypt

  • ACME - protokol pro ověření uživatele a distribuci klíče
  • Let's Encrypt - CA, která poskytuje certifikáty zadarmo pomocí ACME
  • Podporováno: Firefox, Akamai, Cisco, EFF, atd.

Děkuji za pozornost. Nějaké otázky?