by: Janóczki Szilvia IV. évf.. matematika-számítástechnika KRIPTOGRÁFIA by: Janóczki Szilvia IV. évf.. matematika-számítástechnika
„Ha az emberi agy képes egy rejtjelezett írás eljárásait megérteni, akkor egy másik agy követelheti ezt az utat, amikor egy ilyen út létezéséről tudomása van. Az egyedüli titkosírás az, amely elrejti a titkok meglétét.” Francis Bacon
Mi is a kriptográfia? Cryptographia=tikosítás A kriptográfia adatok, üzenetek rejtjelezésével (kódolás) foglalkozó tudomány. Szűkebb értelemben valóban a rejtjelezés a kriptográfia alapvető feladata: matematikai eszközökkel biztosítani azt, hogy stratégiai fontosságú adatok, üzleti információk, pénzügyi adatok, dokumentációk vagy személyiségi jogokat érintő adatok stb. csak az azok felhasználására kijelölt körben legyenek elérhetők, ne illetéktelenek birtokába.
Régmúlt idők titkosítása A titkosírás története egészen i.e. 1500-ig. nyúlik vissza, ekkor készült ugyanis az az ékírásos táblácska, amely az agyagmáz-készítés módját írta le, titkosítva. A görögök és a spártaiak már i.e. 475-ben használtak titkos kódokat, az itáliai reneszánsz idején pedig egyenesen virágkorát élte a titkosírás művészete. XIV. Lajos korában 587 véletlenszerűen kiválasztott elemből álló kódot használtak az állami üzenetek továbbításához.
Az 1800-as években Edgar Allan Poe novelláiban szereplő kódolt üzenetek felkeltették az olvasók érdeklődését, de a távíró és a Morse kód feltalálása is nagymértékben hozzájárult a titkosírás-titkosítás további fejlődéséhez. Az első világháborúban több nemzet készített mechanikus kódoló gépet, ami lehetővé tette a szövegek gyors és könnyű titkosítását, bonyolult rejtjelezéssel is. A titkosírás története itt vesz egy kisebb fordulatot, a kódok „feltörésének” története felé.
A mechanikus eszközök használata előtt nem használtak bonyolult rejtjelezést, mivel nagyon sok időt vett volna igénybe a szövegek, üzenetek kódolása és természetesen dekódolása is. Ebből kifolyólag viszonylag rövid idő alatt meg lehetett fejteni ezeket a kódokat. A megfejtés sokkal nehezebbé vált a kódoló gépek idejében, és a második világháborúban már az volt a hozzá vezető „legrövidebb” út, ha egyszerűen ellopják az ellenség kódoló gépét. Az a tény, hogy a szövetségesek birtokába került egy német kódoló gép - amiről a németek nem tudtak - valószínűleg befolyásolta a háború végső kimenetelét.
Az üzenethez kapcsolódó személyek KÜLDŐ KAPÓ ILLEGÁLIS BETOLAKODÓ
Kriptográfia részei klasszikus kriptográfia Két része van: klasszikus kriptográfia nyilvános kulcsú kriptográfia Vegyes módon szokták alkalmazni a titkosítást és akkor tényleg nagyon nehéz megfejteni a titkosított szöveget.
Klasszikus kriptográfia ezek a régi korok titkosításai ismerjük a módszert, hogy hogyan titkosítanak, akkor meg tudjuk fejteni a titkosított szöveget fejtési módszere: statisztikai módszerek a titkos szöveg általában betűkből áll
Nyilvános kulcsú kriptográfia modern titkosítási technika ismerjük a módszert, a fejtés még nem működik, nagyon nehezen tudjuk megfejteni fejtési módszere: statisztikai módszerek nem működnek bitsorozatokból, esetleg számokból áll a titkos szöveg
Nem matematikai módszerekkel való fejthetőség Nemcsak olyan titkosítási módszerek vannak, amelyeket matematikai módszerekkel lehet megfejteni. Vannak más módszerek is: láthatatlan tinta (tej) írás kopasz fejre CODE BOOK: titkosítás királya, a küldőnek is és a kapónak is van egy könyve, amelyben benne van, hogy melyik szónak mi felel meg
Titkosított szöveg Ek(T) A szöveg útja Titkosított szöveg Ek(T) Kódolt szöveg Szöveg T kódolás titkosítás Fejtett szöveg Dk(Ek(T)) Szöveg T fejtés dekódolás
kódolás: a szövegből valamiképpen számot csinálunk titkosítás: Ek titkosítási technika (encrypt) fejtés: Dk fejtési technika (decrypt) dekódolás: ezzel az eljárással visszakapjuk az eredeti szöveget
A jó titkosítás ismérvei: A XVII. században fogalmazta meg F. Bacon a jó titkosítás ismérveit: könnyű legyen a titkosított szöveg előállítása a fejtő kulcs ismeretében a fejtés könnyű legyen „A fejtő kulcs hiányában a fejtés lehetetlen legyen.” a titkosított szöveg legyen ártatlan kinézetű
Mikor lehetséges a fejtés: ha elég hosszú titkosított szöveg áll rendelkezésünkre (T, Ek(T)) pár ismeretében ha legális kapónak tüntetjük fel magunkat
MONOALFABETIKUS RENDSZEREK Caesar féle titkosítás A kulcsot az ábécé betűinek egy másik ábécével való helyettesítésével képezték, amelyet a nyílt ábécéhez viszonyítva három betűvel eltoltak. Nyílt ábécé: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Rejtjel ábécé: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Példa a rejtjelezésre: BUDAPEST = EXGDSHVW JULIUS CAESAR = MXOLXV FDHVDU
Kulcsszavas Caesar titkosítás Kulcsszó: SOMA Nyílt ábécé: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Rejtjel ábécé: S O M A B C D E F G H I J K L N P Q R T U V W X Y Z Példa a rejtjelezésre: KRIPTOGRAFIA = HQFNTLDQSCFS DEBRECEN = ABOQBMBK
Polybios módszere Polübiosz a harmadik pun háború nagy római hadvezérének volt a tanácsadója.
Példa ITT ALUDT, AKI ELADOTT EGY UBORKAGYALUT. ITTHON CSÜCSÜLÖK. U Az ábécé betűit magánhangzó párokkal helyettesítjük, ezeket a párokat észrevétlenül elrejthetjük szavakban. ITT ALUDT, AKI ELADOTT EGY UBORKAGYALUT. ITTHON CSÜCSÜLÖK. U Gyűjtsük páronként össze a szöveg magánhangzóit.
Megoldás IA UA IE AO EU OA AU IO UU OU Az elrejtett üzenet: KÜLDJ PÉNZT.
Hill-módszer Választunk egy tetszőleges mátrixot: például Például a titkosítandó szó: TEVE „e” és „f ” az ábécé betűinek a sorszáma: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Titkos képe TEVE GHML
Legális fejtő Ismeri: Példa: Titkos szöveg: GOIC Fejtsük meg az eredeti üzenetet!
PÉLDA: Titkosítsuk a CICA szót, majd mint legális fejtő, fejtsük vissza a titkosított szöveget, ezzel visszakapjuk az eredeti szót. Titkos képe CICA GOIC
Legális fejtés Titkosított szöveg: GOIC Titkos képe GOIC CICA
Affin kriptorendszer Választunk: a, b-t Két kép akkor egyezik meg ha:
POLIALFABETIKUS MÓDSZEREK Playfair módszer Kódolandó szöveg: MINDEN NAP HETFO (ékezet nélkül) MI PK NA CO FO EA ND YO PH AR EN TO ET TN
Ha a két betű egy sorban van: jobbra csúszás NE OT Kódolt szöveg MINDEN NAP HETFO PKYOTOCOARTNEA Ha a két betű egy sorban van: jobbra csúszás NE OT Ha a két betű egy oszlopban van: lefelé csúszás LE FV
Kulcsszavas Playfair módszer A kulcsszóban ne legyen betűismétlés és legyen elég hosszú. Kódolt szöveg MINDEN NAP HETFO FTFKUFHKYSLIMF
Blaise de Vigenére (1523-1596)
MARSM ARSM ARS MARSM (oszlop) LENNI VAGY NEM LENNI (sor) Kulcsszó: MARS Titkosítandó szöveg: LENNI VAGY NEM LENNI MARSM ARSM ARS MARSM (oszlop) LENNI VAGY NEM LENNI (sor) L képe: L. sor M. eleme E képe: E. sor A. eleme XEEFUVRYKNVEXEEFU Kódolt szöveg
Autoclave Cardano A Vigenére táblázat segítségével: Titkosítandó szöveg: AKI MER AZ NYER Titkosító kulcs: CER UZA AK IMER A Vigenére táblázat segítségével: Titkosított szöveg: COZGDRAJVKII AKI MER AZ NYER COZGDRAJVKII Kódolt szöveg
NYILVÁNOS KULCSÚ RENDSZEREK Knapsack (hátizsák) módszer Merkle-Hellman-féle algoritmus A nyilvános kulcsú kriptorendszerben van sok nevekkel ellátott, nyitott lakat, amelyeknek kulcsa a tulajdonosuknál van, bezárás után csak ők tudják kinyitni. Üzenet küldésekor a megfelelő névvel ellátott lakatot kattintják rá az acéldobozra, és úgy küldik el. A fogadó saját kulcsával fogja kinyitni a dobozt, így nincs is szükség a kulcs elküldésére. Szükséges viszont a nyitott lakatok és kulcsaik megfelelő szétosztása. Nyilvános kulcsú rendszerek: Órarend Utazóügynök problémája Rendezéses probléma Pakolási probléma
Pakolási probléma: Adottak különböző nagyságú hátizsákok és apróságok Pakolási probléma: Adottak különböző nagyságú hátizsákok és apróságok. A hátizsákokba kell bepakolnunk úgy, hogy a lehető legkevesebb hátizsákot használjuk fel. súlyok, apróságok Az ai apróságokra, azaz a sorozatra teljesülnie kell, hogy A hátizsákba súlyú felszerelés fér.
Visszafejtés Nyilvános kulcsú hátizsákrendszerben pár a titkos kulcs, a pedig a nyilvános kulcs. Visszafejtés és Értékek meghatározása után az könnyű hátizsákfeladat megoldásával történik.
hátizsák feladat Adott: Keressük: amelyre igaz az Példa:
Feladat: készítsük el A KRIPTO szó titkosítását és visszafejtését egy (A,t,m,B) hátizsákrendszerrel. t-1=1061, mert 25236 1061 1 (mod 55207) A=(103, 107, 211, 430, 863, 1718, 3449, 6907, 13807, 27610) B=(4579, 50316, 24924, 30908, 27110, 17953, 32732, 16553, 22075, 53620) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Titkosítás: Fejtés: A 0000100000 27110 863 KR 0101110010 148362 16925 Nyílt szöveg Bináris kód A 0000100000 27110 863 KR 0101110010 148362 16925 IP 0100110000 95379 2688 TO 1010001111 154483 52087 Fejtés: X=(0,1,0,1,1,1,0,0,1,0)
RSA algoritmus 1978-ban javasolt R. Rivest, A. Shamir és L. Adleman egy másik nyilvános kulcsú algoritmust. Az algoritmus a szerzők neve alapján az RSA nevet kapta. Választunk véletlenszerűen két nagy p és q prímszámot. Ezek nagyságrendje legalább 100 decimális jegy. Kiszámítjuk: modulust, és Választunk véletlenszerűen egy e számot Keresünk egy olyan d számot, amelyre fennáll az p, q és számokra továbbá nincs szükségünk. és és
Titkosítás Nézzünk egy példát a titkosításra: Regina Rudolfnak akar üzenni, akkor kikeresi Rudolf nyilvános kulcsát: KP=(n,e). Az üzenetet blokkokra kell vágni úgy, hogy az eredményül kapott, egy blokknak megfelelő számok ne legyenek nagyobbak Rudolf n modulusánál. KP=d titkos kulcsot jól védett helyen kell tárolni. Titkosítsuk a TITOK szót. A kódolást az ASCII táblázat alapján végezzük el. Minden blokk egy betűből áll, és kódja nem haladja meg a modulusok értékét.
Regina titkosít Rudolf számára Rudolf visszafejt
Digitális aláírás Regina aláírja a TITOK szöveget. Ehhez először göngyölített XOR művelet segítségével kiszámítja az MD kivonatot.
nyilvános kulcs ismeretében Göngyölített XOR művelet eredménye. Az aláírást: érték adja. Az ellenőrzést: nyilvános kulcs ismeretében számítás adja. Az aláírás és a titkosítás egymástól független, így lehet küldeni titkosított és aláírt üzenetet is.
PRÍMTESZTEK Álprímek tesztelése Ha n prím, akkor Azt modjuk, hogy az n szám „a” alapú álprím, ha n összetett és ÁLPRÍM(n) if MODULÁRIS-HATVÁNYOZÓ(2,n-1,n) 1 (mod(n)) then return ÖSSZETETT Valóban! else return PRÍM Reméljük! Ez az eljárás csak egyféleképpen adhat hamis végeredményt. Ha azt hozza ki, hogy n összetett, akkor az állítás mindig helyes. Ha pedig azt állítja, hogy n prím, csak akkor hibázik, ha az n szám 2 alapú álprím.
A Miller-Rabin valószínűségi prímteszt TÉTEL: Legyen: n>2 és n páratlan, , ahol r páratlan. Ha vagy valamely esetén. TESZT: Ha nem igaz, akkor n összetett. Ha igaz, akkor szukcesszív gyökvonást végzünk.
Ha -től különböző értéket kapunk, akkor n nem prím. Ha +1-et kapunk, akkor folytatjuk a gyökvonást. Ha -1-et kapunk, akkor „a” tanúskodik n prímsége mellett. „a” tanúskodik n prímsége mellett
TANÚ Algoritmus TANÚ(a,n) 1 legyen az n-1 bináris alakja 2 d 1 3 for i k downto 0 4 do x d 5 d 6 if d=1 és x=1 és x=n-1 7 then return IGAZ 8 if 9 then d 10 if d=1 11 then return IGAZ 12 return HAMIS Az n-1 bináris reprezentációját határozza meg, amit arra használunk, hogy az a számot az n-1 hatványra emeljük. Kiszámítja a értékét. Amikor azonban az 5. sorban négyzetre emel, a 6-7. sorokban rögtön leellenőrzi, hogy nem jelent-e meg az 1-nek nem triviális négyzetgyöke modulo n. Ha igen, az algoritmus leáll, és IGAZ kijelentést ad. Akkor szolgáltatnak IGAZ kifejezést, ha a-1 mod n nem 1.
Ha a TANÚ algoritmus a 11. sorban az IGAZ eredményt adja, akkor azt fedezte fel, hogy Ha azonban n prím, akkor Fermat-tétele szerint minden elemre. Emiatt n nem lehet prím, és a bizonyíték erre. Ha a TANÚ algoritmus a 7. sorban ad IGAZ kijelzést, akkor pedig felfedezte, hogy x az 1-nek nem triviális négyzetgyöke modulo n, mivel ekkor ugyanakkor mégis teljesül. Ha n összetett, akkor lesz az 1-nek nem triviális négyzetgyöke modulo n. Így, ha x-ről belátjuk, hogy az 1-nek nem triviális négyzetgyöke modulo n, akkor ez bizonyíték arra, hogy n összetett.
MILLER-RABIN(n,s) 1 for j to s 2 do a VÉLETLEN(1,n-1) 3 if TANÚ(a,n) 4 then return ÖSSZETETT 5 return PRÍM A Miller-Rabin prímteszt valószínűségi kereséssel bizonyítja, hogy n összetett. A fő ciklus az 1. sorban kezdődik a halmazból véletlenszerűen kiválaszt s darab a értéket 2. sor. Ha a kiválasztott a számok valamelyike az n összetettségére tanú, akkor a MILLER-RABIN teszt ÖSSZETETT kijelzést ad a 4. sorban. Ez az eredmény mindig helyes, amit a TANÚ algoritmus szavatol. Ha az s darab szám egyike sem tanú, akkor a MILLER-RABIN teszt feltételezi, hogy ilyenkor egyáltalán nem is lehet tanút találni, ezért n prím. Tényleg. Majdnem biztosan.
FAKTORIZÁLÁS Fermat-féle faktorizáció Tegyük fel, hogy az n egész számot faktorizálni akarjuk, azaz fel akarjuk bontani prímek szorzatára. Fermat-féle faktorizáció Kölcsönösen egyértelmű megfeleltetés van az n szám alakú faktorizációja és az n szám alakú előállítása között. Ez akkor működik, ha a faktorizálásnál a és b „közel” van egymáshoz.
Példa: Faktorizáljuk: 200819 teljes négyzet
Módosított változat: Ha van közös prímtényező, az lesz a faktor. Ha nincsennek „közel” a faktorok egymáshoz. Ha van közös prímtényező, az lesz a faktor.
Példa: Faktorizáljuk: 141467 A LNKO meghatározása Euklideszi algoritmus alapján.
Pollard-féle heurisztikus módszer Legyen f egy tetszőleges függvény, amely előállítja maradékosztályoknak önmagára való leképezését. Például: Általában egy véletlen polinom. Tetszőlegesen „kicsi” pont. Iterációval előállítjuk a pontsorozatot. n db Az iterációval előállított pontok esetén teszteljük LNKO-t.
n=91 91 egyik faktora:7
POLLARD 1 lnko és 2 VÉLETLEN(0,n-1) 3 4 5 while IGAZ 6 do 7 8 9 if 10 then d kinyomtatása 11 if i=k 12 then 13 i értéke 1 lesz x1 pedig a Zn véletlenszerűen választott eleme lesz elmenti x1 értékét k értéke 2 lesz n osztóit keresi i értéke egyesével nő x1, x2, x3, x4... végtelen sorozat soron következő elemének kiszámítása lnko n egyik prímtényezőjét próbálja megtalálni, az y-ban tárolt értékeket és az xi aktuális értékét felhasználva, ha d az n nem triviális osztója, akkor kinyomtatja d értékét és A program elmenti a 2-hatvány indexű xi legújabb kiszámított értékeit az y változóba. Azaz az: x1, x2, x4, x8, x16,… számokat. k értéke megduplázódik, amikor y átíródik, k az 1,2,4,8,… értékeket veszi fel, és mindig az ennek megfelelő indexű xk számokat tárolja y-ban.
310 996 396 814 84 x7 177 120 x6 1186 529 339 x5 1194 595 1053 x4 63 x3 8 x2 3 x1 2
x7” 31 x4’ 11 x6” 18 6 x7’ 47 x5” 26 x6’ x3’ 8 x4” 63 x3” 8 x2’ 3 16 x5’ x2” 3 x1’ 2 x1” 2