Dicsőségtabló Beadós programozási feladatok

Hasonló dokumentumok
Dicsőségtabló Beadós programozási feladatok

Prímtesztelés, Nyilvános kulcsú titkosítás

megtalálásának hihetetlen nehéz voltán alapszik. Az eljárás matematikai alapja a kis FERMAT-tétel egy következménye:

XII. Bolyai Konferencia. Bodnár József Eötvös Collegium II. matematikus, ELTE TTK

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Modern titkosírások és a matematika

Dicsőségtabló Beadós programozási feladatok

2016, Diszkrét matematika

Diszkrét matematika I.

Az Informatika Elméleti Alapjai

Informatikai Rendszerek Alapjai

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

2018, Diszkre t matematika. 10. elo ada s

Sapientia Egyetem, Matematika-Informatika Tanszék.

PRÍMSZÁMOK ÉS A TITKOSÍRÁS

Információs társadalom alapismeretek

1. Egészítsük ki az alábbi Python függvényt úgy, hogy a függvény meghatározza, egy listába, az első n szám faktoriális értékét:

SZÁMÍTÁSOK A TÁBLÁZATBAN

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Microsoft Excel 2010

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Sapientia Egyetem, Matematika-Informatika Tanszék.

2018, Diszkre t matematika. 8. elo ada s

Minden egész szám osztója önmagának, azaz a a minden egész a-ra.

Számelméleti alapfogalmak

Infóka verseny. 1. Feladat. Számok 25 pont

Sapientia Egyetem, Műszaki és Humántudományok Tanszék.

Algoritmuselmélet 18. előadás

4. Előadás Titkosítás, RSA algoritmus

Data Security: Public key

XCZ állományok ellenőrzése, átadása elektronikus beküldésre és közvetlen beküldése parancssori funkcióval az ÁNYK programban

Diszkrét matematika 1. estis képzés. Komputeralgebra Tanszék ősz

SZÁMÍTÓGÉPES ADATFELDOLGOZÁS

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Az MS Excel táblázatkezelés modul részletes tematika listája

Fábián Zoltán Hálózatok elmélet

Az Informatika Elméleti Alapjai

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Titkosírás. Biztos, hogy titkos? Szabó István előadása. Az életben sok helyen használunk titkosítást (mobil, internet, jelszavak...

Programozás I gyakorlat

Alapok: Használd számológép helyett

Dr. Beinschróth József Kriptográfiai alkalmazások, rejtjelezések, digitális aláírás

Az Informatika Elméleti Alapjai

Excel Hivatkozások, függvények használata

Szimulációs technikák

Excel Hivatkozások, függvények használata

Komputeralgebra rendszerek

Komputeralgebra Rendszerek

SSL elemei. Az SSL illeszkedése az internet protokoll-architektúrájába

Algoritmuselmélet 12. előadás

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Komputeralgebra rendszerek

2016/11/27 08:42 1/11 Kriptográfia. Titkosítás rejtjelezés és adatrejtés. Rejtjelezés, sifrírozás angolosan: cipher, crypt.

1. feladat: A decimális kódokat az ASCII kódtábla alapján kódold vissza karakterekké és megkapod a megoldást! Kitől van az idézet?

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Algoritmuselmélet 7. előadás

Valószínűség-számítás, statisztika, titkosítási és rendezési algoritmusok szemléltetése számítógép segítségével Kiss Gábor, Őri István

Felhasználói kézikönyv a WEB EDInet rendszer használatához

Bevezetés az Excel 2010 használatába

4. Használati útmutatás

Kiegészítő előadás. Vizsgabemutató VBA. Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda. Széchenyi István Egyetem

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Tudnivalók az otthon kidolgozandó feladatokról

Backup Premium Rövid útmutató

EuroOffice Professzionális Vonalkód és QR kód generátor

3. ZH-ban a minimum pontszám 15

Informatikai Rendszerek Alapjai

Adatbiztonság PPZH május 20.

Sapientia Egyetem, Műszaki és Humántudományok Tanszék.

Prímszámok statisztikai analízise

5.1 Környezet Hálózati topológia

Az MS Word szövegszerkesztés modul részletes tematika listája

4. Fejezet : Az egész számok (integer) ábrázolása

Adatszerkezetek 2. Dr. Iványi Péter

Függőleges. Vízszintes

dr.xlsx A programról Szövegműveletekhez használható függvények

Első belépés az Office 365 rendszerbe

Egyesíthető prioritási sor

Táblázatkezelés (Excel)

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

Excel 2010 függvények

Excel VIII. Visual Basic programozás alapok 2. Vektorműveletek Visual Basic nyelven

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

IP alapú távközlés. Virtuális magánhálózatok (VPN)

Számelmélet (2017. február 8.) Bogya Norbert, Kátai-Urbán Kamilla

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Elektronikus aláírás. Gaidosch Tamás. Állami Számvevőszék

Készítette: Fuszenecker Róbert Konzulens: Dr. Tuzson Tibor, docens

CitiDirect BE SM Felhasználói útmutató

Shannon és Huffman kód konstrukció tetszőleges. véges test felett

Adat és Információvédelmi Mesteriskola 30 MB. Dr. Beinschróth József SAJÁTOS LOGIKAI VÉDELEM: A KRIPTOGRÁFIA ALKALMAZÁSA

RSA algoritmus. Smidla József. Rendszer- és Számítástudományi Tanszék Pannon Egyetem

Kezdő lépések. Céges . Tartalom

WS-Pro WPX38 MD+ PROGRAMOZÓI KÓDOK ÖSSZESÍTÉSE

Vizuális adatelemzés - Gyakorlat. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Megyei tervezést támogató alkalmazás

6. előadás Faktorizációs technikák közepes méretű osztókra

Bevezetés a kvantum informatikába és kommunikációba Féléves házi feladat (2013/2014. tavasz)

Átírás:

Dicsőségtabló Beadós programozási feladatok Hallgatói munkák 2017 2018

Pi számjegyeinek előállítása Készítő: Écsi Julius (MI, levelező, 2017) Elméleti háttér A π nevezetes konstans számjegyeinek előállítása már több ezer éve foglalkoztatja a tudósokat/kutatókat. A kézi számításokkal végigküzdött hosszú évszázadok után a számítógépes korszak hozott igazi áttörést ezen a területen. Az 1970-es évektől több új, direkt számítógépre optimalizált algoritmust is kifejlesztettek, amelyek gyors konvergenciát biztosítanak. Feltétlenül érdemes összehasonlítani az elkészült implementációk hatékonyságát is. Algoritmus Három nevezetes algoritmust implementálunk, ezek a következők: Machin módszere (1706 k.), a Chudnovsky testvérek algoritmusa (1990 k.) és a Bailey Borwein Plouffe algoritmus (1996 k.) Programozási környezet, fejlesztőeszközök Nyelv: Python 3.6 IDE: JetBrains PyCharm Mérésábrázolás: MS Excel 2016 2

Pi számjegyeinek előállítása Bailey Borwein Plouffe módszer Képlet Képlet implementációja Generáló eljárás Pontosság beállítása Generálás 3

Pi számjegyeinek előállítása Machin formula Képlet Képlet implementációja Generáló eljárás Pontosság beállítása Generálás Segédfüggvény Euler-féle arkusztangens a pontosabb számításért 4

Pi számjegyeinek előállítása Chudnovsky algoritmus Képlet Képlet implementációja Generáló eljárás Pontosság beállítása Generálás Segédfüggvény Newton-féle gyökszámítás a pontosabb számításért 5

Pi számjegyeinek előállítása Hatékonysági elemzés, összesítés Rendszerjellemzők Futási eredmények Sebességkülönbségek Jól látható a sebességnövekedés 6

Pi számjegyeinek előállítása Hatékonysági elemzés, összesítés/2. A Chudnovsky módszer futása (CPU és memória használat) 7

Számítástudomány Pi számjegyeinek előállítása A π 10000 jegyre 8

Eratoszthenész szitája Készítő: Maurer Márton (GI, nappali, 2017) Elméleti háttér A szita a neves ókori görög matematikus, Eratoszthenész módszere, amelynek segítségével egyszerű kizárásos algoritmussal meghatározhatjuk a prímszámokat 1 és n között Algoritmus Írjuk fel a számokat 1-től n-ig. Az 1-et már inicializáláskor kidobjuk, hiszen tudjuk róla, hogy nem prím, mivel Z-ben egység. A 2 az első szám, ami nincs lehúzva, ez lesz az első prím; az összes többszörösét húzzuk le a listáról Válasszuk ki a következő nem lehúzott számot (ez most a 3), ez lesz a következő prím. Ennek a számnak a többszöröseit is húzzuk le a listáról. Az előző lépés ismétlése, amíg a következő le nem húzott szám értéke kisebb mint Programozási környezet, jellemzők Java, NetBeans IDE 8.1 alatt GUI 9

Eratoszthenész szitája Futási idő, hatékonyság A futási idő alapvetően n nagyságától függ. (Tudjuk, hogy nagyobb n-ekre az eljárás már nem hatékony, ill. direkt módon nem is alkalmazható.) Minden egyes szitálás alatt végig kell nézni a teljes listát (O(n) maradékos osztás) A program felülete (részletek) Az n szám bekérése Végeredmény (n = 10000 esetén, a 2567 vizsgálata) 10

Eratoszthenész szitája A kód bemutatása 1. Szitál(int szám): lefuttatja a vizsgálatot a megadott szitáló szám -mal Akkor szitálja ki a vizsgált számot, ha az osztható maradék nélkül a szitáló számmal (azaz annak többszöröse) Fontos, hogy az éppen vizsgált szám ne úgy szitálódjon ki, mint a többszörösei (akkor a 1 szitálja ki, ami a prímszámot jelenti a programban) 11

Eratoszthenész szitája A kód bemutatása 2.: színek Egy táblázat (JTable) celláinak a módosításához felül kell definiálni az alapértelmezett cellákra vonatkozó Renderer utasítást. Ezek után már egyszerűen beállíthatjuk egy cella háttérszínét, ha tudjuk, hogy milyen színnel kell kitölteni (SzínVálasztó). 12

Eratoszthenész szitája A kód bemutatása 3.: színek (folyt.) SzínVálasztó(int szám): Kikeresi az szl listából a megadott számot és a hozzá tartozó színt Ha nem találjuk a listában a számot, akkor az utolsó színhez hozzárendeljük, majd egy új színt adunk a listához, aminek az RGB színkódját 0 és 255 közötti véletlenszámokból generáljuk 13

Eratoszthenész szitája A kód bemutatása 4.: színek (folyt.) A színekhez tartozó számok jelentése, és az alapértelmezett színek elhelyezkedése a listában Az első 11 prímszám mindig ugyanazt a színt kapja Szám 1 2 szám Jelentés Prímszám vagy nem kezelt szám A színhez nincs szám rendelve A szám szitálta ki 14

Eratoszthenész szitája A kód bemutatása 5.: a felhasználói interfész frissítése TáblaFrissít() a táblázat összes cellájának háttérszínét beállítja a megfelelő színre FeliratFrissít() a bal alsó sarokban található feliratokat frissíti (Lépésszám, Utolsó vizsgált elem) SzínFrissít() az utolsó használt színt megjeleníti a bal alsó sarokban Egyéb érdekesség, korlátok A program Integer adattípust használ a számok tárolásához. Ennek felső korlátját (2 147 483 647) nem léphetjük túl. Ez a korlát is csak elvi, mert ténylegesen csak jóval kevesebb számot lehet a memóriában elhelyezni (1 és n között minden számot tárolnunk kell) 15

Készítő: Maurer Márton (GI, nappali, 2017) Elméleti háttér Az Enigma üzenetek titkosítására és visszafejtésére használt, német gyártmányú, forgótárcsás, elektromechanikus berendezés A gép fő részei: billentyűzet, közös tengelyen forgó tárcsák, tárcsaléptető mechanizmus Az első változatok az 1920-as évek végén kerültek forgalomba, de a gép igazi nagy karrierje a II. világháború eseményeihez köthető A szövetségesek Alan Turing matematikus vezetésével, elektromechanikus számítógépekkel (pl. Turing-bomba) fel tudták törni a németek titkos üzeneteit (tengeralattjárók irányítása) Az Enigma szó a görög (αίνιγµα) szóból ered, amelynek jelentése: rejtély, rejtvény Az Enigma szimmetrikus kulcsú titkosítást használ; ennek hátránya, hogy mind az üzenetet kódolónak, mind a dekódolónak ismernie kell a titkos kulcsot A felhasznált külső képek forrása: Wikipedia (commons) 16

Algoritmus (szimuláció) Beállítjuk az Enigmát Választható a tárcsák száma, típusa, beállítása, ill. kapocstáblát is alkalmazhatunk (lásd később) Beírjuk a kódolandó/dekódolandó üzenetet A program betűnként (a tárcsák állásának megfelelően) kódolja/dekódolja az üzenetet, és hozzáfűzi az eredmény végéhez az új kódolt/dekódolt betűt Az Enigma belső működését később részletesen bemutatjuk Programozási környezet, jellemzők Java, NetBeans IDE 8.1 alatt GUI Futási idő, hatékonyság A futási idő függ a titkosítandó üzenet hosszától a tárcsák számától (hány elemen kell átküldeni egy betűt) a tárcsák típusától (forog/nem forog) 17

A program felülete (részletek) Tárcsák beállítása Betű illetve Szám (Enigma Z) állapotban 18

A program felülete (részletek) Titkosítás eredménye a HADITENGERESZET szóra (SLIMJMJKDCEWTVY) Dekódolás a SLIMJMJKDCEWTVY üzenetre (HADITENGERESZET) Tárcsák: V (X), BETA, V (G), III (O), I (A) Kapocstábla: alaphelyzet (nincs átkötés) 19

Az Enigma működése 1. (Az ábra kissé leegyszerűsített, a valóságban 26 lámpa és billentyű stb.) Ha a kezelő leüt egy billentyűt (2), akkor az akkumulátorból (1) elkezd folyni az áram, ami átfolyik a tárcsákon (5), megfordul (6) újra átfolyik a tárcsákon (5), ezek után egy lámpán (9) keresztül zárva az áramkört kódolja a karaktert A kapocstábla (7-8) segítségével a felhasználónak módja nyílik betűk kicserélésére (pl.: A-t Q-ra és Q-t A-ra). A karaktercsere végbemegy az üzenet kódolása előtt (3) és után (7-8) is. A kapocstábla használata növeli az üzenet titkosításának erősségét A német szárazföldi haderőnél három, a haditengerészetnél négy tárcsát alkalmaztak 20

Az Enigma működése 2. Tárcsák A leütések után a tárcsák elfordul(hat)nak, így az egyes betűk kódolása más és más lesz. Ezért nehéz az üzenet statisztikai módszerekkel való feltörése. Megj.: a haditengerészet által használt BETA és GAMMA tárcsák nem forognak. Ez is nehezítette a feltörést. Az ábrán látjuk, ahogy az áram átfolyik az egymás után kapcsolt tárcsákon és megfordul a fordítóban Az A betű két egymást követő leütésnél más és más betűt ad a példában először G-t, utána pedig C-t A két leütés között a jobb oldali tárcsa egyet már elfordult 21

Tárcsák felépítése Ezek vannak beépítve a programba 22

Fordítótárcsák felépítése Ezek vannak beépítve a programba 23

Kapocstábla A kapocstábla a gép elején, a billentyűzet alatt található Használatával 13 betűpár felcserélésére van lehetőség. A képen két betűpárt cseréltek fel: S-O és J-A. Az első években 6, később 5-8 átkötést használtak, de 1939-től mindig tízet 24

Példafutás az üzenet kódolásának (küldésének) lépései Példánkban a A haderő főparancsnokságának üzenetet kell kódolnunk a hónap 31. napján 1. Tárcsák kiválasztása Az adott napra vonatkozó kódkönyv-bejegyzést használjuk (minden napra megadták a megfelelő beállításokat az Enigmához). A Walzenlage oszlop tartalmazza a tárcsák típusazonosítóját. A kiválasztott tárcsák a III, a I és a IV (betű)tárcsa 2. Tárcsák beállítása A tárcsák beállítása a Ringstellung oszlopban található Minden betűt számokkal helyettesítettek, a szám a betű ábécében található helyét jelenti A betűk így: A (01), Q (17), V (22) 25

Példafutás (folyt.) 1 2. Tárcsák kiválasztása és beállítása 26

Példafutás (folyt.) 3. Kapocstábla beállítása A Steckerverbindungen oszlopaiban található a kapocstábla beállítása. A megadott betűpárokat kellett összekötni az Enigma elején. 27

Példafutás (folyt.) 4. Véletlen szó kitalálása (indikátor) Ennek indoka: ha a szövetségesek megszereznének egy kódkönyvet, akkor se lehessen egyértelműen feltörni a kódolt üzeneteket Ez minden üzenetnél (elvileg) más és más volt, így a kódolt üzeneteket (elvileg) sehogy sem lehetett összehasonlítani egy másik kódolt üzenettel (ez nehezítette a feltörést) A rejtjelező tisztek azonban nem feltétlenül tartották be ezt a szabályt, és gyakran ugyanazt a szót használták fel több üzenetnél Konkrét példánkban az EIN szót fogjuk használni, mivel 3 tárcsánk van 5. Véletlen szó kódolása Ennek indoka: a későbbiekben ezzel a szóval történik az üzenet tényleges kódolása Viszont mivel ez a szó minden üzenetnél más volt, ezért ezt közölni kellett a dekódolást végző tisztel is A szót kétszer kellett elküldeni, hogy az esetleges zavarok miatt bekövetkezett torzulást vissza lehessen állítani A gyakorlatban legalább háromszoros küldés lenne szükséges, hogy biztos lehessen a helyreállítás, de ezt a németek nem tartották biztonságosnak 28

Példafutás (folyt.) 5. Véletlenszerű szó kódolása Mivel a szavunk az EIN volt, ezért először az EINEIN szót fogjuk kódolni a beállított Enigmán Üzenetünk első fele: AVBYLV 29

Példafutás (folyt.) 6. A véletlenül választott szó beállítása a tárcsán Fontos, hogy semmi mást nem változtattunk az Enigmán A Kapocstábla és a tárcsák azonosítója változatlan 30

Példafutás (folyt.) 7. Tényleges üzenet kódolása Üzenetünk a A haderő főparancsnokságának. Ezt kell ténylegesen kódolni. Szabályok: a szóközöket és írásjeleket egy X betűvel, az ékezetes betűket pedig ékezetmentes párjukkal helyettesítjük Ezen felül még sok egyéb szabály is volt, de ezeket a példánkban most nem kell alkalmazni Így a kódolandó üzenet: axhaderoxfoparancsnoksaganak Eredmény: FLPOYSIWAOCHIACUFJZXLQMPWXFU 31

Példafutás (folyt.) A hét lépés utáni teljes kódolt üzenet: AVBYLV FLPO YSIW AOCH IACU FJZX LQMP WXFU Ezt az üzenetet kell(ett) továbbítani a másik félnek. Ezt leggyakrabban morze kóddal végezték el. Az üzenetet a könnyebb kezelés érdekében négyes csoportokba rendezték Képek: Enigma logó és Turing bomba (reprodukció) 32

Példafutás az üzenet dekódolásának (fogadásának) lépései A hónap 31. napján megérkezett hozzánk morze kóddal a következő rejtjelezett üzenet: AVBYLV FLPO YSIW AOCH IACU FJZX LQMP WXFU 1. Enigma beállítása Lépéseit a kódolásnál már taglaltuk, meg kell ismételni a fenti 1 3. pontokban leírtakat 33

Példafutás (folyt.) 2. Üzenet elejének dekódolása Az Üzemmódot át kell állítani Dekódolás-ra Az üzenetet a kitalált szóval kódoltuk, ezért simán az alapbeállításokkal dekódolva nem kapunk értelmes eredményt (zárójeles rész): EINEIN { ZVHRWKLXZVKVSBICALAZHOAJULGD } 34

Példafutás (folyt.) 2. Üzenet elejének dekódolása (folyt.) Eredmény (idáig): EINEIN {ZVHRWKLXZVKVSBICALAZHOAJULGD} Mivel a tényleges üzenetet a kitalált szóval kódoltuk, nyilvánvaló, hogy a lényegi üzenetet nem tudtuk még dekódolni Kollégánk csak a véletlenül kitalált szót kódolta ezzel a módszerrel (kétszer) Emiatt az üzenet első 6 betűje viszont tényleg dekódolva van (EINEIN) Látjuk, hogy az első 3, illetve a második 3 karakterből felépülő szó megegyezik 3. Véletlen szó beállítása az Enigmán Hasonlóan, mint a kódolásnál mutatott 6. lépésben 35

Példafutás (folyt.) 4. Üzenet dekódolása Az eddigiek ismertében már dekódolni tudjuk az üzenetet Fontos, hogy az első 6 karaktert nem szabad ilyenkor dekódolni, mert akkor a tárcsák nem lesznek megfelelő helyzetben és hibás eredményt kapunk Eredmény: AXHADEROXFOPARANCSNOKSAGANAK 36

Példafutás (folyt.) Az Enigmától kapott eredmény: EINEIN AXHADEROXFOPARANCSNOKSAGANAK A szabályok ismeretében vissza tudjuk nyerni az eredeti üzenetet AXHADEROXFOPARANCSNOKSAGANAK A HADERO FOPARANCSNOKSAGANAK A HADERŐ FŐPARANCSNOKSÁGÁNAK 37

A kód bemutatása 1. Kódolás(): feladata az üzenet betűinek kódolása A betűt szimbolizáló jel végigmegy az összes tárcsán, majd megfordul és visszafelé is végigmegy a tárcsákon. Az így kapott betű lesz az eredmény. Lásd: Enigma működése slide-ok Minden egyes betűkódolás után legalább egy tárcsa elfordul (Forgatás(i);) 38

A kód bemutatása 2. DeKódolás(): feladata az üzenet dekódolása Hasonlóan a kódoláshoz, itt is szükség van oda-fordulás-vissza lépések lejátszásához Itt is szükséges minden betű dekódolása után forgatni a tárcsákat Kódolás(String betű): visszaadja, hogy a tárcsa milyen betűvé kódolja a megadott karaktert Dekódolás(String betű): megadja, hogy melyik betű kódolása esetén kapnánk az argumentumban megadott karaktert 39

A kód bemutatása 3. Fordítás(int i): a tárcsákat kódoló listájában található betűket kell forgatnia minden kódolt betű után Az első tárcsa minden karakter után fordul(t) egyet. A többi (kettős léptetés nincs lekódolva) mindig csak akkor fordul(t) ha az előtte lévő körbeér(t). Emiatt az 5 tárcsás betű-enigma minden 26 5 (11 881 376) karakter után ugyanúgy kódol. Mivel az üzenetek általában csak néhány száz betűből álltak, ugyanaz a tárcsaállás egy üzeneten belül kétszer nem fordulhatott elő. 40

A kód bemutatása 4. Forgatás(String betű): a megadott betűre forgatja a tárcsa kódoló listáját A lenti táblázat az I betűtárcsa A és B állását mutatja 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 A állás E K M F L G D Q V Z N T O W Y H X U S P A I B R C J B állás K M F L G D Q V Z N T O W Y H X U S P A I B R C J E 41

Az Enigma kód biztonságossága Egy kódolás biztonságosságát alapvetően a köv. tényezők határozzák meg: A teljes kulcstér mérete Az erős rész nagysága a teljes kulcstéren belül Van-e (számottevő) esély az emberi hibák megjelenésére Egy öt tárcsás Enigma esetén a teljes kulcstér mérete: 250 11 881 376 150 738 274 937 250 4,4775 10 23 Első tényező: tárcsák kiválasztása, 2. tényező ( 26 5 ): tárcsák helyzete + ábécégyűrűknek a tárcsákhoz viszonyított helyzete, 3. tényező: kapocstábla-átkötések (10 átkötéssel) A kód erejét azonban többféle tényező gyengíti, pl. a kapocstábla helyzete, ami az üzenet végéig fix (monoalfabetikus rejtjel) Más hasonló tényezők szintén gyengítik a kódot, végül az erős kódrész csak néhány millióra zsugorodik vissza Ez ugyan kézi módon még mindig lényegében feltörhetetlen lenne, de már a II. vh. idején átvizsgálható volt elektromechanikai (gépi) módszerekkel 42

Carmichael számok Készítő: Lukácsi Róbert (GI, levelező, 2016) Elméleti háttér A Carmichael-féle számok olyan erős pszeudoprímek, amelyek szinte mindig becsapják a Fermat-tesztet. Konkrétan, csak azok a b alapok buktatják le őket, amikor b n. Felderítésük elméleti és gyakorlati szempontból is fontos. A legkisebb ilyen szám az 561 = 3 11 17. Algoritmus A matematikai meghatározás alapján Programozási környezet, jellemzők Java, NetBeans IDE 8.1 alatt GUI Futási idő, hatékonyság A vizsgált tartományban (kb. 2 bájtos egészek) barátságos futási teljesítmény Egyéb érdekes tapasztalatok BigInteger adattípus (beépítve), hatékonyan támogatja a nagypontosságú aritmetikát Néhány további adattípus-jellegzetességet később kiemelten bemutatunk 43

Carmichael számok A program felülete, futási kép és eredmény (részlet) Szemléltetésként minden n-hez relatív prím alapot kiírunk 44

Carmichael számok A kód lényegi része

Carmichael számok A BigInteger osztály néhány használt metódusa.isprobableprime(valószínűség) egy BigInteger típusú számról eldönti (nagy valószínűséggel), hogy prímszám-e (tdk. prímjelölt-teszt) A valószínűség átadási értékként változtatható.nextprobableprime() megadja az adott BigInteger utáni következő prímet (prímjelöltet).modpow(,) moduláris hatványozás, kiszámítja az a b (mod c) értéket ( okos algoritmus a háttérben, a közbülső lépéseknél is mod c dolgozik).gcd() két BigInteger típusú szám lnko-ját számítja ki.add(),.substract(),.multiply(),.divide() matematikai +,, * és / műveletek BigInteger típusú számokra.compareto(),.equals() két BigInteger típusú szám megfelelő összehasonlítása (<, =, <> stb.) Egyéb érdekes BigInteger sajátosság BigInteger.ZERO, BigInteger.ONE stb. konstansok létrehozhatók, ezzel kiváltva a folyamatos.valueof() kiértékelést 46

Carmichael számok A BigInteger osztály két figyelemre méltó gyári eljárása.multiply(): látható, hogy az implementációban a Karacuba szorzómódszert (is) használják.passesmillerrabin(,): prímteszt eljárások hívják meg 47