Kriptográfia 2 Aszimmetrikus megoldások Emlékeztet matematikából Euklidész algoritmus - legnagyobb közös osztó meghatározása INPUT Int a>b0; OUTPUT gcd(a,b). 1. if b=0 return(a); 2. return(gcd(b,a mod b)). ab a=bq+r gcd(a,b)=gcd(b,a mod b) #include <stdio.h> #include <stdlib.h> int gcd(int a,int b){ printf("a=%d,b=%d\n",a,b); if(b==0) return a; return gcd(b,a%b); } int main(int argc, char *argv[]){ int a,b; if(argc<2){ printf("usage: gcd1 a b\n"); return 1; } a=atoi(argv[1]);b=atoi(argv[2]); printf("gcd(%d,%d)=%d\n",a,b,gcd(a,b)); return 0; } 2
Emlékeztet matematikából (folyt.) Kiterjesztett Euklidész algoritmus a + b("q1 ) = r1 aq2 + b("q1q2 ) = r1q2 a = bq1 + r1 b = r1q2 + r2 r1 = r2q3 + r3... # a("q2 ) + b(1" q1q2 ) = r2 a$i + bµi = ri a$k"1 + bµk"1 = rk"1 = gcd(a,b) rk"3 = rk"2qk"1 + rk"1 rk"2 = rk"1qk + rk 3 Emlékeztet matematikából (folyt.) Kiterjesztett Euklidész algoritmus (folyt.) #include <stdio.h> #include <stdlib.h> INPUT Int a>b0; OUTPUT ",# hogy a"+b#=gcd(a,b). 1. i$0,r-1$a,r0$b; "-1$1,#-1$0,"0$0,#0$1; 2. while (ri=a"i+b#i%0) do q$ri-1 ri; "i+1$"i-1-q"i,#i+1$#i-1-q#i; i$i+1; 3. return(("i-1,#i-1)). int main(int argc, char *argv[]){ int a,b; int rp,r; int lp,l,ln,mp,m,mn; int q; if(argc<2){ printf("usage: gcd2 a b\n"); return 1; } a=atoi(argv[1]);b=atoi(argv[2]); rp=a;r=b; lp=1;mp=0;l=0;m=1; while((r=a*l+b*m)=0){ q=rp/r; ln=lp-q*l;mn=mp-q*m; lp=l;l=ln;mp=m;m=mn;rp=r; } printf("l=%d,m=%d\n",lp,mp); printf("gcd(%d,%d)=%d\n",a,b,lp*a+mp*b); return 0; } 4
Emlékeztet matematikából (folyt.) Moduló m'veletek (x+y) (mod n)=[(x (mod n))+(y (mod n))] (mod n); (-x) (mod n)=(n-x) (mod n)=n-(x (mod n)); (x&y) (mod n)=[(x (mod n))&(y (mod n))] (mod n); y-1 multiplikatív inverz (y&y-1 ) (mod n)=1. 5 Emlékeztet matematikából (folyt.) Moduló inverz (y&y-1 ) (mod n)=1 gcd(y,n)=1 kiterjesztett Euklidész algoritmusból: y"+n#=1, legyen "<n y" (mod n)=1 azaz y-1 =" 6
Emlékeztet matematikából (folyt.) Moduló hatványozás def xy = xx...x "# (mod n) y " y /2 y 2 =# $(y -1)/2 "(x 2 ) y 2 x y = # 2 y 2 $(x ) x ha y páros ha y páratlan ha y páros ha y páratlan INPUT Int x,y,n: x>0,y0,n>1; y OUTPUT x (mod n). #include <stdio.h> #include <stdlib.h> int modex(int x,int y, int n){ if(y==0) return 1; if(y%2==0) return modex((x*x)%n,y/2,n); return x*modex((x*x)%n,y/2,n)%n; } int main(int argc, char *argv[]){ int x,y,n; if(argc<3){ printf("usage: modex x y n\n"); return 1; } x=atoi(argv[1]);y=atoi(argv[2]);n=atoi(argv[3]); printf("%d^%d (mod %d)=%d\n",x,y,n,modex(x,y,n)); return 0; } 1. if y=0 return(1); 2. if y (mod 2)=0 return(mod_exp(x2 (mod n),y 2,n)). 3. return(x mod_exp(x2 (mod n),y 2,n)). 7 Egyirányú függvények f t (x) : D R könny' kiértékelni minden x D-re és nehéz invertálni majdnem minden R-beli értékre de ha t titkos információt ismertjük, akkor könnyen meghatározható y R-hez tartozó x D melyre y=ft(x). 8
Di"e-Helman kulcscsere algoritmus * INPUT (p,g): p nagy prím, g generátor eleme Fp " nek ; OUTPUT Fp* egy azonos eleme Alicenál és Bobnál is. 1. Alice választ egy a "U [1, p #1), kiszámítja 2. Bob választ egy b "U 3. Alice kiszámítja 4. Bob kiszámítja ga " g a (mod p),elküldi Bobnak; gb " g b (mod p),elküldi Alicenak; [1, p #1), kiszámítja k " gba (mod p) b k " ga (mod p) 9 Di"e-Helman kulcscsere algoritmus (folyt.) (p-1)-nek kell, hogy legyen elég nagy prímtényez(je (p >2 ) Nem autentikál nem véd a man-in-the-middle támadások ellen DH probléma nehézsége a DL (diszkrét 160 logaritmus) problémával azonos 10
Az RSA algoritmus Rivest, Shamir, Adleman 1. válasszunk véletlenszer'en p és q két prímet, p ) q 2. számítsuk ki N=pq 3. számítsuk ki *(N)=(p-1)(q-1) 4. válasszunk véletlenszer'en egészet e<*(n), hogy gcd(e,*(n))=1, és számítsuk ki d egészet, hogy ed 1 (mod *(N)) 5. tegyük közzé (N,e)-t nyílvános kulcsként, semmisítsük meg p,q, *(N)- t, és tartsuk meg d-t privát kulcsnak Titkosítás: m<n c$m e (mod N) Visszafejtés: m$c d (mod N) 11 Az RSA algoritmus (folyt.) Az RSA probléma nehézsége az egész faktorizálás nehézségén múlik 1024 alsó határ RSA modulus méretére RSA-512 Challenge 9500 munkaállomás kb. 4 hónap alatt faktorziálta biztonságos-prím RSA modulus p=2p +1 és q=2q +1 12
Az RSA algoritmus (folyt.) Példa: N=7x13=91, e=5 *(N)=6x12=72 Kiterj. Euklidész alg.-ból: 5x29+72x(-2)=1 d=29 (N,e)=(91,5) m=3 c=35 =243 61 (mod 91) Visszafejtés: 6129 3 (mod 91) 13 Valószín#ségi prímteszt Monte Carlo algoritmus Kis Fermat tétel: ha p prím, akkor minden x<p-re x p-1 1 (mod p). INPUT p: pozitív egész; OUTPUT YES ha p prím, NO egyébként. 1. repeat log2p times: (a) x U(1,p-1]; (b) if gcd(x,p)>1 or x (p-1)/2 ±1 (mod p) return(no); end repeat 2. if(test 1.b never shows -1) return(no); 3. return(yes). 14
Véletlen valószín#legprím generálás INPUT k:positive integer; OUTPUT k-bit random prime. 1. p U(2 k-1,2 k -1] with p odd; 2. if Prime_test(p)=NO return(prime_gen(k)); 3. return(p). X-nél kisebb prímek száma korlátos: X/logX k-bites: 2 k k " 2k"1 k "1 # 2k 2k 15 Nyílvános kulcsú kriptorendszerek elemzése Aktív támadások el(állítása (CCA2) Választott nyíltszöveg támadás (CPA) választott nyíltszöveghez títkosított Válaszott titkos szöveg támadás (CCA) korlátozott választott titkos szövegekhez tartozó nyílt szövegek rendelkezésre állnak Adaptív választott titkos szöveg támadás a cél titkos szöveg kivételével továbbra is rendelkezésre állnak a nyíltszövegek 16
Nyílvános kulcsú kriptorendszerek elemzése Nyílvános kulcsú rendszereknél CPA mindig elérhet( A háttérben lév( algebrai struktúrák sajátosságai rendelkezésre állnak visszafejt( támogatás kiküszöbölend( (CCA, CCA2) Ha a támadás ténye nem nyílvánvaló, a visszafejtés támogatás rendelkezésre állhat a rendszer m'ködésekor (CCA2) 17 Támadás példa Legyen c=m (mod N), és tudjuk hogy m<2l bizonyos valószínüséggel m kompozit e m = m1 " m2, m1,m2 < 2 l 2 c = m1e " m2e (mod N) Támadó létrehozhat rendezett adatbázist l "e e % 2 e #1,2,...(2 ) &(mod N) $ ' c /i e ( j e (mod N) m = i) j 18
Aszimmetrikus és szimmetrikus technikák kombinálása nyílvános kulcsú technikák nagy algebrai struktúrákon => költséges algebrai m'veletek szimmetrikus technikák e+ektívek (pl. lookup tables) szimmentrikus technika nagy mennyiség' adat titkosítására, kulcs elosztás nyílvános kulcsú technikával pl. RSA+triple DES SSL protokol 19