diszkrét matematika 8. eloadás
TRANSCRIPT
Diszkret matematika8. eloadas
MARTON Gyongyver
Sapientia Egyetem, Muszaki es Humantudomanyok TanszekMarosvasarhely, Romania
2017, oszi felev
MARTON Gyongyver 2017, Diszkret matematika
Mirol volt szo az elmult eloadason?
a base64 kodolas
szamelmelet: temakorok
prımszamok, alapfogalmak
prımtesztelo algoritmusok
MARTON Gyongyver 2017, Diszkret matematika
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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