Videregående Algoritmik, DIKU 2006/07 Fredag 2. januar David Pisinger Kryptering Spartanere (500 f.kr.) strimmelrulle viklet omkring cylinder Julius Cæsar: substituering af bogstaver [frekvensanalyse] Simone de Crema (40): vokaler har flere substitutter Enigma maskine (932): substitution af bogstaver, positionsafhængig Regler Kryptering Afsender og modtager aftaler (nøgle, nøgle ) Afsender koder klartekst (nøgle) Modtager afkoder chiffertekst (nøgle ) Afsender og modtager skal aftale nøgler på forhånd Dette er ikke realistisk på Internettet M encrypt C = M decrypt key key M Diffe-Hellman (976) offentlig-nøgle kryptosystem Sikkerhed bør ligge i nøglen, ikke i algoritmen Brug aldrig samme nøgle til to meddelelser Brug aldrig to nøgler til samme meddelelse Underestimer ikke fjenden 2 RSA kryptosystemet (Rivest, Shamir, Adleman 978) Offentlig nøgle (public key) P Hemmelig nøgle (secret key) S P A S A P B S B En besked er f.x. en binær streng. Domænet M. P A ( ), S A ( ) P B ( ), S B ( ) bijektive funktioner, dvs. permutationer M = S A (P A (M)) M = P A (S A (M)) dvs. P A og S A er hinandens inverse Kun kan udregne S A ( ) Kun kan udregne S B ( ) Alle kan udregne P A ( ),P B ( ) for alle M M for alle M M encrypt decrypt M P A C = P A (M) S A M RSA kryptosystemet Digital signatur σ underskriver sig med M = udregner digital signatur σ = S A (M ) σ = S A (M ) M S A (M,σ) M = P A (σ) P A M = M? 3 4
RSA kryptosystemet RSA kryptosystemet Find to store primtal p og q hvor p q (gerne 52 bit) 2 Udregn n = pq 3 Vælg lille ulige heltal e som er relativt primisk med φ(n) 4 Udregn d som multiplikativt inverse af e modulo φ(n) 5 RSA public key: P = (e, n) 6 RSA secret key: S = (d, n) Indsigt Hvis kender faktorisering n = pq da kender jeg φ(n) = (p )(q ) og dermed strukturen af Z n. Hvis jeg ikke kender φ(n) kan jeg ikke udregne multiplikativt inverse af e modulo φ(n). Kinesisk restklassesætning tillader at jeg regner i (Z p Z q ) frem for Z n. Dette udnyttes i korrekthedsbevis for algoritmen. I skridt 3: Størrelsen af Z n φ(n) = n a n ( ) a Da n = pq fås ( φ(n) = pq )( ) = pq q p+ = (p )(q ) p q I skridt 4: Algoritme korollar 3.26 bestemmer d entydigt Transformationer for M Z n Public key P = (e,n) transformation P(M) = M e mod n Secret key S = (d,n) transformation S(C) = C d mod n 5 6 Eksempel Finder to store primtal p = 5, q = Udregner n = pq = 55 Vi arbejder over gruppen Z 55 Størrelse af Z 55 er φ(n) = (5 )( ) = 4 0 = 40 Vælg tilfældigt ulige heltal e = 7 Find multiplikativt inverse d = 23 af tallet e i gruppen Z 40 Public key (e, n) = (7, 55) Secret key (d, n) = (23, 55) Besked M = 8 P(M) = M e mod n = 8 7 mod 55 = 209752 mod 55 = 2 = C S(C) = C d mod n = 2 23 mod 55 = 8388608 mod 55 = 8 = M M e og C d udregnes ikke, brug MODULAR-EXPONENTIATION 7 Køretid af RSA Public key og Secret key operationer MODULAR-EXPONENTIATION benyttes køretid O(β 3 ) hvis β bit lange tal public key (e,n) hvor e er et lille heltal loge = O() og logn β secret key (d,n) logd β og logn β public key transformation M e mod n O() multiplikationer, O(β 2 ) bit operationer secret key transformation C d mod n O(β) multiplikationer, O(β 3 ) bit operationer Vælger e lille så offentlig nøgle transformation hurtig Et løst overslag Med β = 024 bit, kræver afkodning 0 9 bit-operationer Hurtig CPU kan beregne 0 9 multiplikationer/sek Hvis CPU kan multiplicere to 64-bit tal i hardware, svarer det til 64 2 = 4096 bit-operationer samtidigt CPU klarer 0 9 4096 = 4 0 2 bit-operationer/sek Ideelt kan vi kode 4096 tal af længde 024 bit/sek 8
Korrekthed af RSA kryptosystemet Korrekthed af RSA kryptosystemet P(M) = M e mod n S(C) = C d mod n Vil vise at S A og P A definerer inverse transformation af Z n. M = S A (P A (M)) Bevis: For enhver besked M Z n M = P A (S A (M)) P(S(M)) = S(P(M)) = M ed mod n Da e og d multiplikativt inverse modulo φ(n) = (p )(q ) ed mod (p )(q ) ed = + k(p )(q ) for et heltal k Z. Hvis M 0 (mod p) gælder Tilsvarende vises M ed M (mod q) for alle M. Kinesisk restklassesætning, korollar 3.29 giver } M ed M (mod p) M ed M ed M (mod n) M (mod q) for alle M. M ed M +k(p )(q ) (mod p) M(M p ) k(q ) (mod p) M() k(q ) (mod p) M (mod p) [theorem 3.3, M Z p] Hvis M 0 (mod p) gælder M ed M (mod p) Så ovenstående gælder for alle M. 9 0 RSA kryptosystemets sikkerhed Offentlige nøgle er P = (e, n). Hvis fjenden kan faktorisere n = pq så kan han bruge RSA algoritmens skridt 2-4 til at finde d i den hemmelige nøgle S = (d,n). Hvis faktorisering er let nemt at bryde RSA Hvis faktorisering er svært måske svært at bryde RSA Kryptering af lang besked Offentlig-nøgle system sikrer Kontrol af afsender-modtager Kryptering af besked Et offentlig-nøgle system er beregningsmæssigt dyrt Offentlig-nøgle systemet bruges til at kontrollere afsendermodtager Offentlig-nøgle systemet bruges til at udveksle simplere nøgler Simplere kryptosystem bruges til lange besked Effektiv digital signatur (s.866) Hash-funktion h : M N M M h(m) h(m ) (eller i hvert fald svært at finde M ) h(m) er et kort (fx. 60-bit) fingeraftryk af M udregner h(m) sender (M,S A (h(m))) udregner t = h(m) udregner t 2 = P A (S A (h(m)) hvis t = t 2 er besked ikke blevet ændret afsender er helt sikkert Offentlig myndighed T Antag at alle kan stole på T Alle kender public key P T får certifikat S T (M ) på at M = s offentlige nøgle er P A sender certifikat S T (M) med M Alle kan afkode S T (M), og ved at signerede M 2
At finde primtal Egenskaber ved primtal Der findes heldigvis mange primtal Lad π(n) være antallet af primtal mindre end n. Dvs. π(n) er tæt på n/lnn. Naiv algoritme π(n) lim n n/lnn = n = 0 9 π(n) 48.254.942 For at teste om n er et primtal, divideres det med alle heltal Eksponentiel køretid! Input: Θ(logn) bits Køretid: O( n) 2,..., n Lad m = log n, dvs. 2m = log( n) 2 = logn Input: Θ(2m) bits Køretid: O(2 m ) Lad Z + n = Z n \ {0} = {,2,...,n } Husk at Z n = {a Z n : gcd(a,n) = } Hvis n er primtal så er Z n = Z + n Theorem 3.34 Hvis n er primtal og e N (n > 2, e ) så har ligningen x 2 (mod n e ) kun to rødder: x = og x = (trivielle rødder) Fermats [lille] theorem n er primtal a n (mod n) hvilket er ækvivalent med n er sammensat a n (mod n) Desværre gælder ikke n er primtal a n (mod n) 3 4 Pseudoprimtal n er base-a pseudoprimtal hvis n er sammensat og Eksempel a n (mod n) 34 = 3 er base-2 pseudoprimtal da Pseudoprimtalstest 2 34 (mod 3)4 Givet n som vi skal afgøre om er et primtal Vælg a Z + n Udregn om a n (mod n) Hvis a n (mod n) så helt sikkert sammensat Hvis a n (mod n) så primtal eller pseudoprimtal Rimeligt god primtalstest Brug a = 2 i ovenstående algoritme { 2 n primtal (mod n) pseudoprimtal Fejler kun for 22 værdier af n 0.000 5 Randomiserede algoritmer Algoritme som benytter tilfældigt tal r i sine beregninger Varianter input random r output Algoritmen giver altid korrekt svar, men køretiden afhænger af r. 2 Algoritmen returnerer et korrekt svar med en vis sandsynlighed, køretid er altid samme. Eksempler på randomiserede algoritmer: QUICKSORT worst-case tid: O(n 2 ) randomiseret: O(nlogn) med stor sandsynlighed. 2 MIN-CUT finder min-cut i graf (V,E) med sandsynlighed n 2 køretid O(n 2 logn), n = V. 6
Randomiserede algoritmer (eksempel) Randomiserede algoritmer Algoritme til at finde minimalt snit i graf G = (V,E) MINCUT(V, E) while V > 2 do 2 pick randomly an edge (u,v) in E 3 contract the edge, while preserving multi-edges 4 remove all loops 5 output remaining edges Sammentrækning (contracting) af en kant (u, v) betyder at der tilføjes en ny knude w, alle kanter (u,x) eller (v,x) erstattes med (w,x) og herefter slettes u og v fra grafen G. 2 3 6 5 [] R. Motwani and P. Raghavan. Randomized Algorithms. Cambridge University Press, New York (NY), 995. 4 Antag at vi skal besvare et ja-nej spørgsmål S. Vi har en randomiseret algoritme R(S,r) som Baseret på et tilfældigt tal r svarer ja - nej Hvis den svarer nej er den helt sikker på sit svar Hvis den svarer ja er den p < sikker på sit svar Hvis vi kalder den randomiserede algoritme k gange med forskellige r og hver gang får ja er sandsynligheden for at S = nej : ( p) k Eksempel: Hvis p = 0.5, og svarer ja k = 00 gange, er sandsynligheden for at S = nej ( 0.5) 00 = 7.89 0 3 Hvis p = 0., og svarer ja k = 00 gange, er sandsynligheden for at S = nej ( 0.) 00 = 2.66 0 5 7 8 Randomiseret algoritme Pseudoprimtalstest Hvad er bedst:. For 50% af input svarer algoritmen rigtigt 2. For alle input svarer algoritmn 50% rigtigt Vælg tilfældigt a Z n a n (mod n) { primtal pseudoprimtal Formelt: sandsynligheden p for at et ja-svar er rigtigt. r, I I, I 2 I, i I : p(i,r) = 00% 2. i I, r : p(i,r) 50% Carmichael tal n = 56,05,729,2465,282,660,89,..., For alle a a n (mod n) Pseudoprimtal for alle baser a Pseudoprimtalstest kan ikke udvides til randomiseret algoritme der afhænger af a Carmichael tal er sjældne: 255 stk under 00.000.000. 0522 stk under 0 5. 585355 stk under 0 7. 9 20
Bedre pseudoprimtalstest Eksempel på primtalstest For alle e N (bruger e = ) n er primtal x 2 (mod n e ) har løsning x = ± n er sammensat x 2 (mod n e ) har løsning x ± For alle a N n er primtal a n (mod n) n er sammensat a n (mod n) WITNESS-COMPOSITE(a, n) n = 2 t u hvor t og u ulige 2 x 0 MODULAR-EXPONENTIATION(a,u,n) 3 for i to t do 4 x i xi 2 mod n 5 if x i = and x i and x i n then 6 return TRUE x i ± (mod n) og x i xi 2 (mod n) 7 if x t then 8 return TRUE x t = (a n mod n) 9 return FALSE Hvis returnerer TRUE så er n er sammensat Hvis returnerer FALSE så er n måske primtal 2 Carmicahel tal n = 56 = 5 Vælgt tifældigt a f.eks. a = 7 Ønsker at teste n = 0000000 = 35 2 4 = u 2 t n er sammensat a n (mod n) MODULAR-EXPONENTIATION Første 6 bit køres normalt Sidste 4 bit alene kvadreringer n er sammensat x 2 (mod n) har løsning x ± Håndkørsel af MODULAR-EXPONENTIATION i 9 8 7 6 5 4 3 2 0 bit 0 0 0 0 0 0 0 c 2 4 8 7 35 70 40 280 560 d 7 49 57 526 60 24 298 66 67 (a 280 ) 2 = a 560 = 7 560 (mod n) Dvs. med x = a 280 haves så er n sammensat x 2 (mod n) 22 Miller-Rabin s algoritme Input: ulige heltal n større end 2, s antal forsøg MILLER-RABIN(n, s) for j to s do 2 a RANDOM(,n ) 3 if WITNESS-COMPOSITE(a,n) then 4 return COMPOSITE Definitely 5 return PRIME Almost for sure Faktorisering af heltal er svært (Afsnit 3.9 kursorisk) Det er svært at faktorisere heltal Vi har ikke bevis for at effektiv algoritme ikke findes Hvis nogen finder en effektiv algoritme kan de bryde RSA og indkassere stor præmie Bedste algoritmer kørt på supercomputere kan ikke faktorisere vilkårligt 024-bit tal (p og q blev valgt som 52-bit så n er 024-bit) Theorem 3.38: Hvis n er ulige og sammensat, så er antallet af vidner til at n er sammensat mindst n 2. Theorem 3.39: For et ulige heltal n > 2 og pos. heltal s er chancen for at MILLER-RABIN(n, s) svarer forkert højst ( 2) s. Hvis man bruger s = 50 så er chancen for fejl: ( ) 50 = 8.88 0 6 2 23 24
Opsummering RSA offentlig nøgle krypteringssystem Primtalstest Randomiserede algoritmer If, using a randomized method, the probability of error is 2 000, the philosophical question arises: is this a mathematical proof? 25