Sapientia Egyetem, Műszaki és Humántudományok Tanszék. mgyongyi@ms.sapientia.ro



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

Sapientia Egyetem, Matematika-Informatika Tanszék.

Sapientia Egyetem, Matematika-Informatika Tanszék.

Sapientia Egyetem, Matematika-Informatika Tanszék.

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

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

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:

2016, Diszkrét matematika

2017, Diszkrét matematika

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

Sapientia Egyetem, Matematika-Informatika Tanszék.

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

Diszkrét matematika I.

2016, Diszkrét matematika

Data Security: Public key

2018, Diszkre t matematika. 10. elo ada s

2018, Diszkre t matematika. 8. elo ada s

Kriptográfia I. Kriptorendszerek

2016, Diszkrét matematika

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

Sapientia Egyetem, Matematika-Informatika Tanszék.

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

Titkosítási rendszerek CCA-biztonsága

Számelméleti alapfogalmak

Webalkalmazás-biztonság. Kriptográfiai alapok

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

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

Diszkrét matematika 2.

Emlékeztet! matematikából

Kriptográfiai alapfogalmak

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

Információs társadalom alapismeretek

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

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,...

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

Diszkrét matematika I.

Best of Criptography Slides

2018, Diszkrét matematika

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

2018, Diszkrét matematika

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:

Windows biztonsági problémák

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

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

Nemzeti Közszolgálati Egyetem. Vezető-és Továbbképzési Intézet. Bérczes Attila Pethő Attila. Kriptográfia

2018, Funkcionális programozás

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

2018, Diszkrét matematika

Titkosítás NetWare környezetben

Elektronikus aláírás és titkosítás beállítása MS Outlook 2010 levelezőben

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Módszerek és eszközök a kriptográfia oktatásakor

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

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

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

Modern titkosírások és a matematika

2018, Diszkrét matematika

Hírek kriptográfiai algoritmusok biztonságáról

Következik, hogy B-nek minden prímosztója 4k + 1 alakú, de akkor B maga is 4k + 1 alakú, s ez ellentmondás.

Biztonságos kulcscsere-protokollok

2018, Funkcionális programozás

Waldhauser Tamás december 1.

IT BIZTONSÁGTECHNIKA. Tanúsítványok. Nagy-Löki Balázs MCP, MCSA, MCSE, MCTS, MCITP. Készítette:

Hatványozás. A hatványozás azonosságai

Adatbiztonság. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Adatbiztonság / 22

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

Diszkrét matematika I.

Bevezetés az algebrába az egész számok 2

KR TITKOSÍTÓ PROGRAM. Felhasználói leírás. v március 12.

Adatok titkosítása. Hálózatok biztonsága. IV. mérési utasítás SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

BASH SCRIPT SHELL JEGYZETEK

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

A házifeladatban alkalmazandó XML struktúra

Számítógépes Számelmélet

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

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Éves továbbképzés az elektronikus információs rendszer biztonságáért felelős személy számára

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A C programozási nyelv I. Bevezetés

Tanúsítványkérelem készítése, tanúsítvány telepítése Microsoft Internet Information szerveren

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Mintafeladat az RSA algoritmus szemléltetésére

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

CAS implementálása MPEG-2 TS-alapú

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

1. Alapok. Programozás II

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

Számelmélet. 4. Igazolja, hogy ha hat egész szám összege páratlan, akkor e számok szorzata páros!

SzA XIII. gyakorlat, december. 3/5.

Programozás I. 5. Előadás: Függvények

MÁRTON GYÖNGYVÉR KRIPTOGRÁFIAI ALAPISMERETEK

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

A C programozási nyelv I. Bevezetés

Programozási alapismeretek 1. előadás

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

Az Outlook levelező program beállítása tanúsítványok használatához

Informatika terméktervezőknek

Átírás:

Kriptográfia és Információbiztonság 5. előadás Sapientia Egyetem, Műszaki és Humántudományok Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2015

Miről volt szó az elmúlt előadáson? AES (Advanced Encryption Standard) kör-kulcs generálás, titkosítás, visszafejtés, implementáció.

Miről lesz szó? A Crypto++ könyvtárcsomag Az NTL könyvtárcsomag Nagyszámok kezelése C# Nagyszámok kezelése Java Nyilvános-kulcsú, aszimmetrikus (public-key, asymmetric cryptography) rendszerek: alapfogalmak, követelmények, matematikai modell. Az RSA titkosító rendszer: specifikáció, példa, helyesség, A Fermat-féle faktorizációs módszer

A Crypto++ könyvtárcsomag Kriptográfiai sémák, a NIST által elfogadott standard implementációkkal, http://www.cryptopp.com/\#download letöltés, kicsomagolás, projekt létrehozás, build-elés statikus, dinamikus könyvtárak létrehozása, a statikus könyvtár a cryptest solution build-elésekor jön létre, a \cryptopp\win32\output\debug mappába: cryptlib.lib,

A Crypto++ könyvtárcsomag Beálĺıtások: Project/Properties/Configuration Properties/C/C++/Code generation/runtime Library Multi-threaded Debug (/MTd)-ra álĺıtani, Project/Properties/Configuration Properties/C/C++/General/ \cryptopp, a cryptlib.lib-et hozzáadni a projekthez, az alkalmazás elejére beírni: #define CRYPTOPP DEFAULT NO DLL #include "dll.h"

Nagy számok kezelése, C++ Victor Shoup: NTL könyvtárcsomag, a statikus könyvtár létrehozása töltsük le és csomagoljuk ki a, pl. a WinNTL mappába: http://www.shoup.net/ntl/download.html hozzunk létre egy új projektet: New Project Win32 ConsoleApplication, adjunk egy nevet a projektnek, legyen ez NTLLib, jelöljük be a Static library opciót. ne legyen bejelölve a Precompiled header opció, a Source Files-hoz az Add Existing Item menüpont segítségével adjuk hozzá a WinNTL\src mappából az összes állományt, a Project/NTLLib/Properties menüpontnál az Additional Include Directories-nél adjuk meg a header állományok elérési útvonalát:... \WinNTL\include a Build\Bulid\Solution parancs megadásával létrejön a NTLLib\Debug mappában a statikus könyvtár.

Az NTL könyvtárcsomag, használat Hozzunk létre egy új projektet: New Project Win32 Console Application, adjunk egy nevet a projektnek, legyen ez Labor6, jelöljük be a Empty project opciót. a Labor6 project-hez az Add Existing Item menüpont segítségével adjuk hozzá az NTLLib Debug mappából a létrehozott statikus könyvtárat, a Project/NTLLib/Properties menüpontnál az Additional Include Directories-nél adjuk meg a header állományok elérési útvonalát:...\winntl\include.

Az NTL könyvtárcsomag, használat a forráskódba: #ifndef _ZZ_ #define _ZZ_ #include <NTL/ZZ.h> #endif NTL_CLIENT ZZ a nagy számok kezelésére szolgáló típus, to_zz string átalakítása ZZ típusá, InvMod multiplikatív inverz meghatározása, XGCD kiterjesztett Euklideszi algoritmus, PowerMod moduláris hatványozás, ZZFromBytes, BytesFromZZ, byte szekvenciából készít ZZ típusú nagyszámot, és fordítva, log logaritmus meghatározása.

Nagy számok kezelése, Java import java.math.biginteger; változó deklarálás: BigInteger n = new BigInteger("101020229"); logaritmus számítás: ln moduláris hatványozás: modpow multiplikatív inverz: modinverse...

Nagy számok kezelése, C# using System.Numerics; változó deklarálás: BigInteger p = 0, q = 0; BigInteger number1 = BigInteger.Parse("7458753872387"); logaritmus számítás: BigInteger.Log(), hatványozás: BigInteger.Pow(), moduláris hatványozás: BigInteger.ModPow(),...

A nyilvános-kulcsú rendszerek, alapfogalmak A titkosítás és visszafejtés nem ugyanazzal a kulccsal történik: van egy titkos-kulcs és van egy nyilvános-kulcs, nem helyettesíti a szimmetrikus kriptográfiát, a rendszerek biztonsága matematikai problémákon alapszanak; az alapműveletek nem a helyettesítés és permutáció, alkalmas bizalmas információcserére és hitelesítésre, illetve mindkettőre; kulcscsere és digitális aláírás protokollokban használják.

A nyilvános-kulcsú rendszerek, követelmények Hatékony algoritmussal lehessen meghatározni a rendszerben használt kulcspárt: a nyilvános és titkos-kulcsot, a nyilvános-kulcs ismeretében, hatékony algoritmussal lehessen meghatározni az üzenet rejtjelezett értékét, a titkos-kulcs ismeretében, hatékony algoritmussal lehessen visszafejteni a rejtjelezett üzenetet, a nyilvános-kulcs ismeretében ne lehessen hatékonyan meghatározni a titkos-kulcsot, a nyilvános-kulcs és rejtjelezett-szöveg ismeretében ne lehessen hatékonyan meghatározni az üzenetet, ne lehessen következtetni annak tartalmára. Kevés olyan rendszert sikerült kidolgozni, amely eleget tesz a fenti követelményeknek (kudarcos próbálkozások: a hátizsák feladaton alapuló titkosító rendszer).

A legismertebb publikus-kulcsú rendszerek RSA (Rivest-Shamir-Adleman), biztonsága azon alapszik, hogy nehéz meghatározni valamely összetett szám prímosztóit, Diffie-Hellman kulcscsere, biztonsága a diszkrét logaritmus probléma nehézségén alapszik, ElGamal titkosító, a Diffie-Hellman kulcscserével áll szoros kapcsolatban, elliptikus görbén alapuló kriptográfia.

A titkos-kulcsú rendszerek matematikai modellje jelölés: SKE, ahol a (K, M, C) halmaz-hármas felett értelmezünk 3 algoritmust: Gen, a kulcs-generáló algoritmus, polinom idejű, véletlenszerű: key R Gen(1 k ), ahol key K, k Z 0 a rendszer biztonsági paramétere (legtöbb esetben a generált kulcs bit-hossza), Enc key a rejtjelező algoritmus, polinom idejű, véletlenszerű: c R Enc key (m), a Dec key a visszafejtő algoritmus, polinom idejű, determinisztikus: m Dec key (c). Helyesség: Dec key (Enc key (m)) = m, minden m M esetében.

A nyilvános-kulcsú rendszerek matematikai modellje jelölés: PKE, ahol a (K, M, C) halmaz-hármas felett értelmezünk 3 algoritmus: Gen, a kulcs-generáló algoritmus, polinom idejű, véletlenszerű: (pk, sk) R Gen(1 k ), ahol (pk, sk) K K, k Z 0 a rendszer biztonsági paramétere, Enc pk a rejtjelező algoritmus, polinom idejű, véletlenszerű: c R Enc pk (m), a Dec sk a visszafejtő algoritmus, polinom idejű, determinisztikus: m Dec sk (c). Helyesség: Dec sk (Enc pk (m)) = m, minden m M esetében.

Az RSA titkosító rendszer, kulcsgenerálás Bemenet: a k biztonsági paraméter. Kimenet: a pk = (n, e) nyilvános-kulcs és az sk = d titkos-kulcs. rsakeygen (k) p = primszam(k); q = primszam(k); n = p * q; phi = (p-1) * (q-1); e = rand(phi); d = inverz(e, pi); return n, e, d;

Az RSA titkosító rendszer, kulcsgenerálás a primszam(k) algoritmus generál egy k bit hosszúságú prímszámot, erre leggyakrabban a Miller-Rabin algoritmust használják, lásd később, a jelenlegi standard a k = 1024 értéket ajánlja, amely kb. 308 decimális számjegyet jelent, a rand(phi) algoritmus egy véletlen számot generál, ahol phi az Euler féle függvény, a következő tulajdonsággal 1 < e < phi, gcd(e, phi) = 1. az inverz(e, phi) algoritmus meghatározza d-t a következő tulajdonsággal: e d = 1 (mod phi), erre a kiterjesztett Euklideszi algoritmust kell használni, nem működik az Affinnál és Hillnél használt, összes lehetséges érték kipróbálásának, módszere.

Példa, kulcsgenerálás p, q két prímszám: Legyen p = 3877, q = 1867. Meghatározzuk: n = 3877 1867 = 7 238 359, phi = (p 1) (q 1) = 3876 1866 = 7 232 616. Legyen e = 65 537, ahol gcd(65 537, phi) = 1. Meghatározzuk e inverzét (mod phi) szerint, kapjuk: d = 1 332 809, mert 65 537 1 332 809 = 1 (mod 7 232 616). A nyilvános-kulcs : (65 537, 7 238 359). A titkos-kulcs : (1 332 809).

Az RSA titkosító rendszer, titkosítás Bemenet: az üzenet, mint egy m egész szám a [0,..., n 1] intervallumból, az e, n nyilvános-kulcs. Kimenet: a c titkosított szám rsaencrypt (m, e, n) c = modpow(m, e, n); return c; Az üzenetet(byte-szekvenciát, vagy szöveget) át kell alakítani számmá, lásd később. A modpow(m, e, n) algoritmus meghatározza az m e (mod n) értéket.

Az RSA titkosító rendszer, visszafejtés Bemenet: a c titkosított szám, d titkos-kulcs. Kimenet: az m visszafejtett érték. rsadecrypt (c, d, n) m = modpow(c, d, n); return m; Az m értéket vissza kell alakítani byte szekvenciává, szöveggé, lásd később. A modpow(c, d, n) algoritmus meghatározza a c d (mod n) értéket.

Az RSA titkosító rendszer, helyesség e d = 1 (mod phi) létezik x, egész szám, úgy hogy feltéve hogy: gcd(m, p) = 1 hasonlóan: e d = 1 + x phi. m p 1 = 1 (mod p) m 1+x (p 1) (q 1) = m (mod p) m e d = m (mod p). m e d = m (mod q) m e d = m (mod n).

Példa, titkosítás Legyen az üzenet MATHEMATICIAN, és a kulcsok a kulcsgenerálásnál megadott értékek. Feltélezzük, hogy az alkalmazott ábécé az angol ábécé 26 nagybetűje. A szokásos módon hozzárendeljük a karakterekhez a számkódokat: 12 0 19 7 4 12 0 19 8 2 8 0 13, a karaktersorozatot 26-os számrendszerbeli számnak fogjuk tekinteni, a számokat átírjuk 26 l számrendszerbe, ahol l = log 26 n és n = 7 238 359 l = 4, 4-es csoportokat formálunk, és 26 4 számrendszerben a következő számjegyeket kapjuk: 135 888 334 260 5468 13, mert

Példa, titkosítás 135 888 = 7 26 3 + 19 26 2 + 0 26 1 + 12 26 0 334 260 = 19 26 3 + 0 26 2 + 12 26 1 + 4 26 0 5468 = 0 26 3 + 8 26 2 + 2 26 1 + 8 26 0 13 = 0 26 3 + 0 26 2 + 0 26 1 + 13 26 0. mindegyik számjegyet titkosítjuk a nyilvános-kulccsal: (65 537, 7 238 359), az eredmény: 1 754 108 6 489 950 362 358 5 018 067, a kapott számokat 26 l+1 = 26 5 -beli számoknak tekintjük és átírjuk 26-os számrendszerbe, 5-ös csoportokat formáltunk, az eredmény: 18 21 20 21 3 12 13 6 5 14 22 0 16 20 0 15 4 13 25 10, ahol

Példa, titkosítás 1 754 108 = 3 26 4 + 21 26 3 + 20 26 2 + 21 26 1 + 18 26 0 6 489 950 = 14 26 4 + 5 26 3 + 6 26 2 + 13 26 1 + 12 26 0 362 358 = 0 26 4 + 20 26 3 + 16 26 2 + 0 26 1 + 22 26 0 5 018 067 = 10 26 4 + 25 26 3 + 13 26 2 + 4 26 1 + 15 26 0. A titkosított karaktersorozat: SVUVDMNGFOWAQUAPENZK.

Példa, visszafejtés a titkosított számkód-sorozat: 18 21 20 21 3 12 13 6 5 14 22 0 16 20 0 15 4 13 25 10. a számkódokat átírjuk 26 5 -es számrendszerbe. Az eredmény: 1 754 108 6 489 950 362 358 5 018 067. Mindegyik számra külön alkalmazzuk a titkos-kulcsot: (1 332 809) c 1 754 108 6 489 950 362 358 5 018 067 c 1 332 809 (mod 7 238 359) 135 888 334 260 5468 13 a kapott számokat átírjuk 26-os számrendszerbe, megkapva a visszafejtett számkód-sorozatot: behelyettesítve: MATHEMATICIAN. 12 0 19 7 4 12 0 19 8 2 8 0 13.

Az RSA titkosító rendszer Ha a titkosítást bájtok felett végezzük, akkor a bájtokat 256-os számrendszerbeli számoknak tekintjük egyszerre l bájtot dolgozunk fel, úgy hogy a számokat átírjuk 256 l számrendszerbe, ahol l = log 256 n, majd a kapott nagy számot hatványozzuk, hatványozás után, a kapott értéket 256 l+1 -os számrendszerbeli számnak tekintjük, amelyet átalakítunk 256-os számrendszerbe, kapunk l + 1 bájtot. Visszafejtéskor fordítva járunk el, l + 1 bájtot dolgozunk fel egyszerre, amiből l bájtot kapunk vissza.

Faktorizációhoz kapcsolódó problémák osztási próba módszere (trial division), Fermat-féle faktorizációs módszer, Pollard ρ féle faktorizációs módszer... Az osztási próba módszere: vizsgáljuk a kis prímekkel való oszthatóságot, ha két azonos nagyságrendű prímszám szorzata a vizsgált n összetett szám, akkora közeĺıtőleg n osztást kell kipróbálnunk a sikeres faktorizáláshoz, akkor használjuk, mikor egy összetett szám kis nagyságrendű prímosztóit kell megkeresni.

Fermat-féle faktorizációs módszer Ha a p és a q prímek közel vannak egymáshoz, akkor az n faktorizálása lehetséges a Fermat-féle faktorizációs módszerrel. Feltételezzük, hogy az n = a 2 b 2, ahol a, b tetszőleges egész számok. Ekkor p = a b, q = a + b. Az algoritmus a következő: fermatfaktor(n) a = ceil(sqrt(n)); b1 = a * a - n; while (negyzetsz(b1) == 0) do a = a + 1; b1 = a * a - n; return (a + sqrt(b1)); A negyzetsz függvény megvizsgálja, hogy a paraméterként kapott szám négyzetszám-e, 0-t térít vissza, ha a paramétere nem négyzetszám.

Fermat-féle faktorizáció, példa Határozzuk meg n = 6283 két prímosztóját, a Fermat-féle faktorizációs módszerrel: n a b = a 2 n négyzetszám-e? 80 80 117 nem 81 278 nem 82 441 igen 441 = 21 p = 82 21 = 61, q = 82 + 21 = 103