Upload
ngobao
View
216
Download
0
Embed Size (px)
Citation preview
TRENČIANSKA UNIVERZITA ALEXANDRA DUBČEKA V TRENČÍNE
FAKULTA MECHATRONIKY
DIPLOMOVÁ PRÁCA
2007 JÁN ADÁMEK
TRENČIANSKA UNIVERZITA ALEXANDRA DUBČEKA V TRENČÍNE
FAKULTA MECHATRONIKY
DIPLOMOVÁ PRÁCA
2007 JÁN ADÁMEK
BEZPEČNÉ A SPOĽAHLIVÉ SIEŤOVÉ APLIKÁCIE
DIPLOMOVÁ PRÁCA
JÁN ADÁMEK
TRENČIANSKA UNIVERZITA ALEXANDRA DUBČEKA V TRENČÍNE
FAKULTA MECHATRONIKY
Katedra informatiky
Študijný odbor: Mechatronika
Študijné zameranie: Informatické zabezpečenie mechatronických systémov
Pedagogický vedúci: Mgr. Jaromír Suchánek
Konzultant: Mgr. Jaromír Suchánek
Analytický list
Autor: Ján Adámek
Názov práce: Bezpečné a spoľahlivé sieťové aplikácie
Jazyk práce: slovenský
Typ práce: Diplomová práca
Počet strán: 94
Akademický titul: Inžinier
Univerzita: Trenčianska univerzita Alexandra Dubčeka v Trenčíne
Fakulta: Fakulta mechatroniky (FM)
Katedra: Katedra informatiky (KI)
Študijný odbor: Mechatronika
Študijný program: Informatické zabezpečenie mechatronických systémov
Mesto: Trenčín
Vedúci DP: Mgr. Jaromír Suchánek
Konzultant DP: Mgr. Jaromír Suchánek
Dátum odovzdania: 9. 5. 2007
Dátum obhajoby: 31.5. 2007
Kľúčové slová: bezpečnosť, šifrovanie, kódovanie, sieťový protokol
Kategória Konspekt: Výpočtová technika; Počítačové siete
Citovanie práce: Ján Adámek. Bezpečné a spoľahlivé sieťové aplikácie.
Diplomová práca. Trenčín: Trenčianska univerzita Alexandra
Dubčeka v Trenčíne, Fakulta mechatroniky, 2007.
Názov práce v AJ: Secure and reliable network applications
Kľúčové slová v AJ: security, cryptography, coding, network protocol
Zadanie DP
Abstrakt
Adámek Ján: Bezpečné a spoľahlivé sieťové aplikácie
[Diplomová práca] / Ján Adámek – Trenčianska univerzita Alexandra Dubčeka v Trenčíne, Fakulta
mechatroniky, Katedra informatiky.
Práca prezentuje možnosť ako zabezpečiť sieťovú komunikáciu pomocou šifrovania
a kódovania. V úvode sú vysvetlené niektoré základné pojmy a definície, neskôr práca
rozoberá rôzne spôsoby šifrovania pomocou verejného i symetrického kľúča. Po ľahkom
úvode do teórie kódovania, prechádza do problematiky BCH-kódov. Zostávajúca časť sa
zaoberá praktickým riešením zabezpečenia. Tvoria ju dve časti. Prvú časť tvorí tunelovací
protokol navrhnutý nad sieťou typu bod-to-bod, využívajúci šifrovanie a kódovanie,
implementovaný v jazyku C++. Druhá časť je implementovaná v jazyku Java a predstavuje
aplikáciu, ktorá využíva protokol z prvej časti na prenos správ a súborov.
Abstract
Adámek Ján: Secure and reliable network applications
[Graduation theses] / Ján Adámek – Alexander Dubček University in Trenčín, Faculty of
Mechatronics, Department of Informatics, Slovakia.
The diploma project presents possibility how to secure network communication with
encryption and using BCH codes. In the first part of this document some of the basic terms
and definitions are explained. Later, we analyze properties of using public and symmetric key
encryption. After easy introduction to the coding theory, we move to the problem of BCH-
codes. The rest of the project is dealing with the practical solution, which consist of two parts.
In the first part we designed tunneling protocol over simple peer-to-peer network with coding
and encrypting. It is implemented in the C++ language. The second part remains of simple
text messaging and files transfer application, which uses protocol from the first part. It is
implemented in the Java language.
Poďakovanie
Na tomto mieste by som chcel poďakovať všetkým ľuďom, bez ktorých by táto
diplomová práca nemohla vzniknúť. Menovite sa chcem poďakovať svojmu pedagogickému
vedúcemu a zároveň i odbornému konzultantovi, pánovi Mgr. Jaromírovi Suchánkovi za
poskytnutie mnohých užitočných rád a pripomienok, ktoré mi pomohli pri vypracovávaní
tejto diplomovej práce. Ďalej by som sa rád poďakoval svojím najbližším za vytvorenie
vhodných študijných podmienok a za podporu počas celého štúdia. Tiež sa chcem poďakovať
pedagogickým pracovníkom a vedeniu Trenčianskej univerzity Alexanda Dubčeka v Trenčíne
za nadobudnuté vedomosti počas celého štúdia na univerzite.
Čestné prehlásenie
Podpísaný Ján Adámek týmto čestne prehlasujem, že som diplomovú prácu na tému
„Bezpečné a spoľahlivé sieťové aplikácie“ vypracoval samostatne, pod vedením
Mgr.Jaromíra Suchánka a s použitím uvedenej literatúry.
V Trenčíne dňa 3. mája 2007 ...........................................
Obsah Úvod..........................................................................................................................................12 1 Niektoré matematické pojmy a definície ..........................................................................14
1.1 Prvočísla....................................................................................................................14 1.2 Prvočíselné delitele ...................................................................................................14 1.3 Niektoré vlastnosti prvočísiel ...................................................................................14 1.4 Miller-Rabin test .......................................................................................................15
1.4.1 Algoritmus testu Miller-Rabin..........................................................................15 1.5 Počet prvočísiel.........................................................................................................16 1.6 Postup generovania prvočísiel ..................................................................................17
1.6.1 Voľba bezpečnostného parametra t...................................................................17 1.6.2 Optimálna hranica pokusného delenia B...........................................................18
1.7 Deliteľnosť celých čísiel ...........................................................................................18 1.7.1 Euklidov algoritmus..........................................................................................18 1.7.2 Rozšírený Euklidov algoritmus ........................................................................18
1.8 Grupa ........................................................................................................................19 1.8.1 Grupa nZ ..........................................................................................................19
1.8.1.1 Sčítavanie v 15Z ...........................................................................................19
1.8.1.2 Súčet so záporným číslom ............................................................................20 1.8.1.3 Ďaľšie operácie .............................................................................................20
1.8.2 Grupa *pZ ..........................................................................................................20
1.8.2.1 Násobenie v *11Z ............................................................................................20
1.8.3 Multiplikatívna inverzia....................................................................................20 1.8.4 Abelianova grupa ..............................................................................................21
1.9 Pole ...........................................................................................................................21 1.9.1 Pole pF .............................................................................................................21
1.9.1.1 Príklad výpočtov v 23F .................................................................................22
1.9.2 Pole Galois ........................................................................................................22 1.9.3 Určenie Galoisového poľa ................................................................................22
1.9.3.1 Výpočet tabuľky GF(9).................................................................................22 1.10 Kongruencia..............................................................................................................23 1.11 Kvadratické reziduá ..................................................................................................23 1.12 Eulerové kritérium ....................................................................................................24
2 Kryptografia......................................................................................................................25 2.1 Kryptografia so symetrickým kľúčom......................................................................25
2.1.1 Substitučná a tranzpozičná šifra .......................................................................27 2.1.1.1 Jednoduchá substitučná šifra ........................................................................27 2.1.1.2 Homofónna substitučná šifra ........................................................................28 2.1.1.3 Polyabecedná substitučná šifra .....................................................................28 2.1.1.4 Transpozičná šifra.........................................................................................29
2.1.2 Kompozícia šifier..............................................................................................30 2.1.2.1 Kompozícia funkcií.......................................................................................30 2.1.2.2 Kompozícia a involúcia ................................................................................30
2.1.3 Produktová šifra ................................................................................................31 2.1.4 Prúdové šifry.....................................................................................................32
2.1.4.1 Vernamova šifra............................................................................................32 2.1.5 Priestor kľúčov..................................................................................................33
2.2 Kryptografia s verejným kľúčom..............................................................................33 2.2.1 Komunikácia dvoch strán v kryptografií s verejným kľúčom ..........................34 2.2.2 Potreba autentifikácie v systémoch s verejným kľúčom ..................................35
2.3 Výmena kľúčov, manažment a certifikácia ..............................................................36 2.3.1 Manažment kľúčov prostredníctvom techník symetrického kľúča ..................36
2.3.1.1 Výhody riešenia ............................................................................................37 2.3.1.2 Nevýhody riešenia ........................................................................................37
2.3.2 Manažment kľúčov prostredníctvom techník verejného kľúča ........................37 2.3.2.1 Výhody riešenia ............................................................................................38 2.3.2.2 Aktívny útočník ............................................................................................38 2.3.2.3 Výhody použitia DTS ako udržovateľa integrity verejného zoznamu .........40 2.3.2.4 Nevýhody použitia DTS ako udržovateľa integrity verejného zoznamu......40 2.3.2.5 Dôveryhodné tretie strany a certifikácia verejného kľúča ............................40 2.3.2.6 Certifikáty verejných kľúčov ........................................................................40
2.4 Porovnanie kryptografie so symetrickým kľúčom a s verejným kľúčom.................41 2.4.1 Výhody kryptografie so symetrickým kľúčom.................................................41 2.4.2 Nevýhody kryptografie so symetrickým kľúčom .............................................41 2.4.3 Výhody kryptografie s verejným kľúčom.........................................................42 2.4.4 Nevýhody kryptografie s verejným kľúčom.....................................................42 2.4.5 Prehľad porovnania...........................................................................................42
2.5 RSA kryptosystém ....................................................................................................43 2.5.1 Algoritmus generovania kľučov RSA...............................................................43 2.5.2 Algoritmus šifrovania RSA ..............................................................................43 2.5.3 Príklad RSA algoritmu......................................................................................44
2.5.3.1 Generovanie páru kľúčov..............................................................................44 2.5.3.2 Šifrovanie......................................................................................................44 2.5.3.3 Dešifrovanie. .................................................................................................44
2.6 ElGamal kryptosystém..............................................................................................44 2.6.1 Algoritmus generovania kľúčov ElGamal ........................................................45 2.6.2 Algoritmus šifrovania ElGamal ........................................................................45 2.6.3 Príklad algoritmu ElGamal ...............................................................................45
2.6.3.1 Generovanie páru kľúčov..............................................................................45 2.6.3.2 Šifrovanie......................................................................................................46 2.6.3.3 Dešifrovanie..................................................................................................46
2.7 Eliptické krivky.........................................................................................................46 2.7.1 Eliptická krivka ako grupa ................................................................................46 2.7.2 Body eliptickej krivky ......................................................................................47
2.8 Menezes Vanstone kryptosystém eliptických kriviek...............................................48 2.8.1 Príklad algoritmu Menezes Vanstone ...............................................................49
2.8.1.1 Generovanie kľúčov......................................................................................49 2.8.1.2 Šifrovanie......................................................................................................49 2.8.1.3 Dešifrovanie..................................................................................................49
2.9 Bezpečnosť kryptosystémov s verejným kľúčom.....................................................50 2.9.1 Niektoré výpočtové problémy kryptografického významu ..............................50
2.9.1.1 Faktorizácia...................................................................................................50 2.9.1.2 RSA problém (RSAP)...................................................................................50 2.9.1.3 Problém kvadratického rezidua (QRP) .........................................................50 2.9.1.4 Druhé odmocniny modulo n (SQROOT)......................................................51 2.9.1.5 Problém diskrétneho logaritmu (DLP) .........................................................51 2.9.1.6 Problém generalizovaného diskrétneho logaritmu (GDLP) .........................51
2.9.1.7 Diffie-Hellman problém (DHP)...................................................................51 2.9.1.8 Generalizovaný Diffie-Hellman problem (GDHP).......................................51 2.9.1.9 Problém podmnožiny (SUBSET-SUM) .......................................................51
2.9.2 Bezpečnosť kryptosystémov eliptických kriviek..............................................52 3 Kódovanie a samoopravné BCH−kódy ............................................................................53
3.1 Rozdelenie kódovania podľa oblasti využitia...........................................................53 3.2 Kódovanie .................................................................................................................53 3.3 Bezpečnostné kódy ...................................................................................................54 3.4 Objavovanie, zisťovanie chýb ..................................................................................55
3.4.1 Hammingova vzdialenosť.................................................................................55 3.4.2 Minimálna vzdialenosť .....................................................................................55 3.4.3 Hammingova váha ............................................................................................55 3.4.4 Príklad: Kód 2 z 5 .............................................................................................56
3.5 Opravovanie chýb .....................................................................................................56 3.5.1 Príklad opravovania chýb .................................................................................57
3.6 Informačné znaky .....................................................................................................57 3.6.1 Kódovanie informačných znakov .....................................................................58
3.7 BCH kódy .................................................................................................................58 3.7.1 Binárne BCH kódy............................................................................................58
3.7.1.1 Príklad binárneho BCH kódu........................................................................59 3.7.1.2 Kódovanie informačných znakov .................................................................60
3.7.2 BCH kódy s q znakovou abecedou ...................................................................60 3.7.3 Dekódovanie BCH kódu...................................................................................61
3.7.3.1 Euklidov algoritmus......................................................................................61 3.7.3.2 Dekódovanie BCH kódu...............................................................................62 3.7.3.3 Príklad dekódovania BCH ............................................................................64
3.7.3.3.1 Určenie syndrómov.................................................................................64 3.7.3.3.2 Určenie pozícií, korene lokátoru chýb ....................................................64 3.7.3.3.3 Oprava chybných znakov........................................................................65 3.7.3.3.4 Skúška správnosti dekódovania ..............................................................66
4 Bezpečný a spoľahlivý komunikačný kanál .....................................................................67 4.1 Miera bezpečnosti komunikačnej cesty ....................................................................67 4.2 Miera spoľahlivosti komunikačnej cesty ..................................................................67 4.3 Proxy server ..............................................................................................................67
4.3.1 Činnosť proxy servera.......................................................................................68 4.3.2 Kategórie proxy serverov..................................................................................68
4.3.2.1 Aplikačné proxy servery...............................................................................68 4.3.2.2 SOCKS proxy servery ..................................................................................69
4.4 SOCKS protokol .......................................................................................................69 4.4.1 „Objednanie spojenia“ ......................................................................................69
4.5 Tunelovací protokol ..................................................................................................69 4.6 Bezpečný a spoľahlivý komunikačný kanál .............................................................69
4.6.1 Balík..................................................................................................................70 4.6.2 Relácie ..............................................................................................................71 4.6.3 Dátový procesor ................................................................................................71 4.6.4 P2p Pipe ............................................................................................................72 4.6.5 Interpreter balíkov.............................................................................................72 4.6.6 Typy balíkov .....................................................................................................73
4.6.6.1 Balíky pre tunelovací protokol .....................................................................73 4.6.6.2 Balíky pre nastavenie RSA kryptosystému ..................................................73
4.6.6.3 Balíky pre nastavenie ElGamal kryptosystému ............................................73 4.6.6.4 Ostatné balíky ...............................................................................................74
4.6.7 Testovanie dostupnosti .....................................................................................74 4.6.8 Bod-to-bod verzus klient-server .......................................................................74 4.6.9 Tunelovanie spojenia ........................................................................................74 4.6.10 Zabezpečenie komunikačného kanálu ..............................................................75 4.6.11 Realizácia komunikačného kanálu....................................................................75
5 Aplikácia pre prenos správ a súborov...............................................................................77 5.1 Šifrovanie v Jave.......................................................................................................77
5.1.1 Java JCE............................................................................................................77 5.1.2 Zoznam kryptografických provajderov.............................................................78 5.1.3 Generovanie kľúčov..........................................................................................79 5.1.4 Šifrovanie..........................................................................................................79 5.1.5 Dešifrovanie......................................................................................................79
5.2 Sieťová komunikácia v Jave .....................................................................................79 5.2.1 Adresovanie ......................................................................................................79
5.2.1.1 IP adresovanie - InetAddress, Inet4Address, Inet6Address .........................79 5.2.1.2 Soketové adresovanie - SocketAddress, InetSocketAddress ........................80
5.2.2 Vytváranie TCP spojenia ..................................................................................80 5.2.2.1 Vytvorenie serverovského soketu.................................................................80 5.2.2.2 Vytvorenie klientského soketu......................................................................80 5.2.2.3 Pripojenie pomocou proxy servera ...............................................................80
5.3 Objektová serializácia...............................................................................................81 5.4 Komunikačný protokol .............................................................................................81
5.4.1 Popis komunikačných paketov .........................................................................82 5.4.1.1 Packet............................................................................................................82 5.4.1.2 PacketSendID................................................................................................83 5.4.1.3 PacketSendMyPublicKey .............................................................................83 5.4.1.4 PacketEnableAsymetricCryptography..........................................................83 5.4.1.5 PacketSendData ............................................................................................83 5.4.1.6 PacketRequestReceivingFile ........................................................................83 5.4.1.7 PacketReceivingFileAccepted ......................................................................83
5.4.2 Prenos správ ......................................................................................................84 5.4.3 Prenos súborov..................................................................................................85 5.4.4 Štruktúra menu aplikácie ..................................................................................87 5.4.5 Konzola aplikácie .............................................................................................88
Záver .........................................................................................................................................89 Zoznam skratiek a symbolov ....................................................................................................91 Zoznam obrázkov .....................................................................................................................92 Zoznam tabuliek .......................................................................................................................92 Zoznam použitej literatúry........................................................................................................93 Zoznam príloh...........................................................................................................................94
FM Katedra informatiky
-12-
Úvod
Komunikáciu môžeme definovať ako odovzdávanie informácií medzi subsystémami
systému, alebo medzi systémom a okolím. Komunikačný protokol je množina pravidiel, ktoré
komunikujúce strany využívajú na vzájomnú komunikáciu. Protokol teda možno
charakterizovať ako pravidlá riadiace syntax, sémantiku a synchronizáciu komunikácie.
Syntax určuje tvar zápisu symbolov a sémantika pravidlá pre význam rôznych kombinácií
symbolov komunikácie.
K procesu odovzdávania informácií môže mať prístup i nepovolaná tretia strana. Tejto
je potom prístupný celý obsah komunikácie. Zabrániť jej v tom môžeme použitím vhodného
kryptosystému. V podstate tak nezabránime prístupu ku komunikácií, ale zneprístupníme jej
obsah. Od voľby kryptosystému potom závisia i následné ďalšie rozšírenia pôvodného
protokolu o výmenu kľúčov, autentifikáciu či prípadne iné vlastnosti.
Odovzdávanie informácií prebieha v určitom prostredí. Aj od tohto prostredia závisí
celková efektivita komunikácie. Rýchlosť, akou sa informácia v prostredí šíri, resp. prenesený
objem informácií za jednotku času a podobne. Vplyv prostredia však môžeme zmierniť
použitím vhodného kódovania, ktoré zabezpečí zmenšenie objemu informácie, kódovanie ako
kompresia, či zvýšenie spoľahlivosti prenosovej cesty, detekčné a samoopravné kódy.
Jedným takým prostredím je internet. Internet predstavuje rozsiahlu komunikačnú sieť.
V tejto sieti potom ľubovolní dvaja užívatelia spolu komunikujú prostredníctvom
internetového protokolu (IP), resp. prostredníctvom množiny protokolov. Množina má
vrstvovitý charakter, kde každá vrstva má presne danú, špecifickú úlohu, ktorú rieši.
Hlavný dôvod, ktorý ma viedol k výberu tejto témy, je ten, že v poslednej dobe sa
čoraz viac spomína problematika bezpečnosti komunikácie v prostredí internetu. Zvyšuje sa
výkon výpočtových prostriedkov, kapacita prenosových médií a príchodom nových
technológií sa otvárajú nové možnosti. Otázka zabezpečenia informácií tak naberá na
vážnosti, hlavne v oblasti spravodajských služieb.
Mojou snahou v tejto práci je popísať rôzne techniky šifrovania a kódovania, navrhnúť
a naprogramovať komunikačný protokol pre spoľahlivú a bezpečnú sieťovú komunikáciu
a aplikáciu využívajúcu tento protokol. Protokol som z praktického hľadiska navrhol ako
tunelovací, využívajúci zostavenie spojenia pomocou SOCKS protokolu. To znamená, že
služby navrhnutého protokolu môžu využívať i iné aplikácie, no podmienkou je podpora
pripojenia pomocou proxy servera. V práci využívam techniky objektovo orientovaného
programovania, preto odkazujem na jednotlivé časti návrhu ako na objekty či triedy. Ich
FM Katedra informatiky
-13-
názvy pre sprehľadnenie uvádzam v pôvodnom znení, tak ako vznikli pri návrhu
a implementácií v objektovo orientovanom jazyku.
Pre úplnosť spomeňme niektoré v praxi používané protokoly, riešiace túto
problematiku. Na sieťovej úrovni je to IP security (IPsec), ktorý autentifikuje a prípadne
šifruje každý prechádzajúci IP paket. Na aplikačnej Transport Layer Security (TLS), jeho
predchodca Secure Sockets Layer (SSL), prípadne Secure Shell (SSH). Tieto protokoly potom
umožňujú vytváranie tzv. virtuálnych privátnych sietí (virtual private network (VPN)). To sú
súkromné siete, kde spojenia medzi jednotlivými uživateľmi sú tvorené pomocou verejnej
siete (public network (PN)). Spojenia vo verejnej sieti sú však zabezpečené pomocou vyššie
spomínaných protokolov.
FM Katedra informatiky
-14-
1 Niektoré matematické pojmy a definície
1.1 Prvočísla
Matematicky, prvočíslo je prirodzené číslo, ktoré je deliteľné iba číslom 1 a samým
sebou. Pre príklad uveďme prvých 30 prvočísiel: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
43, 47, 53, 59, 61, 67, 71, 79, 83, 89, 97, 101, 103, 107, 109 a 113. Jediné párne prvočíslo je
číslo 2, všetky ostatné prvočísla väčšie ako 2 nazývame nepárne prvočísla. Dlhú dobu nemali
prvočísla žiadne praktické využitie. Až v sedemdesiatych rokoch dvadsiateho storočia, kedy
bol vynájdený koncept kryptografie s verejným kľúčom, sa stali základom prvých
kryptografických algoritmov ako RSA kryptosystém, či Diffie-Hellman algoritmus pre
výmenu kľúčov.
1.2 Prvočíselné delitele
Základná teoréma aritmetiky je založená na tom, že každé kladné celé číslo väčšie ako
1 môžeme napísať ako súčin jedného alebo viac prvočísiel v unikátnom tvare, nie však
v unikátnom poradí. Rovnaké prvočíslo sa môže vyskytovať viackrát. Prvočísla potom
môžeme pokladať za „základné stavebné bloky“ prirodzených čísiel. Príklad: číslo 23244
môžeme napísať ako 14913322 ⋅⋅⋅ , hocijaké iné faktorizácie čísla 23244 budú, okrem
poradia faktorov identické. Význam tohoto predpokladu je jedným z dôvodov, prečo čislo 1
nepatrí do množiny prvočísiel.
1.3 Niektoré vlastnosti prvočísiel
� Nech p je prvočíslo, ak p delí súčin čísiel a a b, potom p delí a alebo p delí b.
� Nech p je prvočíslo a a je ľubovolné celé číslo, potom je apa −⋅ deliteľné p.
� Ak n je kladné celé číslo, existuje prvočíslo p také, že platí
npn 2≤< (1)
� Pre každé prvočíslo p>2 môžeme nájsť prizodzené číslo n, také, že platí
14 ±⋅= np (2)
� Pre každé prvočíslo p>3 môžeme nájsť prizodzené číslo n, také, že platí
16 ±⋅= np (3)
� Nech p je prvočíslo, 2≠p a 5≠p , potom p/1 má v desiatkovej číselnej sústave
nekonečný desatinný rozvoj.
FM Katedra informatiky
-15-
� Každé zložené číslo môžeme jednoznačne vyjadriť ako súčin prvočísiel. Proces
rozkladu čísla na jednotlivé prvočinitele nazývame faktorizácia.
� Nech p je prvočíslo a G je grupa s pn prvkami, potom G obsahuje prvok rádu p.
� Ak pn je najvyššia mocnina prvočísla p, ktorá delí rád grupy G a G je konečná grupa,
potom G má podgrupu rádu pn.
� Okruh Z/nZ je teleso práve vtedy, keď n je prvočíslo, resp. n je prvočíslo, práve vtedy,
keď
1)( −= nnϕ (4)
1.4 Miller-Rabin test
Miller-Rabinov test, tiež známy ako silný pseudo prvočíselný test, je v praxi
najčastejšie používaný test pravdepodobnej prvočíselnosti. Test je založený na nasledujúcom
fakte: Nech n je nepárne prvočíslo a nech
rn s ⋅=− 21 , (5)
kde r je nepárne. Nech a je ľubovolné celé číslo také, že platí
1),gcd( =na (6)
Potom platí
)(mod1 na r ≡ (7)
alebo
)(mod12 na rj −≡ (8)
pre ľubovolné 10, −≤≤ sjj .
1.4.1 Algoritmus testu Miller-Rabin
Miller-Rabin(n,t)
Vstup: Nepárne celé číslo 3≥n a bezpečnostný parameter 1≥t .
Výstup Rozhodnutie, či n je alebo nie je pravdepodobné prvočíslo.
1. Napíšme rn s ⋅=− 21 , tak, že r je nepárne.
2. Pre každé i z intervalu 1 až t vykonajme nasledujúce kroky
2.1. Zvoľme náhodné celé číslo 22, −≤≤ naa .
2.2. Vypočítajme
nay r mod= (9)
FM Katedra informatiky
-16-
2.3. Ak 1≠y a 1−≠ ny , potom vykonajme nasledujúce kroky:
1←j .
Pokiaľ 1−≤ sj a 1−≠ ny , vykonajme nasledujúce:
Vypočítajme nyy mod2←
Ak 1=y , potom výsledok, n je zložené číslo.
1+← jj .
Ak 1−≠ ny , potom výsledok, n je zložené číslo.
3. Výsledok, n je pravdepodobné prvočíslo.
1.5 Počet prvočísiel
Nech )(xπ je počet prvočísiel x≤ , potom
1ln/
)(lim =
∞→ xx
x
x
π (10)
To znamená, že pre veliké hodnoty x, môžeme )(xπ vyjadriť ako x
x
ln. Pre príklad, ak
511,052,455)(,1010 == xx π , kde 481,294,434ln
=
x
x. Presnejšie môžeme )(xπ vyjadriť
nasledovne: Nech )(xπ je počet prvočísiel x≤ . Potom pre 17≥x platí
x
xx
ln)( >π (11)
a pre 1>x platí
x
xx
ln25506.1)( <π (12)
Pomer celých čísiel x≤ , ktoré sú prvočíslami je približne xln
1. Kedže polovica
všetkých celých čísiel x≤ sú párne čísla, pomer nepárnych čísiel, ktoré sú prvočíslami je
približne xln
2. Pre príklad, pomer všetkých nepárnych čísiel 5122≤ , ktoré sú prvočíslami je
približne 177
1
)2ln(512
2≈
⋅. Teda môžeme predpokladať, že rozumná stratégia pre výber
náhodného k-bitového (pravdepodobného) prvočísla je opakovaný výber náhodného k-
bitového nepárneho celého čísla, až pokiaľ nenájdeme také celé číslo, ktoré môžeme za
FM Katedra informatiky
-17-
pomoci Miller-Rabinovho testu s vhodne zvoleným bezpečnostným parametrom t pokladať za
prvočíslo.
Ak náhodné k-bitové nepárne celé číslo n je deliteľné malým prvočíslom, je výpočtovo
menej náročné vylúčiť dané n za pomoci pokusného delenia (trial division), ako s použitím
Miller-Rabinovho testu. Kedže pravdepodobnosť, že náhodné celé čislo n má deliteľa je
relatívne vysoká, pred tým, ako aplikujeme Miller-Rabinov test, mali by sme n testovať
delením malými deliteľmi pod zvolenou hranicou B. Toto je možné ralizovať delením čísla n
všetkými prvočíslami pod B, alebo vypočítaním najväčšieho spoločného deliteľa čisla n
a predvypočítaného súčinu niekoľkých prvočísiel B≤ . Pre príklad, ak B = 256, potom iba
20% nepárnych celých čísiel n prejde testom pokusného delenia, tzn. 80% čísiel je
vyradených predtým ako je vykonaný výpočtovo náročnejší Miller-Rabinov test.
1.6 Postup generovania prvočísiel
Algoritmus: Hľadanie náhodného prvočísla s použitím Miller-Rabinovho testu.
Náhodné hľadanie(k,t)
Vstup: celé čislo k a bezpečnostný parameter t.
Výstup: náhodné k-bitov dlhé prvočíslo.
1. Generujeme nepárne k-bitov dlhé náhodné celé číslo.
2. Použijeme pokusné delenie pre test, či n je deliteľné ľubovoľným nepárnym
prvočíslom < B. Ak áno, vrátime sa na krok 1.
3. Ak Miller-Rabinov test vyhodnotí n ako prvočíslo, vrátime n, inak sa vrátime na
krok 1.
1.6.1 Voľba bezpečnostného parametra t
Z praktického hľadiska sa toleruje chybovosť 80
2
1
generovania pravdepodobného
prvočísla. Pre príklad, pre generovanie 1000-bitového pravdepodobného prvočísla postačí pre
Miller-Rabinov test parameter t = 3, keďže väčšinu zložených čísiel odhalí pokusné delenie.
k t k t k t k t
100 27 500 6 900 3 1400 2
200 15 600 5 1000 3 1600 2
300 9 700 4 1100 3 1900 2
400 7 800 4 1200 3 2050 2
Tab. 1 Voľba bezpečnostného parametra t
FM Katedra informatiky
-18-
1.6.2 Optimálna hranica pokusného delenia B
Nech E je čas potrebný pre plnú k-bitovú modulárnu exponenciu a nech D je čas
potrebný pre určenie malého prvočísla ako deliteľa k-bitového celého čísla (Hodnoty E a D
závisia od implementácie aritmetiky). Potom hranica pokusného delenia B, ktorá
minimalizuje očakávaný čas algoritmu generovania k-bitového pravdepodobného prvočísla je
približne
D
EB = (13)
Presnejšie určenie hranice B určíme experimentálne. Pre zvýšenie rýchlosti vypočtu
môžeme nepárne prvočísla do hranice B predpočítať a uložiť do tabuľky.
1.7 Deliteľnosť celých čísiel
Celé číslo c je spoločným deliteľom čísiel a i b vtedy, ak c|a a zároveň c|b. Nech d je
nezáporné celé číslo, potom d je najväčší spoločný deliteľ celých čísiel a a b,
),gcd( bad = (14)
vtedy, ak platí, že d je spoločný deliteľ a a b a zároveň ak platí c|d keď platí c|a a c|b.
Ekvivalentne, ),gcd( ba je najväčšie kladné celé číslo, ktoré delí a i b, s výnimkou
0)0,0gcd( = . Príklad: spoločné delitele čísiel 12 a 18 sú }6,3,2,1{ ±±±± , potom
6)18,12gcd( = .
1.7.1 Euklidov algoritmus
Euklidov algoritmus predstavuje výpočet najväčšieho spoločného delitela dvoch čísiel.
Vstup: dve celé nezáporné čísla a a b, ba ≥ .
Výstup: najväčší spoločný delitel čísiel a a b.
1. Pokiaľ 0≠b vykonaj nasledujúce
1.1 Nastav rbbabar ←←← ,,mod .
2. Výsledok a
1.7.2 Rozšírený Euklidov algoritmus
Euklidov algoritmus môžeme rozšíriť o výpočet celých čísiel x a y, takých, že platí
dybxa =⋅+⋅ (15)
FM Katedra informatiky
-19-
Vstup: dve celé nezáporné čísla a a b, také, že platí ba ≥ .
Výstup: ),gcd( bad = a celé čísla x, y, také, že platí dybxa =⋅+⋅
1. Ak 0=b , potom nastav 0,1, ←←← yxad a vráť výsledok ),,( yxd .
2. Nastav 1,0,0,1 1212 ←←←← yyxx .
3. Pokiaľ 0>b vykonaj nasledujúce kroky:
3.1 1212 ,,, yqyyxqxxbqarb
aq ⋅−←⋅−←⋅−←
← .
3.2 yyyyxxxxrbba ←←←←←← 112112 ,,,,, .
4. Nastav 22 ,, yyxxad ←←← a vráť výsledok ),,( yxd .
1.8 Grupa
Grupa je množina čísiel s vlastnou definovanou aritmetickou operáciou. Unikátne
pravidlá pre aritmetiku grupy sú zdrojom ťažkých problémov nevyhnutných pre
kryptografickú bezpečnosť. V kryptografií sa najčastejšie používajú dve grupy a to
nZ aditívna grupa celých čísiel modulo n a multiplikatívna grupa *pZ celých čísiel modulo p,
kde p je prvočíslo.
1.8.1 Grupa nZ
Grupa nZ používa iba celé čísla z intervalu 0 až n-1. Jej základná operácia je súčet a
končí redukciou výsledku. Výsledkom je celočíselný zvyšok po delení výsledku súčtu celým
číslom n (modulo n). Veľmi dôležitou vlastnosťou grupovej aritmetiky je uzavretosť. To
znamená, že výsledky všetkych vypočtov v grupe sa nachádzajú tiež v grupe samotnej.
Modulárna redukcia číslom n teda zaisťuje správnosť všetkých výsledkov súčtov čísiel
z intervalu 0 až n-1.
1.8.1.1 Sčítavanie v 15Z
Príklad sčítavania v 15Z . Aditívna grupa 15Z používa celé čísla z intervalu 0 až 14.
715mod2215mod)1210( ==+
015mod1515mod)114( ==+
v 15Z , 71210 =+ , 0114 =+ všetky výsledky ležia na intervale 0 až 14.
FM Katedra informatiky
-20-
1.8.1.2 Súčet so záporným číslom
Každé číslo x v aditívnej grupe má aditívny inverzný element, čo je celé číslo –x, také,
že platí
0)( =−+ xx (16)
v grupe. V 15Z , 114 =− , kedže 015mod1515mod)114( ==+ .
1.8.1.3 Ďaľšie operácie
Keďže sčítanie je hlavná operácia aditívnej grupy nZ , ďaľšie operácie môžu byť z nej
odvodené. Odčítanie yx − môžeme vykonať ako sčítanie nyx mod)(−+ . V 15Z ,
1215mod111)4(141 =+=−+=− . Násobenie v nZ môžeme definovať ako opakované
sčítanie. Pre príklad násobenie )9(4 ⋅ v 15Z môžeme uskutočniť ako sčítanie
615mod3615mod9999 ==+++ .
1.8.2 Grupa *pZ
Multiplikatívna grupa *pZ používa iba celé čísla z intervalu 1 až p-1, kde p je
prvočíslo, a jej základná operácia je násobenie. Násobenie končí redukciou výsledku, resp za
výsledok pokladáme zvyšok po delení výsledku násobenia číslom p, toto zaisťuje uzavretosť.
1.8.2.1 Násobenie v *11Z
Príklad násobenia. Multiplikatívna grupa *11Z používa celé čísla z intervalu 1 až 10.
611mod2811mod74 ==⋅
111mod4511mod59 ==⋅
V *11Z , 674 =⋅ , 159 =⋅ všetky výsledky ležia na intervale 1 až 10.
1.8.3 Multiplikatívna inverzia
Každé číslo x v multiplikatívnej grupe má multiplikatívny inverzný element., čo je
číslo 1−x , také, že platí
11 =⋅ −xx (17)
v grupe. V *11Z , 59 1 =− kedže 111mod59 =⋅ .
V multiplikatívnej grupe, každý element musí mať multiplikatívnu inverziu. Uvažujme
grupu *15Z . 15 je zložené číslo, tzv kompozit ( 1535 =⋅ ). Na celom intervale 1 až 14 je
FM Katedra informatiky
-21-
možné definovať násobenie končiace redukciou modulo 15, avšak nie je možné na celom
intervale definovať inverzné elementy. Číslo 6 nemá inverziu, keďže nie je možné nájsť také
číslo y, že platí
115mod6 =⋅ y (18)
1.8.4 Abelianova grupa
Aritmetická operácia je komutatívna vtedy, ak poradie argumentov nie je dôležité.
V oblasti bežných čísiel, sčítanie i násobenie sú komutatívne operácie. Pre príklad 2992 ⋅=⋅
a 2992 +=+ , no odčítanie či delenie nie sú komutatívne operácie, keďže platí 2992 −≠−
a 2/99/2 ≠ .
Grupa sa nazýva abelianova, iba ak jej hlavná operácia je komutatívna. Teda aditívna
grupa je abelianova iba ak pre všetky elementy a a b z grupy platí
abba +=+ (19)
Multiplikatívna grupa je abelianova, ak pre všetky elementy a a b z grupy platí
abba ⋅=⋅ (20)
Aditívna grupa nZ a multiplikatívna grupa *pZ sú abelianove grupy.
1.9 Pole
Pole je množina elementov s dvoma vlastne definovanými aritmetickými operáciami,
najčastejšie súčet a súčin. Všetky prvky poľa patria do adítívnej abeliánovej grupy a všetky
nenulové prvky patria i do multiplikatívej abeliánovej grupy. To znamená, že všetkým
prvkom poľa môžeme nájsť ich aditívnu inverziu a všetkým nenulovým prvkom poľa
môžeme nájsť multiplikátívnu inverziu. Podobne ako v grupách, ďaľšie operácie v poli môžu
byť definované použitím hlavných dvoch operácií.
Pole sa nazýva finítne, vtedy, ak má konečný počet prvkov. Najčastejšie používané
polia sú pF , kde p je prvočíslo a pole mF2 .
1.9.1 Pole pF
Finítne pole pF , kde p je prvočíslo, pozostáva z čísiel z intervalu 0 až 1−p . Jeho
operácie sú sučet a súčin, ktoré sú definované podobne ako pre grupy nZ a *pZ , resp. všetky
výpočty končia redukciou modulo p. Obmedzenie, že p musí byť prvočíslo je nevyhnutné pre
to, aby všetky nenulové prvky mali svoju multiplikatívnu inverziu. Podobne ako nZ a *pZ ,
FM Katedra informatiky
-22-
daľšie operácie ako delenie, odčítanie, umocňovanie v poli pF sú odvodené pomocou
definícií súčtu a súčinu.
1.9.1.1 Príklad výpočtov v 23F
623mod2923mod11410 ==−⋅
1023mod7 1 =− kedže 123mod7023mod107 ==⋅
1423mod10623mod7623mod7/51223mod7/)8( 13 =⋅=⋅== −
1.9.2 Pole Galois
Pole )(xq
Z p , kde p je prvočíslo a )(xq je nerozložiteľný polynóm stupňa n nad pZ sa
nazýva Galoisové pole a označuje sa )( npGF . Inak povedané, je to algebraické rozšírenie
poľa pZ nerozložiteľným polynómom stupňa n.
1.9.3 Určenie Galoisového poľa
Jednoduchý spôsob, ako určit Galoisove pole
)()(
xq
ZpGF
pn = (21)
je taký, že určíme primitívny prvok a a vyjadríme všetky nenulové prvky (všetky nenulové
polynómy premennej x stupňa menšieho ako n) v tvare ia . Potom súčet v )( npGF je
obyčajným súčtom polynómov a súčin je daný ako
jiji aaa +=⋅ (22)
1.9.3.1 Výpočet tabuľky GF(9)
Kedže 239 = , potom 3=p a 2=n a kedže 3=p , potom majme pole 3Z rozšírené
nerozložiteľným polynómom druhého stupňa
2)( 2 ++= xxxq (23)
Potom prvky )(
3
xq
Z sú polynómy stupňa menšieho ako 2. Premenná spĺňa rovnicu
022 =++ xx (24)
potom mocninami ix môžeme vyjadriť kompletnú tabuľku GF(9).
FM Katedra informatiky
-23-
( )
( ) ( )( ) ( )
( ) ( )( )
1
11421222
22412222
22
22621222222
2225122212
122
1
:9
08
267
256
45
234
223
2
1
0
==
+=+=++=+=×+=×=
+=+=+×==×=×=
=×=×=
=+=++×=+=×+=×=
+=+=++×=+=×+=×=
+=−−=
=
=
xx
xxxxxxxxxxx
xxxxxxxxx
xxxxx
xxxxxxxxxx
xxxxxxxxxxx
xxx
xx
x
GF
Tab. 2 Kompletná tabuľka GF(9). 1.10 Kongruencia
Nech a a b sú celé čísla a m je kladné celé číslo, potom ak m delí ab − , môžeme
napísať
)(modmba ≡ (25)
Daný výraz čítame ako „a je kongruentné – zhodné ku b modulo m“ . Celé kladné číslo
m nazývame modulus. Výraz )(modmba ≡ platí iba vtedy a len vtedy ak
mbma modmod = (26)
Dôkaz je uvedený v knihe [1].
1.11 Kvadratické reziduá
Definícia: Nech p je nepárne prvočíslo a x je celé číslo, také, že platí 11 −≤≤ px .
Definujme x ako kvadratické reziduum modulo p ak kongruencia
)(mod2 pxy ≡ (27)
má riešenie pZy∈ a definujme x ako kvadratické nereziduum modulo p ak platí, že
0mod ≠px (28)
a x nie je kvadratické reziduum modulo p.
Príklad: Kvadratické reziduá modulo 11 sú 1,3,4,5 a 9. Kedže v pZ platí 1)1( 2 =± ,
3)5( 2 =± , 4)2( 2 =± , 5)4( 2 =± a 9)3( 2 =± .
FM Katedra informatiky
-24-
1.12 Eulerové kritérium
Nech p je nepárne prvočíslo. Potom x je kvadratické reziduum modulo p ak a iba ak
platí
)(mod12
)1(
px
p
≡−
(29)
Dôkaz je uvedený v knihe [1].
FM Katedra informatiky
-25-
2 Kryptografia
Kryptografia je vedná disciplína, zaoberajúca sa tvorbou šifier, určených pre bezpečné
ukrývanie informácií. Zameriava sa na bezpečnosť informačných systémov. Na
� Dôvernosť/utajenie (confidentiality) informácií počas prenosu, počas uloženia,...
� Autentizáciu (authentication), overenie a potvrdenie pravosti odosielateľa,
� Integritu (data integrity) dát, celistvosť a správnost obsahu prenášaných správ.
Kryptosystém je definovaný päticou (P,C,K,E,D), kde
� P je konečná množina možných vstupných správ
� C je konečná množina možných šifrovaných správ
� K je priestor kľúčov, konečná množina možných kľúčov
Pre každé Kk ∈ existuje šifrovacie pravidlo Eek ∈ a zodpovedajúce dešifrovacie
pravidlo Dd k ∈ . Všetky CPek →: a PCd k →: sú funkcie, také, že platí
xxed kk =))(( (30)
pre každú vstupnú správu Px∈ .
Tretia strana
Správa Cieľ
Ee(m) = c
ŠifrovanieDd(c) = m
Dešifrovanie
m
c
m
Bob
Nezabezpečený kanál
Obr. 1 Komunikácia dvoch strán s využitím šifrovania
2.1 Kryptografia so symetrickým kľúčom
Nech }:{ KeEe ∈ je množina šifrovacích transformácií a nech }:{ KdDd ∈ je
množina zodpovedajúcich dešifrovacích transformácií, kde K je priestor kľúčov. Šifrovaciu
schému môžeme považovať za schému so symetrickým kľučom, ak pre každý asociovaný
šifrovací pár kľúčov (e,d) je výpočtovo ľahké určiť d, za predpokladu, že poznáme e, a určit e
poznaním d. V bežných schémach šifrovania so symetrickým kľúčom uvažujeme e = d.
FM Katedra informatiky
-26-
Príklad, nech },,,...,,,{ ZYXCBAA = je anglická abeceda, nech M a C je množina
všetkých reťazcov dlžky 5 nad A. Kľúč e je vybraný ako permutácia na A. Pre šifrovanie je
správa rozdelená na časti po 5 písmen (s vhodnou výplňou, ak dĺžka správy nie je násobkom
piatich). Permutácia e je aplikovaná na každé písmeno. Pre dešifrovanie je na každé písmeno
šifry aplikovaná inverzná permutácia
1−= ed (31)
Pre príklad, predpokladajme, že kľúč e je vybraný ako permutácia, ktorá mapuje každé
písmeno na iné písmeno vzdialené v abecede o 3 miesta doprava.
=
XYZABCNOPQRSTUVWDEFGHIJKLM
UVWXYZKLMNOPQRSTABCDEFGHIJe
Správa
m = THISC IPHER ISCER TAINL YNOTS ECURE
je zašifrovaná ako
)(mEc e= (32)
c = WKLVF LSKHU LVFHU WDLQO BQRWV HFXUH
Na obr.2 je znázornená dvojstranná komunikácia s použitím symetrického kľúča.
Dešifrovací kľúč d je možné vypočítať pomocou e.
Tretia strana
Správa Cieľ
Ee(m) = c
ŠifrovanieDd(c) = m
Dešifrovanie
m
c
m
Alica Bob
Nezabezpečený kanál
Zdroj kľúčove Zabezpečený kanál
e
Obr. 2 Využitie šifrovania so zabezpečeným kanálom pre výmenu kľúča
Jedna z hlavných otázok v systéme šifrovania so symetrickým kľúčom je nájsť
efektívnu metódu pre bezpečné dohodnutie a výmenu kľúča. Tento problém je známy ako
problém distribúcie kľúča.
FM Katedra informatiky
-27-
Predpokladáme, že všetky strany poznajú šifrovacie/dešifrovacie transformácie. Ako
sme uviedli vyššie, jediná informácia, ktorú treba ponechať v utajení je kľúč d. Kedže však
ide o šifrovanie so symetrickým kľúčom, kľúč d môže byť odvodený z kľúča e a preto i kľúč
e musí byť uchovaný v tajnosti. Na obr. 2 je šifrovací kľúč e transportovaný z jednej strany
na druhú s predpokladom, že obe strany vedia vypočítať dešifrovací kľúč d.
Šifrovacie schémy so symetrickým kľúčom bežne rozdeľujeme do dvoch tried a to:
blokové šifry a prúdové šifry.
Definícia: Bloková šifra, je šifrovacia schéma, ktorá rozdeľuje nešifrované správy do
blokov pevnej dĺžky t a v danom čase šifruje jeden blok.
Veľa známych techník šifrovania so symetrickým kľúčom môžeme považovať za
blokové šifry. Blokové šifry môžeme ďalej rozdeliť do dvoch dôležitých tried a to:
substitučná šifra a tranzpozičná šifra.
2.1.1 Substitučná a tranzpozičná šifra
Substitučné šifry sú blokové šifry, ktoré zamieňajú symboly, prípadne skupiny
symbolov inými symbolmi či skupinami symbolov.
2.1.1.1 Jednoduchá substitučná šifra
Definícia: Nech A je abeceda s q symbolmi a M je množina všetkých reťazcov dlžky t
nad A. Nech K je množina všetkých permutácií na množine A. Definujme pre každé
Ke∈ šifrovaciu transformáciu eE nasledovne:
ccccmemememE tte =⋅⋅⋅=⋅⋅⋅= )())()()(()( 2121 (33)
kde Mmmmm t ∈⋅⋅⋅= )( 21 .
Inými slovami, každý symbol v t-tici, sa na základe pevnej permutácie e zamení iným
symbolom z abecedy A. Pre dešifrovanie )( 21 tcccc ⋅⋅⋅= vypočítame inverzú permutáciu
1−= ed a
mmmmcdcdcdcD ttd =⋅⋅⋅=⋅⋅⋅= )())()()(()( 2121 (34)
eE potom môžeme nazvať jednoduchou substitučnou šifrou alebo mono-abecednou
substitučnou šifrou.
Počet jednoznačných substitučných šifier je q! a je nezávislý od veľkosti bloku v šifre.
Jednoduché substitučné šifry nad malými blokmi predstavujú nedostatočnú bezpečnosť aj keď
priestor kľúčov je extrémne veľký. Ak ako abecedu použijeme anglickú abecedu, potom
FM Katedra informatiky
-28-
veľkosť priestoru kľúčov je 26104!26 ⋅≈ , avšak použitý kľúč môže byť veľmi ľahko odhalený
preskúmaním neveľkého množstva šifrovaných správ, keďže frekvencia používania písmen
abecedy je obsiahnutá v i šifrovanej správe. Pre príklad, písmeno E sa v bežnom anglickom
texte vyskytuje častejšie ako iné písmena. Potom písmeno, ktoré sa najčastejšie vyskytuje
v sekvencií šifrovaných blokov pravdepodobne zodpovedé písmenu E v pôvodnej správe.
Analýzou frekvencie výskytu písmen v blokoch môžeme potom určiť šifrovací kľúč.
2.1.1.2 Homofónna substitučná šifra
Definícia: Každému symbolu Aa∈ priraďme množinu )(aH reťazcov o t symboloch
s obmedzením, takým že množiny AaaH ∈),( sú párovo disjunktné. Homofónna substitučná
šifra zamieňa každý symbol a v bloku spávy s náhodne vybraným reťazcom z )(aH . Pre
dešifrovanie reťazca c o dĺžke t symbolov, musíme určiť Aa∈ , také, že platí )(aHc∈ .
Šifrovací kľúč potom pozostáva z množín )(aH .
Príklad: Nech }10,00{)(},,{ == aHbaA a }11,01{)( =bH . Správu ab potom môžeme
zašifrovať do nasledujúcej podoby: 0001, 0011, 1001, 1011.
}1010,1000,0010,0000{→aa
}1011,1001,0011,0001{→ab
}1110,1100,0110,0100{→ba
}1111,1101,0111,0101{→bb
Ľubovoľný 4 bitový unikátny identifikátor a jeho dešifrovaný tvar.
2.1.1.3 Polyabecedná substitučná šifra
Definícia: Polyabecedná substitučná šifra je bloková šifra, s dĺžkou bloku t nad
abecedou A majúca nasledovné vlastnosti:
1. Priestor kľúčov K pozostáva s usporiadaných množín t permutácií ),...,,( 21 tppp ,
kde každá permutácia ip je definovaná na množine A.
2. Šifra správy )...( 21 tmmmm = pomocou kľúča
),...,,( 21 tpppe = (35)
je daná
))()()(()( 2211 tte mpmpmpmE ⋅⋅⋅= (36)
FM Katedra informatiky
-29-
3. Dešifrovací kľúč asociovaný s ),...,,( 21 tpppe = je
),...,,( 112
11
−−−= tpppd (37)
Príklad: Vigenèreova šifra. Nech },,,...,,,{ ZYXCBAA = a 3=t , zvoľme
),,( 321 pppe = , kde 1p mapuje každé písmeno na písmeno posunuté v abecede o tri pozície
doprava, 2p o sedem a 3p o desať pozícií doprava. Potom, ak
m = THI SCI PHE RIS CER TAI NLY NOT SEC URE ,
tak
== )(mEc e WOS VJS SOO UPC FLB WHS QSI QVD VLM XYO .
Polyabecedné šifry majú oproti jednoduchým substitučným šifrám výhodu v tom, že
hodnoty frekvencie výskytu symbolov nie sú obsiahnuté v šifrovanom tvare. V príklade je
písmeno E šifrované ako O, aj ako L. No polyabecedné šifry nie sú výraznejšie náročnejšie na
kryptoanalýzu. Metóda analýzy je podobná analýze jednoduchej substitučnej šifry. Písmená
šifrovanej správy môžeme rozdeliť do t skupín, kde skupina tii ≤≤1, , pozostáva zo
šifrovaných písmen odvodených s použitím permutície ip . Potom frekvenčná analýza môže
byť vykonaná na každej skupine.
2.1.1.4 Transpozičná šifra
Ďaľšia trieda šifier so symetrickým kľúčom je jednoduchá transpozičná šifra, ktorá
jednoducho obmieňa znaky v bloku.
Definícia: Uvažujme schému blokového šifrovania so symetrickým kľúčom o dĺžke
bloku t. Nech K je množina všetkých permutácií na množine },...,2,1{ t . Pre každé Ke∈
definujme šifrovaciu funkciu
)()( )()2()1( teeee mmmmE ⋅⋅⋅= (38)
kde Mmmmm t ∈⋅⋅⋅= )( 21 , M je priestor správ. Množina všetkých transformácií je nazývaná
jednoduchou transpozičnou šifrou. Dešifrovací kľúč, korešpondujúci s e je inverznou
permutáciou 1−= ed . Pre dešifrovanie )( 21 tcccc ⋅⋅⋅= treba vypočítať
).()( )()2()1( tdddd ccccD ⋅⋅⋅= (39)
Jednoduchá transpozičná šifra chráni symboly daného typu na úrovni bloku a preto je
ľahko kryptoanalyzovateľná.
FM Katedra informatiky
-30-
2.1.2 Kompozícia šifier
Kompozícia je spôsob, ako pomocou jednoduchších funkcií vytvoriť zložitejšie.
2.1.2.1 Kompozícia funkcií
Definícia: Nech S,T a U sú finítne množiny a nech TSf →: a UTg →: sú funkcie.
Kompozícia g s f, ktorú značime fg o (alebo jednoduchšie gf) je funkcia z S do U, zobrazená
na obr. 3 a definovaná ako
))(())(( xfgxfg =o (40)
pre všetky Sx∈ .
a
c
b
1
4
3
2
s
v
u
t
f g
S
T U
a
c
b
S
s
v
u
t
U
g o f
Obr. 3 Kompozícia fg o funkcií g a f
Kompozícia môže byť ľahko rozšírená o viac ako dve funkcie. Pre funkcie tfff ,...,, 21
definujeme 12 fff t ooo ⋅⋅⋅ za predpokladu, že doména tf je rovná kodoméne 1−tf .
2.1.2.2 Kompozícia a involúcia
Involúcia je jednoduchá trieda funkcií so zaujímavou vlastnosťou
xxEE kk =))(( (41)
pre všetky x z domény kE . Potom kk EE o je totožná funkcia.
Poznámka: Kompozícia dvoch involúcií nemusí byť nevyhnutne involúciou. Involúcie
môžu byť skladané tak, že výsledkom sú potencionálne viac zložité funkcie, ktorých inverzia
je ľahko odvoditeľná. Toto je dôležitý fakt pre dešifrovanie. Pre príklad: ak tkkk EEE ,...,,
21 sú
involúcie, potom inverzia
tkkkk EEEE ⋅⋅⋅=21
(42)
je
11
1kkkk EEEE
tt⋅⋅⋅=
−
− (43)
FM Katedra informatiky
-31-
Kompozícia involúcií má opačné poradie.
1
4
3
2
4
3
2
1 1
4
3
2
4
3
2
1 1
4
3
2
4
3
2
1
g o fgf
Obr. 4 Kompozícia fg o involúcií g a f nie je involúcia
2.1.3 Produktová šifra
Jednoduché substitučné a transpozičné šifry samé o sebe neposkytujú veľmi vysokú
úroveň bezpečnosti. No kombináciou týchto transformácií je možné získať silné šifry.
Príkladom produktovej šifry je skladba 2≥t transformácií tkkk EEE ⋅⋅⋅
21, kde každé
tiEik
≤≤1, je substitučná alebo transpozičná šifra. Skladbu substitúcie a transpozicie
môžeme nazývať kruhom.
Príklad: Nech KCM == je množina všetkých binárnych reťazcov dĺžky 6. Počet
elementov v M je 6426 = . Nech )( 621 mmmm ⋅⋅⋅= . Definujme
kmmEk ⊕=)()1( , Kk∈ (44)
)()( 321654)2( mmmmmmmE = (45)
Operáciu ⊕ voláme exclusive-OR (XOR) a je definovaná nasledovne: 000 =⊕ ,
110 =⊕ , 101 =⊕ , 011 =⊕ . )1(kE je polyabecedná substitučná šifra a )2(E je transpozičná
šifra (nemá vplyv na kľúč). Produktom )2()1( EEk je kruh.
Poznámka: Neporiadok a rozptýlenie. Substitúciu v kruhu môžeme považovať ako
pridanie neporiadku do šifrovacieho procesu a transpozíciu ako pridanie rozptýlenia. Pridanie
neporiadku znamená vytvoriť čo najzložitejší vzťah medzi kľúčom a šifrovanou správou.
Rozptýlenie znamená preskupenie a rozšírenie bitov v správe tak, že hociaká redundancia
v pôvodnej správe je rozptýlená cez šifrovanú správu. Za kruh potom môžeme považovať
pridanie neporiadku a rozptýlenia do šifrovacieho procesu. Veľa moderných blokových
šifrovacích systémov aplikuje viacero kruhov za sebou.
FM Katedra informatiky
-32-
2.1.4 Prúdové šifry
Prúdove šifry predstavujú dôležitú triedu schém šifrovania so symetrickým kľúčom.
Ide vlastne o veľmi jednoduché blokové šifry s dĺžkou bloku rovnej jednej. Prúdové šifry
nepodporujú šírenie chyby, čo je výhodné v situáciách, kedy sa očakáva vysoká
pravdepodobnosť výskytu chyby počas prenosu. Tiež môžu byť použité, v systémoch, kde
dáta musia byť spracovávané po symboloch z dôvodu limitovania vyrovnávacej pamäte.
Definícia: Nech K je priestor kľúčov pre množinu šifrovacích transformácií.
Sekvenciu symbolov Keeee i ∈⋅⋅⋅321 nazývame prúd kľúčov.
Definícia: Nech A je abeceda s q symbolmi a nech eE je jednoduchá substitučná šifra
s blokom dĺžky 1, kde Ke∈ . Nech ⋅⋅⋅321 mmm je pôvodný reťazec a nech ⋅⋅⋅321 eee je prúd
kľúčov z K. Potom výsledkom prúdovej šifry je reťazec ⋅⋅⋅321 ccc , kde
)( iei mEci
= (46)
Ak id je inverziou ie , potom
iid mcDi
=)( (47)
dešifruje šifrovaný reťazec.
Prúdove šifry aplikujú jednoduché šifrovacie transformácie na základe prúdu kľúčov.
Prúd kľúčov môže byť generovaný náhodne, alebo pomocou algoritmu, ktorý generuje prúd
kľúčov z prvotného malého prúdu nazývaného seed, alebo zo seed a predchádzajúcich
zašifrovaných symbolov. Takýto algoritmus sa nazýva generátor prúdu kľúčov.
2.1.4.1 Vernamova šifra
Definícia: Vernamova šifra je prúdová šifra definovaná nad abecedou }1,0{=A .
Binárna správa tmmm ⋅⋅⋅21 je šifrovaná pomocou binárneho reťazca kľúčov tkkk ⋅⋅⋅21
rovnakej dĺžky tak, že výsledný šifrovaný reťazec je tccc ⋅⋅⋅21 , že platí
tikmc iii ≤≤⊕= 1, (48)
Ak je prúd kľúčov vybraný náhodne a nie je použitý opakovane, Vernamova šifra má
charakter jednorázového systému (one-time system, one-time pad).
Vernamova šifra sa v podstate skladá z dvoch substitučných šifier 0E a 1E na množine
A. 0E predstavuje jednoduché mapovanie 00→ , 11→ a 1E mapuje 10→ a 01→ . Ak
prúd kľučov obsahuje práve 0, aplikuje sa 0E , inak 1E .
FM Katedra informatiky
-33-
Viacnásobné použitie reťazca kľučov nie je bezpečné. Pre príklad, ak tccc ⋅⋅⋅21 a
tccc ′⋅⋅⋅′′ 21 sú dva reťazce, šifrované pomocou rovnakého prúdu kľúčov tkkk ⋅⋅⋅21 , potom
iii kmc ⊕= (49)
iii kmc ′⊕′=′ (50)
iiii mmcc ′⊕=′⊕ (51)
Redundancia následne uľahčuje kryptoanalýzu.
Jednorázový systém sa javí ako teoreticky nenapadnuteľný. Ak má kryptoanalytik
k dispozicí reťazec tccc ⋅⋅⋅21 šifrovaný pomocou náhodného iba raz použitého reťazca
kľúčov, nemôže urobiť nič viac, ako odhadovať, že pôvodná správa môže byť hocijaký
binárny reťazec dĺžky t. Teoreticky, nenapadnuteľný systém vyžaduje náhodný kľúč, resp.
reťazec kľúčov rovnakej dĺžky ako má pôvodná správa. Toto však znižuje praktičnosť celého
systému, no v niektorých špeciálnych prípadoch je to nevyhnutné. Údajne, donedávna bola
komunikácia medzi Moskvou a Washingtonom zabezpečená pomocou jednorázového
systému a transport kľúčov bol zaistený pomocou dôveryhodného kuriéra.
2.1.5 Priestor kľúčov
Veľkosť priestoru kľúčov predstavuje počet dostupných šifrovacích/dešifrovacích
párov kľúčov v šifrovacom systéme. Pre príklad: transpozičná šifra s dĺžkou bloku t má t!
šifrovacích funkcií. Každá sa dá jednoducho popísať permutáciou a nazývame ju kľúčom.
Dalo by sa povedať, že bezpečnosť kryptosystému môžeme hodnotiť z hľadiska
veľkosti priestoru kľúčov, no nie je to celkom tak.
Nevyhnutná, no nie postačujúca podmienka bezpečnosti kryptosystému je dostatočná
veľkosť priestoru kľúčov, taká, aby zabránila úplnému prehľadaniu. Pre príklad: priestor
kľúčov jednoduchej substitučnej šifry je 26104!26 ⋅≈ . Priestor kľúčov polyabecednej šifry je
793 107)!26( ⋅≈ . Úplné prehľadanie celého priestoru kľúčov je z časového hľadiska prakticky
nemožné, resp. neefektívne, no i tak sú obe šifry relatívne slabé a poskytujú nízku úroveň
bezpečnosti.
2.2 Kryptografia s verejným kľúčom
Nech }:{ KeEe ∈ je množina šifrovacích transformácií a nech }:{ KdDd ∈ je
množina zodpovedajúcich dešifrovacích transformácií, kde K je priestor kľúčov. Uvažujme
ľubovoľný pár asociovaných šifrovacích/dešifrovacích kľúčov ),( de DE a predpokladajme, že
FM Katedra informatiky
-34-
každý pár má vlastnosť, takú, že s daným eE a ľubovolnou šifrovanou správou Cc∈ nie je
možné zistiť dešifrovanú správu Mm∈ , takú, že platí
cmEe =)( (52)
Táto vlastnosť naznačuje, že z daného e nie je možné zistiť zodpovedajúci dešifrovací kľúč d.
2.2.1 Komunikácia dvoch strán v kryptografií s verejným kľúčom
Predpokladajme komunikáciu dvoch strán, konkrétnejšie medzi Alicou a Bobom. Bob
vygeneruje pár kľúčov (e,d). Bob zašle Alici svoj šifrovací kľúč e, nazývaný tiež verejný
kľúč, no svoj dešifrovací kľúč d, nazývaný tiež privátny kľúč, musí nechať utajený
a zabezpečený. Následne na to Alica zašle Bobovi správu m, na ktorú aplikuje šifrovaciu
transformáciu podľa Bobovho kľuča a teda vlastne zašle Bobovi šifrovanú správu )(mEc e= .
Bob dešifruje šifrovanú správu aplikovaním inverznej transformácie dD unikátne určenej
hodnotou d.
Pasívna tretiastrana
Správa Cieľ
Ee(m) = c
ŠifrovanieDd(c) = m
Dešifrovanie
m
c
m
Alica Bob
Nezabezpečený kanál
Zdroj kľúčove
d
Nezabezpečený kanál
Obr. 5 Šifrovanie využívajúce techniky verejného kľúča
Komunikácia medzi Alicou a Bobom prebieha cez nezabezpečený kanál. Cez tento
kanál sa prenášajú šifrované správy ako i samotný šifrovací kľúč. Obr. 6 predstavuje
myšlienku, kde tri rôzne entity 1A , 2A a 3A posielajú Bobovi správy. Poznámka: ak 1A zničí
správu 1m po jej zašifrovaní do správy 1c , potom 1A už nemôže obnoviť správu 1m z 1c .
Analogicky si to môžeme predstaviť ako poštovú schránku, od ktorej má kľúč iba Bob.
Hocikto, kto pozná jeho verejnú adresu, mu do nej môže vhodiť správu, no iba Bob s jeho
FM Katedra informatiky
-35-
tajným kľúčom môže tieto správy vyzdvihnúť. Šifrovanie s verejným kľúčom, predpokladá,
že znalosť verejného kľúča e neumožňuje výpočet privátneho kľúča d.
Ee(m
1) = c
1
Dd (c2) = m
2Ee(m
2) = c
2
Ee(m
3) = c
3
A1
A2
A3
Dd (c1) = m
1
Dd (c3) = m
3
Bob
c1
c3
c2
e
e
e
Obr. 6 Schématické znázornenie použitia šifrovania s verejným kľúčom
2.2.2 Potreba autentifikácie v systémoch s verejným kľúčom
Kryptografia s verejným kľúčom sa javí ako ideálny systém, nevyžadujúci
zabezpečený kanál pre výmenu šifrovacieho kľúča. To znamená že dve strany môžu spolu
komunikovať cez nezabezpečený kanál, bez toho, aby sa predtým stretli a vymenili si kľúče.
Toto však nie je celkom pravda. Obr. 7 ilustruje ako aktívny protivník môže narušiť systém
(dešifrovať správu určenú pre druhú stranu) bez toho, aby narušil kryptovací systém. Ide o typ
falošnej prezentácie a je to i príklad zlyhania protokolu. V tomto prípade sa útočník
prezentuje ako Bob, zaslaním Alici verejný kľúč e′ , ktorý Alica pokladá za Bobov verejný
kľúč. Útočník tak má k dispozicií celú komunikáciu medzi Alicou a Bobom, dešifrovaním
správ pomocou jeho privátneho kľúča d ′ , zašifrovaním správy Bobovým verejným kľúčom e
a zaslaním šifrovanej správy Bobovi. Preto je nutné overiť pravosť verejných kľúčov. Alica si
musí byť istá, že správu šifruje pravým Bobovým verejným kľúčom.
Správa Cieľ
Ee' (m) = c'
ŠifrovanieDd(c) = m
Dešifrovanie
m m
Alica Bob
Zdroj kľúčov
d
Ee(m) = c
ŠifrovanieDd' (c') = m
Dešifrovanie
Zdroj kľúčov
m
e'
c'
d'
e
c
Tretia strana
Obr. 7 Útok falošnou prezentáciou
FM Katedra informatiky
-36-
2.3 Výmena kľúčov, manažment a certifikácia
Definícia: Výmena kľúčov je proces, kedy sa tajomstvo stáva prístupné dvom či viac
stranám, pre následne šifrovacie postupy.
Definícia: Manažment kľúčov je množina procesov a mechanizmov, ktoré podporujú
výmenu kľúčov a udržujú trvalé vzťahy medzi účastníkmi. Patrí sem i výmena starých kľúčov
za nové.
Obr. 8 ilustruje sieť, pozostávajúcu zo 6 účastníkov. Ak by v tejto malej sieti chcel
každý pár účastníkov vzájomne komunikovať, predstavovalo by to potrebu bezpečnej výmeny
15 párov kľúčov. V sieti s n účastníkmi by počet párov bol 2
)1( −⋅ nn.
A1 A2
A5
A3A6
A4
Obr. 8 Vzťah kľúčov v sieti šiestich účastníkov
V praxi sú však siete oveľa väčšie a tak problém manažmentu kľúčov sa stáva
rozhodujúcou otázkou.
2.3.1 Manažment kľúčov prostredníctvom techník symetrického kľúča
Jedno z riešení, ktoré využíva techniky symetrického kľúča predpokladá entitu v sieti,
ktorej dôverujú všetci účastníci. Táto entita je označovaná ako dôveryhodná tretia strana
(DTS). Každý účastník iA zdieľa s DTS odlišný symetrický kľúč ik . Predpokladáme, že tieto
kľúče boli distribuované cez zabezpečený kanál. Ak sa dvaja účastníci rozhodnú spolu
komunikovať, DTS vygeneruje kľúč k, niekedy tiež nazývaný kľúč relácie, a šifrovaný ho
zašle komunikáciechtivým účastníkom.
FM Katedra informatiky
-37-
k1
A1 A2
A5 A4
A3A6
k2
k3
k6
k4
k5
Zdroj
kľúčovk
DTS
Ek(m)
Ek1(k)
Ek5(k)
Obr. 9 Manažment kľúčov využívajúci DTS
2.3.1.1 Výhody riešenia
� Ľahké pridávanie i odstránenie účastníkov siete.
� Každému účastníkovi stačí pamätať si iba jeden dlhodobý tajný kľúč.
2.3.1.2 Nevýhody riešenia
� Každá komunikácia si vyžaduje počiatočnú komunikáciu s DTS.
� DTS si musí pamätať n dlhodobých tajných kľúčov.
� DTS má schopnosť čítať všetky správy.
� Ak je napadnutá DTS, je celá komunikácia v sieti nezabezpečená.
2.3.2 Manažment kľúčov prostredníctvom techník verejného kľúča
Každý účastník v sieti vlastní verejný/privátny šifrovací pár kľúčov. Verejný kľúč
spolu s identitou účastníka je uložený v centrálnej schránke nazývanej verejný zoznam. Ak
chce účastník 1A poslať šifrovanú správu účastníkovi 6A , z verejného zoznamu získa verejný
kľúč 6e účastníka 6A , zašifruje správu použitím tohoto kľúča a zašle účastníkovi 6A .
FM Katedra informatiky
-38-
A1 : e1A2 : e2A3 : e3A4 : e4A5 : e5A6 : e6
Verejný
zoznam
Privátny kľúč d1
A1
c = Ee6 (m)
Privátny kľúč d2
A2
Privátny kľúč d3
A3
Privátny kľúč d4
A4
Privátny kľúč d5
A5
Privátny kľúč d6
A6
m = Dd6 (c)
e6
c
Obr. 10 Manažment kľúčov využívajúci techniky verejných kľúčov
2.3.2.1 Výhody riešenia
� Nevyžaduje sa vierohodná tretia strana.
� Verejný zoznam môže byť umiestnený u každého účastníka.
� Za predpokladu, že počítame iba s pasívnym útočnikom – odpočúvanie, vystačíme s n
verejnými kľúčmi, pre bezpečnú komunikáciu medzi hociktorými dvomi účastníkmi.
2.3.2.2 Aktívny útočník
Ak však rátame s aktívnym útočníkom, ktorý je schopný pozmeniť verejný zoznam
obsahujúci verejné kľúče, problém manažmentu kľúčov sa stáva zložitejším. Obr. 11 ilustruje,
ako aktívny útočník môže napadnúť schému manažmentu kľúčov popísanú vyššie. Na
obrázku útočník pozmení verejný zoznam výmenou verejného kľúča 6e učastníka 6A za svoj
verejný kľúč *e . Ľubovoľná správa, určená pre účastníka 6A , šifrovaná s použitím verejného
kľúča získaného z verejného zoznamu, môže byť dešifrovaná len útočníkom. Ten si ju môže
prečítať a prípadne zašifrovať verejným kľúčom uživateľa 6A a zaslať ju uživateľovi 6A ,
zatiaľ, čo uživateľ 1A verí, že iba uživateľ 6A môže správu dešifrovať.
FM Katedra informatiky
-39-
A1 : e1A2 : e2A3 : e3A4 : e4A5 : e5A6 : [e6] e
*
Verejný
zoznam
Ee* (m) = c
A1
Dd* (c) = m E
e6 (m) = c'
Privátny kľúč d*
Tretia strana
Dd6 (c' ) = m
Privátny kľúč d6
A6
e*c
c'
Obr. 11 Útok falošnou prezentáciou 6A aktívnym útočníkom s verejným kľúčom *e
Ako prevenciu pred takýmto útokom, by užívatelia mali použiť DTS pre certifikáciu
verejného kľúča každého užívateľa. DTS má privátny podpisovací algoritmus TS a overovací
algoritmus TV a predpokladá, že ho poznajú všetci užívatelia siete. DTS pozorne overí
identitu každého užívateľa a podpíše správu, pozostávajúcu s identifikátora a užívateľovho
autentického verejného kľúča. Toto je jednoduchý príklad certifikácie, čiže previazania
identity užívateľa s jeho verejným kľúčom. Obr. 12 znázorňuje sieť s takýmito predpokladmi.
Užívateľ 1A použije verejný kľúč užívateľa 6A iba vtedy, ak úspešne overí podpis certifikátu.
A1, e1, ST ( A1 || e1 ) = s1A2, e2, ST ( A2 || e2 ) = s2A3, e3, ST ( A3 || e3 ) = s3A4, e4, ST ( A4 || e4 ) = s4A5, e5, ST ( A5 || e5 ) = s5A6, e6, ST ( A6 || e6 ) = s6
Verejný zoznamOverenie
VT ( A6 || e6, s6 )
A1
e6 , s6
Dd6 (c) = m
Privátny kľúč d6
A6
c = Ee6 (m)
Obr. 12 Autentifikácia verejných kľúčov pomocou DTS, symbol || znamená spojenie
FM Katedra informatiky
-40-
2.3.2.3 Výhody použitia DTS ako udržovateľa integrity verejného zoznamu
� Chráni pred falšovaním užívateľa aktívnym útočníkom.
� DTS nemôže monitorovať komunikáciu. Užívatelia potrebujú DTS iba pre správne
zviazanie identity s verejným kľúčom.
� Ak si užívatelia ukladajú certifikáty lokálne, nevyžaduje sa interakcia s verejným
zoznamom.
2.3.2.4 Nevýhody použitia DTS ako udržovateľa integrity verejného zoznamu
� Ak je napadnutý podpisovací kľúč DTS, celá komunikácia sa stáva nezabezpečenou.
� Dôvera je založená na jednej entite.
2.3.2.5 Dôveryhodné tretie strany a certifikácia verejného kľúča
DTS môžeme pokladať za absolútne dôveryhodnú, ak je dôveryhodná v každom
smere. Pre príklad, prístup k tajným a privátnym kľúčom, prístup k asociácií identity
a verejného kľúča.
DTS môžeme pokladať za funkčne dôveryhodnú, ak je pokladaná za dôveryhodnú no
nemá prístup k tajným či privátnym kľúčom.
2.3.2.6 Certifikáty verejných kľúčov
Distribúciu verejného kľúča, kedže sa nevyžaduje zabezpečený kanál, môžeme
pokladať za ľahšiu oproti distribúcií symetrického kľúča. Kritická je skôr integrita, či
autenticita verejného kľúča.
Certifikát verejného kľúča pozostáva z dátovej časti a z podpisovej časti. Dátová čast
pozostáva z mena užívateľa, jeho verejného kľúča a možných ďaľších údajov (adresa,
platnosť kľúča...). Podpisová časť pozostáva z podpisu dátovej časti dôveryhodnou treťou
stranou.
Pre overenie autenticity verejného kľúča užívateľa A uživateľom B, uživateľ M musí
mať autentickú kópiu funkcie DTS pre overenie podpisu. Pre jednoduchosť uvažujme že
autenticita overovacej funkcie je zaručená. Uživateľ B potom môže vykonať nasledujúce
kroky:
1. Získa certifikát verejného kľúča užívateľa A cez nezabezpečený kanál, napríklad
z centrálnej databázy certifikátov, priamo od A či iným spôsobom.
2. Použije overovaciu funkciu DTS pre overenie podpisu DTS na certifikáte.
FM Katedra informatiky
-41-
3. Ak je podpis certifikátu správny, akceptuje verejný kľúč z certifikátu ako autentický
verejný kľúč uživateľa A, ak nie, považuje verejný kľúč za neplatný.
Pred tým, ako DTS vytvorí certifikát verejného kľúča, musí vykonať určité zistenia
pre overenie identity uživateľa A a faktu, že verejný kľúč, ktorý certifikuje, skutočne patrí A.
Jedna z metód, ako vykonať tieto zistenia, je, že DTS si vyžiada konkrétny doklad totožnosti
A a potvrdenie, že A pozná korešpondujúci privátny kľúč.
2.4 Porovnanie kryptografie so symetrickým kľúčom a s verejným
kľúčom
Kryptografické schémy so symetrickým, či verejným kľúčom majú rôzne
výhodné, nevýhodné či spoločne vlastnosti.
2.4.1 Výhody kryptografie so symetrickým kľúčom
� Systém so symetrickým šifrovaním môže byť navrhnutý tak, aby mal vysokú dátovú
priepustnosť. Niektoré hardvérové implementácie dosahujú šifrovaciu rýchlosť rádovo
stovky megabajtov za sekundu. Softvérové implementácie však iba rádovo megabajty
za sekundu.
� Kľúče pre symetrické šifrovanie sú relatívne krátke.
� Symetrické šifrovanie môže byť použité ako primitívny prvok pre konštrukciu
rôznych kryptografickým mechanizmov. Podobne ako generátory pseudonáhodných
čísiel, hašovacie funkcie, výpočtovo efektívne schémy digitálneho podpisu...
� Symetrické šifry môžeme zložiť tak, aby vznikol silnejší šifrovací systém. Jednoduché
transformácie, ktorých slabé stránky je ľahké analyzovať, môžu byť použité pre
konštrukciu silného šifrovacieho systému.
2.4.2 Nevýhody kryptografie so symetrickým kľúčom
� V komunikácií dvoch strán musí byť kľúč utajený na oboch stranách.
� Vo veľkých sieťach je veľa kľúčov, čo spôsobuje ich zložitý manažment. Efektívny
manažment si vyžaduje použitie absolútne dôveryhodnej DTS.
� V komunikácií dvoch strán, sa z praktického hľadiska kľúč často mení, teoreticky pre
každú komunikačnú reláciu.
� Mechanizmus digitálneho podpisu vychádzajúci zo šifrovania symetrickým kľúčom
typicky vyžaduje veľké kľúče pre verejné overenie, alebo použitie DTS.
FM Katedra informatiky
-42-
2.4.3 Výhody kryptografie s verejným kľúčom
� V utajení musí zostať iba privátny kľúč, no musi byť zaručená autenticita verejného
kľúča.
� Administrácia kľúčov na sieti vyžaduje iba funkčne dôveryhodnú DTS.
� V závislosti od spôsobou použitia, pár privátneho/verejného kľúča môže zostať
nezmenený dlhší čas, môže byť platný pre viac komunikačných relácií.
� Veľa schém šifrovania s verejným kľúčom vedie k relatívne efektívnemu mechanizmu
digitálneho podpisu. Kľúč použitý k popisu funkcie verejného overenia je typicky
menší ako kľúč odvodený z mechanizmu šifrovania so symetrickým kľúčom.
� Počet kľúčov vo veľkých sieťach je podstatne menší ako by bol potrebný počet
symetrických kľúčov.
2.4.4 Nevýhody kryptografie s verejným kľúčom
� Dátova priepustnosť systémov šifrovania s verejným kľúčom je o niekoľko rádov
menšia v porovnaní so systémami so symetrickým kľúčom.
� Veľkosť kľúčov je typicky oveľa väčšia ako veľkosť symetrického kľúča.
� U žiadnej schémy šifrovania s verejným kľúčom nebola dokázaná bezpečnosť.
U väčšiny schém šifrovania s verejným kľúčom je bezpečnosť založená na
odhadovanej náročnosti malej množiny číselno-teoretických problémov.
2.4.5 Prehľad porovnania
Obidve kryptografické riešenia majú výhody, ktoré sa môžu vzájomne dopĺňať. Dnes
používané kryptografické systémy využívajú silu oboch. Nasledujúci príklad to vhodne
ilustruje.
Techniky šifrovania s verejným kľúčom môžu byť použité pre výmenu kľúča
symetrického šifrovania pre potrebu komunikácie Alice s Bobom. V tomto prípade Alica
i Bob využívajú výhody dlhodobosti a sily verejného/privátneho kľúča schémy šifrovania
s verejným kľúčom a efektívnosti dátovej priepustnosti schémy so symetrickým kľúčom.
Kedže šifrovanie dát je častá a časovo náročná časť procesu komunikácie, výmenu kľúča
pomocou šifrovania s verejným kľúčom môžeme považovať za menšiu časť celkového
procesu šifrovanej komunikácie medzi Alicou a Bobom. Toto však nemá záväzný charakter.
Dôležité body z praktického hľadiska sú nasledovné:
� Kryptografia s verejným kľúčom umožnuje efektívne podpisovanie a manažment
kľúčov.
FM Katedra informatiky
-43-
� Kryptografia so symetrickým kľúčom je efektívna pre šifrovanie dát, prípadne pre
aplikácie pracujúce s integritou dát.
Poznámka: privátne kľúče v systémoch šifrovania s verejným kľúčom musia byť
väčšie (napríklad 1024 bitový kľuč RSA) ako tajné kľúče v systémoch so symetrickým
kľúčom (príklad 64 či 128 bitové).
2.5 RSA kryptosystém
RSA je algoritmus pre šifrovanie pomocou verejného kľúča, no môže byť použitý i pre
digitálny podpis. Jeho bezpečnosť je založená na vysokej náročnosti riešenia celočíselného
faktorizačného problému. Verejne bol popísaný na MIT v roku 1977. Jeho predstaviteľmi sú
Ron Rivest, Adi Shamir a Leonard Adleman. Písmená RSA sú iniciály ich priezvisk.
2.5.1 Algoritmus generovania kľučov RSA
Predpoklad: Každá entita vytvára RSA verejný kľuč a prislúchajúci privátny kľuč. Každá
entita A by mala urobiť nasledujúce:
1 Zvoliť dve veliké náhodné prvočísla p a q, každé približne rovnakej dĺžky.
2 Vypočítať
qpn ⋅= (53)
)1()1( −⋅−= qpφ (54)
3 Vybrať náhodné cele číslo φ<< ee1, , tak aby
1),gcd( =φe (55)
4 Použiť rozšírený Euklidov algoritmus pre výpočet unikátneho celého čísla
φ<< dd 1, , tak aby
)(mod1 φ≡⋅ de (56)
5 Verejný kľúč entity A je potom (n,e), privátný kľuč je d, resp (n,d).
Celé číslo e sa nazýva šifrovací exponent, d dešifrovací exponent a n je modulus.
2.5.2 Algoritmus šifrovania RSA
Predpoklad: B šifruje správu pre A, A správu dešifruje.
1 Šifrovanie: B by mal urobiť nasledovné:
1.1 Získať autentický verejný kľúč (n,e) entity A
1.2 Vyjadriť správu ako celé číslo m z intervalu [0, n-1].
FM Katedra informatiky
-44-
1.3 Vypočítať
nmc e mod= (57)
1.4 Poslať šifrovanú správu c entite A
2 Dešifrovanie, pre získanie správy m z c by A mala vykonať nasledovné:
2.1 Použiť svoj privátny kľúč d (d,n) a získať m nasledovne
ncm d mod= (58)
2.5.3 Príklad RSA algoritmu
2.5.3.1 Generovanie páru kľúčov
Entita A si zvolí prvočísla 2551,2357 == qp , a vypočíta 6012707=⋅= qpn a
6007800)1()1( =−⋅−= qpφ . A zvolí 3674911=e a s použitím rozšíreného Euklidovho
algoritmu nájde 422191=d práve tak, že )(mod1 φ≡⋅ de . Verejný kľúč A je (n = 6012707,
e = 3674911), privátny kľúč je d = 422191.
2.5.3.2 Šifrovanie.
Pre šifrovanie správy m = 5234673, B použije algoritmus modulárneho umocňovania
pre výpočet 3650502 6012707 mod 49115234673367mod === nmc e a výsledok pošle
entite A
2.5.3.3 Dešifrovanie.
Pre dešifrovanie šifrovanej správy c, entita A vypočíta
5234673 6012707 mod 1913650502422mod === ncm d
Poznámka: ak je šifrovací exponent zvolený náhodne, šifrovanie je náročné na
výpočtový čas. Tieto nároky však môžeme znížiť vhodnou voľbou exponentu. V praxi sa
bežne používa 3=e , prípadne 655371216 =+=e .
2.6 ElGamal kryptosystém
Algoritmus ElGamal môžeme interpretovat i ako Diffie-Hellmanov algoritmus pre
dohadovanie kľúčov v móde prenosu kľúčov. Jeho bezpečnosť je založená na vysokej
náročnosti riešenia problému diskrétneho logaritmu a Diffie-Hellman problému.
FM Katedra informatiky
-45-
2.6.1 Algoritmus generovania kľúčov ElGamal
Predpoklad: Každá entita vytvára ElGamal verejný kľuč a prislúchajúci privátny kľuč.
Každá entita A by mala urobiť nasledujúce:
1 Vygenerovať veliké náhodné prvočíslo p a generátor α multiplikatívnej grupy *pZ
celých čísiel modulo p. 2 Zvoliť náhodné celé číslo 21, −≤≤ paa a vypočítať pa modα .
3 Verejný kľúč entity A je ),,( ap αα , privátny kľúč je a.
2.6.2 Algoritmus šifrovania ElGamal
Predpoklad: B šifruje správu pre A, A správu dešifruje.
1 Šifrovanie B vykoná nasledovné kroky
1.1 Získa autentický verejný kľúč ),,( ap αα entity A.
1.2 Vyjadrí správu ako celé číslo m z intervalu [0,1,…, p-1].
1.3 Vyberie náhodné celé číslo 21, −≤≤ pkk ,
1.4 Vypočíta
pk modαγ = (59)
pm ka mod)(αδ ⋅= (60)
1.5 Entite A zašle šifrovanú správu
),( δγ=c (61)
2 Dešifrovanie, pre získanie správy m z c A vykoná nasledovné kroky
2.1 Použije privátny kľúč A pre výpočet
pm ap mod)1( −−= γ (62)
(poznámka: akaap −−−− == αγγ )1( (63))
2.2 Získa správu m vypočítaním
pm a mod)( δγ ⋅= − (64)
2.6.3 Príklad algoritmu ElGamal
2.6.3.1 Generovanie páru kľúčov
Entita A zvolí prvočíslo p= 2357 a generátor 2=α z *2357Z , A zvolí privátny kľúč
a=1751 a vypočíta 11852357mod2mod 1751 ==paα .
Verejný kľúč entity A je 1185,2,2357( === ap αα ).
FM Katedra informatiky
-46-
2.6.3.2 Šifrovanie
Pre zašifrovanie správy m=2035, entita B zvolí náhodné celé číslo k=1520 a vypočíta
14302357mod21520 ==γ a 6972357mod11852035 1520 =⋅=δ B zašle 1430=γ a 697=δ
entite A.
2.6.3.3 Dešifrovanie
Pre dešifrovanie, A vypočíta 8722357mod14306051 ==−− apγ a výpočtom
20352357mod697872 =⋅=m získa správu m.
2.7 Eliptické krivky
Definícia: Nech 3>p je prvočíslo. Eliptická krivka
baxxy ++= 32 (65)
nad pZ je množina riešení pp ZZyx ×∈),( kongruencie
)(mod32 pbaxxy ++≡ (66)
kde pZba ∈, sú konštanty, také, že
0)(mod274 23 ≠+ pba (67)
spolu so špeciálnym bodom O, nazývaným bod na nekonečne (point at infinity).
2.7.1 Eliptická krivka ako grupa
Eliptická krivka E môže byť abeliánovou grupou definovaním vhodných operácií na
jej bodoch.
Nech ),( 11 yxP = a ),( 22 yxQ = sú body na E. Ak 12 xx = a 12 yy −= , potom
OQP =+ (68)
inak
),( 33 yxQP =+ (69)
kde
212
3 xxx −−= λ (70)
1313 )( yxxy −−= λ (71)
a
FM Katedra informatiky
-47-
=⋅
+⋅
≠−
−
QPaky
ax
QPakxx
yy
,2
3
,
1
21
12
12
λ (72)
PPOOP =+=+ (73)
pre všetky EP∈ .
Inverziu bodu ),( yx , ktorú, kedže grupová operácia je súčtova zapisujeme ako
),( yx− , môžme vypočítať ako ),( yx − , pre všetky Eyx ∈),( .
Poznámka: Všetky aritmetické operácie prebiehajú v pZ .
2.7.2 Body eliptickej krivky
Nech E je eliptická krivka
632 ++= xxy (74)
nad 11Z . Body na E určíme nasledovne. Pre všetky 11Zx∈ vypočítame 11mod63 ++ xx a
pre y sa pokúsime riešiť rovnicu (66). Pre dané x môžme testovať či
11mod63 ++= xxz (75)
je kvadratické reziduum aplikovaním Eulerovho kritéria 1.12. Ak z je kvadratickým
reziduom, potom môžeme pomocou explicitného vzorca (76) vypočítať druhé odmocniny
kvadratických reziduí modulo p.
11mod11modmod 34
)111(
4
)1(
zzpz
p
±=±=±++
(76)
pre )4(mod3≡p
x 11mod63 ++ xx Je QR(11)? y
0 6 nie
1 8 nie
2 5 ano 4,7
3 3 ano 5,6
4 8 nie
5 4 ano 2,9
6 8 nie
7 4 ano 2,9
8 9 ano 3,8
9 7 nie
10 4 ano 2,9
Tab. 3 Body eliptickej krivky 632 ++= xxy nad 11Z .
FM Katedra informatiky
-48-
Teda E má 13 bodov, keďže ľubovoľná grupa prvočíselného rádu je cyklická, znamená
to, že E je izomorfné 13Z a ľubovoľný bod okrem bodu na nekonečne O, je generátorom E.
Nech )7,2(=α je generátorom E, potom môžeme vypočítať „mocniny“ α , ktoré
zapisujeme ako násobky α , kedže grupová operácia je súčtová. Pre výpočet
)7,2()7,2(2 +=α teda najskôr vypočítame
811mod4211mod3211mod)72()123( 112 =⋅=⋅=⋅⋅+⋅= −−λ , potom
511mod22823 =−−=x a 211mod7)52(83 =−−⋅=y a teda )2,5(2 =α .
Ďaľší násobok je )7,2()2,5(23 +=+= ααα , znova vypočítame λ ako
211mod7511mod8511mod)52()27( 11 =⋅=⋅=−⋅−= −−λ , potom
811mod25223 =−−=x a 311mod2)85(23 =−−⋅=y a teda )3,8(3 =α .
Podobne pokračujeme s výpočtom zostávajúcich násobkov.
)4,2(12)9,5(11)8,8(10
)9,10(9)5,3(8)2,7(7
)9,7(6)6,3(5)2,10(4
)3,8(3)2,5(2)7,2(
===
===
===
===
αααααααααααα
A teda vidieť, že )7,2(=α je skutočne primitívny element.
Eliptická krivka E definovaná nad pZ , kde p je prvočíslo, také, že platí 3>p , má
približne p bodov. Presnejšie môžeme definovať E# ako počet bodov na E, nasledovne
pomocov Hassovho teorému.
ppEpp 21#21 ++≤≤−+ (77)
Určenie presnej hodnoty E# je však výpočtovo veľmi náročné, a preto je výhodnejšie
použiť Schoofov efektívny algoritmus, ktorý je praktický pre prvočísla majúce niekoľko
stoviek číslic.
2.8 Menezes Vanstone kryptosystém eliptických kriviek
Nech E je eliptická krivka definovaná nad pZ , kde 3>p je prvočíslo. Potom E
obsahuje cyklickú grupu H, v ktorej je problém diskrétneho logaritmu vysoko výpočtovo
náročný.
Nech **** , pppp ZZECZZP ××=×= , definujme }:),,,{( αββα ⋅== aaEK , kde
E∈α , potom hodnoty α a β predstavujú verejný kľúč a hodnota a predstavuje privátny,
FM Katedra informatiky
-49-
tajný kľúč. Majme ),,,( βα aEk = , tajný kľúč H
Zk ∈ a **21 ),( pp ZZxxx ×∈= , potom
môžme definovať šifrovací algoritmus ),,(),( 210 yyykxek = ako
α⋅= ky0 (78)
β⋅= kcc ),( 21 (79)
pxcy mod111 ⋅= (80)
pxcy mod222 ⋅= (81)
Pre šifrovanú správu ),,( 210 yyyy = definujme dešifrovací algoritmus
)mod,mod()( 122
111 pcypcyyd k
−− ⋅⋅= (82)
kde
),( 210 ccya =⋅ (83)
2.8.1 Príklad algoritmu Menezes Vanstone
2.8.1.1 Generovanie kľúčov
Ako v predchádzajúcom príklade, majme eliptickú krivku E 632 ++= xxy nad 11Z ,
bod )7,2(=α na krivke E a tajný „exponent“ 7=a , taký, že platí Ea #< . Potom
)2,7(7 =⋅=⋅= ααβ a . Predpokladajme správu )1,9(),( 21 == xxx , ktorú chceme zašifrovať.
Zvolíme ľubovoľné k, také, že platí Ek #0 ≤≤ , potom pre príklad 6=k . Vypočítajme
)9,7()7,2(60 =⋅=⋅= αky a )3,8()2,7(6 =⋅=⋅ βk , potom 81 =c a 32 =c .
2.8.1.2 Šifrovanie
Následne šifrujeme správu vypočítaním 611mod98mod111 =⋅=⋅= pxcy a
311mod13mod222 =⋅=⋅= pxcy . Šifrovaná správa je teda )3,6),9,7((=y .
2.8.1.3 Dešifrovanie
Dešifrovanie správy y. Vypočítajme )3,8()9,7(7),( 021 =⋅=⋅= yacc , potom
)1,9()11mod43,11mod76()11mod33,11mod86()mod,mod( 11122
111 =⋅⋅=⋅⋅== −−−− pcypcyx
Porovnaním pôvodnej správy s dešifrovaným výsledkom môžeme pokladať výsledok za
správny.
Poznámka: Bod x nepatrí krivke E. Eliptická krivka je použitá pre „maskovanie“.
Správy potom môžu byť reprezentované ako ľubovoľné usporiadané prvky poľa a nemusia
byť bodmi na krivke E. To však vedie k dvojnásobnému rozšíreniu správ, resp. šifrovaná
FM Katedra informatiky
-50-
správa je dvakrát väčšia ako pôvodná správa. Pre príklad uvažujme krivku 632 ++= xxy
nad 11Z , potom Menezes-Vanstoneho kryptosystém umožňuje šifrovať 1001010 =× možných
vstupných správ v porovnaní z 13timi správami v pôvodnom systéme s predpokladom že x
musí patriť krivke E.
2.9 Bezpečnosť kryptosystémov s verejným kľúčom
Bezpečnosť kryptosystémov s verejným kľúčom je založená na zjavnej náročnosti
riešenia daného výpočtového problému. V kryptografickom prostredí je rozumné
predpokladať veľmi silného protivníka. Ak je možné vyriešiť výpočtový problém
v polynomiálnom čase pre značnú časť možných vstupov, považujeme takýto problém za
ľahký či poddajný. Inými slovami, ak existuje algoritmus, ktorý dokáže vyriešiť značnú časť
problému v polynomiálnom čase, potom kryptosystém, ktorého bezpečnosť je založená na
takomto probléme musíme považovať za nie bezpečný.
2.9.1 Niektoré výpočtové problémy kryptografického významu
2.9.1.1 Faktorizácia
Problém faktorizácie celého čísla: nech n je kladné celé číslo, nájdime jeho
prvočíselnú faktorizáciu
ek
k
ee pppn ...22
11= (84)
kde ip sú prvočísla a každé 1≥ie .
2.9.1.2 RSA problém (RSAP)
RSA problém (tiež známy ako RSA inverzia), nech n je kladné celé číslo, ktoré je
súčinom dvoch rozdielnych prvočísiel p a q, e nech je kladné celé číslo, také, že platí
1))1)(1(,gcd( =−− qpe (85)
a c nech je celé číslo. Nájdime celé číslo m, také, že platí
)(modncm e ≡ (86)
2.9.1.3 Problém kvadratického rezidua (QRP)
Nech n je zložené celé číslo a a je celé číslo majúce Jakobiho symbol
FM Katedra informatiky
-51-
1=
n
a (87)
Rozhodnime, či a je kvadraticke reziduum modulo n.
2.9.1.4 Druhé odmocniny modulo n (SQROOT)
Nech n je zložené celé číslo a nQa∈ (množina kvadratických reziduí modulo n).
Nájdime druhú odmocninu z a modulo n, teda x, takú, že platí
)(mod2 nax ≡ (88)
2.9.1.5 Problém diskrétneho logaritmu (DLP)
Nech p je prvočíslo a α generator *pZ a prvok *
pZ∈β . Nájdime celé číslo x,
20 −≤≤ px , také, že platí
)(mod px βα ≡ (89)
2.9.1.6 Problém generalizovaného diskrétneho logaritmu (GDLP)
Nech G je finítna cyklická grupa stupňa n , α je generator G a prvok G∈β . Nájdime
celé číslo 10, −≤≤ nxx , take, že platí
βα =x (90)
2.9.1.7 Diffie-Hellman problém (DHP)
Nech p je prvočíslo, α generator *pZ a prvky pa modα a pb modα . Nájdime
pab modα .
2.9.1.8 Generalizovaný Diffie-Hellman problem (GDHP)
Nech G je finítna cyklická grupa, α je generátorom G a aα , bα sú prvkami grupy G.
Nájdime abα .
2.9.1.9 Problém podmnožiny (SUBSET-SUM)
Majme množinu kladných celých čísiel },...,2,1{ naaa a kladné celé číslo s.
Rozhodnime, či existuje podmožina prvkov ja , ktorej súčet prvkov je rovný s.
FM Katedra informatiky
-52-
Skutočná výpočtová náročnosť týchto problémov nie je známa. No všeobecne sa tieto
problémy považujú za ťažko riešiteľné i napriek tomu, že dôkaz nie je známy. Náročnosť
problému môžeme zvýšiť vhodne zvolenými problémovými parametrami.
2.9.2 Bezpečnosť kryptosystémov eliptických kriviek
Bezpečnosť kryptosystémov eliptických kriviek je založená na náročnosti riešenia
problému diskrétneho logaritmu eliptických kriviek (Elliptic Curve Discrete Logarithm
Problem - ECDLP). Nech k je veľké celé číslo a P a Q sú bodmi eliptickej krivky E, také, že
platí
PkQ ⋅= (91)
potom z daných P a Q je vysoko výpočtovo náročné určiť hodnotu k.
Matematicko-kryptografický problém
Najlepšia známa metóda pre riešenie
Faktorizácia celých čísiel RSA
Number field sieve: ])log(log)(log923,1exp[ 3
2
3
1
nn Sub Exponenciálny čas.
Diskrétny logaritmus ElGamal
Number field sieve: ])log(log)(log923,1exp[ 3
2
3
1
nn Sub Exponenciálny čas.
Diskrétny logaritmus eliptických kriviek
Pollard-rho algoritmus: sqrt(n) Plne exponenciálny čas.
Tab. 4 Porovnanie problémov kryptosystémov s verejným kľúčom.
Keďže najlepší známy algoritmus pre útok na kryptosystém eliptických kriviek je
časovo oveľa náročnejší ako najlepšie algoritmy pre útoky na iné kryptosystémy, eliptické
krivky ponúkajú porovnateľnú bezpečnosť, avšak s podstatne menšou dĺžkou kľúčov. Pre
príklad 160 bitový systém šifrovania pomocou eliptických kriviek (ECC) poskytuje rovnakú
úroveň zabezpečenia ako 1024 bitový RSA kryptosystém, 224 bitový ECC je ekvivalentný
2048 bitovému RSA.
FM Katedra informatiky
-53-
3 Kódovanie a samoopravné BCH−kódy
Teória kódovania sa zaoberá štúdiom a konštrukciou kódov, ktoré majú vhodné
vlastnosti a parametre pre dané potreby v oblasti ich súčasného i plánovaného využitia.
Vznikla v štyridsiatich rokoch dvadsiateho storočia prácami Shannona, ktoré pojednávali o
teórii informácie, a prácami Hamminga a Golaya, v ktorých skonštruovali prvé lineárne kódy.
Hammingové kódy sú schopné opraviť jednoduché chyby, Golayove kódy opravujú
chyby trojnásobné. Z teoretického i praktického hľadiska teda patria medzi dodnes
najdôležitejšie kódy.
V päťdesiatich rokoch dvadsiateho storočia boli objavené tzv. Reed-Mullerove kódy
schopné opraviť ľubovoľný predpísaný počet chýb. Vyznačujú sa hlavne ľahko vykonateľnou
metódou dekódovania, resp. ľahkým opravovaním chýb predpísaného počtu.
Neskôr boli objavené kódy BCH, ktoré tiež opravujú ľubovolný počet chýb, no majú
lepšie parametre ako Reed-Mullerove kódy čo sa však odráža na väčšej náročnosti
dekódovacieho procesu.
3.1 Rozdelenie kódovania podľa oblasti využitia
Kódovanie možno rozdeliť do troch kategórií:
� Kódovanie ako kompresia dát. To znamená, kódovať tak, aby sme dostali čo
najkratší kód a teda aby priemerná dĺžka kódových slov bola menšia ako dĺžka
zdrojových slov. Tým kód znižuje redundanciu znakov vstupného jazyka.
Takýmto postupom napríklad urýchlime prenos, pretože skrátime správu.
� Kódovanie ako šifrovanie pre účely utajenia informácie.
� Kódovanie ako tvorba tzv. bezpečnostných kódov, znamená vytvoriť takú
štruktúru výstupných dát, u ktorej bude možné ľahko odhaľovať a odstraňovať
chyby, ktoré môžu nastať napríklad počas prenosu cez zarušený kanál.
3.2 Kódovanie
Nech A a B sú konečné množiny znakov. Množina A nech je zdrojová abeceda
obsahujúca zdrojové znaky. Množina B nech je kódová abeceda obsahujúca kódové znaky.
Potom konečná množina *B je množina všetkých kódových slov utvorených zreťazením
kódových znakov. Potom pod pojmom kód rozumieme množinu všetkých slov z množiny *B .
FM Katedra informatiky
-54-
Kódovanie je teda funkcia, ktorá každému prvku zo zdrojovej abecedy A priradí práve jeden
prvok z kódovej abecedy B, teda BAK →: .
3.3 Bezpečnostné kódy
Behom prenosu informácie, v závislosti od prostredia v ktorom sa šíri, môže
dochádzať k chybám. Tie následne spôsobia nečitateľnosť, prípadne chybnú interpretáciu
správy na strane prijímateľa. Tento jav môžeme obmedziť použitím detekčných a opravných
kódov, tzv. bezpečnostných kódov (BK). Použitie BK je teda výhodné v systémoch, kde
dochádza k prenosom informácií, no nie len tam. Výhodné je využiť BK i v systémoch kde
dochádza k uchovávaniu informácií. Pamäťové média starnú, kvalita záznamu sa znižuje, až
časom klesne pod určitú úroveň, kedy už nie je možné získať späť uchovanú informáciu.
Vhodnou voľbou BK však môžeme akoby predĺžiť životnosť média, resp. dobu pokiaľ máme
možnosť spoľahlivo a bezpečne informáciu z média získať.
Chyba sa môže prejaviť dvoma spôsobmi, a to:
� Zámenou vyslaného znaku za iný znak.
� Poruchou synchronizácie, t.j. vypadnutím znaku zo správy, prípadne vytvorenie
nového znaku, ktorý pôvodná správa neobsahuje.
Zabezpečenie bezpečnostných kódov vočí chybám je založené na zvýšení redundancie
správy pomocou vhodného kódovania. Niektoré znaky kódového slova teda nenesú žiadnu
informáciu pôvodnej správy, ale slúžia len ako znaky kontrolného charakteru. Pre príklad:
metóda kontroly parity. K binárnemu kódovému slovu naaa K21 pridáme jeden bit 1+na tak,
aby celé slovo obsahovalo párny počet jednotiek. Ak pri prenose rozšíreného slova dôjde
k jednej chybe vieme túto skutočnosť na strane príjimateľa odhaliť a teda môžeme o takomto
kóde prehlásiť, že objavuje jednoduché chyby, tzn. že vie zistiť, že nastala chyba, no nevie
kde, na ktorom mieste. Takéto kódy je vhodné použiť v systémoch s možnosťou opakovania
správ. Ak takúto možnosť nemáme, alebo je obmedzená, či v prípadne, kedy by bolo
neefektívne správu vždy po zistení určitého počtu chýb celú opakovať, je vhodnejšie použiť
kódy, ktoré chyby objavujú a následne ich aj vedia opraviť. Kódy, ktoré chyby opravujú sú
však výpočtovo náročnejšie ako kódy, ktoré chyby len objavujú.
FM Katedra informatiky
-55-
3.4 Objavovanie, zisťovanie chýb
Nech K je blokový kód v konečnej abecede T a
{ }niTttttT in
nKK ,2,1 pre |21 =∈= (92)
je množina všetkých slov dĺžky n. Ak dĺžka kódu K (dĺžka všetkých slov v K) je rovná n,
potom nTK ⊆ a teda slová množiny nT môžeme rozdeliť na kódové slová (v K) a nekódové
slová (v KT n − ). Nech vysielané slová sú kódové a prijímané slova sú z množiny nT . Ak
príjmeme slovo, ktoré nie je kódové, potom došlo k chybe, ktorej existenciu sme odhalili. No
ak prijaté slovo patrí medzi kódove, k chybe nedošlo, alebo sme ju nezistili, preto, že
zapríčinila zmenu pôvodného kódového slova správy na iné slovo, patriace tiež medzi
kódové. Ak pri vyslaní kódového slova bude vždy prijaté slovo nekódove, kód objavuje t-
násobné chyby, tzn že najväčší počet chybných miest v slove je t, kde nt ,,2,1 K= .
3.4.1 Hammingova vzdialenosť
Hammingová vzdialenosť dvoch slov nvvv K21 a nwww K21 je počet znakov,
v ktorých sa tieto slová líšia, t.j.
{ }ii wvnii ≠= ,,2,1| K (93)
3.4.2 Minimálna vzdialenosť
Minimálna vzdialenosť, tiež minimálna Hammingova vzdialenosť blokového kódu K
je najmenšou Hammingovou vzdialenosťou dvoch rôznych kódových slov z blokového kódu
K.
3.4.3 Hammingova váha
Hammingovú váhu slova nvvv K21 predstavuje počet nenulových znakov v slove.
Značíme ju v : nvvv K21 je veľkosť množiny { }0| ≠ivi . Napríklad 310011 = .
Hammingová vzdialenosť je metrikou na množine nT všetkých slov n. To znamená,
že pre každé slová nTwvu ∈,, splňuje Hammingová vzdialenosť ( )wvd , nasledovné
podmienky:
( ) 0, ≥wvd (94)
a rovnosť nastáva práve vtedy, keď
wv = (95)
FM Katedra informatiky
-56-
( ) ( )vwdwvd ,, = (96)
( ) ( ) ( )wuduvdwvd ,,, +≤ (97)
Potom blokový kód s minimálnou vzdialenosťou d objavuje t násobné chyby pre všetky
dt < , no nie je schopný objaviť všetky d násobné chyby. Teda ak v kódovom slove zmeníme
t znakov, potom
ak 0=t , znamená to že k chybe nedošlo, potom prijmeme kódové slovo wv = .
ak 1−≤ dt (t.j. dt < ), nevznikne kódové slovo a chyby vieme objaviť.
ak dt = , môže vzniknúť kódové slovo.
3.4.4 Príklad: Kód 2 z 5
Kód je binárny s dĺžkou 5, ( 5=n ), teda { }51,0⊆K je zložený zo všetkých slov
obsahujúcich dve jednotky. Počet slov je teda 102
5=
. Kód s takýmto počtom kódových
slov je vhodný pre kódovanie číslic 0 až 9.
0 01001 5 01001 1 11000 6 00101 2 10100 7 00011 3 10010 8 00110 4 10001 9 01100
Tab. 5 Kód 2 z 5
Každé dve kódové slová v tomto kóde majú Hammingovú vzdialenosť rovnú 2.
Znamená to teda, že v danom kóde neexistujú kódové slová s Hammingovou vzdialenosťou
menšou ako 2. Taktiež Hammingova váha všetkých kódových slov je rovná 2.
3.5 Opravovanie chýb
Kód má schopnosť opravovať t násobné chyby práve vtedy, ak
12 +≥ td (98)
teda má minimálnu vzdialenosť je 12 +t . Kód K opravuje t-násobné chyby vtedy, ak vyslaním
kódového slova v pri t-násobnej chybe príjmeme slovo w , ktoré má Hammingovú
vzdialenosť ( )wvd , menšiu ako je jeho vzdialenosť od ľubovoľného iného kódového slova.
Potom za pôvodné slovo považujeme také slovo, ktoré je k prijatému slovu najbližšie. Pre
každé slovo Kv∈ a každé slovo nTw∈ také, že
FM Katedra informatiky
-57-
( ) twvd ≤, (99)
teda platí:
( ) ( )wxdwvd ,, < (100)
pre každé slovo
vxKx ≠∈ , (101)
Blokový kód s minimálnou vzdialenosťou d opravuje t násobné chyby pre všetky
2
dt < (102)
no nedokáže opraviť chyby násobnosti 2
d alebo väčšej. Teda ak v kódovom slove v
zmeníme t znakov, potom:
� Ak 2
dt < , vznikne slovo, ktorého Hammingová vzdialenosť od kódového slova v je
menšia ako od iných kódových slov.
� Ak 2
dt ≥ , potom môže vzniknúť slovo s rovnakou, alebo menšou Hammingovou
vzdialenosťou od iných kódových slov
3.5.1 Príklad opravovania chýb
Nech kód K je dĺžky 5, opravujúci 2 násobné chyby a s minimálnou vzdialenosťou
5=d . Potom 2/dt < alebo ( ) 22/112 =−=⇒+≥ dttd . Ak nastane 2 násobná chyba,
väčšina miest sa nezmení a teda správu dekódujeme vždy so správnym výsledkom. Ak
vvvvvv = , potom každé slovo 54321 wwwww , v ktorom väčšinu znakov tvorí v, dekódujeme
ako vvvvv .
3.6 Informačné znaky
Kódové znaky môžme rozdeliť na:
� Informačné, tieto si môžeme ľubovoľne zvoliť a kódovať tak informáciu.
� Kontrolné, tieto si nemôžeme voliť, určuje ich voľba informačných znakov.
Pre príklad: kód celkovej kontroly parity dĺžky 5 má 4 informačné znaky a 1 kontrolný
znak. Ak môžeme ľubovoľne meniť k znakov z n, kde k sú informačné znaky a n je celkový
FM Katedra informatiky
-58-
počet znakov kódového slova a máme algoritmus, taký, ktorý umožnuje ľubovoľné slovo
dĺžky k kódovať na kódové slovo dĺžky n, potom sa takýto algoritmus nazýva kódovanie
informačných znakov.
3.6.1 Kódovanie informačných znakov
Definícia: Nech nTK ⊆ je blokový kód dĺžky n. Ak existuje prosté zobrazenie ϕ
množiny všetkých slov (informačných znakov) dĺžky k na množinu všetkých kódových slov K
dĺžky n, potom KT k →:ϕ , kde kód K má k informačných znakov a kn − kontrolných
znakov, sa zobrazenie ϕ nazýva kódovanie informačných znakov.
3.7 BCH kódy
BCH kódy boli objavené R.C.Bose-om a D.K.Ray-Chaudhuri-om (1960) a nezávisle
na nich A.Hocquenghem-om (1959). Názov kódov pochádza z iniciál ich objaviteľov. Medzi
významné vlastnosti týchto kódov patrí dobrý vzťah medzi počtom informačných znakov
a počtom opravovaných chýb, dobre vypracované dekódovacie techniky a v neposlednom
rade i značná voliteľnosť parametrov.
3.7.1 Binárne BCH kódy
Nech t je počet chýb, ktoré je binárny BCH kód schopný opraviť. Potom minimálna
vzdialenosť
12 +⋅= td (103)
Definícia: Binárny BCH kód s plánovanou vzdialenosťou K,3,2=d je kód nepárnej
dĺžky
dn ≥ (104)
s generujúcimi koreňmi 132 ,,,, −dαααα K , kde α je prvok n -tého rádu v poli ( )mGF 2 .
Poznámka: Párne mocniny sú medzi generujúcimi koreňmi zbytočné: polynóm
( ) ( )nzv 2Ζ∈ má s každým koreňom iα tiež korene K,, 42 ii αα . a teda BCH kódy
s plánovanou vzdialenosťou td 2= alebo 12 += td môžeme považovať za totožné, majúce
generujúce korene 1253 ,,,, −tαααα K . Potom môžeme predpokladať, že plánovaná
vzdialenosť d je nepárne číslo a pre takýto BCH kód možno definovať jeho kontrolnú maticu.
FM Katedra informatiky
-59-
( ) ( ) ( )( ) ( ) ( )
( ) ( ) ( )
=
−−−−−
−
−
−
1232222
1535255
1333233
132
1
1
1
1
ndddd
n
n
n
H
αααα
αααααααααααα
K
MOMMMM
K
K
K
(105)
Počet kontrolných znakov BCH kódu je
( )12
1−⋅≤− dmkn (106)
Kontrolná matica má teda
( )12
1−d (107)
riadkov nad telesom ( )mGF 2 a teda
( )12
1−⋅ dm (108)
riadkov nad telesom 2Ζ . Ak sú tieto riadky lineárne nezávislé, platí
( )12
1−⋅=− dmkn (109)
Ak sú lineárne závislé, je
( )12
1−⋅<− dmkn (110)
3.7.1.1 Príklad binárneho BCH kódu
Nech plánovaná vzdialenosť BCH kódu je 7=d a dĺžka kódu je 15=n . Generujúce
korene sú 53 ,, ααα , kde α je primitívny prvok poľa ( )16GF . Potom platí:
( ) 141 ++= xxxM , (111)
( ) 12343 ++++= xxxxxM (112)
( ) 125 ++= xxxM (113)
Potom generujúci polynóm je
( ) ( ) ( ) ( )xMxMxMxg 531 ⋅⋅= (114)
( ) ( ) ( ) ( )111 22344 ++⋅++++⋅++= xxxxxxxxxg (115)
Ide o kód s 10 kontrolnými znakmi. Tento ( )5,15 -kód opravuje trojnásobné chyby.
Definícia: Binárny BCH kód s plánovanou vzdialenosťou d má minimálnu vzdialenosť
d≥ . Dôkaz je uvedený v knihe [4].
FM Katedra informatiky
-60-
Poznámka: Otvoreným problémom je spôsob, ako určiť minimálnu vzdialenosť BCH
kódu, alebo aspoň ako určiť, že pre danú dvojicu čísiel n a d je minimálna vzdialenosť BCH
kódu dĺžky n rovná plánovanej vzdialenosti d. Ďalší problém je určenie počtu informačných
a kontrólných znakov BCH kódu. Pre kódy dĺžky K,31,15,7,3=n (tvaru 12 −m ) je to celkom
jednoduché, ak plánovaná vzdialenosť neprekročí hodnotu ( ) 21 ++n .
Definícia: Binárny BCH kód dĺžky
12 −= mn (116)
a plánovanej vzdialenosti
( ) 21 ++≤ nd (117)
má ( )12
1−⋅=− dmkn kontrolných znakov a jeho generujúci polynóm je
( ) ( ) ( ) ( )xMxMxMxg d 231 −⋅⋅⋅= K (118)
Dôkaz je uvedený v knihe [4].
3.7.1.2 Kódovanie informačných znakov
BCH kód plánovanej vzdialenosti d má generujúci polynóm ( )xg . Tento polynóm je
určený súčinom všetkých minimálnych, navzájom rôznych polynómov medzi
( ) ( ) ( )xMxMxM d 231 ,,, −K
Informačné znaky potom kódujeme:
� Násobením polynómom ( )xg .
� Systematicky (pri čítaní odzadu), delením týmto polynómom
3.7.2 BCH kódy s q znakovou abecedou
Vlastnosti BCH kódov s q znakovou abecedou sú analogické s vlastnosťami binárnych
BCH kódov. Ak 12 += td , potom je kód schopný opravovať t -násobné chyby.
Definícia: q -znakový BCH kód s plánovanou vzdialenosťou K,3,2=d je kód dĺžky
dn ≥ , kde n je nesúdeliteľné s q . Kód má generujúce korene 21 ,,, −++ djjj ααα K (pre
niektoré 1,,2,1,0 +−= dnj K ), kde α je prvok n -tého rádu v poli ( )mqGF .
Poznámka: Na základe predpokladanej nesúdelnosti čísiel n a q , môžeme povedať,
že prvok α vždy existuje, napríklad v poli ( )( )nqGF ϕ .
FM Katedra informatiky
-61-
Kontrolná matica q -znakového BCH kódu je
( ) ( ) ( )( ) ( ) ( )
( ) ( ) ( )
=
−−++−+−+−+
−++++
−
1232222
1131211
132
1
1
1
ndjdjdjdj
njjjj
njjjj
H
αααα
αααααααα
K
MOMMMM
K
K
(119)
Dosadením za 12 += td do výrazu 21 ,,, −++ djjj ααα K , potom dostávame generujúce
korene 121 ,,, −++ tjjj ααα K (pre niektoré tnj 2,,2,1,0 −= K , kde t je počet chýb).
q -znakový BCH kód s plánovanou vzdialenosťou d má potom minimálnu vzdialenosť d≥ .
3.7.3 Dekódovanie BCH kódu
Maticová metóda, pre jej časovo náročný výpočet, nie je vhodná pre veľké plánované
vzdialenosti. Uvedieme však rýchlejšiu metódu, založenú na Euklidovom algoritme. Pre
zistenie chybného miesta v zakódovanom slove určujeme tzv. lokátory chýb ( )xf a v prípade
nebinárnej kódovej abecedy pre určenie správnej hodnoty na chybnom mieste , tzv. evaluátor
chýb ( )xc .
3.7.3.1 Euklidov algoritmus
Rovnakou metódou, akou určujeme najväčšieho spoločného deliteľa dvoch celých
čísiel, môžeme určiť i najväčšieho spoločného deliteľa polynómov ( )xa0 a ( )xa1 . Tým je
podľa definície polynóm čo najvyššieho stupňa, ktorý tieto dva polynómy delí. Ak je ( )xf
najväčším spoločným deliteľom, potom je ním aj každý skalárny násobok ( )xft ⋅ , kde 0≠t .
Euklidov algoritmus môžeme popísať nasledovne.
Nech ( )xa0 a ( )xa1 sú dva nenulové polynómy.
1. Polynóm ( )xa0 delíme polynómom ( )xa1 , tak, že platí
( ) ( ) ( ) ( )xaxaxqxa 2110 +⋅= (120)
pričom
( ) ( )xaxa 12 st st < (121)
FM Katedra informatiky
-62-
kde st značí stupeň polynómu. Ak ( ) 02 =xa a teda delenie vyšlo bezozvyšku, potom
najväčší spoločný deliteľ je polynóm ( )xa1 . Ak ( ) 02 ≠xa , nasledovný krok vykonáme
k krát.
2. Polynóm ( )xak 1− delíme polynómom ( )xak , tak, že platí
( ) ( ) ( ) ( )xaxaxqxa kkkk 11 +− +⋅= (122)
pričom
( ) ( )xaxa kk st st 1 <+ (123)
Ak toto delenie vyšlo bezo zvyšku a teda ( ) 01 =+ xak , potom najväčší spoločný deliteľ je
polynóm ( )xak . Ak ( ) 01 ≠+ xak , znova opakujeme delenie.
Najväčší spoločný deliteľ je teda prvý deliteľ, ktorý delí bezo zvyšku. Predpokladáme,
že stupne polynómov klesajú, ( ) ( ) ( )xaxaxa kst st st 21 >>> K (ak ( ) 1st −≠xak ), potom
deliteľ existuje.
Poznámka: V Euklidovom algoritme môžeme každý krok vyjadriť ako lineárnu
kombináciu polynómov ( )xa0 a ( )xa1 :
( ) ( ) ( ) ( ) ( ) ( )[ ]xaxuxaxvxa kk
k
k 101 ⋅−⋅−= (124)
kde polynómy ( )xuk a ( )xvk definujeme rekurentne:
( ) ( )( ) ( )( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ).,
,0,1
,1,0
1111
11
00
xvxvxqxvxuxuxqxu
xvxu
xvxu
kkkkkkkk −+−+ +⋅=+⋅=
==
==
(125)
3.7.3.2 Dekódovanie BCH kódu
Nech kód K je q -znakový BCH kód dĺžky n . kde n je nesúdeliteľné s q . Kód
opravuje t -násobné chyby a jeho plánovaná vzdialenosť je 12 += td , potom takýto kód má
generujúce korene 121 ,,, −++ tjjj ααα K , kde α je prvok rádu n v niektorom poli ( )mqGF .
Poznámka: Generujúce korene, ktorými sme vytvárali kód používame i pri
dekódovaní.
1. Vypočítame syndróm podľa
( )iji ws += α (126)
(viď kontrólna matica 3.7.2) obdržaného slova w , kde 12,,1,0 −= ti K a pre niektoré
tnj 2,,1,0 −= K (127)
Polynóm syndrómu určíme ako
FM Katedra informatiky
-63-
( ) 121210
−−+++= t
t xsxssxs K (128)
Ak je syndróm nulový, k chybe nedošlo, resp. 0=e . Ak je syndróm rôzny od nuly,
pokračujeme nasledovne.
2. Aplikujeme Euklidov algoritmus pre polynómy
( ) txxa 20 = (129)
( ) ( )xsxa =1 (130)
Ak je stupeň všetkých polynómov ( )xak aspoň t , potom nastalo viac ako t chýb. Inak
nájdeme prvý index k taký, že stupeň polynómu
( ) txak <st (131)
a stupeň polynómu
( ) txak ≥−1st (132)
Potom vypočítame
( ) 00 =xu (133)
( ) 11 =xu (134)
( ) ( ) ( ) ( )xuxuxqxu rrrr 11 −+ +⋅= (135)
až po ( )xuk . Ak ( )xuk splňuje podmienku ( ) 00 =ku , nastalo viac ako t chýb. Inak
vypočítame
( )[ ] 10 −= kud (136)
a definujeme polynómy: lokátor chýb
( ) ( )[ ]xudxf k⋅= (137)
a evaluátor chýb
( ) ( ) ( )xadxc k
k ⋅⋅−= +11 (138)
Následne vykonáme deriváciu ( ) ( )xfxf &: a postupným dosadzovaním do rovnice
( ) 0=−if α (139)
pre 1,,1,0 −= ni K určíme všetky korene lokátoru chýb ( )xf . Ak sme našli korene
niii −−− ααα ,,, 21 K (teda ( ) 0=−if α ) vieme, že je potrebné opraviť zložky niii www ,,,
21K
prijatého slova w .
3. Správna hodnota sa určí podľa nasledujúceho vzťahu:
( )( )ij
ijij
ijijf
cwv
−
−⋅+=
ααα
& (140)
FM Katedra informatiky
-64-
3.7.3.3 Príklad dekódovania BCH
Nech kód K je BCH kód nad 3Ζ (ternárny), je dĺžky 8=n a opravuje 2 chyby ( 2=t ).
Nech prijaté slovo je 12000010=w a jeho zápis v tvare polynómu je ( ) 621 xxxw ++= .
Použime pole ( )9GF .
3.7.3.3.1 Určenie syndrómov
Vypočítame syndróm v telese ( )9GF , ( )3Ζ , pre 2=t , 8=n a 0=j .
( ) 121210
−−+++= t
t xsxssxs K
Keďže 312212 =−⋅=−t , tak syndrómy počítame po 3s .
( ) ( ) 141211216000
0 ==++=++== αααws
( ) ( ) 03322121 611 =+=+++=++== ααααααws
( ) ( ) ( ) 64262222 245221212121 ααααααααα =+=+=++⋅+=++=++== ws
( ) ( ) ( ) ( ) 0662145222121 263333 =+=+++=++⋅+=++== ααααααααws
Polynóm syndrómov:
( ) 621 αxxs +=
3.7.3.3.2 Určenie pozícií, korene lokátoru chýb
( ) 420 xxxa t == , ( ) ( ) 62
1 1 αxxsxa +== .
Delenie opakujeme dovtedy, až nájdeme taký polynóm, že platí
( ) txak <st .
1. delenie: ( ) ( )xaxa 10 :
( ) ( )( )
( )4
62
62
224
122624
1
11:
α
α
α
α
αα
+−
+−
=+=+
x
x
xx
xqxxx
( )( )
( )4
622
21
422122
α
ααααα
==−
=+=+⋅==−
Zvyškom po delení je polynóm ( ) 42 α=xa . Testujme podmienku ( ) txak <st .
Kedže ( ) 20st 2 =⇒<= ktxa , Euklidov algoritmus ukončíme.
( ) 00 =xu , ( ) 11 =xu , ( ) ( ) ( ) ( ) ( ) ( ) 101 22110112 +==+⋅=+⋅= αxxqxqxuxqxuxu .
FM Katedra informatiky
-65-
Ďalej vypočítame
( )[ ] 10 −= kud , ( ) ( )[ ]xudxf k⋅= a ( ) ( ) ( )xadxc k
k ⋅⋅−= +11 .
V našom prípade to bude:
( )[ ] [ ] 11100 112212 ==+== −−− αud .
Potom lokátor chýb je
( ) [ ] 111 2222 +=+⋅= αα xxxf .
Evaluátor chýb je
( ) ( ) 122211 4443 =⋅==−=⋅⋅−= αααxc .
Derivácia
( ) ( ) ( ) 6222 21: ααα xxxxfxf ==′
+=& .
Hľadáme nuly pre ( ) 0=−if α pre 1,,1,0 −= ni K .Využijeme, že 88 −− == iii αααα bude
záporná mocnina. Do vzťahu ( ) if 221 ++= αα dosadzujme i+α , potom prepočítame na
zápornú mocninu pomocou uvedeného vzorca:
( ) ( ) 320220 2221111 αααααα =+=++=+=+= ×+f
( ) 032111 41221 ==+=+=+= ×+ αααf
( ) ( ) αααααα =+=++=+=+= ×+ 32111 62222f
( ) 211111 083223 =+=+=+=+= ×+ ααααf
( ) ( ) 32104224 22211111 ααααααα =+=++=+=+=+= ×+f
( ) 0321111 4125225 ==+=+=+=+= ×+ ααααf
( ) ( ) ααααααα =+=++=+=+=+= ×+ 321111 6146226f
( ) 211111 0167227 =+=+=+=+= ×+ ααααf
Koreňmi lokátoru chýb sú teda: 51,αα . Potom miesta chýb sú:
slova prijatého 4.miesto :
slova prijatého 8.miesto :3855
7811
⇒=
⇒=+−−
+−−
ααα
ααα
3.7.3.3.3 Oprava chybných znakov
K oprave znakov využijeme uvedený vzorec
( )( )ij
ijij
ijijf
cwv
−
−⋅+=
ααα
&.
Pomocou neho vypočítame hodnotu znakov na chybných miestach prijatého slova.
FM Katedra informatiky
-66-
Z predchádzajúcich výpočtov vieme, že ( ) ( ) 6,1 αxxfxc == & . Po dosadení do vzorca pre
opravu chybných znakov dostávame
( )
( )1
10
11
0
7
7
7
71677
3
3
3
3633
=⋅
+=
===
=⋅
+=
==
−−−
−−
αα
ααααααα
αααα
v
f
v
f
&
&
.
Potom vyslané slovo bolo
=v 12010011.
3.7.3.3.4 Skúška správnosti dekódovania
( ) 76321 xxxxxv ++++=
Overíme, že pre všetky generujúce korene tohto kódu ( 32 ,,,1 ααα ) sa ( ) 0=xv .
( ) ( ) ( ) ( ) 06111212170603000 ==++++=++++= αααααv
( ) ( ) ( ) ( )( ) ( ) ( ) 066122221
2121 76371613111
=+=+++++++=
=++++=++++=
ααααααααααααααv
( ) ( ) ( ) ( )( ) ( ) ( ) 069222212121
21216462
14126272623222
=+=++++++⋅+=++++=
=++++=++++=
αααααααα
αααααααααv
( ) ( ) ( ) ( )( ) ( ) 096221222121
2121523
21189373633333
=+=+++++⋅+=++++=
=++++=++++=
ααααααααα
αααααααααv
Keďže všetky overenia vyšli správne, dekódovanie (oprava chýb) bolo úspešné.
FM Katedra informatiky
-67-
4 Bezpečný a spoľahlivý komunikačný kanál
4.1 Miera bezpečnosti komunikačnej cesty
Miera bezpečnosti komunikačnej cesty je daná stupňom náročnosti získania
prenášanej informácie treťou stranou. Teda čím väčšie úsilie musí tretia strana vynaložiť na
získanie prenášanej informácie, tým viac môžeme systém považovať za bezpečnejší. Veľkosť
potrebného úsilia závisí teda od celkového zabezpečenia. Mieru zabezpečenia je možné
zvýšiť voľbou vhodného kryptografického systému so šifrovaním pomocou verejného či
symetrického kľúča, prípadne ich kombináciou.
4.2 Miera spoľahlivosti komunikačnej cesty
Mieru spoľahlivosti komunikačnej cesty charakterizujeme chybovosťou prenosu, resp.
schopnosťou správne rozpoznať vyslané dáta na strane príjemcu. Prostredie, v ktorom sa
informácia šíri, je charakteristické šumom. Ten v konečnom dôsledku veľmi nepriaznivo
vplýva na parametre prenosu, zvyšuje výkon potrebný pre prenos informácie, znižuje rýchlosť
prenosu a podobne. Voľbou vhodného kódovania môžeme zvýšiť mieru spoľahlivosti a
kompenzovať tak rušivý vplyv šumu.
Kódovanie Dekódovanie
Šifrovanie Dešifrovanie
Odosielateľ Prijímateľ
Komunikačný kanál + šum
Tretia strana
PrijímačVysielač
Spoľahlivosť
Bezpečnosť
Obr. 13 Bezpečný a spoľahlivý komunikačný kanál.
4.3 Proxy server
Proxy server je špeciálny typ servera, umožňuje klientom nepriame pripojenie k inému
serveru. Proxy server tak predstavuje sprostredkovateľa medzi klientom a cieľovým
serverom. Voči serveru sa javí ako klient a voči klientovi ako server.
FM Katedra informatiky
-68-
4.3.1 Činnosť proxy servera
Činnosť proxy servera je možno charakterizovať v nasledovných bodoch
1. Klient sa na miesto na vzdialený server, kontaktuje s proxy serverom.
2. Proxy server prevezme požiadavku klienta obsahujúcu adresu vzdialeného servera,
s ktorým by chcel klient komunikovať.
3. Proxy server sa spojí so vzdialeným serverom a vystupujúc ako klient mu odovzdá
požiadavku od svojho klienta.
4. Vzdialený server odpovie.
5. Proxy server od vzdialeného servera prevezme odpoveď a doručí ju svojmu klientovi.
Proces nastavenia klienta pre prácu s proxy serverom by mal byť podľa možnosti čo
najjednoduchší, zväčša sa nastavuje typ proxy servera, jeho adresa a port, na ktorom
komunikuje. Ak sa na strane klienta vôbec nič nenastavuje a všetky požiadavky idú
automaticky cez proxy server ide o tzv. transparentný proxy server.
Klient ServerOdpoveď
Požiadavka
Obr. 14 Situácia bez použitia proxy servera
ProxyServer
Klient ServerPožiadavka Požiadavka
OdpoveďOdpoveď
Obr. 15 Situácia s použitím proxy servera
Kedže proxy server pozná klienta, od ktorého prišla požiadavka, môže tak riadiť
prístup k informáciám a naviac pre isté služby môže získanú odpoveď nejakým spôsobom
pozmeniť či inak spracovať, uložiť a podobne. Ak viacero klientov zašle tú istú požiadavku,
proxy server môže poskytnúť odpoveď oveľa rýchlejšie.
4.3.2 Kategórie proxy serverov
Proxy servery môžeme rozdeliť do dvoch kategórií
4.3.2.1 Aplikačné proxy servery
Sú navrhnuté iba pre vybrané služby, ako napríklad http, https, ftp.... Výhodou je
ľahké nastavovanie klienta, stačí uviesť adresu proxy servera a jeho port.
FM Katedra informatiky
-69-
4.3.2.2 SOCKS proxy servery
Fungujú pre ľubovoľné služby za predpokladu, že aplikácia je špeciálne upravená pre
podporu takéhoto typu proxy servera.
4.4 SOCKS protokol
SOCKS protokol je internetový protokol, ktorý umožňuje klient-serverovským
aplikáciam priehľadne využívať služby siete. Má modulárnu schému autentifikácie
a šifrovania, adresovanie je podľa IP verzie 4 alebo 6 alebo podľa doménového mena.
SOCKS je skratka zo SOCKetS. Protokol je vlastne akási medzivrstva medzi aplikačnou
a transportnou vrstvou, umožňujúca „objednanie spojenia“.
4.4.1 „Objednanie spojenia“
„Objednanie spojenia“ vyzerá nasledovne. Klient sa pripojí na proxy server a zašle
zoznam podporovaných autentifikačných metód. Server si vyberie jednu z ponúkaných
metód, alebo, ak nie je ani jedna vhodná, zašle chybové hlásenie. V závislosti od vybranej
autentifikačnej schémy prebehne prípadná vzájomná komunikácia medzi klientom
a serverom. Klient potom zašle požiadavku pre spojenie na vzdialený server. Proxy server
uskutoční spojenie na vzdialený server a zašle odpoveď klientovi. Ak prebehlo nadviazanie
spojenia úspešne, potom od tohto momentu sú všetky dáta klienta preposielané na vzdialený
server a naopak. Klient tak komunikuje so vzdialeným serverom, ako by bol k nemu priamo
pripojený.
Protokol SOCKS aktuálne vezie 5 je podrobnejšie popísaný v [16].
4.5 Tunelovací protokol
Definícia: Tunelovací protokol je sieťový protokol, ktorý zapúzdruje nejaký protokol
alebo reláciu protokolu vyššej vrstvy do protokolu na rovnakej vrstve.
4.6 Bezpečný a spoľahlivý komunikačný kanál
Skutočnosť, že klient komunikuje so vzdialeným serverom cez proxy server, ktorý tak
má prístup k obsahu posielaných správ sa z bezpečnostného hľadiska môže javiť ako
potencionálna hrozba úniku informácií. Tento jav však môžeme využiť v náš prospech. Proxy
server rozdeľme na dve časti. Na časť, ktorá prijíma požiadavky od klienta a na časť, ktorá
FM Katedra informatiky
-70-
vysiela požiadavky na vzdialený server. Medzi týmito častami potom máme prístup k obsahu
komunikácie.
Klient ServerPožiadavka Požiadavka
OdpoveďOdpoveď
SOCKSproxyserver(Server)
SOCKSproxyserver(Klient)
SOCKS proxy server
Prístup k obsahu
komunikácie
Obr. 16 Prístup k obsahu komunikácie
Obsah komunikácie potom na vysielacej strane rozdeľme do tzv. balíkov. Jednotlivé
balíky zašifrujme, zakódujme a odošlime príjimacej strane. Na tejto strane sa potom balíky
rozkódujú, dešifrujú a ich zložením získame pôvodný obsah komunikácie. Klientskú časť
proxy servera prenesme čo najtesnejšie ku klientovi a serverovskú časť čo najbližšie ku
vzdialenému serveru. Potom najviac ohrozenou časťou komunikačného reťazca je práve
spojenie medzi týmito dvoma časťami. Týmto spojením však posielame iba zabezpečené
balíky. Takto sme vlastne vytvorili bezpečný a spoľahlivý komunikačný kanál.
Bezpečný a spoľahlivýkomunikačný kanál
Klient Server
SOCKS
proxy
server
(Server)
SOCKS
proxy
server
(Klient)
Klient Server
Obr. 17 Vytvorenie bezpečného a spoľahlivého komunikačného kanálu
4.6.1 Balík
Balík do ktorého zapúzdrujeme pôvodný protokol ma nasledujúci tvar:
#define MAX_DATA_SIZE 512 ... class Pack { public: unsigned char Type; int Id; int DataSize; unsigned char data[MAX_DATA_SIZE]; };
FM Katedra informatiky
-71-
Môžeme ho rozdeliť na dve časti, a to na čast dátovú a na čast riadiacu. Do dátovej
časti patria nasledovné položky. MAX_DATA_SIZE predstavuje maximálnu veľkosť dát
z pôvodnej správy, ktorú môžeme vtesnať do balíka. Premenná DataSize reprezentuje
skutočnú veľkosť dát pôvodnej správy a jej hodnota by nemala presiahnúť konštantu
MAX_DATA_SIZE. Bajtové pole data[] potom predstavuje samotné dáta. Premenné Type a
Id majú riadiaci význam a patria teda do časti riadiacej. Type značí typ balíku a Id je
identifikátor balíku, resp relácie.
4.6.2 Relácie
Zostavenie bezpečného kanálu si vyžaduje nadviazanie šifrovaného spojenia, ktoré je
spojené s pripadným generovaním a výmenou šifrovacích kľúčov. Keďže zostavovať
bezpečný kanál pre každú požiadavku na spojenie klienta so vzdialeným serverom by bolo
neefektívne, zavedieme tzv. relácie. Cez zostavený kanál potom môže prebiehať viacero
spojení súčasne. Každé spojenie pomenujme reláciou a charakterizujme identifikátorom
relácie. Potom to, ktorej relácií ktorý balík patrí, určuje práve identifikátor balíku Id. Súčasný
beh viacerých spojení cez spoločný kanál je tvorený pomocou časového delenia prenosových
prostriedkov.
SocketServer
SocketPipe
SocketPipe
p2pClient
p2pPipe
P2p
SocketPipe
Node - Klient
p2pPipe
p2pServerSocketClientPipe
SocketClientPipe
SocketClientPipeP2p
Node - Server
Klient
Klient
Klient
Server
Server
Server
Obr. 18 Beh viacerých spojení súčasne
4.6.3 Dátový procesor
Medzi klientskou a serverovskou časťou teda komunikujeme pomocou balíkov. Každý
balík má rovnakú veľkosť. To aká je a i samotné šifrovanie a kódovanie obstaráva tzv. dátový
FM Katedra informatiky
-72-
procesor. V našom prípade je reprezentovaný objektmi DataProcessorSend pre posielanie
a DataProcessorRecv pre príjem balíkov. Obstaráva tiež generovanie a ukladanie šifrovacích
kľúčov. Objekty sú charakterizované stavovou premennou State. Tá reprezentuje stav,
v ktorom sa nachádzajú, resp. práve používaný typ šifrovania a kódovania.
RSADecrypter ElGamalDecrypter BCHDecoder
RSAEncrypter ElGamalEncrypter BCHCoder
DataProcessorRecv
DataProcessorSend
Obr. 19 Dátový procesor
4.6.4 P2p Pipe
P2p Pipe je objekt, ktorý priamo zabezpečuje vysielanie i príjem balíkov. Vysielanie je
realizované v spolupráci s objektom DataProcessorSend, ktorý balík spracuje do vhodného
formátu pre vyslanie na komunikačný kanál. Príjem balíkov je o niečo zložitejší. Jeden zo
základných predpokladov správneho príjmu balíka je ten, že poznáme jeho príchodziu
veľkosť a typ použitého šifrovania a kódovania.. Veľkosť zistíme pomocou objektu
DataProcessorRecv a použijeme vo volaní funkcie recv(...); Prijatý balík predáme procesoru
a ten nám, ak je to možné, vráti balík v pôvodnej podobe, teda rozkódovaný a rozšifrovaný.
Takýto balík potom putuje k interpreteru balíkov, ktorý rozhodne o jeho daľšom spracovaní.
DataProcessorSend
Soket
DataProcessorRecv ...recv(...);
...send(...);
p2pPipe
Pack Interpreter
Send
Obr. 20 P2p pipe
4.6.5 Interpreter balíkov
Je jednoduchý rozhodovací algoritmus, ktorý podľa typu balíka (hodnota Type) volí
príslušný algoritmus pre jeho spracovanie.
FM Katedra informatiky
-73-
4.6.6 Typy balíkov
4.6.6.1 Balíky pre tunelovací protokol
� Balíky typov 0 a 1 slúžia na prenos dát, resp. na prenos zapúzdreného protokolu.
� Balík typu 0 prenáša dáta zo strany vzdialeného servera na klientskú stranu.
� Balík typu 1 prenáša dáta z klientskej strany na stranu vzdialeného servera.
� Balík typu 2 uskutočňuje spojenie klienta na vzdialený server.
� Balík typu 10 vykonáva ukončenie spojenia iniciované zo strany vzdialeného servera,
uzátvára spojenie na strane klienta.
� Balík typu 11 vykonáva ukončenie spojenia iniciované zo strany klienta, uzatvára
spojenie na strane vzdialeného servera.
4.6.6.2 Balíky pre nastavenie RSA kryptosystému
� Balík typu 60 nastavuje RSA verejný kľúč, ktorý má vo svojej dátovej časti.
� Balík typu 61 predstavuje žiadosť o zaslanie verejného kľúča. Odpoveďou na tento balík
je balík typu 60.
� Balík typu 62 nastavuje dátový procesor pre odosielanie balíkov do módu šifrovania
RSA kryptosystémom.
� Balík typu 63 predstavuje žiadosť o nastavenie dátového procesora do módu šifrovania
RSA kryptosystémom. Prijatím tohoto balíka sa dátový procesor pre príjem správ
nastaví na mód RSA a odpoveďou je balík typu 62.
4.6.6.3 Balíky pre nastavenie ElGamal kryptosystému
� Balíky typu 70 až 75 predstavujú výmenu parametrov verejného kľúča ElGamalovho
kryptosystému.
� Balíky typu 71 a 70 zabezpečujú výmenu parametra G, kde balík typu 71 je žiadosť
o zaslanie a balík typu 70 je odpoveď.
� Podobne balíky typu 73 a 72 vymieňajú parameter Y a balíky typu 75 a 74 vymieňajú
prameter P, kde balíky s nepárnym typom sú žiadosti a balíky s párnym typom sú
odpovede.
� Balík typu 76 nastavuje dátový procesor pre odosielanie balíkov do módu šifrovania
ElGamalovým kryptosystémom.
� Balík typu 77 predstavuje žiadosť o nastavenie dátového procesora do módu šifrovania
ElGamalovým kryptosystémom. Prijatím tohoto balíka sa dátový procesor pre príjem
správ nastaví na mód ElGamal a odpoveďou je balík typu 76.
FM Katedra informatiky
-74-
Poznámka: ElGamalov verejný kľúč
pPYG a === ,, αα (141)
privátny kľúč
aX = (142)
podľa 2.6.1
4.6.6.4 Ostatné balíky
� Balík typu 55 slúži na jednoduché testovanie dostupnosti spojenia.
� Balíky typov 100 až 199. U týchto balíkov sa typ redukuje o hodnotu 100 a následne sa
zasielajú odosielateľovi späť.
4.6.7 Testovanie dostupnosti
Príklad využitia balíkov typu 55, jednoduché testovanie dostupnosti. Ak chce klient
oznámiť serveru svoju dostupnosť, zašle mu balík typu 55. No ak chce klient zistiť
dostupnosť serveru, zašle balík typu 155. Server tento balík prijme, redukuje hodnotu Type na
55 a zašle ho naspäť. Server tak vlastne oznamuje svoju dostupnosť klientovi, no s tým
rozdielom, že iniciátorom bol klient.
4.6.8 Bod-to-bod verzus klient-server
Na obidvoch koncoch zostaveného komunikačného kanála je identický objekt
p2pPipe. To znamená, že obe strany môžu do určitej miery poskytovať i vyžadovať rovnaké
služby. Do určitej miery preto, že niektoré služby sú závislé i od ďaľších objektov, ktoré
zrovna nemusia byť na danej strane prítomné. Ide teda skôr o typ siete bod-to-bod (anglicky
peer-to-peer, odtiaľ aj názov objektu – p2p...), ako klient-server. Môžeme teda povedať, že
samotný komunikačný kanál je tvorený jednoduchou sieťou bod-to-bod a nad touto sieťou
beží protokol zabezpečujúci „objednanie spojenia“.
4.6.9 Tunelovanie spojenia
Predpokladajme, že máme zostavený komunikačný kanál. Potom klient, ktorý chce
komunikovať so vzdialeným serverom prostredníctvom tohto kanálu, pripojí sa na klientskú
časť a využitím protokolu SOCKS zadá pokyn pre spojenie na vzdialený server. Klientská
časť reprezentuje požiadavku na spojenie vo forme balíku typu 2, kde v jeho dátovej oblasti je
uložená adresa a port vzdialeného servera a v riadiacej oblasti je nastavený identifikátor
FM Katedra informatiky
-75-
relácie a tento balík zašle serverovskej časti. Na strane servera interpreter balíkov vytvorí
spojenie na vzdialený server, nastaví rovnaký identifikátor relácie, ako má vysielacia strana
a zašle naspäť balík typu 0, v ktorého dátovej oblasti je správa o úspešnom „objednaní
spojenia“. Táto správa je vlastne poslednou správou SOCKS protokolu. Keď klient obdrží
túto správu, predpokladá úspešné zostavenie spojenia na vzdialený server, s ktorým potom
komunikuje tak, akoby bol k nemu priamo pripojený. Táto komunikácia sa zapúzdruje do
balíkov typu 0 a 1 v závislosti od smeru prenosu. Ak sa hociktorá zo strán rozhodne spojenie
ukončiť, vygeneruje sa balík typu 10 alebo 11, v závislosti od toho, ktorá strana sa rozhodla a
zašle sa strane opačnej, spojenie sa tým ukončí.
4.6.10 Zabezpečenie komunikačného kanálu
Predpokladajme, že máme zostavený komunikačný kanál a tento chceme zabezpečiť
pomocou RSA kryptosystému. Zvoľme ľubovoľnú stranu, pre príklad nech je to strana
klientská. Potom z tejto strany pomocou balíka typu 61 zašleme požiadavku na verejný kľúč
protistrany. Predpokladajme, že sme prijali balík typu 60 so správnym kľúčom. Potom
môžeme vyslať balík typu 63 a predpokladať príjem balíka typu 62. Teraz máme aktívne RSA
šifrovanie, no len jednosmerne. Kedže sme zvolili klientskú stranu, šifrujeme balíky idúce
z klientskej strany na stranu serverovskú, balíky idúce opačným smerom však zostávajú
v pôvodnej forme. Zabezpečenie i opačného smeru komunikácie by vyžadovalo zaslanie
rovnakých typov balíkov, avšak z opačnej strany, teda v našom príklade, zo strany servera.
Predpokladajme však, že okrem možnosti ovládania druhej strany pomocou balíkov, žiadna
iná nie je. Využijeme však preposielanie balíkov späť odosielateľovi. Potom pomocou
balíkov typu 161 a 163 aktivujme šifrovanie i opačným smerom. Teda výsledná postupnosť
typov balíkov pre obojsmerné zabezpečenie komunikácie pomocou RSA kryptoytému bude
61, 63, 161 a 163.
4.6.11 Realizácia komunikačného kanálu
Aplikácia zabezpečujúca bezpečný a spoľahlivý komunikačný kanál má názov node5.
Možno ju spustiť vo viacerých módoch v závislosti od parametrov, ktoré zadávame pri
spustení. Pre vytvorenie komunikačného kanálu (tunela) spustíme na jednom konci aplikáciu
zadaním node5 server, tým sme vytvorili komunikačný bod, ktorý očakáva spojenie od
ďaľšieho bodu. Ten vytvoríme zadaním node5 client na opačnom konci komunikačného
kanálu. Konkrétnejšie je to vidieť na obr. 21 a 22.
FM Katedra informatiky
-76-
Obr. 21 Node5 ako server
Obr. 22 Node5 ako klient
FM Katedra informatiky
-77-
5 Aplikácia pre prenos správ a súborov
Aplikácia je naprogramovaná v jazyku Java. Umožňuje dvojstrannú komunikáciu
medzi dvomi uživateľmi pomocou textových správ, ktoré môžu byť v pôvodnej forme, alebo
vo forme šifrovanej. Umožňuje tiež prenos súborov medzi komunikujúcimi užívateľmi.
Obr. 23 Hlavné okno aplikácie pre prenos správ a súborov
5.1 Šifrovanie v Jave
Šifrovanie v Jave zabezpečuje Java kryptografické rozšírenie, anglicky Java Cryptography
Extension (JCE). Je to množina balíčkov (java.security, javax.crypto), ktoré poskytujú systém
a implementácie pre šifrovanie, generovanie kľúčov, dohadovanie kľúčov a algoritmy
Message Authentication Code (MAC). Podpora pre šifrovanie zahrňuje symetrické,
asymetrické, blokové i prúdové šifry.
5.1.1 Java JCE
JCE je založené na princípe tzv. provajderov (Cryptographic Service Provider), ktorí
poskytujú konkrétne implementácie požadovaných algoritmov. V systéme ich môže byť
súčasne viac, potom by však mala byť špecifikovaná ich preferencia. JCE šandardne používa
„SunJCE“ provajdera, ktorý umožňuje nasledujúce služby:
� Implementácia DES (FIPS PUB 46-1), Triple DES a Blowfish šifrovacích
algoritmov v režimoch Electronic Code Book (ECB), Cipher Block Chaining
FM Katedra informatiky
-78-
(CBC), Cipher Feedback (CFB), Output Feedback (OFB), Propagating Cipher
Block Chaining (PCBC).
� Generátory kľúčov vhodných pre algoritmy DES, Triple DES, Blowfish,
HMAC-MD5 a HMAC-SHA1.
� Implementácia algoritmu MD5 so šifrovacím algoritmom založeným na hesle
password-based encryption (PBE) DES-CBC, algoritmus definovaný v
PKCS#5.
� "Továreň na tajné kľúče" umožňujúca obojsmerný prevod medzi
nepriehľadnými objektmi kľúčov Triple DES a PBE a priehľadnou
reprezentáciou ich základného materiálu.
� Implementácia Diffie-Hellmanovej výmeny kľúčov medzi dvoma alebo
viacerými stranami.
� Generátor Diffie-Hellmanovho páru kľúčov pre generovanie páru verejného a
privátneho kľúča vhodného pre Diffie-Hellmanov algoritmus.
� Generátor parametra Diffie-Hellmanovho algoritmu.
� „Továreň“ pre kľúče Diffie-Hellman, poskytujúca obojsmerný prevod medzi
nepriehľadnými objektmi Diffie-Hellman kľúčov a priehľadnou reprezentáciou
ich základného materiálu.
� Správca parametrov pre algoritmy Diffie-Hellman, DES, Triple DES, Blowfish
a PBE.
� Implementácia hašovacích funkcií HMAC-MD5 a HMAC-SHA1
definovaných v RFC 2104.
� Implementácia zarovnávacej a vypĺňacej schémy popísanej v PKCS#5.
Nových provajderov môžeme pridávať staticky i dynamicky. Rôzne implementácie
môžu mať rozličné vlastnosti. Niektoré sú založené na softvérovej úrovni, iné na hardvérovej.
Niektoré sú platformovo nezávislé, no iné môžu byť platformovo špecifické. Zdrojový kód
provajdera môže, no i nemusí byť prístupný.
5.1.2 Zoznam kryptografických provajderov
Zobrazenie zoznamu provajderov, zabezpečujúcich kryptovanie v systéme.
Provider[] providers = Security.getProviders(); for (int i = 0; i < providers.length; i++){
String name = providers[i].getName(); double version = providers[i].getVersion(); System.out.println("Provider["+i+"]:: " + name + " " + version);
}
FM Katedra informatiky
-79-
5.1.3 Generovanie kľúčov
Generovanie privátneho a verejného kľúča pre RSA šifrovací systém. Ak nezáleží na
implementácií generátora, nemusíme špecifikovať provajdera. Systém, tiež automaticky
inicializuje generátor kľúčov. Ak chceme vygenerovať viacero kľúčov, môžeme použiť ten
istý generátor.
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(512); // 512, veľkosť kľúča KeyPair kp = kpg.generateKeyPair(); PublicKey pubk = kp.getPublic(); // verejný kľúč PrivateKey prvk = kp.getPrivate(); // privátny kľúč
5.1.4 Šifrovanie
Objekt cipher nastavíme do módu šifrovania RSA s verejným kľúčom pubk.
Zavolaním metódy doFinal zašifrujeme správu inpBytes.
byte[] inpBytes Cipher cipher = Cipher.getInstance(("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubk); cipher.doFinal(inpBytes);
5.1.5 Dešifrovanie
Objekt cipher nastavíme do módu dešifrovania RSA šifry privátnym kľúčom prvk a
zavolaním metódy doFinal šifru inpBytes dešifrujeme.
byte[] inpBytes Cipher cipher = Cipher.getInstance(("RSA"); cipher.init(Cipher.DECRYPT_MODE, prvk); cipher.doFinal(inpBytes);
5.2 Sieťová komunikácia v Jave
Java Networking API (java.net) zabezpečuje rozhranie a objekty, ktoré umožňujú
adresovanie, vytváranie TCP spojení, posielanie a prijímanie datagramových paketov
pomocou UDP, lokalizovanie a identifikovanie sieťových zdrojov, bezpečnosť, autentifikáciu
a prístupové práva.
5.2.1 Adresovanie
5.2.1.1 IP adresovanie - InetAddress, Inet4Address, Inet6Address
Trieda InetAddress reprezentuje adresu dĺžky 32 alebo 128 bitov používanú
internetovým protokolom (IP). Inet4Address reprezentuje IPv4 adresu vo formáte
FM Katedra informatiky
-80-
xxx.xxx.xxx.xxx. pre príklad 192.168.1.2. Pre reprezentáciu IPv6 adresy sa používa trieda
Inet6Address. Triedy Inet4Address, Inet6Address sú podtriedami triedy InetAddress.
5.2.1.2 Soketové adresovanie - SocketAddress, InetSocketAddress
SocketAddress je abstraktná soketová adresa, nezávisí od špecifikovaného protokolu.
InetSocketAddress je podtriedou SocketAddress a reprezentuje IP soketovú adresu. Tá zahŕňa
IP adresu (pre príklad 192.168.1.2) a port (pre príklad 80), prípadne meno hostiteľa
(www.tnuni.sk)a port (80), alebo prípadne iba port (80).
5.2.2 Vytváranie TCP spojenia
Triedy, ktoré zabezpečujú štandardné TCP spojenie sú ServerSocket, Socket. Pre
jednoduché spojenie medzi klientom a serverom s týmito triedami vystačíme.
ServerSocket reprezentuje soket na strane servera, ktorý čaká a načúva požiadavkám
klientov. Socket reprezentuje koncový bod komunikácie medzi serverom a klientom. Klient
vytvorí Socket a vyšle požiadavku pre komunikáciu so serverom. Keď server túto požiadavku
príjme, vytvorí Socket pre komunikáciu s klientom a ak ho neuzavrieme, pokračuje
v načúvaní ďalej.
5.2.2.1 Vytvorenie serverovského soketu
Vytvorenie serverovského soketu, načúvajúceho na porte 1234.
int port = 1234; ServerSocket serverSocket = new ServerSocket(port); while (... { Socket socket = serverSocket.accept(); } serverSocket.close();
5.2.2.2 Vytvorenie klientského soketu
Vytvorenie klientského soketu a jeho pripojenie na IP adresu 127.0.0.1 a port 1234. int port = 1234; String ip = new String("127.0.0.1"); InetSocketAddress endpoint = null; endpoint = new InetSocketAddress(InetAddress.getByName(ip), port); Socket socket = new Socket(); socket.connect(endpoint);
5.2.2.3 Pripojenie pomocou proxy servera
Java natívne podporuje pripájanie soketov pomocou proxy servera. Môžeme použiť
nasledujúce typy:
FM Katedra informatiky
-81-
Proxy.NO_PROXY, pripojenie bez proxy servera.
Proxy.Type.SOCKS, pripojenie pomocou proxy servera s protokolom SOCKS.
Proxy.Type.HTTP, pripojenie pomocou proxy servera s protokolom HTTP.
int port = 3128; String ip = new String("127.0.0.1"); SocketAddress addr = null; addr = new InetSocketAddress(InetAddress.getByName(ip), port); proxy = Proxy.NO_PROXY; proxy = new Proxy(Proxy.Type.SOCKS, addr); proxy = new Proxy(Proxy.Type.HTTP, addr); ... Socket socket = new Socket(proxy); ...
5.3 Objektová serializácia
Objektová serializácia je prevedenie ľubovoľného objektu ktorý implementuje
rozhranie Serializable na postupnosť bajtov. Načítaním tejto postupnosti neskôr môžeme
obnoviť stav objektu. Umožňuje vyrovnať rozdiely medzi systémami. Využíva sa na presun
objektov v sieťovom prostredí, ukladanie objektov na diskové zariadenia, prípadne do
databázy objektov. Serializácia poskytuje podporu RMI - Remote Method Invocation -
vzdialené volanie metód. Pri serializácií sa prechádza graf objektu (sieť objektu), sledujú sa
všetky odkazy na objekty a tieto objekty sa ukladajú tiež.
Vytvorenie serializovateľnej triedy vykonáme tak, že implementujeme rozhranie
Serializable.
import java.io.Serializable; public class SerializovanaTrieda implements Serializable {
public SerializovanaTrieda() { ... }
... }
5.4 Komunikačný protokol
Komunikácia medzi dvoma uživateľmi resp. medzi dvoma aplikáciami prebieha na
úrovni objektov.
import java.io.Serializable; public class Packet implements Serializable {
public void run(SocketEndPoint socketEndPoint) { }
}
FM Katedra informatiky
-82-
Trieda Packet je však iba akási abstraktná trieda, ktorá sama o sebe nič nevykonáva.
Slúži pre zjednodušenie komunikačného systému tým spôsobom, že objektové prúdy
nastavíme na vyslanie či príjem iba tejto triedy.
Výstupný objektový prúd
OutputStream outStream = socket.getOutputStream(); ObjectOutputStream objOut = new ObjectOutputStream(outStream);
Vstupný objektový prúd
InputStream inStream = socket.getInputStream(); ObjectInputStream objIn = new ObjectInputStream(inStream);
Komunikácia potom prebieha pomocou tried, ktoré sú rozšírením triedy Packet.
Napríklad trieda PacketSendData je rozšírením triedy Pack a slúži na prenos správ.
public class PacketSendData extends Packet { private byte[] byteData = null; public PacketSendData(String strData, SocketEndPoint socketEndPoint){ byteData = strData.getBytes(); ... } } public void run(SocketEndPoint socketEndPoint) { ... String str = null; if (byteData != null) { str = new String(byteData); socketEndPoint.textOut(str); } }
... }
Poznámka: Trieda SocketEndPoint slúži na vyslanie, príjem a spracovanie správ, resp.
tried Pack. Sprístupňuje triedam typu Pack metódy ostatných tried v systéme, napríklad
šifrovanie, či uloženie správ a podobne. Vačšinou sa práve v objekte tejto triedy vytvárajú
jednotlivé objekty odvodené od triedy Packet.
5.4.1 Popis komunikačných paketov
5.4.1.1 Packet
Základná trieda, od ktorej sú odvodené všetky ďalšie triedy paketov.
FM Katedra informatiky
-83-
5.4.1.2 PacketSendID
Slúži pre zasielanie identifikátora komunikujúcej strany a pre jeho nastavenie na
strane opačnej. Inými slovami Alica si nastaví svoj identifikátor na svoje meno a pomocou
paketu PacketSendID ho nastaví i u Boba. Potom Bob vie, resp. predpokladá že komunikuje
s Alicou. Analogicky môže postupovať i Bob.
5.4.1.3 PacketSendMyPublicKey
Týmto paketom zasielame a nastavujeme verejný šifrovací kľúč. Týmto kľúčom sa
potom v závislosti od príznaku použitia asymetrickej kryptografie šifrujú zasielané správy.
5.4.1.4 PacketEnableAsymetricCryptography
Tento paket nastavuje príznak použitia asymetrického šifrovania. Pred tým ako
povolíme použitie asymetrickej šifry predpokladáme, že príjemca má náš verejný kľúč,
ktorým bude správy šifrovať.
5.4.1.5 PacketSendData
Paket slúží pre zasielaníe správ. Pomocou jeho konštruktoru doň vložíme správu
a pomocou volania metódy run(...) ju získame späť. Správa sa po vložení do objektu šifruje
v závislosti od príznaku použitého kryptografického systému.
5.4.1.6 PacketRequestReceivingFile
Týmto paketom zasielame popis súboru, ktorý plánujeme odosielať a na druhej strane
vytvárame soketový server načúvajúci na príchodzie spojenie. Ako odpoveď na tento paket je
paket nasledujúci.
5.4.1.7 PacketReceivingFileAccepted
Tento paket je odpoveďou na paket PacketRequestReceivingFile. Posiela ho strana,
ktorá je pripravená prijímať dáta. Paket po prijatí vytvorí soketového klienta, nadviaže
spojenie, a začne posielať súbor.
FM Katedra informatiky
-84-
5.4.2 Prenos správ
Obr. 24 Alicin komunikačný terminál
Obr. 25 Bobov komunikačný terminál
Predpokladajme, že Alica s Bobom majú vytvorený spoločný objektový kanál. Potom
si pomocou paketov PacketSendID vzájomne vymenia svoje identifikátory a pomocou
paketov PacketSendData si môžu posielať správy. Ak chcú spolu komunikovať šifrovane,
navzájom si vymenia verejné kľúče (PacketSendMyPublicKey) a nastavia šifrovaný mód
komunikácie (PacketEnableAsymetricCryptography(true)). Výmena správ potom prebieha
rovnakým spôsobom, teda pomocou PacketSendData avšak v šifrovanej podobe. Prenos
objektov zabezpečujú objektové prúdy. Odosielanie, príjem a spracovanie objektov prebieha
v prostredí objektu SocketEndPoint. Alica posiela objekt volaním metódy Send(...) objektu
SocketEndPoint. Bob príjma objekt automaticky po jeho odoslaní a vyhodnocuje ho volaním
jeho metódy run(...) .
FM Katedra informatiky
-85-
String msg = new String("Hello Bob!!!");
Packet packet = new PacketSendData(msg, this);
objOut.writeObject(packet);
SocketEndPoint
Alica vysiela správu Hello Bob!!!
Výstupný objektový prúd
SocketEndPoint
Bob
Vstupný objektový prúd
Packet pck = null;
pck = (Packet) objIn.readObject();
pck.run(this);
prijíma správu Hello Bob!!!
socketEndPoint.textOut(...);
Obr. 26 Posielanie správ
Poznámka: Aplikácia umožňuje komunikáciu v pôvodnej forme a v šifrovanej forme
s využitím kryptosystému RSA. Kedže kryptografia v Jave je tvorená pomocou provajderov,
ktorí poskytujú rôzne šifrovacie algoritmy, prípadné rozširenie či použitie iného šifrovacieho
systému nepredstavuje výraznejšiu zmenu aplikácie.
Poznámka: V šifrovanom móde komunikácie sa šifruje text samotnej správy, nešifruje
sa však samotný objekt, ktorý správu prenáša.
5.4.3 Prenos súborov
Prenos súborov prebieha pomocou objektov FileTransferClient a FileTransferServer.
Alica si zvolí súbor, ktorý chce poslať Bobovi. Vytvorí paket PacketRequestReceivingFile,
vloží doň popis súboru (meno, veľkosť...) a zašle Bobovi. Ten paket príjme, vytvorí objekt
FileTransferServer so soketovým serverom, ktorý načúva na vopred dohodnutom porte na
príchodzie spojenie a zašle Alici paket PacketReceivingFileAccepted. Prijatím tohto paketu
Alica vytvorí objekt FileTransferClient a pomocou soketovej komunikácie začne vysielať
súbor. Samotný prenos súboru sa uskutočňuje presunom dát medzi bajtovými prúdmi. Na
FM Katedra informatiky
-86-
strane FileTransferClient je to presun medzi vstupným prúdom súboru a výstupným prúdom
soketu a na strane FileTransferServer medzi vstupným prúdom soketu a výstupným prúdom
súboru. Dáta sa prenášajú v nešifrovanej forme.
Alica Bob
Obojsmerný objektový prúd
PacketRequestReceivingFile
PacketReceivingFileAccepted
Baj tov ý prúd
FileTransfer
Client
FileTransfer
Server
Súbor
SocketEndPoint
Soket Soket
Súbor
SocketEndPoint
Obr. 27 Prenos súborov
Obr. 28 Alicin komunikačný terminál, prenos súborov
FM Katedra informatiky
-87-
Obr. 29 Okno pre výber súboru
Obr. 30 Stav prenosu súboru
5.4.4 Štruktúra menu aplikácie
� Node - Menu pre základné ovládanie aplikácie. � Server Start/Stop – Aktivácia/Deaktivácia servera, touto funkciou
aktivujeme/deaktivujeme možnosť príjímať príchodzie spojenia. � Console On/Off – Zapnutie či vypnutie konzolového okna. Konzolové
okno slúži na zobrazenie rôznych systémových správ. � Exit – Ukončenie práce s aplikáciou.
� Settings – Menu pre nastavovanie vlastností aplikácie. � Node – Nastavenie identifikátora aplikácie, týmto identifikátorom sa
prezentujeme počas komunikácie druhej strrane. � Server – Nastavenie portu, na ktorom načúva server na príchodzie
spojenia. � Proxy – Nastavenie proxy servera pre odchodzie spojenie. � File Transfer – Nastavnie portu, na ktorom server načúva príchodziemu
spojeniu pri zostavovaní spojenia pre prenos súborov.
� Help – Menu pre technickú pomoc. � About – Informačné okno o aplikácií
FM Katedra informatiky
-88-
5.4.5 Konzola aplikácie
Príklad konzoly aplikácie, stav po spustení aplikácie, nadviazaní spojenia medzi Alicou a Bobom, vymenením si krátkych správ a zaslaní súboru obrazok01.jpg Bobovi.
Obr. 31 Konzola aplikácie
FM Katedra informatiky
-89-
Záver
Úlohou tejto práce bolo navrhnúť a naprogramovať komunikačný protokol pre
spoľahlivú a bezpečnú sieťovú komunikáciu a aplikáciu, ktorá bude tento protokol využívať
na prenos správ a súborov. V práci sme najskôr objasnili niektoré matematické pojmy a
definície a potom prešli do oblasti kryptografie. V nej sme prebrali problematiku šifrovania so
symetrickým i verejným kľúčom a zhodnotili jednotlivé výhody i nevýhody. Ďalej sme sa
zaoberali algoritmami pre kryptosystémy využívajúce techniky verejného kľúča, konkrétne
RSA, ElGamal a Menezes Vanstone kryptosystém eliptických kriviek. V oblasti kódovania
sme prebrali základné pojmy ako kódovanie, detekcia a oprava chýb a konkrétnejšie popísali
BCH kód a uviedli príklad pre dekódovanie kódu nad poľom )9(GF . V nasledujúcej časti
sme riešili návrh a realizáciu komunikačného protokolu.
Hlavnou časťou spoľahlivej a bezpečnej komunikácie je komunikačný kanál. Ten sme
vytvorili pomocou jednoduchej siete typu bod-to-bod. V tejto sieti prebieha komunikácia
pomocou tzv. balíkov. Balíky majú dve časti, riadiacu a dátovú. Riadiaca časť hovorí o tom,
čo treba vykonať s dátami v dátovej časti. Dátová časť potom predstavuje samotné dáta.
Komunikačný kanál je zabezpečený rôznymi druhmi šifrovania, v našom prípade je to RSA a
ElGamal kryptosystém. Spoľahlivosť zaisťujú BCH kódy.
Nad týmto komunikačným kanálom sme čiastočne implementovali protokol SOCKS5,
ktorý slúži na získanie zdroja dát. Navonok komunikačný kanál vystupuje ako proxy server.
Klient, ktorý chce komunikovať so vzdialeným serverom sa potom pripojí na náš proxy
server. Ak prebehlo pripojenie a zostavenie komunikačnej relácie úspešne, potom klient
komunikuje cez zabezpečený kanál so vzdialeným serverom tak, akoby bol k nemu pripojený
priamo. Navrhnutý protokol má tunelovací charakter. Komunikačný kanál teda predstavuje
tunel, ktorým prechádzajú dáta protokolu klientskej aplikácie.
V poslednej časti sme vytvorili aplikáciu, s vlastným protokolom zaisťujúcim
posielanie textových správ a prenos súborov. Aplikácia podporuje komunikáciu pomocou
proxy servera. Teda pre prepojenie dvoch takýchto aplikácií môžeme využiť náš tunelovací
protokol. Aplikácia bola vytvorená v jazyku Java, v prostredí Eclipse 3.1.1
Implementácia návrhu protokolu bola testovaná na jednom počítači pomocou
lokálnych pripojení i v prostredí siete typu LAN pomocou viacerých počítačov.
Tunelovanými protokolmi boli: vlastný protokol ukážkovej aplikácie, HTTP, HTTPS
(Mozilla Firefox/1.5.0.11), FTP (SmartFTP v2.0.1002), ICQ (ICQ(R) Version 5.10)
FM Katedra informatiky
-90-
Táto práca predstavuje návrh protokolu pre bezpečnú a spoľahlivú komunikáciu.
Návrh je implementovaný v jazyku C++, v prostredí Microsoft Visual C++ 2003 s využitím
knižnice GMP [18]. Podporuje protokoly komunikujúce na nižšej vrstve pomocou TCP/IP.
Čiastočne implementuje SOCKS5 protokol, z ktorého využíva možnosť vytvoriť spojenie
pomocou IPv4 adresy, bez použitia autentifikácie. Keďže ide o návrh a nie o kompletnú
realizáciu protokolu, nie všetky chybové stavy, ktoré môžu nastať, sú ošetrené. Ošetrenie
týchto stavov, prípadne použitie iných typov šifrovania a kódovania či iné rozšírenie by
vyžadovalo pridanie ďaľších typov balíkov a prípadne i objektov, zabezpečujúcich
požadovanú funkcionalitu. Ako možné rozšírenie uveďme napríklad použitie kryptosystému
eliptických kriviek, či aplikovanie šifrovania so symetrickým kľúčom, prípadne využitie
iného typu kódovania, resp iného poľa GF.
Sieť typu bod-to-bod, nad ktorou je protokol navrhnutý, je realizovaná pomocou
protokolu TCP/IP, no v podstate by mohla byť realizovaná hocijakým iným protokolom,
určeným pre prenos dát. V našom prípade využívame BCH kód nad poľom )9(GF popísaný
v príklade 3.7.3.3, alebo v [7]. Ten má ternárny charakter a jeho využitie by bolo efektívne
skôr v systémoch s troj-stavovou reprezentáciou dát. Môžeme ho však využiť i na vytvorenie
tunela pre prenos binárnych dát cez ternárny systém.
Implementácia protokolu je tvorená pre prostredie operačného systému Windows,
konkrétne Windows XP. Je však možné ju preniesť i do iných systémov. Treba však vyriešiť
otázku tvorby vlákien a ich vzájomnej synchronizácie v danom systéme.
Keďže protokol používa šifrovanie i relácie, môžeme pomocou neho skryť nielen
obsah posielaných správ, ale i miesto, kam tieto správy idú, resp. odkiaľ prichádzajú.
Uveďme príklad: Uživateľ sa nachádza v dosahu verejného prístupového bodu do siete
internet. Pripojí sa k nemu pomocou bezdrátového pripojenia. Potom poskytovateľ služby
prístupu do siete má možnosť zistiť s akým serverom uživateľ komunikuje, prípadne má
i prístup k obsahu komunikácie. Uživateľovi však stačí mať niekde v sieti dôveryhodný
server, na ktorom beží aplikácia Node5 v móde server, resp. prístupový bod, ktorý načúva
príchodzím požiadavkám na vytvorenie komunikačného spojenia. Spustením aplikácie Node5
v klientskom móde a pripojením sa na dôveryhodný server uživateľ vytvorí druhý prístupový
bod a vznikne tak tunel. Cez tento tunel potom môže komunikovať s rôznymi servermi v sieti.
Poskytovateľ pripojenia však nemôže zistiť nič viac, len to, že uživateľ je pripojený stále na
jeden a ten istý server (uživateľov dôveryhodný server). To kam sa skutočne uživateľ pripája
však zistiť nemôže a už vôbec nemá prístup k obsahu komunikácie.
FM Katedra informatiky
-91-
Zoznam skratiek a symbolov � st - Stupeň Polynómu � BK - Bezpečnostné Kódy � DTS - Dôverihodná Tretia Strana � Gcd - Greatest Commonn Divisor � GF - Galois Field � ECC - Elliptic Curve Cryptography � RSAP - RSAProblem � QRP - Quadratic Residuosity Problem � DLP - Discrete Logarithm Problem � GDLP - Generalized Discrete Logarithm Problem � DHP - Diffie-Hellman Problem � GDHP - Generalized Diffie-Hellman Problem � ECDLP - Elliptic Curve Discrete Logarithm Problem � JCE - Java Cryptography Extension � MAC - Message Authentication Code � PKCS - Public Key Cryptography Standards � RFC - Request for Comments � ECB - Electronic Code Book � CBC - Cipher Block Chaining � CFB - Cipher FeedBack � OFB - Output FeedBack � PCBC - Propagating Cipher Block Chaining � HMAC - keyed-Hash Hessage Authentication Code � PBE - Password-Based Eencryption � SHA - Secure Hash Algorithm � DES - Data Encryption Standard � MD5 - Message-Digest algorithm 5 � API - Application Programming Interface � TCP - Transmission Control Protocol � UDP - User Datagram Protocol � IP - Internet Protocol � IPv4 - Internet Protocol verzia 4 � IPv6 - Internet Protocol verzia 6 � P2P - Peer to Peer � HTTP - HyperText Transfer Protocol � HTTPS - Hypertext Transfer Protocol Secure � FTP - File Transfer Protocol � SOCKS - SOCKetS � RMI - Remote Method Invocation � IPsec - IP Security � TLS - Transport Layer Security � SSL - Secure Sockets Layer � SSH - Secure Shell � VPN - Virtual Private Network � PN - Public Network
FM Katedra informatiky
-92-
Zoznam obrázkov
Obr. 1 Komunikácia dvoch strán s využitím šifrovania ...........................................................25 Obr. 2 Využitie šifrovania so zabezpečeným kanálom pre výmenu kľúča ..............................26 Obr. 3 Kompozícia fg o funkcií g a f.....................................................................................30 Obr. 4 Kompozícia fg o involúcií g a f nie je involúcia .......................................................31 Obr. 5 Šifrovanie využívajúce techniky verejného kľúča.........................................................34 Obr. 6 Schématické znázornenie použitia šifrovania s verejným kľúčom ...............................35 Obr. 7 Útok falošnou prezentáciou ...........................................................................................35 Obr. 8 Vzťah kľúčov v sieti šiestich účastníkov.......................................................................36 Obr. 9 Manažment kľúčov využívajúci DTS...........................................................................37 Obr. 10 Manažment kľúčov využívajúci techniky verejných kľúčov ......................................38 Obr. 11 Útok falošnou prezentáciou 6A aktívnym útočníkom s verejným kľúčom *e ...........39
Obr. 12 Autentifikácia verejných kľúčov pomocou DTS, symbol || znamená spojenie...........39 Obr. 13 Bezpečný a spoľahlivý komunikačný kanál. ...............................................................67 Obr. 14 Situácia bez použitia proxy servera .............................................................................68 Obr. 15 Situácia s použitím proxy servera................................................................................68 Obr. 16 Prístup k obsahu komunikácie .....................................................................................70 Obr. 17 Vytvorenie bezpečného a spoľahlivého komunikačného kanálu ................................70 Obr. 18 Beh viacerých spojení súčasne ....................................................................................71 Obr. 19 Dátový procesor...........................................................................................................72 Obr. 20 P2p pipe .......................................................................................................................72 Obr. 21 Node5 ako server .........................................................................................................76 Obr. 22 Node5 ako klient..........................................................................................................76 Obr. 23 Hlavné okno aplikácie pre prenos správ a súborov .....................................................77 Obr. 24 Alicin komunikačný terminál ......................................................................................84 Obr. 25 Bobov komunikačný terminál .....................................................................................84 Obr. 26 Posielanie správ ...........................................................................................................85 Obr. 27 Prenos súborov ............................................................................................................86 Obr. 28 Alicin komunikačný terminál, prenos súborov...........................................................86 Obr. 29 Okno pre výber súboru ................................................................................................87 Obr. 30 Stav prenosu súboru.....................................................................................................87 Obr. 31 Konzola aplikácie ........................................................................................................88
Zoznam tabuliek Tab. 1 Voľba bezpečnostného parametra t...........................................................................17 Tab. 2 Kompletná tabuľka GF(9).........................................................................................23 Tab. 3 Body eliptickej krivky 632 ++= xxy nad 11Z . .....................................................47 Tab. 4 Porovnanie problémov kryptosystémov s verejným kľúčom. ..................................52 Tab. 5 Kód 2 z 5...................................................................................................................56
FM Katedra informatiky
-93-
Zoznam použitej literatúry [1] Douglas R. Stinson: Cryptography. Theory and practice. CRC Press, NY, 2005.
[2] A. Menezes, P. van Oorschot, S Vanstone: Handbook of Applied Cryptography, CRC
Press, 1996.
[3] Adámek Jiří: Coding theory and cryptography. Willey@ Sons, NY, 1991.
[4] Adámek Jiří: Kódování. SNTL Praha, 1989.
[5] Garret Birkhoff – Thomas C. Bartee: Aplikovaná algebra. Vydanie prvé. Alfa
Bratislava, 1981.
[6] S. Mac Lane – G. Birkhoff: Algebra. Vydanie druhé. Alfa Bratislava, 1973.
[7] Sibert Igor: Steganografické ukrytie tajnej správy s podporou BCH kódov a šifry AES.
Diplomová práca, Trenčín: Trenčianska Univerzita Alexandra Dubčeka v Trenčíne,
Fakulta Mechatroniky, 2006. 98s.
INTERNET
[8] Prime number http://en.wikipedia.org/wiki/Prime_number
[9] Math http://www.certicom.com/index.php?action=ecc,math
[10] RSA http://en.wikipedia.org/wiki/RSA
[11] RFC 2437 - PKCS #1: RSA Cryptography Specifications Version 2.0 http://www.faqs.org/rfcs/rfc2437.html
[12] ElGamal encryption http://en.wikipedia.org/wiki/ElGamal_encryption
[13] Elliptic Curve Cryptography -- How it Works. http://research.sun.com/projects/crypto/HowECCWorks-USLetter.pdf
[14] Proxy server http://deja-vix.sk/sysadmin/proxy.html
[15] Proxy server http://en.wikipedia.org/wiki/Proxy_server
[16] SOCKS Protocol Version 5 http://tools.ietf.org/html/rfc1928
[17] Tunneling protocol http://en.wikipedia.org/wiki/Tunneling_protocol
[18] GMP Documentation http://gmplib.org/manual/
[19] Manuály jazyka Java http://java.sun.com/reference/docs/
[20] Manuály jazyka C++ http://msdn2.microsoft.com/en-us/library/3bstk3k5.aspx
FM Katedra informatiky
-94-
Zoznam príloh
1. CD médium - Diplomová práca v elektronickej podobe, zdrojové kódy programov.