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
Top Related