diszkrét matematika 12. eloadásmgyongyi/diszkretmat/12... · 2020. 12. 15. · diszkrét...

35

Upload: others

Post on 20-Mar-2021

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diszkrét matematika12. el®adás

MÁRTON Gyöngyvé[email protected]

Sapientia Egyetem,Matematika-Informatika TanszékMarosvásárhely, Románia

2020, ®szi félév

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 2: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Mir®l volt szó az elmúlt el®adáson?

a diszkrét logaritmus, algoritmusok

a brute-force algoritmusBaby-step Giant-step, Shanks algoritmusa

a számelmélet alaptétele

összetett számok faktorizációja:

a Fermat féle faktorizációa Pollard ρ féle faktorizáció

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 3: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Mir®l lesz szó?

a kínai maradéktétel

az RSA és a kínai maradéktétel

diofantoszi egyenletek

ál-véletlenszám generátorok (pseudo-random number generators):

a lineáris kongruencián alapuló generátora Python véletlenszám generátoraa közép-négyzet módszer (middle-square)a Blum-Blum-Shub generátor

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 4: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A kínai maradéktétel

Feladat: Ha egy tojásokkal teli kosárból kivesszük a tojásokat 2, 3, 4, 5, majd 6-osával, akkor rendre 1, 2, 3, 4, 5 tojás marad mindig a kosárban. Ha 7-esévelvesszük ki nem marad egy tojás sem. Hány tojás van a kosárban?

A feladat az alábbi kongruencia-rendszerrel modellezhet®:

x ≡ 1 (mod 2)x ≡ 2 (mod 3)x ≡ 3 (mod 4)x ≡ 4 (mod 5)x ≡ 5 (mod 6)x ≡ 0 (mod 7)

Mi a fenti rendszer megoldása?

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 5: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A kínai maradéktétel

1. tétel

Legyenek m1,m2, ...,mr pozitív, páronként relatív prímek. Ekkor az

x ≡ a1 (mod m1)x ≡ a2 (mod m2)...x ≡ ar (mod mr )

kongruencia-rendszernek M = m1 ·m2 · ... ·mr modulus szerint egy megoldásavan.

A megoldás meghatározásának menete:

meghatározzuk: Mk = M/mk = m1 ·m2 · ... ·mk−1 ·mk+1 · ... ·mr ,

meghatározzuk az Mk értékek inverzét (mod mk) szerint, jelöljük ezeketMk -val,

x = a1 ·M1 · M1 + a2 ·M2 · M2 + ...+ ar ·Mr · Mr lesz a rendszermegoldása.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 6: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A kínai maradéktétel

A tojásos feladat az alábbi kongruencia-rendszerre vezethet® vissza:

x ≡ 4 (mod 5)x ≡ 11 (mod 12)x ≡ 0 (mod 7)

mert

az x ≡ 3 (mod 4) egyenlet megoldásai kielégítik az x ≡ 1 (mod 2)egyenlet megoldásait,

az x ≡ 5 (mod 6) egyenlet megoldásai kielégítik az x ≡ 2 (mod 3)egyenlet megoldásait,

az x ≡ 11 (mod 12) egyenlet megoldásai kielégítik az x ≡ 3 (mod 4) ésx ≡ 5 (mod 6) egyenletek megoldásait.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 7: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A kínai maradéktétel

A megoldás menete:

a1 = 4, a2 = 11, a3 = 0,

m1 = 5,m2 = 12,m3 = 7,

M = 420,M1 = 84,M2 = 35,M3 = 60,

M1 = 4, M2 = 11, M3 = 2,

vegyük észre, hogy fennáll:

M1 · M1 = 1 (mod m1)

M2 · M2 = 1 (mod m2)

M3 · M3 = 1 (mod m3)

84 · 4 = 1 (mod 5)35 · 11 = 1 (mod 12)60 · 2 = 1 (mod 7)

x = 4 · 84 · 4+ 11 · 35 · 11+ 0 · 60 · 2 = 119 (mod 420).

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 8: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A kínai maradéktétel, ha 2 egyenlet van

Oldjuk meg a következ® egyenletrendszert:

x ≡ 6 (mod 10)x ≡ 8 (mod 13)

A megoldás menete:

M = 130,M1 = 13,M2 = 10,

M1 = 7, M2 = 4,

vegyük észre, hogy fennáll:

M1 · M1 = 1 (mod m1) : 13 · 7 = 1 (mod 10)

M2 · M2 = 1 (mod m2) : 10 · 4 = 1 (mod 13)

x = 13 · 7 · 6+ 10 · 4 · 8 = 86 (mod 130).

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 9: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

RSA, a kínai maradéktétel

a kínai maradéktétel alkalmazható az RSA-nál, a visszafejtési folyamatgyorsítható vele, ekkor 2 egyenletet kell megoldani

az n nagyságrendjével megegyez® d hatványkitev® helyett elvégzünk kétkisebb hatványkitev®vel való hatványozást

fennáll a következ® két összefüggés:

p prímszám, d ≡ dp (mod p − 1) ⇔ cd ≡ cdp (mod p)q prímszám, d ≡ dq (mod q − 1) ⇔ cd ≡ cdq (mod q)

a következ® egyenletrendszert kell megoldanunk a kínai maradéktételsegítségével:

x ≡ cdp (mod p)x ≡ cdq (mod q)

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 10: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

RSA, a kínai maradéktétel

meghatározzuk dp, dq,Mq,Mp értékeket a következ® módon:

dp = d mod(p-1)dq = d mod(q-1)Mq = inverz(q, p)Mp = inverz(p, q)

a cd (mod n) értéket megadja az x értéke, ahol

x = (Mq · q · xp +Mp · p · xq) (mod n)xp = cdp (mod p)xq = cdq (mod q).

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 11: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Az RSA, a kínai maradéktétel

1. feladat

Az alábbi Python függvény a korábban megadott RSA_fel függvényben, a visszafejt®RSA_decrypt függvény helyett a RSA_decrypt_ függvényt hívja meg, paraméterkéntmeg kell neki adni a p, q értékeket.

def RSA_fel():

k = int(input('bit meret: '))

e, d, n, p, q = RSA_key_gen(k)

print ('nyilvanos kulcs: ', e, n)

print ('titkos kulcs: ', d, n)

print ('titkos adatok: ', p, q)

print('kerek egy szamot, kisebb legyen, mint ', n)

K = int(input())

cK = RSA_crypt(K, e, n)

print ('titkositott ertek: ', cK)

K = RSA_decrypt_(cK, d, n, p, q)

print ('visszafejtett ertek: ', K)

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 12: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Az RSA, a kínai maradéktétel

2. feladat

A visszafejt® RSA_decrypt_ függvény

def RSA_decrypt_(cK, d, n, p, q):

dp = d % (p-1)

dq = d % (q-1)

Mq = inverz(q, p)

Mp = inverz(p, q)

cKp = pow(cK, dp, p)

cKq = pow(cK, dq, q)

K = (Mq * q * cKp + Mp * p * cKq) % n

return K

A RSA_key_gen és RSA_crypt függvényeket, a 10. el®adásban írtuk meg.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 13: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

egész együtthatós többismeretlenes algebrai egyenletek, amelyeknekmegoldásai egész számok (ritkán természetes vagy racionális számok),

elnevezése Diophantosz (3. század), görög matematikus után,

csak els®fokú, kétismeretlenes diofantoszi egyenletekkel fogunkfoglalkozni: a · x +m · y = b

2. tétel

Legyenek a,m egész számok, úgy hogy d = lnko(a,m). Az a · x +m · y = begyenletnek nincs megoldása az egész számok körében, ha d nem osztja b-t.Ha d | b, akkor az egyenletnek végtelen sok megoldása van:

x = x0 + (m/d) · n, y = y0 − (a/d) · n,

ahol n egész szám és x0, y0 az egyenlet egy partikuláris megoldása

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 14: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

a partikuláris megoldás meghatározásához, kiterjesztett Eukleidészialgoritmussal meghatározzuk a x , y , d-t, azaz fennáll: a · x +m · y = d ,

ekkor: x0 = x · (b/d), y0 = y · (b/d),a pozitív megoldások meghatározásához a következ®képpen járunk el:

x0 +m

d· n ≥ 0 ⇒ n ≥ −x0

md

y0 −a

d· n ≥ 0 ⇒ n ≤ y0

ad

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 15: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek, példa

Egy elárusító 1676 ron értékben rendelt almát és körtét. Minden láda alma 36ronba, és minden láda körte 50 ronba kerül. Hány láda almát és hány ládakörtét rendelhetett?

1. megoldás: 16 láda almát és 22 láda körtét rendelt,16 · 36+ 22 · 50 = 1676.

2. megoldás: 41 láda almát és 4 láda körtét rendelt,41 · 36+ 4 · 50 = 1676.

A megoldás menete:

az 36 · x + 50 · y = 1676 diofantoszi egyenlet pozitív megoldásait keressük.

meghatározzuk a = 36, m = 50 legnagyobb közös osztóját: d = 2.

megvizsgáljuk, hogy d = 2 osztja-e 1676-ot.

a kiterjesztett eukleidészi algoritmussal meghatározzuk: x = 7, y = −5értékeket, azaz fennáll 7 · 36+ (−5) · 50 = 2.

megszorozzuk x , illetve y -tb

d=

1676

2= 838-cal.

egy partikuláris megoldás x0 = 5866, y0 = −4190, ekkor fennáll:5866 · 36− 4190 · 50 = 1676

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 16: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

Keressük a pozitív megoldásokat, fenn kell álljon:

5866+50

d· n = 5866+ 25 · n ≥ 0 ⇒ n ≥ −234.64

−4190− 36

d· n = −4190− 18 · n ≥ 0 ⇒ n ≤ −232.7

⇒ n = −234x1 = 5866+ 25 · (−234) = 16y1 = −4190− 18 · (−234) = 22

⇒ n = −233x2 = 5866+ 25 · (−233) = 41y2 = −4190− 18 · (−233) = 4

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 17: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek, példa

Egy elárusító 549 ron értékben rendelt almát és körtét. Minden láda alma 18ronba, és minden láda körte 33 ronba kerül. Mennyi az a minimális ládaszámamit az elárusító rendelhetett?

Megoldások:25 láda alma és 3 láda körte, összesen 28 láda14 láda alma és 9 láda körte, összesen 23 láda3 láda alma és 15 láda körte, összesen 18 láda

Az elárusító 18 láda gyümölcsöt rendelt.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 18: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

A megoldás menete:

Meghatározzuk 18 és 33 legnagyobb közös osztóját: d = 3.

Megvizsgáljuk, hogy d = 3 osztja-e 549-et.

A kiterjesztett eukleidészi algoritmussal meghatározzuk: x = 2, y = −1értékeket: 2 · 18+ (−1) · 33 = 3.

Megszorozzuk x , illetve y ,549

d= 183-mal.

Egy partikuláris megoldás x0 = 366, y0 = −183.Keressük a pozitív megoldásokat, fenn kell álljon:

366+33

d· n = 366+ 11 · n ≥ 0 ⇒ n ≥ −33.2

−183− 18

d· n = −183− 6 · n ≥ 0 ⇒ n ≤ −30.5

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 19: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

⇒ n = −33x1 = 366+ 11 · (−33) = 3y1 = −183− 6 · (−33) = 15

⇒ n = −32x2 = 366+ 11 · (−32) = 14y2 = −183− 6 · (−32) = 9

⇒ n = −31x3 = 366+ 11 · (−31) = 25y3 = −183− 6 · (−31) = 3

A minimumot az x1 = 3, y1 = 15 megoldás adja, ami összesen 18 ládát jelent.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 20: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diofantoszi egyenletek

3. feladat

Határozzuk meg egy egy kétismeretlenes diofantikus egyenlet pozitívmegoldásait.

def diofant (a, m, b): >>> diofant(36, 50, 1676)

(d, xk, yk) = extEuclid (a, m) ...

if b % d != 0:

print ('nincs megoldas')

return

x0 = xk * b//d

y0 = yk * b//d

bd = m//d

ad = a//d

n1 = int (ceil(-x0 / bd))

n2 = int (floor(y0 / ad))

if n1 <= n2:

print('megoldasok:')

for i in range(n1, n2 + 1):

print (x0 + bd * i, y0 - ad * i)

else: print('nincs pozitiv megoldas')

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 21: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Ál-véletlenszám generátorok (pseudo-random numbergenerators)

a lineáris kongruencián alapuló generátor

a Python véletlenszám generátora

a közép-négyzet módszer (middle-square)

a Blum-Blum-Shub generátor

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 22: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A lineáris kongruencián alapuló generátor

álvéletlen számokat generál, nagyon gyors, kis memória igény¶,

jó statisztikai viselkedés jellemzi ⇒ olyankor alkalmazzák, amikor nemkövetelmény a rendszerek biztonsága

az alkalmazott matematikai összefüggés:

zi+1 = (a · zi + b) (mod m), ahol 1 ≤ a, b ≤ m − 1, és m ≥ 2, ahol

az m -modulus, az a -szorzó, a b -növekedési-érték, és z0 -kezdeti érték(seed) konstans értékek, kiválasztásuk a generátor használhatóságát ismeghatározza.

Példa, legyen a = 1, b = 7,m = 10, z0 = 3, ekkor

az alkalmazott képlet: zi+1 = (zi + 7) (mod 10), z0 = 3a generált számsorozat: 0 7 4 1 8 5 2 9 6 3 0 7 4 1...

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 23: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A lineáris kongruencián alapuló generátor

4. feladat

Határozzuk meg z0 = 3,m = 10, a = 1, b = 7 bemenetek esetén, a lineáriskongruencián alapuló generátor által generált els® 15 értéket.

from time import time

def pLinGen(z0):

m, a, b = 10, 1, 7

if z0 != None:

z1 = z0

else: z1 = int(time())

z1 = (z1 * a + b ) % m

return z1

def main(seed = None):

for i in range(15):

seed = pLinGen(seed)

print(seed, end = ' ')

>>> main(3)

0 7 4 1 8 5 2 9 6 3 0 7 4 1 8

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 24: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A lineáris kongruencián alapuló generátor

a generátor periódusa akkor és csakis akkor lesz maximális, ha:

a és b relatív prímek,a− 1 osztható m minden prímosztójával,a− 1 és m is 4 valamely többszöröse.

tipikus értékek:

m a b

ANSI C 231 1103515245 12345C/C++ 231 214013 2531011Java 248 25214903917 11

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 25: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A lineáris kongruencián alapuló generátor

5. feladat

Határozzuk meg az AnsiC-nél használt bemeneti paraméterek esetében a generátoráltal generált els® értéket, különböz® kezdeti z0 értékekre.

def randAnsiC(z0 = None):

m = (1 << 31)

a = 1103515245

b = 12345

return pLinGen(m, a, b, z0)

>>> randAnsiC()

1796272615

>>> randAnsiC()

2140508564

>>> randAnsiC(1796272615)

2140508564

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 26: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Python véletlenszám generátora

Mersenne Twister-nek (megbízhatatlan Mersenne) hívják. A periódusa219937 − 1 és 53-bites valós számot állít el®. A háttérben lev®matematika: lineáris algebra, véges testek, bináris testek elmélete

a Mersenne Twister algoritmust 1997-ben publikálta, Takuji Nishimura,Makoto Matsumoto két japán kutató

a generátor periódusa egy Mersenne prím

Mersenne prímek: a 2n − 1 alakú prímszámok, pl.:

3 = 22 − 1, 7 = 23 − 1, 31 = 25 − 1, 127 = 27 − 1

csak prím n esetében lesz 2n − 1 prímszám,ha n összetett, akkor 2n − 1 is összetett,ha n prímszám, akkor 2n − 1 lehet összetett is, és prímszám is,

Mersenne számok: 2n − 1 alakú számok, ahol n prím, és 2n − 1 lehetprím, vagy összetett, pl.:2047 = 211 − 1 = 23 · 89; 8388607 = 223 − 1 = 47 · 178481a Python kód elérhet® a wikipédián: link

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 27: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A közép-négyzet módszer (middle-square)

Neumann János módszere:

a kezdeti seed egy n számjegy¶ szám

ezt a számot négyzetre emeljük, szükség esetén kiegészítjük balrólnullásokkal

a véletlenszer¶en generált szám a középs® számjegyekb®l képezett nszámjegy¶ szám lesz

Legyen a seed = 9809802 = 0960400 6046042 = 0364816 6486482 = 0419904 1991992 = 39601 9609602 = 0921600 216⇒ 216

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 28: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A közép-négyzet módszer (middle-square)

6. feladat

Megadott r kezd®érték esetén határozzuk meg a közép-négyet módszer általgenerált n-ik értéket. Vizsgáljuk a módszer periódusát is.

def midSqr(r, n):

k = len(str(r))

for i in range(n):

x = str( r * r)

y = (len(x) - k) // 2

r = int( x [y: y + k])

print(r, end = ' ')

def midSqrP(r):

k = len(str(r))

L = []

while len(L) == len(set(L)):

x = str( r * r)

y = (len(x) - k) // 2

r = int (x [y: y + k])

L += [r]

return L

>>> midSqrP(8193)

[1252, 5675, 2056, 2271, 1574, 4774, 7910, 5681, 2737, 4911, 1179,

3900, 2100, 4100, 8100, 6100, 2100]

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 29: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

alkalmas kriptográ�ai rendszerekben, biztonságát a faktorizációs éskvadratikus maradék feltételezés adja

nagy számításigény¶, ezért csak nagy biztonságot követel® rendszereknélalkalmazzák

a moduláris négyzetreemelés az alkalmazott függvény, ahol akövetkez®képpen hozza létre a (b1, b2, . . . bn) bitsorozatot az algoritmus:

bi = ui (mod 2) és ui = u2i−1 (mod N), ahol

u0 a generátor egy kezdeti értéke, amelyet a következ®képpen

választunk ki: u0 = r2 (mod N), ahol rR←− {2, 3, . . . ,N − 1} és

lnko(r ,N) = 1N = P ·Q és P, Q prímek, úgy hogy P = 2 · p + 1, Q = 2 · q + 1 ésp, q is prímek

a generált P,Q értékek tehát biztonságos prímek (safe prime)

a generált prímekre fennáll: P ≡ Q ≡ 3 (mod 4), ezeket még Blumegészeknek is hívják.

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 30: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

Példa

legyen P = 23,Q = 59 két biztonságos prím, N = 1357

legyen u0 = 9

ui = u2i−1 (mod N), bi = ui%2

i ui bi1 81 12 1133 13 1324 04 1089 15 1260 06 1267 17 1315 18 407 1

A generált bitsorozat: 1, 1, 0, 1, 0, 1, 1, 1

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 31: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

7. feladat

Generáljunk l darab bitet a Blum-Blum-Shub generátorral, ahol az alkalmazott Nlegyen egy k bites szám.

def bbs(k, l):

P = safePrime (k//2)

Q = safePrime (k//2)

N = P * Q

r = randint(2, N)

u = (r*r) % N

for i in range(0, l):

u = (u * u) % N

print (u % 2, end = ' ')

>>> bbs(64, 16)

0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 1

def safePrime(k):q = getrandbits(k)if not (q & 1): q += 1while True:

p = 2 * q + 1if miller_rabinT(q, 10) and miller_rabinT(p, 10):

return pq = getrandbits(k)if not (q & 1): q += 1

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 32: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

A BBS generátor biztonsága, akkor megfelel®, ha N legalább 1024 bites. Ahatékonyság növelése érdekében, ha N = 1024, akkor egyszerre 8 bitet, azaz 1bájtot is lekérhetünk, a u % 256 vagy u & 255 m¶veletet alkalmazva.

8. feladat

Írjunk egy Python programot, amely menüpontokból, a következ®ket teszilehet®vé:

a BBS generátorhoz szükséges P,Q prímszámok generálása, illetvebase64-es alakjuknak, állományba való, mentése

a BBS generátorhoz szükséges P,Q prímszámok állományból valókiolvasása

tetsz®leges hosszúságú számsorozat generálása, BBS módszerrel

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 33: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

def bbs256(P, Q, l):

N = P * Q

r = randint(2, N)

u = (r*r) % N

for i in range(0, l):

u = (u * u) % N

print (u & 255, end = ' ')

def myDecode(mStr):

nr = 0

for elem in mStr:

nr = (nr << 8) + elem

return nr

def myEncode(nr):

bL = []

while nr > 0:

bL = [nr & 255] + bL

nr = nr >> 8

return bL

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 34: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

def primeRead(nev):

f = open(nev, 'rt')

temp = f.read()

f.close()

b64P, b64Q = temp.split('\n')

P = myDecode(b64decode(b64P.encode()))

Q = myDecode(b64decode(b64Q.encode()))

return P, Q

def primeWrite(k, nev):

P = safePrime (k//2)

Q = safePrime (k//2)

b64P = b64encode(bytes(myEncode(P)))

b64Q = b64encode(bytes(myEncode(Q)))

f = open(nev, 'wb')

f.write(b64P + b'\n' + b64Q)

f.close()

print('P: ', P, '\nQ: ', Q)

return P, Q

MÁRTON Gyöngyvér 2020, Diszkrét matematika

Page 35: Diszkrét matematika 12. eloadásmgyongyi/DiszkretMat/12... · 2020. 12. 15. · Diszkrét matematika 12. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A Blum-Blum-Shub generátor

from base64 import b64decode, b64encodedef main():

P, Q = None, Nonewhile True:

x = input('''0- Kilépés1- prímszám generálás/fileba írás2- prímszám beolvasás3- BBS generátor''')

if x == '0': breakif x == '1':

nev = input('az állomány neve: ')k = int(input('a primek bitmérete: '))P, Q = primeWrite(k, nev)

if x == '2':nev = input ('az állomány neve: ')P, Q = primeRead(nev)

if x == '3':if P == None or Q == None:

print('nincs prim')continue

print('P: ', P, '\nQ: ', Q)l = int(input('a számsorozat hossza: '))print('a veletlen számsorozat: ')bbs256(P, Q, l)

MÁRTON Gyöngyvér 2020, Diszkrét matematika