Šifrování a šifrovací systémy

Úvod
Šifrování a kryptografie
Program Encryption
Závěr
Použitá literatura



1. Úvod a cíl práce

Od časů, ve kterých vzniklo písmo, uplynulo už mnoho let. Téměř tolik let uplynulo od doby, kdy vznikl obor dnes nazývaný kryptografie. Ne všechno bylo totiž určeno pro oči a uši veřejnosti. Lidé už tehdy potřebovali určitou skupinu informací z různých důvodů utajit. Vznikala tajná písma, postupem času i jednoduché šifrovací algoritmy. S příchodem počítačů se kryptografie stala jednou z velmi důležitých součástí našeho každodenního života, ačkoliv si to málokdo uvědomuje.

Rozhodl jsem se stručně nastínit historický vývoj a osvětlit některé základní principy moderních kryptografických metod a nástrojů, které jsou využívány v oblasti přenosu a uchovávání dat. Připojuji také jednoduchý symetrický šifrovací algoritmus začleněný do programu Encryption, ačkoliv jsem si vědom toho, že mám pramalou šanci navrhnout použitelný (bezpečný) algoritmus, protože lidí, kteří jsou schopni jej vyvinout není na světě mnoho. Je nutné, aby tvůrce byl nejen špičkovým kryptografem, ale také matematikem a programátorem, což zatím nejsem.


2. Šifrování a kryptografie

Šifrování je, zjednodušeně řečeno, způsob, jak převést čitelný text zprávy na text jiný, bez dalších informací nečitelný. Tato další informace nutná pro rozluštění (dekódování, dešifrování) původního textu zprávy, se obvykle označuje jako (dešifrovací) klíč. Při kódování zprávy se obvykle používá (šifrovací) klíč, který nemusí být nutně totožný s dešifrovacím klíčem.

Tento postup se dá znázornit následujícím schématem:

šifrování: e (text, šifrovací klíč) = šifra
dešifrování: d (šifra, dešifrovací klíč) = text

Pointa je samozřejmě v tom, že text na prvním řádku tabulky je totožný s textem na druhém řádku (šifra samozřejmě také); funkce e a d zde představují kódovací respektive dekódovací algoritmy. Věda, která se zabývá různými šifrovacími schématy, se nazývá kryptografie.

Kryptografie je tedy věda o utajování informace. Dá se říci, že je stará téměř stejně jako umění písma. Už v prvopočátcích písemnictví, někdy před 4000 lety, se objevovaly tajné znaky, které byly určeny pouze pro určitou skupinu zasvěcených.


2.1. Historie

První známou šifrou v pravém slova smyslu byl Skytale, který se používal již v 5. století před naším letopočtem ve Spartě. Princip je velmi jednoduchý. Na hůlku o určitém průměru se namotal proužek kůže a na něj byla napsána zpráva. Poté se proužek odmotal a takto byl odesílán kurýrem. Kdo neznal princip, nedokázal zprávu přečíst.

Dalším známým příkladem z historie je první z řady substitučních šifer, která byla údajně používána ke korespondenci mezi Juliem Césarem a královnou Kleopatrou. Její princip je opět prostota sama. Celá abeceda byla posunuta o tři místa doprava. Pro dnešní kryptografy by rozluštění těchto šifer byla práce v nejhorším případě na několik minut. Ani systémy vyvinuté až do konce minulého století nedokáží kryptografům vzdorovat podle podmínek déle než několik hodin. Ovšem již na počátku tohoto století došlo k prudkému rozvoji kryptografie, který byl spjat s vynálezem telegrafu. Až do konce padesátých let bylo vynalezeno velké množství mechanických šifrovacích strojů. Namátkou mohu uvést jedno z nejpřísněji střežených tajemství 2. světové války - schopnost spojenců luštit německé depeše šifrované Enigmou. Pro tento účel také Alan Turing sestrojil jeden z prvních počítačů Colossus.

To ovšem není žádná zvláštní náhoda, protože v historii je téměř pravidlem, že vše, co znamenalo do budoucna výrazný technický pokrok bylo přímým či nepřímým výsledkem vývoje pro vojenské účely. Počítače a rakety jsou pouze nejmarkantnějšími případy. Je typické, že jestliže je sestaven nový, výkonnější výpočetní systém, jsou prvními zákazníky tajné služby, druhými jaderní fyzikové a na třetí místo se obvykle derou meteorologové. Účely, pro které ta která skupina potřebuje tyto výkonné stroje, snad již nemohou být očividnější.

Po zrodu počítačů v padesátých a šedesátých letech se kryptografie opět mění. Do této doby byla doménou diplomatických a vojenských kruhů, pro firmy a jednotlivce byla tato technologie prakticky nedostupná. To se nyní zásadně změnilo. Kryptografie se stala veřejně používanou službou pro zajištění důvěrnosti a integrity informací. Vznikla řada šifer, zejména pro potřeby bankovního sektoru. Vedlejším produktem tohoto rozvoje byla teorie složitosti.

Je těžké říci jestli byla skutečně objevena až v této době, nebo již dříve ve vojenských kruzích a důsledně utajena. Pravděpodobně totožný případ, kdy odborníci NSA (National Security Agency = Úřad pro národní bezpečnost - součást Ministerstva obrany Spojených států ) znali velice dobře principy diferenciální kryptoanalýzy objevené pro veřejnost až o několik roků později, uvádím dále.

Po několika letech živelného vývoje došlo k definování prvních kryptografických standartů. Koncem šedesátých let Thomas Watson, předseda správní rady IBM sestavil výzkumnou skupinu v laboratořích své firmy Yorktown Heights v New Yorku, která vyvinula šifrovací systém Lucifer, původně pro potřeby společnosti Loyd. Ta tento systém zakoupila jako první na ochranu systému plateb. Povzbuzena tímto úspěchem IBM vytvořila pracovní skupinu, která měla převést algoritmus do komerční podoby. Výsledkem byla zdokonalená verze, která vykazovala vyšší odolnost proti kryptografickým útokům.

V roce 1973 zveřejnil Národní úřad pro normalizaci požadavky na algoritmus pro potřebu amerických občanů a vládních institucí na ochranu neutajovaných dat. Zdokonalený algoritmus Lucifer byl jediný, který tomuto požadavku částečně vyhověl.

Tento algoritmus byl sledován po celou dobu jeho vývoje odborníky z NSA. Původní návrh na šifru byl vybaven 128-bitovým klíčem. Po jednání za zavřenými dveřmi mezi IBM a NSA byla šifra oslabena na 56 bitů a jako taková definována jako DES - Data Encryption Standart. Zeslabení takovéhoto stupně může znamenat pouze jediné - striktní požadavek NSA na rozluštitelnost šifry hrubou silou. Je velmi pravděpodobné, že NSA byla schopna rozluštit zprávu šifrovanou DES od samého počátku vyzkoušením všech možných klíčů. Na druhé straně, při konzultacích navrhli její odborníci jisté změny v organizaci S-bloků. Teprve později, po objevu diferenciální kryptoanalýzy se při testech ukázalo, že jimi navržená úprava značně zvýšila odolnost DES proti tomuto modernímu druhu kryptografického útoku. Lze tedy předpokládat, že diferenciální kryptoanalýza jim již v době návrhu DES byla věcí velmi dobře známou .

DES byl tedy na světě. Velmi rychle se rozšířil, zejména v bankovním sektoru. Není pochyb, že v dnešní době zajišťuje dostatečnou bezpečnost pouze proti útokům hackerů, tedy jednotlivých útočníků. Postavení stroje, který by dokázal rozluštit DES během jediného dne hrubou silou, tzn. vyzkoušením všech možných klíčů, by dnes stálo pouze 10 000 000 korun. Znamená to, že postavit takový stroj je rozhodně v možnostech velkých firem, a samozřejmě organizovaného zločinu. Ten si sice pravděpodobně najde levnější cestu k vašim informacím, ale přece jen se nedá tato možnost podceňovat. Její nebezpečí spočívá hlavně v tom, že odcizení informace je v tomto případě nepostřehnutelné. A navíc lidé, kteří DES používají získají velmi nebezpečný pocit jistoty, který ovšem není dnes již opodstatněný. Je docela možné, že ani nikdy nebyl. S pravděpodobností blížící se jistotě od samého počátku používání DES jej byly schopny rozluštit tajné služby USA, Francie, Izraele a tehdejšího Sovětského svazu.


2.2. Současná kryptografie

Dobu současné kryptografie je možné datovat od objevů diferenciální kryptoanalýzy a zejména pak od objevů algoritmů pro kryptografii s veřejným klíčem.

Každému, kdo je do problematiky alespoň minimálně zasvěcen je asi jasné, že sebekvalitnější šifrovací algoritmus, který je implementován ve verzi se 40-ti bitovým klíčem, je v dnešní době naprosto komický. Zašifrování 40-ti bitovým klíčem není v současné době snad ani považováno za zabezpečení (takovýmto "zabezpečením" jsou například standartně vybaveny webové prohlížeče Internet Explorer a Netscape Communicator, a to i v nejnovějších verzích). Takto "zabezpečená" data jsou dostupná komukoli, tedy i informovaným jednotlivcům - hackerům. Pro rozluštění zpráv šifrovaných pomocí 40-ti bitového klíče stačí několikadenní práce obyčejné počítačové sítě firmy běžné velikosti. Pro správce sítě je naprostá maličkost získat potřebné programové vybavení na internetu a během několika víkendů rozluštit libovolnou zprávu. Nemluvě o tom, že nemusí mít prakticky žádné znalosti o kryptografii.

Za tuto směšnou ochranou důvěrnosti našich dat je třeba vidět americké zákonodárství. To chápe kvalitní šifry jako zbraně, a pokud někdo chce tyto algoritmy vyvézt z USA, musí absolvovat martyrium stejné, jako při vývozu řízených střel nebo tanků. Navíc je tato snaha obvykle ve schvalovacím řízení zamítnuta. A protože USA je kolébkou výpočetní techniky, pochází odtud i drtivý podíl nejen všech šifrovacích algoritmů a objevů na poli kryptografie, ale i operačních systémů desktopových a serverových, databázových programových balíků, kancelářských systémů, atd. Výsledkem je, že prakticky žádný z těchto produktů neobsahuje kryptografickou ochranu rozumné úrovně. Vliv NSA je tak veliký, že prakticky všichni velcí výrobci software rezignovali. Paradoxem amerických zákonů je, že vyvézt šifrovací algoritm us je trestné, ale vyvezení vytištěných zdrojových souborů kryptografického algoritmu - které samy o sobě tímto algoritmem nejsou - je z cela legální. Podle zákona o svobodě slova může totiž v tištěné podobě z USA vyvézt každý co chce. Výsledek je směšný. Zdrojové kódy např íklad PGP 6.0 byly vyvezeny z USA a jsou právě opětovně přepisovány a kompilovány v Evropě. Tento postup je totiž z hlediska zákonodárstv í USA korektní a mnoho lidí zcela správně odmítá používat programové vybavení, jehož použití není právně "čisté".

Co se týká organizovaného zločinu nebo tajných služeb, jsou schopni zprávy zašifrované použitím 40-ti bitového klíče číst prakticky v reál ném čase.

Skutečné zabezpečení znamená kvalitní šifrovací algoritmus se 128-bitovým klíčem. Algoritmy s 80-ti bitovým klíčem budou při současné rychlosti vývoje cen výpočetní techniky budou během několika let reálně rozluštitelné hrubou silou. Tedy, ne pro každého, jen pro tajné služby.

Vezmeme-li v úvahu známý fakt, že NSA vlastnila již v roce 1994 luštící stroj na DES, který dokáže rozluštit libovolný 56-ti bitový klíč během 15-ti minut a roční nárůst výkonnosti výpočetní techniky o 60 % za rok při konstantní ceně, již dnes si mohou za stejné peníze pořídit stroj, který to dokáže za 3 minuty. Deset takovýchto strojů by pak rozluštilo 80-ti bitový klíč hrubou silou za cca 9,6 roku. Je zřejmé, že 80-ti bitový klíč je již dnes na hranici reálné luštitelnosti. 128-mi bitový klíč bude při současném tempu vývoje výpo četní techniky bezpečný alespoň 50 let.


2.3. Kryptoanalýza

Kryptoanalýza se zabývá rozbíjením šifer. Pokud přibližně ví, co hledá (zdrojový kód programu v daném jazyce, text v angličtině, text české písně), dokáže na základě četnosti výskytu jednotlivých písmen či slov a statistických údajů pro daný jazyky šifru rozbít (vyluštit) . Takže vlastnost, že se stejné části vstupního textu zakódují jinak, znesnadní kryptoanalýzu. Také proto je vždy z hlediska utajení výhod nější klíč delší.


2.4. Symetrická kryptografie (šifrování s tajným klíčem)

2.4.1. Principy

Při použití symetrické šifry vstupuje klíč spolu s holým textem do procesu, jehož výstupem je zašifrovaný text. Pro rozšifrování zprávy potřebujeme zašifrovaný text a opět klíč. Příkladem symetrický šifry může být posunutí abecedy o dohodnutý počet znaků.

Pokud je tajnost zprávy závislá na utajení algoritmu šifrování, je to vždy špatně. Současné algoritmy šifrování jsou obecně známé a tajn ost zprávy závisí pouze na tajnosti klíče.


2.4.2. Výhody a nevýhody

Výhodou symetrické kryptografie je její rychlost. Dá se také dobře využít pro šifrování dat, která nikam nejdou (zašifruji svoje dokumenty na svém počítači, aby je nikdo nemohl číst).

Největší nevýhodou je, že pokud chce uživatel s někým tajně komunikovat, musí si předem nějakým bezpečným kanálem předat klíč, což je většin ou problém. Druhá nevýhoda je počet klíčů. Představme si organizaci, v níž chce každý s každým komunikovat tajně, tak aby nikdo třetí nemo hl odposlouchávat a tato organizace má 10 000 členů. Pak je potřeba v celé organizaci mít 5 milionů klíčů.


2.4.3. Algoritmy pro šifrování tajným klíčem

V této oblasti existuje obrovské množství algoritmů. Do této oblasti patřily všechny šifry zmiňované výše v textu o historii šifrování . Pa tří tam i DES, který, ač ještě stále používaný patří opravdu již jen do historie.

Dnes používané kryptografické systémy musí být naprosto dokonale navržené. Tím mám na mysli to, že jakékoli zjištění slabiny v návrhu algor itmu znamená, že šifra se okamžitě ocitá na smetišti dějin. Skutečně dobrých algoritmů, tedy takových, ve kterých zatím kryptografové nedok ázali najít zásadní slabinu je pouze několik. Jsou to například IDEA (128 bitů), BlowFish (až 160 bitů), GOST 28147-89 (256 bitů !!!) a Cas t (128 bitů).

Avšak to, že chybu zatím nikdo neobjevil, nezaručuje, že neexistuje. Bohužel, zatím nikdo nedokázal matematicky dokázat bezpečnost kryptogr afického algoritmu (výjimkou je Vernamova šifra).To je prozatím matematický problém, který lidstvo neumí řešit. Velmi dobře lze pouze dokáz at, že šifra není bezpečná. Lidí, schopných vyvinout použitelný šifrovací algoritmus není na světě mnoho. Je nutné, aby tvůrce byl nejen špi čkovým kryptografem, ale také matematikem a programátorem.

Na tomto problému doslova "shořel" i tvůrce hojně propagovaného volně šířeného software - Phil Zimmermann se svým algoritmem Bass_O_Matif použitém v PGP 1.0 . Jak později přiznal, během analýzy, o kterou požádal Eliho Bihama a prováděné během oběda, poznal, že jeho algoritmus je nadobro ztracená věc. Eli Bihamovi - tomuto špičkovému kryptografovi - trvalo opravdu jen několik minut, než odhalil v algoritmu zásadní chyby.

Nejjednodušší je použít produkt, který je integrován v některém důvěryhodném software (může být i volně šiřitelný). Nejsnazší je asi použí t PGP, ve kterém od verze 2.0 byl zabudován algoritmus IDEA a v PGP 5.0 až 6.0 navíc volitelně Triple-DES a Cast. Výhodou také je, že zdroj ové kódy tohoto programu jsou veřejné, takže existuje kontrola správné implementace těchto algoritmů. Tato výhoda v komerčních softwarových produktech neexistuje. Pokud dojde k chybě, může být odhalena třeba až za několik roků, a uživatel se o ní samozřejmě ani nedozví, protože výrobce se k tomu nepřizná. V nejlepším případě nabídne bezplatný upgrade, v horším dělá mrtvého brouka.


2.5. Asymetrická kryptografie (šifrování veřejným klíčem)

2.5.1. Principy

Existuje ještě další způsob kryptografie, a tím je asymetrická kryptografie. Asymetrická proto, že využívá jiného klíče pro šifrování a j iného pro dešifrování (narozdíl od symetrické).

Označení pro takovouto dvojici klíčů v anglické literatuře se nazývá keypair - pár klíčů. Klíč, pomocí kterého se šifruje, se nazývá veřejn ý klíč (public key) a klíč, kterým se dešifruje, se nazývá soukromý klíč (privátní klíč, private key).

Odesílatel má svůj pár klíčů, jeden soukromý a jeden veřejný. Veřejný znají všichni, soukromý jen on sám. Kdokoliv mu chce poslat tajnou zp rávu, zašifruje ji jeho veřejným klíčem. Jediný, kdo zprávu může rozluštit, je příjemce, protože jen on vlastní soukromý klíč, kterým lze zp rávu rozšifrovat.


2.5.2. Digitální podpis

Další funkcí, kterou je možno realizovat pomocí asymetrické kryptografie, je tzv. digitální podpis. Existují funkce (např. MD5), kterým se říká "hashovací" funkce. "Hashovací" funkce dělají takzvaný otisk zprávy (message digest). "Hashovací" funkci dáme na vstup libovolnou zpr ávu (libovolně dlouhou) a na výstupu obdržíme její otisk, který má pevnou délku (128 nebo 160 bitů). Pokud bychom ve zprávě změnili byť i jediné písmenko, dostaneme na výstupu úplně jiný otisk. "Hashovací" funkce jsou známé a kdokoli si může z jakékoliv zprávy takový otisk ud ělat. Navíc platí, že je výpočetně velice obtížné vytvořit k libovolné zprávě jinou zprávu, která má stejný otisk (asi tak stejně obtížné jako rozšifrovat zprávu bez klíče). Takovýto otisk se zašifruje soukromým klíčem a dostaneme právě žádaný digitální podpis, který připojí me na konec původní zprávy. Příjemce dešifruje zprávu veřejným klíčem odesílatele a dostane otisk. Zavolá hashovací funkci - stejnou jako o desílatel - a dostane pravý otisk zprávy. Pak jej už jen porovná s otiskem, který rozkódoval veřejným klíčem odesílatele, a pokud se rovna jí tak ví, že zprávu mohl podepsat jen odesílatel. Dokonce ani odesílatel nemůže tvrdit, že to není jeho podpis a že zprávu nepodepsal.

Pokud by odesílatel zašifroval celou zprávu a připojil ji na konec zprávy původní, pak by zprávu zdvojnásobil, kdežto připojením zašifrov aného otisku se zpráva zvětší jen o několik bytů. Proto se šifruje otisk a ne celá zpráva.

Digitální podpis je aplikace, která se možná využívá více, než samotné šifrování zpráv.


2.5.3. Výhody a nevýhody

Hlavní výhodou je to, že lidé si nemusí před zahájením vyměnit klíče nějakým neodposlouchávaným komunikačním kanálem. Veřejný klíč mohou z nát všichni. Za druhé je potřeba méně klíčů. Kdokoli chce posílat tajná data příjemci, použije příjemcův veřejný klíč.

Tak jako symetrická, tak i asymetrická kryptografie má své nevýhody. Za prvé je asi 1000 krát pomalejší, než kryptografie symetrická. Dalš í, přímo achilovou patou asymetrické kryptografie, je pravost klíče. Příjemce musí totiž 100% vědět, že klíč patří opravdu dané osobě, tj. vědět, že není podvrhnutý (pokud příjemce nedostal klíč přímo od odesílatele do ruky).


2.5.4. Algoritmy pro šifrování veřejným klíčem

Asymetrická kryptografie se stala středem pozornosti koncem 70. let, kdy nejprve Merkle, později Diffie s Hellmanem ( algoritmus DH) a nako nec Ronald Rivest, Adi Shamir a Lennard Adleman ( algoritmus RSA) objevili možnost využití tohoto do této doby pouze teoretického postupu.

V dnes používaných kryptografických systémech jsou obvykle používány poslední dva algoritmy. Merkleho systém je poměrně nepraktický.

Tyto algoritmy jsou použity i v různých verzích volně šiřitelného software Pretty Good Privacy ( PGP ). Původně zde byl použit RSA, ale dí ky tahanicím o licence tohoto algoritmu nejnovější verze PGP používají algoritmus DH v kombinaci s Digital Signature Standard (DSS) - stan dartem digitálního podpisu.


2.6. Používané šifrovací algoritmy

2.6.1. "One-time pad"

Předpokládejme, že je dána zpráva délky n bitů a stejně dlouhý klíč, který zná i adresát. Uděláme jednoduchou věc - vytvoříme šifru opět dé lky n tak, že pokud jsou bity klíče a zprávy shodné, napíšeme na odpovídající pozici šifry 0 a pokud se liší, napíšeme 1 (tedy operace XOR ). Tuto zprávu pak pošleme adresátovi, který udělá totéž s klíčem a zašifrovaným textem a obdrží tak původní zprávu. Problém je v tom, že j ako klíč musíme použít naprosto náhodnou sekvenci, tedy nic, co lze vygenerovat na počítači. Náhodná sekvence přidaná k naší zprávě vytvoř í jako šifru opět čistě náhodnou sekvenci. Navíc jednou použitý klíč už nikdy nesmíme použít znovu. Uvedená metoda je tedy sice perfektní, bohužel se ale nedá prakticky použít, uvádím ji pouze jako kuriozitu.


2.6.2. DES

DES (Data Encryption Standard) je typickým představitelem symetrických algoritmů. Byl vyvinut v roce 1975 firmou IBM na požadavek americké v lády, která chtěla jednoduchý, bezpečný, snadno použitelný a hlavně standardizovaný algoritmus šifrování dat pro státní instituce a komerč ní organizace. Vývoj algoritmu se neobešel bez zásahu NSA, která jednak přiměla IBM zkrátit klíč ze 128 na 56 bitů, jednak předělala jednu část algoritmu (tzv. S-boxy). NSA byla dlouho podezírána, že algoritmus modifikovala tak, aby ho mohla snadno rozluštit - kritér ia pro design S-boxů byla dlouho utajována a S-boxy vykazovaly některé zvláštní vlastnosti, které se zdály obvinění potvrzovat. Bezpečnos t DESu byla dlouho zkoumána různými metodami kryptoanalýzy, jako poměrně úspěšná se nakonec ukázala diferenciální kryptoanalýza - i když p rakticky ji využít vyžaduje velké náklady. Je možné, že NSA metody diferenciální kryptoanalýzy znala už při tvorbě DESu, protože jejich S- boxy se zdají být proti podobnému útoku optimalizované. Po tomto objevu IBM konečně zveřejnila kritéria pro tvorbu algoritmu, což částečn ě přispělo k očištění NSA.

Americká firma RSA Data Security vypsala nedávno odměnu $10 000 pro toho, kdo rozluští DESem zašifrovaný text. Informace o průběhu celé ak ce byly k dispozici na stránkách DESCHALL a DES Coordinated Challenge, projektu (respektive obou projektů - amerického a evropského) se zú častnily desítky tisíc počítačů na celém světě (78 000 pouze v americkém projektu); vyzkoušena byla dohromady polovina z celkového množstv í 7.2x1016 klíčů když rychlost testování dosáhla v závěru až 7 miliard klíčů za vteřinu. Výhercem ceny se po čtyřech měsících stal Michael K. Sanders z Utahu, který nalezl správné rozluštění na svém počítači Intel Pentium s operačním systémem FreeBSD. Zašifrované sdělení zněl o: "Strong cryptography makes world a safer place."

DES je tedy díky malé délce klíče snadno rozluštitelný velkými podniky a organizacemi, pro bankovnictví a podobně důležité oblasti se neho dí - pro osobní použití celkem vyhovuje. DES v současné době používá mnoho softwarových systémů - Kerberem počínaje a UNIXy obecně konče (používají ho pro šifrování hesel).


2.6.3. IDEA

IDEA pochází z roku 1990 a je pravděpodobně nejlepším symetrickým algoritmem, který se veřejně používá. Jeho klíče mají délku 128 bitů, js ou tedy odolnější proti odhalení než klíče DESu. K popularitě algoritmu IDEA přispělo zejména jeho použití ve volně dostupném šifrovacím b alíku PGP (který zároveň svému autoru Philu K. Zimmermanovi přinesl nemálo problémů s americkou vládou). Zatím není známa žádná kryptoanaly tická metoda, jež by byla úspěšná proti IDEA; algoritmus je ale poměrně nový, i když založený na pevných teoretických základech.


2.6.4. RSA

Algoritmus RSA nazvaný podle svých autorů pánů Rona Rivesta, Adi Shamira a Leonarda Adlemana je nejpopulárnějšim a nejrozšířenějším algoritm em, který používá šifrování s veřejným klíčem. Jeho bezpečnost je založena na problému nalezení rozkladu čísla na prvočinitele, vlastně se p ředpokládá, že to tak je - nikdo to totiž skutečně nedokázal a je možné, že někdo najde úplně jiný způsob prolomení RSA (je to ale dosti ne pravděpodobné). I tak ovšem hledání prvočísel není tak složité, jak bývalo - algoritmy se zrychlují a matematikové hledají stále nové triky , které by faktorizaci usnadnily, což zvyšuje minimální nutnou délku klíče.

RSA je de facto standardem pro systémy s veřejným klíčem, je vhodný zejména pro distribuci sdílených symetrických klíčů a pro digitální pod pisy, pro běžné šifrování dat například pro přenos po síti se nehodí (jednak je pomalý, jednak je poměrně obtížné generovat klíče - musí to být poměrně velká prvočísla).


3. Program Encryption

Pokusil jsem se vytvořit fungující interaktivní program, který dokáže zašifrovat soubor, dešifrovat soubor a prostřednictvím kterého je možný také náhled do souboru, to vše prostřednictvím alespoň trochu uživatelsky přívětivého grafického rozhraní.


3.1. Šifrovací algoritmus

Základem celého programu a vlastně ústředním problémem je najít algoritmus, podle kterého bude šifrování souboru probíhat. Rozhodl jsem se pro symetrickou metodu šifrování, tzn. použít stejný klíč k zašifrování i k dešifraci souboru. Tento klíč bude mít formu čtyřciferného číselného kódu. Jednotlivé cifry značí, o kolik znaků se posune abeceda. To znamená, že půjde ve skutečnosti o posun ordinální hodnoty, v tomto případě v kladném směru. Nejjednodušší je vysvětlit princip algoritmu na příkladu:

Klíč: 1234
Původní text:
DOBRYDEN
+1+2+3+4+1+2+3+4
Výsledný text:
EQEVZFHR

Dešifrace probíhá přesně opačným způsobem.

Nelze si nevšimnout, že písmeno D je poprvé zašifrováno jako E a podruhé jako F. To je jedna z výhod tohoto algoritmu.


3.2. Rozbor programového zpracování

3.2.1. Vstupy

Do procesu zpracování dat programem vstupují tyto data:
- vstupní textový soubor - neznámý počet libovolných znaků, které mají být zašifrovány
- klíč - libovolné čtyřciferné číslo, každá cifra musí být zpracována odděleně

Z výše uvedeného je jasné, že dále bude potřeba zpracovat:
- cestu a název vstupního textového souboru - neznámý počet libovolných znaků, které udávají umístění souboru na disku
- cestu a název zatím pomocného adresáře - upřesním později


3.2.2. Výstupy

Výstupem je textový soubor, stejně dlouhý jako původní soubor, který je možné buď znovu zašifrovat nebo dešifrovat algoritmem opačným k šifrovacímu algoritmu (za předpokladu znalosti klíče).


3.2.3. Metody zpracování

Problém jsem zpracoval v jazyce Pascal (Borland Pascal 7.0) s využitím znalostí, dosavadních zkušeností a algoritmického způsobu myšlení. V následujícím textu se pokusím zasvětit čtenáře do problému natolik, aby pochopil princip zpracování dat i celkového programového řešení problému.

V deklarační části programu nejprve zpřístupníme knihovnu podprogramů Crt, nadeklarujeme proměnné, datové typy a konstantu PomSoub:

uses Crt;
const PomSoub='pomocny.txt';
type Cislice= 0..9;
Pomocne= (Ax,Bx,Cx,Dx);
var PathSoub,PathPom,PathAdr: string;
Znak: char;
A,B,C,D: Cislice;
f: text;
Ukonci: boolean;


3.2.3.1. Tělo programu

Nejprve zajistíme opakováním procedury Menu (viz. níže) uživatelské prostředí. Pak čekáme na uživatelův pokyn k provedení určitého úkolu (procedury Sifruj, Desifruj atd.).

Proceduru Menu opakujeme tak dlouho, dokud uživatel nedá pokyn k ukončení programu - v proměnné Ukonci hodnota true (tuto hodnotu vrací funkce Konec - viz. níže).

Procedura NormVideo nastaví původní parametry obrazovky.

begin repeat Menu;
Znak:=readkey;
case Znak of '1': Sifruj;
'2': Desifruj;
'3': Nastaveni;
'4': Nahled;
'5': Ukonci:=Konec
end
until Ukonci;
NormVideo;
clrscr
end.


3.2.3.2. Procedura Menu

Tato procedura vytvoří modré pozadí s hlavičkou pro textový mód 80x50 a stínované šedé okno s hlavní nabídkou.

procedure Menu;
var s: byte;
begin window(1,1,80,50);
textcolor(yellow); textbackground(blue); (* modre pozadi s hlavickou *)
clrscr;
gotoxy(35,2); write('ENCRYPTION');
gotoxy(16,4); write('program pro sifrovani a desifraci textovych souboru');
gotoxy(23,6); write('Semestralni prace LS 2001/2002, MZLU');

gotoxy(50,49); write('Made by Marian Lukacovic 2002');
window(6,40,76,46); textbackground(black); clrscr; (* cerne pozadi k nasl. oknu *)
window(5,39,75,45); (* okno s upozornenim *)
textcolor(white); textbackground(lightcyan);
clrscr;
gotoxy(5,2); write('Pred zacatkem prace je nutne nastavit pomocny adresar na disku, ');
gotoxy(5,3); write(' na kterem je ulozen de/sifrovany soubor. Do tohoto adresare ');
gotoxy(5,4); write(' bude po dobu prubehu sifrovaciho algoritmu ulozen pomocny ');
gotoxy(5,5); write(' soubor s mezivysledky. Tento soubor bude automaticky hned ');
gotoxy(5,6); write(' po ukonceni sifrovaciho procesu smazan. ');
window(1,8,80,9); textcolor(white); textbackground(blue); clrscr;
gotoxy(11,2); write('Program je optimalizovan pro prostredi textoveho modu 80x50.');
window(14,13,68,35); (* cerne pozadi k oknu Menu *)
textbackground(black); clrscr;
window(13,12,67,34); (* okno Menu *)
textcolor(black); textbackground(lightgray);
clrscr;
gotoxy(2,2); write('Ú');
gotoxy(54,2); write('ż');
gotoxy(2,22); write('Ŕ');
gotoxy(54,22); write('Ů');
for s:=3 to 53 do begin gotoxy(s,2); write('Ä') end;
for s:=3 to 53 do begin gotoxy(s,22); write('Ä') end;
for s:=3 to 21 do begin gotoxy(2,s); write('ł') end;
for s:=3 to 21 do begin gotoxy(54,s); write('ł') end;
gotoxy(25,2); write(' Menu ');
gotoxy(9,6); write('Zasifrovat soubor .................. 1');
gotoxy(9,8); write('Desifrovat soubor .................. 2');
gotoxy(9,10); write('Nastaveni pomocneho adresare ....... 3');
gotoxy(9,12); write('Nahled do souboru .................. 4');
gotoxy(9,14); write('Konec .............................. 5');
gotoxy(9,20); write('Vyberte akci ');
end;


3.2.3.3. Procedura KomOkno

KomOkno vytvoří orámované šedé stínované okno na modrém pozadí použité téměř ve všech ostatních procedurách.

procedure KomOkno;
var s: byte;
begin window(1,7,80,48); (* mazani pozadi *)
textbackground(blue); clrscr;
window(14,21,68,30); (* cerne pozadi pro KomOkno *)
textbackground(black); clrscr;
window(13,20,67,29); (* KomOkno *)
textcolor(black); textbackground(lightgray);
clrscr;
gotoxy(2,2); write('Ú');
gotoxy(54,2); write('ż');
gotoxy(2,9); write('Ŕ');
gotoxy(54,9); write('Ů');
for s:=3 to 53 do begin gotoxy(s,2); write('Ä') end;
for s:=3 to 53 do begin gotoxy(s,9); write('Ä') end;
for s:=3 to 8 do begin gotoxy(2,s); write('ł') end;
for s:=3 to 8 do begin gotoxy(54,s); write('ł') end
end;


3.2.3.4. Procedura NahlOkno

Další procedura, která má na starosti grafické prostředí. Vytvoří okno pro náhled do souboru (viz. procedura Nahled).

procedure NahlOkno;
begin window(5,11,77,46); (* cerna podlozka *)
textbackground(black); clrscr;
window(4,10,76,45); (* okraje papiru *)
textcolor(red); textbackground(white); clrscr;
gotoxy(25,2); write('Zpet = jakakoliv klavesa');
window(6,13,74,43); (* okno nahledu do souboru *)
textcolor(black); textbackground(white); clrscr;
end;


3.2.3.5. Procedura InitSoub

Procedura otevře komunikační okno a vyzve uživatele k zadání cesty a jména souboru, propojí skutečný soubor s identifikátorem f a cestu uloží do globální proměnné PathSoub pro další zpracování.

procedure InitSoub;
var JmSoub: string;
begin KomOkno;
gotoxy(9,4); writeln('Zadejte uplnou cestu a jmeno souboru:');
gotoxy(4,7); readln(JmSoub);
assign(f,JmSoub);
reset(f);
PathSoub:=JmSoub;
end;


3.2.3.6. Procedura CtiKod

CtiKod zobrazí komunikační okno a načte klíč (číselný kód) do proměnné typu řetězec. Pak převede každou cifru zvlášť na číslo v rozsahu 0 až 9 a uloží do samostatné proměnné typu Cislice (proměnné A, B, C, D).

procedure CtiKod;
var Cislo: string[4];
q: integer;
begin KomOkno;
gotoxy(14,4); write('Zadejte ciselny kod (4 cifry): ');
gotoxy(25,7); readln(Cislo);
val(Cislo[1],A,q);
val(Cislo[2],B,q);
val(Cislo[3],C,q);
val(Cislo[4],D,q);
end;


3.2.3.7. Procedura Nastaveni

Tato procedura provede nastavení pomocného adresáře, to znamená do proměnné PomPath typu řetězec načte cestu k pomocnému adresáři (bude vysvětleno později - procedura Sifruj a Desifruj). Poté zkontroluje, zda cesta končí znakem \ a pokud nekončí, připojí jej na konec řetězce. Do proměnné PathAdr uloží takto upravenou cestu a do proměnné PathPom uloží obsah proměnné PomPath, ke kterému připojí obsah proměnné PomSoub. Například uživatelem zadaná cesta je 'c:', do proměnných PomPath a PathAdr je přiřazeno 'c:\' a do proměnné PathPom se uloží 'c:\pomocny.txt'.

Proměnné PathAdr a PathAdr jsou velmi důležité pro správnou funkci šifrovacího algoritmu, jak bude uvedeno dále.

procedure Nastaveni;
var PomPath: string;
begin KomOkno;
gotoxy(4,4); writeln('Zadejte uplnou cestu a nazev pomocneho adresare:');
gotoxy(4,7); readln(PomPath);
if PomPath[length(PomPath)] <> '\'
then PomPath:=concat(PomPath,'\');
PathAdr:=PomPath;
PathPom:=concat(PomPath,PomSoub);
end;


3.2.3.8. Procedura Nahled

Procedura Nahled inicializuje soubor, otevře okno náhledu do souboru a do něj vypíše prvních 900 znaků ze souboru.

procedure Nahled;
var i: integer; a: 1..900;
begin InitSoub;
NahlOkno;
for a:=1 to 900 do
begin read(f,Znak);
write(Znak);
end;
close(f);
readkey
end;


3.2.3.9. Procedura Sifruj

Nyní se pomalu dostáváme k jádru problému - jak bude vypadat šifrovací algoritmus? Procedura Sifruj využívá několik procedur deklarovaných dříve. Nejprve zavolá proceduru InitSoub, která inicializuje soubor, jež chce uživatel šifrovat. Pak načte pomocí procedury CtiKod klíč a v komunikačním okně požaduje po uživateli na souhlas se zašifrováním souboru.

procedure Sifruj;
var pomf: text;
Pom: Pomocne;
ZOrd,i: byte;
ch: char;
begin InitSoub;
CtiKod;
KomOkno;
gotoxy(10,5); write('Chcete opravdu soubor zasifrovat? (A/N)');

Pokud uživatel chce soubor opravdu zašifrovat, procedura předvede uživateli malou animaci

repeat ch:=upcase(readkey) until (ch='A') or (ch='N');
if ch='A' then
begin KomOkno;
gotoxy(4,4); write('Sifruji soubor');
gotoxy(4,6); writeln(PathSoub);
delay(500);
for i:=4 to 51 do
begin gotoxy(i,8); write('Ű');
delay(50)
end;
delay(500);

a až teď začíná samotný proces šifrování. Otevřeme pro zápis pomocný soubor PomF (bude vytvořen v uživatelem zadaném pomocném adresáři) a do pomocné proměnné Pom typu Pomocne přiřadíme Ax. To bude o několik řádků níže důležité pro zajištění změny přičítané ordinální hodnoty.

assign(pomf,PathPom);
rewrite(pomf);
Pom:=Ax;

Nyní vstoupíme do cyklu: dokud není konec šifrovaného souboru, načítej znak - pokud je v Pom Ax, zvětši ordinální hodnotu znaku o A (první cifra klíče), do Pom přiřaď Bx (zajištění posunu na další cifru v klíči) a do pomocného souboru PomF vytiskni znak odpovídající zvýšené ordinální hodnotě. Pokud je v Pom Bx, zvětši ordinální hodnotu znaku o B (druhá cifra klíče), do Pom přiřaď Cx atd.

while not eof(f) do
begin read(f,Znak);
case Pom of Ax: begin ZOrd:=ord(Znak)+A; Pom:=Bx end;
Bx: begin ZOrd:=ord(Znak)+B; Pom:=Cx end;
Cx: begin ZOrd:=ord(Znak)+C; Pom:=Dx end;
Dx: begin ZOrd:=ord(Znak)+D; Pom:=Ax end
end;
write(Pomf,chr(ZOrd))
end;

Teď máme dva soubory - jeden (f) s původním textem a druhý (pomf) se zašifrovaným textem. Oba zavřeme a původní soubor smažeme. Nakonec přejmenujeme pomocný soubor jménem původního šifrovaného souboru.

close(f); close(pomf);
erase(f);
rename(pomf,PathSoub);
assign(f,PathSoub);
KomOkno;
gotoxy(15,5); write('Soubor uspesne zasifrovan.');
readkey
end;
end;


3.2.3.10. Procedura Desifruj

Procedura Desifruj je v zásadě stejná jako procedura Sifruj, jen šifrovací algoritmus je převrácený, to znamená, že klíč se místo přičítání k ordinální hodnotě od ní odečítá. Je zde navíc zahrnuto vytvoření zálohovacího souboru encrypt.ion v pomocném adresáři pro případ nesprávného rozšifrování. S tímto souborem pak uživatel může provést dešifraci znovu. Myslím si, že k tomuto není potřeba další komentář.

procedure Desifruj;
var pomf,g: text;
Pom: Pomocne;
ZOrd,i: byte;
ch: char;
PathG: string;
begin InitSoub;
PathG:=concat(PathAdr,'encrypt.ion');
assign(g,PathG); rewrite(g);
while not eof(f) do
begin read(f,Znak);
write(g,Znak)
end;
close(g); close(f);
CtiKod; KomOkno;
gotoxy(4,4); write('Probiha desifrace souboru ');
gotoxy(4,6); write(PathSoub);
delay(500);
for i:=4 to 51 do
begin gotoxy(i,8); write('Ű');
delay(50)
end;
delay(500);
assign(pomf,PathPom);
rewrite(pomf);
Pom:=Ax;
reset(f);
while not eof(f) do
begin read(f,Znak);
case Pom of Ax: begin ZOrd:=ord(Znak)-A; Pom:=Bx end;
Bx: begin ZOrd:=ord(Znak)-B; Pom:=Cx end;
Cx: begin ZOrd:=ord(Znak)-C; Pom:=Dx end;
Dx: begin ZOrd:=ord(Znak)-D; Pom:=Ax end
end;
write(Pomf,chr(ZOrd))
end;
close(f); close(pomf);
erase(f);
rename(pomf,PathSoub);
assign(f,PathSoub);
KomOkno;
gotoxy(19,3); write('Desifrace dokoncena. ');
gotoxy(4,4); write('Zkontrolujte, zda byl soubor spravne desifrovan.');
gotoxy(4,5); write('Pokud jste zadali nespravny kod, muzete opakovat');
gotoxy(4,6); write('desifraci se souborem ');
gotoxy(4,8); write(PathAdr,'encrypt.ion');
readkey;
end;


3.2.3.11. Funkce Konec

Otevře komunikační okno a ptá se uživatele na ukončení programu. Pokud si uživatel přeje program skutečně ukončit, je booleanovským výstupem funkce Konec hodnota true, jinak false.

function Konec: boolean;
var ch: char;
begin KomOkno;
gotoxy(10,5); write('Opravdu chcete program ukoncit? (A/N)');
repeat ch:=upcase(readkey) until (ch='A') or (ch='N');
Konec:=ch='A'
end;


3.4. Ovládání programu

Program Encryption je graficky optimalizován pro textový mód 80x50. Pomocí tohoto programu lze šifrovat a dešifrovat textové soubory. Výhoda použitého šifrovacího algoritmu spočívá v tom, že klíč není nikde uchováván, po ukončení šifrování je uchován jen v paměti uživatele. Encryption je určen pro šifrování dat, která nejsou přenášena, tzn. k šifrování textových dokumentů v počítači, pokud chceme zabránit v přístupu k tomuto dokumentu nežádoucím osobám.

Po spuštění programu je uživatel upozorněn, že k další práci bude potřebovat nastavený pomocný adresář. Pokud budeme šifrovat soubory na jednom disku, stačí nastavit adresář pouze jednou, jinak je důležité, aby se shodoval disk pomocného adresáře a šifrovaného souboru. Doporučuji provést nastavení ihned po spuštění programu.


3.4.1. Nastavení pomocného adresáře

Mělo by být prováděno jako první krok po spuštění programu. V hlavní nabídce stiskneme 3 a zadáme název spolu s cestou k pomocnému existujícímu adresáři, např. c:\texty. Po stisknutí Ester program uživatele vrátí do hlavního menu.


3.4.2. Šifrování souboru

V hlavním menu vybereme položku stiskem 1. Jsme vyzváni k zadání cesty a jména šifrovaného souboru. Zadáme požadované údaje, např. c:\pokus.txt, Enter, a zadáme čtyřciferný číselný kód, který si zapamatujeme, např. 1542. Pak potvrdíme šifrování stiskem A. Stiskem libovolné klávesy se vrátíme do hlavní nabídky.


3.4.3. Dešifrace souboru

V hlavní nabídce stiskneme 2, zadáme název souboru stejným způsobem jako při šifrování a zadáme číselný kód. Soubor se dešifruje a zkontrolujeme pomocí funkce Náhled do souboru, zda je soubor správně dešifrován (návrat do hlavního menu stiskem libovolné klávesy). Pokud ne, můžeme dešifraci zopakovat s nabízeným souborem. Nejspíš byl zadán chybný kód.


3.4.4. Náhled do souboru

V menu nabídka 4. Jsme vyzváni k zadání cesty a jména souboru, následně je nám umožněn náhled do zvoleného souboru. Návrat do hlavního menu jakoukoliv klávesou.


3.4.5. Ukončení programu

V hlavní nabídce stisk 5 a potvrzení stiskem A. Program se sám ukončí.


4. Závěr

Pokusil jsem se shrnout do jednoho celku znalosti o dané problematice. Nechtěl jsem celou problematiku vyčerpat, ale přece jen obsáhnout co největší část. Kryptografie je zajímavý obor, který se nedá popsat v tak krátkém textu, a sestavení jakési encyklopedie kryptografie by trvalo několik let. Podal jsem jen takový nástin toho, co by taková encyklopedie mohla obsahovat, vlastně jsem vysvětlil základní pojmy a popsal velmi stručně historii i současnost.

V programu Encryption je použita jednoduchá metoda šifrování. Přesto mi zabralo hodně času, než jsem přišel na to, jak tento algoritmus přepsat do programovacího jazyka tak, aby fungoval. Největším problémem bylo zajištění rotace klíčové cifry. Myslím si, že jsem nakonec tento problém vyřešil ke své spokojenosti i ke spokojenosti případného uživatele. Přestože algoritmus šifrování je v pořádku, na programu jako celku je ještě pořád opravdu hodně co zlepšovat a odstraňovat nedostatky. Jsem si toho vědom.


5. Použitá literatura

www.pcworld.cz
ikaros.ff.cuni.cz
www.pgp.cz


Nahoru