Ľahký úvod do šifrovania

Ľahký úvod do ľahkého úvodu do šifrovania

Tento workshop bude prevažne teoretický. Jeho cieľom je priblížiť záujemcom princípy šifrovania. Hneď na začiatok však podotýkam, že moderná kryptografia (veda zaoberajúca sa šifrovaním) je veľmi komplikovaná a prešpikovaná matematikou, na akú ste na stredných školách pravdepodobne nenarazili. To čo si ukážeme s cieľom pochopiť princíp, nemožno preto považovať za vrchol kryptografie.

Keď už sme začali tými definíciami, tak v tom budeme ešte chvíľu pokračovať:

Substitučné šifry

Aká šifra vám napadne, ak sa pokúsite nejakú vymyslieť? Myslíte si, že braillovo písmo možno považovať za šifru? Možno povedať, že požiadavky na šifru spĺňa, ibaže ňou zašifrované texty dokáže dešifrovať každý, kto vie braillovo písmo.

Ako by ste popísali algoritmus na šifrovanie resp dešifrovanie textu zašifrovaného do braillovho písma?

Asi najjednoduchší popis je: Jednotlivé písmená v správe nahradíme podľa nasledujúcich pravidiel:

Ak by sme chceli takto "formálne" popísať proces dešifrovania, povedali by sme, že pri dešifrovaní treba pravidlá aplikovať "z prava doľava".

Zákerná otázka: Ako by ste dešifrovali nasledujúcu postupnosť?

12345

Vidíte ten problém s nejednoznačnosťou? Ako by ste ho vyriešili?

Vyššie popísanú šifru (braillovo písmo) môžme zaradiť medzi takzvané substitučné šifry. Ide o šifry, pri ktorých nahrádzame každé písmeno (alebo skupinu písmen) iným písmenom (alebo skupinov písmen). Braillovo písmo je pre nás čo ho poznáme veľmi jednoducho dešifrovateľná šifra. Vedeli by sme vymyslieť substitučnú šifru, ktorá by bola naozaj tajná? Čo by ste povedali na nasledovný algoritmus:

kľúč: nejaké číslo medzi 1 a 19375 ;)

Správa: Text bez diakritiky

Algoritmus: každé písmeno správy posunieme v abecede tak, že k jeho pozícii v abecede pripočítame kľúč.

Napríklad správa: "ahoj" kľúč: 3, tajná správa: dkrm

Zákerná otázka: ako by ste šifrovali text, ktorý obsahuje písmeno x,y, alebo z? pomôcka: z+1=a

Skúste si sformulovať algoritmus pre dešifrovanie cézarovej šifry (tak sa táto jednoduchá šifra volá).

Asi nieje ťažké predstaviť si, že takúto šifru dokážeme "rozbiť" aj bez znalosti kľúča. Napadá vám ako na to? Pomôcka: uvedomte si, že rôznych kľúčov síce existuje na prvý pohľad veľa (devetnásť tisíc čosi), ale takých ktoré dávajú pri použití šifrovacieho algoritmu rôzne výstupy je veľmi málo.

Skúsme si teraz premyslieť, ako vymyslieť substitučnú šifru, ktorú by sme nedokázali rozbiť bez kľúča. Ideálne by bolo vymyslieť ju tak, aby sme mohli mať viac možností vyberať si kľúč. Tým by sme spôsobili to, že metóda ktorú sme použili na rozbíjanie cézara (mimochodom volá sa brute force attack - hrubá sila) nebude také ľahké použiť, pretože ak by sme chceli vyskúšať všetky možné kľúče, zabralo by nám to veľmi veľa času. Celkom priamočiara možnosť je povedať si, že kľúč je ľubovoľná 26 znakov dlhá postupnosť, ktorá hovorí, ktoré písmeno nahrádzame ktorým. Napríklad kľúč

abcdefghijklmnopqrstuvwxyz

Je vlastne neutrálny kľúč, ktorý nám text nemení, pretože a nahrádzame za a, b nahrádzame za b a pod.

Uvedomme si, že takýto šifrovací algoritmus nám dáva na výber z 26 faktoriál rôznych kľúčov, čo by mohlo byť už dosť veľa. Pre priblíženie množstva kľúčov ktoré by sme museli vyskúšať:

Naša zemeguľa má v súčasnosti 6 miliárd obyvateľov. Ak by sme ich všetkých ukecali, aby skúšali kľúče a nejako im ich rozdelili, potom, ak by každý dokázal vyskúšať milión kľúčov za sekundu, tak by túto "zákazku" pre nás dokončili za 2131 rokov.

Pozornému čitateľovy však pravdepodobne neunikol ani fakt, že nie každý kľúč je rovnako dobrý a niektoré sú naozaj zlé.

Vedeli by ste nejako všeobecne povedať, ktoré kľúče sú zlé a akým spôsobom by ste takú nekvalitu kľúča testovali? Je dobrých kľúčov dostatok?

Skúsme teraz predpokladať, že máme rozumný algoritmus, ktorý nám umožňuje pri voľbe kľúča vyberať z veľkej množiny rôznych dobrých kľúčov. Trúfli by sme si povedať, že ním zašifrovaná informácia je bez znalosti kľúča naozaj bezpečne utajená? Napadá vám nejaký spôsob, ktorý by sme ešte mohli zvoliť a uhádnuť, čo sa v tajnej správe skrýva?

Jedna z jednoduchých metód, ktorá je na jednoduché substitučné šifry použiteľná sa volá frekvenčná analýza. Vychádza z toho, že ak máme text v konkrétnom jazyku, tak vieme o každom písmene povedať, ako často sa v texte v priemere vyskytuje. Napríklad v slovenčine sa jednotlivé písmená anglickej abecedy vyskytujú s nasledujúcou frekvenciou (v percentách):

Ak vieme vyššie uvedené údaje a zároveň vieme, že šifra ktorú lámeme obsahuje text v slovenčine, zašifrovaný jednoduchou substitučnou šifrou, potom nám stačí spárovať znaky s písmenami abecedy podľa výskytu. Najčastejšie vyskytujúce sa bude pravdepodobne a, druhé najčastejšie bude o,...

Frekvenčná analýza sa zdá byť pomerne silný nástroj, nieje však všemohúca. Vyskúšajte vymyslieť nejakú modifikáciu substitučnej šifry, ktorá by frekvenčnej analýze odolala. Pomôcka: striedanie viacerých kľúčov?

Tých, ktorím sa to podarí asi nepoteší informácia, že napriek tomu, že sa dá vymyslieť substitučná šifra, ktorú nieje ľahké rozbiť pomocou frekvenčnej analýzy sú substitučné šifry v súčasnosti považované za ľahko rozbiteľné a preto sa v serióznej kriptografii nepoužívajú. Šifry ku ktorým vás "navádza" posledná pomôcka sa nazývajú polyalfabetické substitučné šifry a liekom na ne je tzv Kasiskeho metóda.

Transpozičné šifry

Kvalitatívne sú rovnako nafigu ako substitučné a fungujú nasledovne. Správu ktorú šifrujeme transpozičnou šifrou nedopĺňame novými znakmy, ale znaky ktoré v správe sú vymieňame podľa nejakých rozumných pravidiel. Najjednoduchšie čo nám všetkým pravdepodobne napadne je písanie slov odzadu (joha ľetatič), vymieňanie dvojíc písmen (hajoč titaľe),...

Trošku zaujímavejšie už možno vyzerá toto:

atjjehoenxottytjoat.

Trúfate si? Pomôcka: Skúste si správu zapísať do nejakého obdĺžnika napr v excely. Alebo inak, čo ak treba zo správy čítať vždy len každé k-te písmeno? Ako zistíte, že cesta ktorou sa uberáte pravdepodobne nieje dobrá?

Čo by ste vedeli povedať o transpozičných šifrách a frekvenčnej analýze? Pomôže nejako?

Napadajú vám nejaké zaujímavé spôsoby transpozičného šifrovania?

O transpozičných šifrách možno povedať, že ich rozbíjanie už nieje len manuálna práca. Na substitučné stačí použiť hrubú silu, alebo frekvenčnú analýzu v kombinácii s inými relatívne jednoduchými metódami. Pri transpozičných šifrách treba text nejako skúmať, pre odborníkov však ani takéto šifry niesú vážnym problémom.

Produkčné šifry

Ide o šifry, ktoré kombinujú vyššie spomenuté metódy šifrovania v snahe dosiahnúť vyššiu bezpečnosť. Takéto šifry sa už považujú v súčasnosti za bezpečné a používajú sa. Jednou z nich je napríklad dobre známy štandard AES, o ktorom ste už pravdepodobne počuli. Ide o šifru, ktorá je v súčasnosti považovaná za prakticky nerozbiteľnú. V praxi to znamená, že neexistuje metóda, ktorou by sa dala dešifrovať správa bez znalosti kľúča v rozumnom čase.

Pri v súčasnosti používaných šifrách sa veľkosť kľúča vyjadruje v bitoch a veľkosť kľúča samozrejme určuje aj silu šifry.

Zjednodušene možno povedať, že šifra je dobrá, ak pri nevedomosti kľúča neexistuje iná možnosť dešifrovania textu, ako postupne vyskúšať všetky prípustné kľúče. Z toho vyplíva, že čím dlhší kľúč, tým dlhšie nám môže trvať, kým vyskúšame všetky. Napríklad už spomínané AES existuje v 3 verziách. AES128 používa 128 bitový kľúč, AES192 používa 192 bitový a AES 256 používa až 256 bitový kľúč. ak by sme teda chceli hrubou silou zistiť obsah tajnej správy zašifrovanej algoritmom AES256, museli by sme "vyskúšať" 2 na 256 rôznych kľúčov.

2 na 256 je už naozaj obrovské číslo. Predstaviť si ho vám možno pomôže informácia, že má 77 cifier. Alebo ak by sme si zas pomohli predstavou so všetkými obyvateľmi zemegule, pri čom od poslednej zákazky všetci trochu potrénovali a teraz sú schopní vyskúšať miliardu kľúčov za sekundu a navyše by sme predpokladali, že takých zemí existuje milión, tak by musel každý obyvateľ každej zemegule skúšať celé tisícročia, pri čom počet tisícročí na obyvateľa vyjadruje 41 ciferné číslo.

Kritérium dĺžky kľúča však nieje jediné určujúce kvalitu šifrovacieho algoritmu. Dôležité sú aj nasledujúce vlastnosti: