diszkrét matematika 8. eloadás

28
Diszkr´ et matematika 8.el˝oad´ as M ´ ARTON Gy¨ ongyv´ er Sapientia Egyetem, M˝ uszaki ´ es Hum´ antudom´ anyok Tansz´ ek Marosv´ as´ arhely, Rom´ ania [email protected] 2017,˝oszif´ el´ ev M ´ ARTON Gy¨ ongyv´ er 2017, Diszkr´ et matematika

Upload: dangdung

Post on 09-Feb-2017

254 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Diszkrét matematika 8. eloadás

Diszkret matematika8. eloadas

MARTON Gyongyver

Sapientia Egyetem, Muszaki es Humantudomanyok TanszekMarosvasarhely, Romania

[email protected]

2017, oszi felev

MARTON Gyongyver 2017, Diszkret matematika

Page 2: Diszkrét matematika 8. eloadás

Mirol volt szo az elmult eloadason?

a base64 kodolas

szamelmelet: temakorok

prımszamok, alapfogalmak

prımtesztelo algoritmusok

MARTON Gyongyver 2017, Diszkret matematika

Page 3: Diszkrét matematika 8. eloadás

Mirol lesz szo?

Prımszamok, prımtesztelo algoritmusok

kongruenciak

modularis hatvanyozas

maradekosztalyok, maradekrendszerek

a kis Fermat-tetel

a kis-Fermat tetelen alapulo prımteszt

az Euler fuggveny, az Euler-tetel

az Euler fuggvenyhez kapcsolodo osszefuggesek

a Miller-Rabin prımteszt

MARTON Gyongyver 2017, Diszkret matematika

Page 4: Diszkrét matematika 8. eloadás

Kongruenciak

a szamelmelet alapjait kepezik, amelyet Gauss dolgozott ki, a 19.szazadban,

a · x ≡ b (mod m) tıpusu egyenletek megoldasabol indulunk ki, , ahol a(mod m), m-mel valo osztasi maradekot jelol,

megjelenik a mindennapi eletben: az orak (mod 12) vagy (mod 24)szerint, az ev (mod 7) szerint mukodik, stb.,

alkalmazasi terulet: prımtesztelo algoritmusok, adatbiztonsag, kodelmelet,

Legyen m egy pozitıv egesz szam. Azt mondjuk, hogy a kongruens b-velmodulo m szerint, ha m | (a− b). Ezt a ≡ b (mod m)-el jeloljuk.Ellenkezo esetben azt mondjuk, hogy a inkongruens b-vel modulo mszerint.

atalakıtva egyenlette: a ≡ b (mod m) akkor es csakis akkor, ha letezikegy k egesz szam, ugy hogy: a = b + km.

Peldak:

21 ≡ 3 (mod 9), mert 9∣∣(21− 3),

hasonloan: 4 ≡ −5 (mod 9) es 79 ≡ 7 (mod 9)14 6≡ 5 (mod 12), mert 12 6 |(14− 5) = 921 ≡ 3 (mod 9)⇒ 21 = 3 + 2 · 9

MARTON Gyongyver 2017, Diszkret matematika

Page 5: Diszkrét matematika 8. eloadás

Kongruenciak

Alaptulajdonsagok

reflexıv: ha a egy egesz szam, akkor a ≡ a (mod m),

szimmetrikus: ha a, b egesz szamok es a ≡ b (mod m), akkor b ≡ a(mod m),

tranzitıv: ha a, b, c egesz szamok es a ≡ b (mod m), b ≡ c (mod m),akkor a ≡ c (mod m),

Aritmetikai muveletekkel kapcsolatos tulajdonsagok: legyenek a, b, c,m egeszszamok, ahol m > 0 es a ≡ b (mod m). Ekkor fennallnak a kovetkezok:

a + c ≡ b + c (mod m),

a− c ≡ b − c (mod m),

a · c ≡ b · c (mod m),

Az osztas muveletere nem adhatunk analog tulajdonsagot.

MARTON Gyongyver 2017, Diszkret matematika

Page 6: Diszkrét matematika 8. eloadás

Kongruenciak

Az osztassal kapcsolatos tulajdonsag:

Legyenek a, b, c,m egesz szamok, ahol m > 0, d = lnko(c,m) esa · c ≡ b · c (mod m). Ekkor fennall: a ≡ b (mod m/d).

Peldak:

Legyen 14 ≡ 8 (mod 6)

A kongruenciat nem tudjuk vegigosztani 2-vel, mert nem igaz az,hogy 7 ≡ 4 (mod 6).A kongruenciat vegigtudjuk osztani ugy 2-vel, hogy osztjuk amodulust is 2-vel, mert igaz, hogy lnko(2, 6) = 2, azaz fennall:7 ≡ 4 (mod 3)

Legyen 42 ≡ 77 (mod 5)

A kongruenciat vegig tudjuk osztani 7-tel, ugy hogy osztjuk amodulust 1-el, mert igaz, hogy lnko(7, 5) = 1, azaz fennall: 6 ≡ 11(mod 5)

MARTON Gyongyver 2017, Diszkret matematika

Page 7: Diszkrét matematika 8. eloadás

Kongruenciak

Az osztassal kapcsolatos tulajdonsag:

Peldak:

Legyen 50 ≡ 20 (mod 15)

A kongruenciat nem tudjuk vegigosztani 10-zel, mert nem igaz az,hogy 5 ≡ 2 (mod 15).A kongruenciat vegig tudjuk osztani ugy 10-zel, hogy osztjuk amodulust is 5-tel, mert igaz, hogy lnko(10, 15) = 5, azaz fennall:5 ≡ 2 (mod 3)A kongruenciat vegig tudjuk osztani ugy 5-tel, hogy osztjuk amodulust is 5-tel, mert igaz, hogy lnko(5, 15) = 5, azaz fennall:10 ≡ 4 (mod 3)

MARTON Gyongyver 2017, Diszkret matematika

Page 8: Diszkrét matematika 8. eloadás

Kongruenciak

Tovabbi tulajdonsagok: legyenek a, b, c, d ,m egesz szamok, ahol m > 0, a ≡ b(mod m) es c ≡ d (mod m). Ekkor fennallnak a kovetkezok:

a + c ≡ b + d (mod m),

a− c ≡ b − d (mod m),

a · c ≡ b · d (mod m),

an ≡ bn (mod m), ahol n pozitıv egesz szam.

MARTON Gyongyver 2017, Diszkret matematika

Page 9: Diszkrét matematika 8. eloadás

Modularis hatvanyozas

Mindenegyes negyzetre emeles utan meghatarozzuk az osztasi maradekot esezzel az ertekkel dolgozunk tovabb.Hatarozzuk meg 343 (mod 100) erteket:

3 ≡ 3 (mod 100)32 ≡ 9 (mod 100)34 ≡ 81 (mod 100)38 ≡ 61 (mod 100)

316 ≡ 21 (mod 100)332 ≡ 41 (mod 100)

343 = 332 · 38 · 32 · 31 = 41 · 61 · 9 · 3 = 27 (mod 100)

MARTON Gyongyver 2017, Diszkret matematika

Page 10: Diszkrét matematika 8. eloadás

Modularis hatvanyozas

1. feladat

Hatarozzuk meg xn (mod m) erteket.

def modpow (x, n, m):

res = 1

while n != 0:

if n % 2 == 1: res = (res * x) % m

x = (x * x ) % m

n = n/2

return res

MARTON Gyongyver 2017, Diszkret matematika

Page 11: Diszkrét matematika 8. eloadás

Maradekosztalyok, maradekrendszerek

a (mod n) szerinti osztasi maradekok alapjan a szamokat kulonbozohalmazokba csoportosıthatjuk ⇒ (mod n) szerinti maradekosztalyok

(mod 5) szerint ot maradekosztalyt kulonboztetunk meg:

· · · ≡ −10 ≡ −5 ≡ 0 ≡ 5 ≡ 10 ≡ . . . (mod 5)· · · ≡ −9 ≡ −4 ≡ 1 ≡ 6 ≡ 11 ≡ . . . (mod 5)· · · ≡ −8 ≡ −3 ≡ 2 ≡ 7 ≡ 12 ≡ . . . (mod 5)· · · ≡ −7 ≡ −2 ≡ 3 ≡ 8 ≡ 13 ≡ . . . (mod 5)· · · ≡ −6 ≡ −1 ≡ 4 ≡ 9 ≡ 14 ≡ . . . (mod 5)

a-nak (mod m) szerint a legkisebb nem negatıv osztasi maradeka r , hafennall: a = q · n + r , ahol 0 ≤ r ≤ m − 1

teljes maradekrendszer: az a1, a2, . . . , am szamok teljes maradekrendszertalkotnak m szerint, ha paronkent inkongruensek (mod m) szerint

0, 1, 2, ...,m − 1 teljes maradekrendszert alkotnak (mod m) szerint,

0, 1, 2, 3, 4 teljes maradekrendszert alkotnak (mod 5) szerint

MARTON Gyongyver 2017, Diszkret matematika

Page 12: Diszkrét matematika 8. eloadás

Maradekosztalyok, maradekrendszerek

redukalt maradekrendszer: a teljes maradekrendszer azon ai elemeiamelyekre fennall: lnko(ai ,m) = 1.

Peldak

(mod 6) szerint 1, 5 redukalt maradekrendszert alkotnak,

(mod 6) szerint 0, 1, 2, 3, 4, 5 teljes maradekrendszert alkotnak,

MARTON Gyongyver 2017, Diszkret matematika

Page 13: Diszkrét matematika 8. eloadás

A kis Fermat-tetel

legjelentosebb szamelmeleti eredmeny

nem ugyanaz, mint a nagy Fermat-tetel (xn + yn = zn)

1. tetelHa x egy prımszam es a egy pozitıv egesz szam, ugy hogy 1 ≤ a ≤ x − 1, akkor

ax−1 ≡ 1 (mod x).

Pelda: legyen x = 11, a = 3, ekkor fennall: 310 = 59049 ≡ 1 (mod 11)

masfelol felırhatok a kovetkezok:

1 · a = 1 · 3 ≡ 3 (mod 11) 6 · a = 6 · 3 ≡ 7 (mod 11)2 · a = 2 · 3 ≡ 6 (mod 11) 7 · a = 7 · 3 ≡ 10 (mod 11)3 · a = 3 · 3 ≡ 9 (mod 11) 8 · a = 8 · 3 ≡ 2 (mod 11)4 · a = 4 · 3 ≡ 1 (mod 11) 9 · a = 9 · 3 ≡ 5 (mod 11)5 · a = 5 · 3 ≡ 4 (mod 11) 10 · a = 10 · 3 ≡ 8 (mod 11)

a fentiek alapjan hogyan bizonyıtjuk a tetelt?

MARTON Gyongyver 2017, Diszkret matematika

Page 14: Diszkrét matematika 8. eloadás

A kis Fermat-tetel

Ha egy x szamra nem teljesul a fenti feltetel, akkor az egyertelmuenosszetett szam.

Ha egy x szamra teljesul a fenti feltetel, akkor az nem egyertelmuenprımszam: vannak olyan osszetett szamok amelyekre letezik olyan a szam,hogy 1 ≤ a ≤ x − 1 es ax−1 ≡ 1 (mod x), ezeket a szamokat a alapuFermat-fele alprımeknek hıvjuk.

Pl. 2-es alapu Fermat-fele alprım: 341, mert 2340 ≡ 1 (mod 341),ugyanakkor 341 = 11 · 31.

Carmichael-szamok: olyan osszetett szamok amelyek eseteben, mindena-ra, ahol lnko(a, n) = 1 es 1 ≤ a ≤ x − 1 fennall ax−1 ≡ 1 (mod x).

A Fermat-tetel a Carmichael szamok miatt nem alkalmazhatoprımszam-tesztelo algoritmusban.

A legkisebb Carmichael-szam: 561 = 3 · 11 · 17.

A Carmichael-szamok szama vegtelen.

A kis-Fermat tetel az elso kiindulasi pont a veletlenszuen mukodoprımtesztelo algoritmusokhoz.

MARTON Gyongyver 2017, Diszkret matematika

Page 15: Diszkrét matematika 8. eloadás

A kis-Fermat tetelen alapulo prımteszt

2. feladat

Irjunk Python fuggvenyt, amely a kis-Fermat tetel alapjan vegzi a prımtesztelest.

Az algoritmus bemenete x, egy paratlan szam es egy t biztonsagi parameter. A tertekeben azt adjuk meg, hogy hany a szamot generaljon veletlenszeruen azalgoritmus. A kimenet True ha az x szam prımszam, figyelembe veve a tbiztonsagi parametert, vagy False, ha a szam osszetett.

A gcd legnagyobb kozos osztot szamol, a pow modularis hatvanyerteket szamol,beepıtett fuggvenyek.

from random import randint

from fractions import gcd

def fermatT(x, t):

for i in range(0, t):

a = randint(2, x - 1)

if gcd(a, x) != 1: return False

y = pow(a, x - 1, x)

if y != 1: return False

return True

MARTON Gyongyver 2017, Diszkret matematika

Page 16: Diszkrét matematika 8. eloadás

A kis-Fermat tetelen alapulo prımteszt

Mi lesz az eredmenye a kovetkezo fuggvenyhıvasoknak?

>>> fermatT(561, 20)

>>> fermatT(1615681, 20)

>>> fermatT(1909001, 20)

>>> fermatT(2508013, 10)

>>> fermatT(935794081, 20)

>>> fermatT(2489462641, 20)

Milyen szamok 561, 1615681, 1909001, 2508013, . . . ? ⇒ Charmichael szamok

561 = 3 · 11 · 171615681 = 23 · 199 · 3531909001 = 41 · 101 · 461

MARTON Gyongyver 2017, Diszkret matematika

Page 17: Diszkrét matematika 8. eloadás

Az Euler-tetel, az Euler-fuggveny

a Fermat-tetel altalanosıtasa,

a Fermat-tetel: adott hatvanyertek viselkedeserol ad informaciot egy prımmodulus szerint.

az Euler-tetel: adott hatvanyertek viselkedeserol ad informaciot egytetszoleges modulus szerint.

1. ertelmezesLegyen n pozitıv egesz szam, ekkor az Euler-fuggveny meghatarozza azokat apozitıv egesz szamokat, amelyek nem nagyobbak mint n es relatıv prımek n-nel.φ(n)-nel jeloljuk.

Pelda az Euler-fuggveny ertekeire, ha 1 ≤ n ≤ 12:

n 1 2 3 4 5 6 7 8 9 10 11 12

φ(n) 1 1 2 2 4 2 6 4 6 4 10 4

MARTON Gyongyver 2017, Diszkret matematika

Page 18: Diszkrét matematika 8. eloadás

Az Euler-tetel, az Euler-fuggveny

2. tetelHa m, a pozitıv egesz szamok, amelyekre lnko(a,m) = 1, akkor:

aφ(m) ≡ 1 (mod m).

Pelda: legyen m = 12, a = 5, ekkor fennall φ(12) = 4 es:

5φ(12) = 54 = 625 ≡ 1 (mod 12)

masfelol a 12-nel kisebb es 12-vel relatıv prımszamok a kovetkezoek: 1, 5,7, 11

felırhatok a kovetkezok:

1 · a = 1 · 5 ≡ 5 (mod 12)5 · a = 5 · 5 ≡ 1 (mod 12)7 · a = 7 · 5 ≡ 11 (mod 12)11 · a = 11 · 5 ≡ 7 (mod 12)

a fentiek alapjan hogyan bizonyıtjuk a tetelt?

MARTON Gyongyver 2017, Diszkret matematika

Page 19: Diszkrét matematika 8. eloadás

Az Euler fuggvenyhez kapcsolodo osszefuggesek

3. tetelHa p egy prımszam, akkor φ(p) = p − 1. A tetel fordıtottja is igaz, azaz, ha pegy pozitıv egesz szam, amelyre fennall, hogy φ(p) = p − 1, akkor p prımszam.

Peldaul: φ(61) = 60.

4. tetel

Ha p egy prımszam es a egy pozitıv egesz szam, akkor φ(pa) = pa − pa−1.

Peldaul: φ(256) = φ(28) = 28 − 27 = 128.

5. tetelHa a es b ket, egymassal relatıv prımszam, akkor φ(a · b) = φ(a) · φ(b).

Peldaul: φ(75) = φ(3 · 25) = φ(3) · φ(25) = 2 · (52 − 5) = 40.

MARTON Gyongyver 2017, Diszkret matematika

Page 20: Diszkrét matematika 8. eloadás

Az Euler fuggvenyhez kapcsolodo osszefuggesek

6. tetelHa x prımtenyezos felbontasa: x = pa1

1 · pa22 · ... · p

ann , akkor

φ(x) = x ·(

1− 1

p1

)·(

1− 1

p2

)· · · · ·

(1− 1

pn

)Kiindulopont a bizonyıtashoz, ha φ(x)− t felırjuk a kovetkezokeppen:

φ(x) = (pa11 − pa1−1

1 ) · (pa22 − pa2−1

2 ) . . . (pann − pan−1

n ).

Peldak:

φ(60) = (22 − 21) · (3− 1) · (5− 1) = 16, mert 60 = 22 · 3 · 5

φ(100) = 100 ·(

1− 1

2

)·(

1− 1

5

)= 40, mert 100 = 22 · 52

MARTON Gyongyver 2017, Diszkret matematika

Page 21: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

Az algoritmus kimenete olyan szamot ad, amely csak nagy valoszınuseggelprım,

az algoritmus gyakorlatban valo hasznalhatosaga a kovetkezo tetelenalapszik

7. tetelHa az x prımszam, akkor minden olyan a szam eseteben, ahol lnko(a, x) = 1,es x − 1 = 2s r , ahol r paratlan szam, fennall a kovetkezo ket osszefugges kozulvalamelyik

ar ≡ 1 (mod x),

∃j , 0 ≤ j ≤ s − 1 : a2j r ≡ x − 1 (mod x).

MARTON Gyongyver 2017, Diszkret matematika

Page 22: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

A bizonyıtas vazlata:

a kis Fermat tetel alapjan fennall: ax−1 ≡ 1 (mod x),

ez azt jelenti, hogy a kovetkezo szamsorozat utolso eleme ax−1 kongruens1-el,

fenn all az is, hogy a szamsorozat minden eleme (kezdve a masodikelemtol) egyenlo az elozo szam negyzetevel

ar , a2·r , a22·r , . . . a2s−1·r , a2s ·r

ket eset lehetseges:

a lista elso elem kongruens 1 modulo x , vagya lista elso, par eleme nem kongruens 1 modulo x , de amikornegyzetre emeljuk, akkor az eredmeny 1 lesz modulo x , azaz vanegy olyan b szam a listaban amelyre fenn all:

b 6≡ 1 (mod x) es b2 ≡ 1 (mod x).

Ez a helyzet csak ugy allhat elo ha b ≡ −1 (mod x)

MARTON Gyongyver 2017, Diszkret matematika

Page 23: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

Megallapıthato, hogy:

a tetel fordıtottja nem igaz, azaz ha fennall a ket osszefugges kozulvalamelyik abbol nem kovetkezik az hogy a szam prım, mert vannak olyanx osszetett szamok, melyekre ∃ a: 1 ≤ a ≤ x − 1, melyre fennall a fentiket osszefugges kozul valamelyik.

az x osszetett szam eseteben maximum φ(x)/4 az ilyen a szamok szama.

ha t = 10 veletlenszeruen generalt a szamra fennall a kriterium, akkor azx nagyon nagy valoszınuseggel prımszam.

a Miller-Rabin valoszınusegi prımteszt eseteben a bemenet az x ≥ 3paratlan szam es t ≥ 1 biztonsagi parameter. A kimenet True, ha az xszam prımszam figyelembe veve a t biztonsagi parametert; es False, haosszetett.

MARTON Gyongyver 2017, Diszkret matematika

Page 24: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

Pelda: legyen x = 61, t = 4, x − 1 = 22 · 15

a i Magyarazat

3 0 315 ≡ 60 (mod 61)

7 0 715 ≡ 11 (mod 61)

1 72·15 ≡ 60 (mod 61)

42 0 4215 ≡ 1 (mod 61)

24 0 2415 ≡ 11 (mod 61)

1 242·15 ≡ 60 (mod 61)→ nagyon nagy valoszınuseggel prım

MARTON Gyongyver 2017, Diszkret matematika

Page 25: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

Legyen x = 91, t = 4, x − 1 = 90 = 2 · 45

a i Magyarazat

16 0 1645 ≡ 1 (mod 91)→ valoszınuleg prım

75 0 7545 ≡ 90 (mod 91)→ valoszınuleg prım

13 0 1345 ≡ 13 (mod 61)→ biztosan osszetett

Megjegyzes: az algoritmus ebben az esetben nem kell t = 4 tesztet elvegezzen,mert a harmadik a ertek utan megallapıthato, hogy a szam osszetett.

MARTON Gyongyver 2017, Diszkret matematika

Page 26: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

3. feladat

Irjunk Python fuggvenyt, amely a 7. tetel alapjan vegzi a prımtesztelest. A bemenet x,egy paratlan szam es egy t biztonsagi parameter. A kimenet True ha az x szamprımszam, figyelembe veve a t biztonsagi parametert, vagy False, ha a szam osszetett.

from random import randint

def miller_rabinT(x, t):

s, r = 0, x - 1

while r % 2 == 0:

s, r = s + 1, r / 2

for i in range (0, t):

a = randint(2, x - 1)

y = pow(a, r, x)

if y == 1 or y == (x - 1): continue

for j in range (1, s):

y = (y * y) % x

if y == 1: return False

if y == x - 1: break

if y != (x - 1): return False

return True

MARTON Gyongyver 2017, Diszkret matematika

Page 27: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

Mi lesz az eredmenye a kovetkezo fuggvenyhıvasoknak?

>>> miller_rabinT(561, 20)

>>> miller_rabinT(1615681, 20)

>>> miller_rabinT(1909001, 20)

>>> miller_rabinT(2508013, 10)

>>> miller_rabinT(935794081, 20)

>>> miller_rabinT(2489462641, 20)

>>> miller_rabinT(12071477104822861216808586387918950333768935055030

80579133487559657569734020218239985458507248481664131696189240753969

6923442785951409526750132260151918419, 20)

>>> miller_rabinT(12071477104822861216808586387918950333768935055030

80579133487559657569734020218239985458507248481664131696189240753969

6923442785951409526750132260151918463, 20)

MARTON Gyongyver 2017, Diszkret matematika

Page 28: Diszkrét matematika 8. eloadás

A Miller-Rabin valoszınusegi prımteszt

4. feladat

A Miller-Rabin valoszınusegi prımteszt segıtsegevel generaljunk egy k bitesprımszamot, ahol k ≥ 128 bit. A generalt szamot alakıtsuk 256-os szamrendszerbe, akapott bajtszekvenciat pedig base64 formaban ırjuk ki egy allomanyba.

import base64, random

def primeGen(k, t):

nr = random.getrandbits(k)

if not (nr & 1): nr += 1

while True:

if miller_rabinT(nr, t): break

nr += 2

return nr

def primToB64(k):

nr = primeGen(k, 20)

m_str = conv_256(nr)

b64str = base64.b64encode(m_str)

primeWrite(’primeB64.txt’, b64str)

return nr

MARTON Gyongyver 2017, Diszkret matematika