15.09.2013 Views

Public Key Crypto

Public Key Crypto

Public Key Crypto

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

<strong>Public</strong> <strong>Key</strong> Krypto<br />

Dette notat gennemgår Diffie Hellmann’s nøglefordeling samt RSA public key kryptering.<br />

Begge systemer er baseret på matematiske problemer. Diffie Hellmann på det diskrete logaritme<br />

problem, og RSA på faktorisering af store tal. Begge problemer anses for at være<br />

beregningsmæssige vanskelige at løse med traditionel regnekraft, når tallene har en vis størrelse.<br />

Deraf følger også, at denne grænse vil flytte sig i trit med Moore’s lov, men det betyder så blot, at<br />

der skal vælges større tal.<br />

Matematik<br />

Først matematik. Der er egentlig brug for meget lidt matematik, men nogle grundbegreber skal<br />

være på plads for at forstå moderne kryptering.<br />

Modulo<br />

Fra barnsben har vi lært at anvende modulo-beregninger. Uret er et godt eksempel. Vi siger ikke, at<br />

klokken er 425 minutter over midnat, men at klokken er 5 minutter over 7. Vi har lavet en hurtig<br />

modulo beregning idet vi har divideret 60 op i 425 og fundet resten 5. Modulo findes altså som den<br />

rest, der fås ved at dividere det første tal med det sidste<br />

Andre eksempler er:<br />

7 mod 5 = 2,<br />

11 mod 5 = 1,<br />

66 mod 60 = 6<br />

osv.<br />

Modulo beregningen bruges også ved kontrol af CPR numre (før oktober 2007), idet det sidste<br />

ciffer i personnumret kan chekkes ved en modulo-11 beregning. Lad os forestille os en kvinde født<br />

11. november 1911, som har (havde) cpr nummeret 111111-1118. For at chekke nummeret bruges<br />

kontroltallene 4 3 2 7 6 5 4 3 2 1, som multipliceres på de enkelte cifre i CPR nummeret. Dvs<br />

følgende beregning: 1*4 + 1*3 + 1*2 + 1*7 + 1*6 + 1*5 + 1*4 + 1*3 +1*2 +8*1 = 44 som<br />

modulo 11 giver 0. Altså et korrekt CPR nummer.<br />

Senere i livet lærte vi, at to tal er kongruente modulo n, når forskellen mellem a og b er et<br />

multiplum af n. Altså at 425 er kongruent (ækvivalent) med 5, 65, 125 osv, modulo 60.<br />

Kongruens skrives som:<br />

a≡b (mod n) eller a≡b mod n<br />

Det specielle lighedstegn indikerer, at der ikke er tale om en egentlig ligning, men at a og b vil have<br />

den samme rest, når de udregnes med hensyn til modulo n. Sagt med andre ord:<br />

a mod n = b mod n, hvor der er tale om et normalt lighedstegn<br />

Den første skrivemåde anvendes stort set altid i forbindelse med lærebøger om kryptering og skal<br />

blot læses som, at alle beregninger sker ved modulo n.<br />

Primtal<br />

Et primtal er et positivt heltal større end 1, der kun kan divideres med 1 eller sig selv. Følgende tal<br />

er primtal:<br />

2, 3, 5, 7, 11, 13, 17 ...<br />

1


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

I øvrigt er der uendelige mange primtal.<br />

Generator<br />

Hvis n er et primtal, så kaldes g en generator, hvis g a mod n kan antage alle værdier mellem 1 og n-<br />

1 når a varieres<br />

Eksempel:<br />

g =2 er en generator mod 11<br />

2 1 ≡ 2 mod 11<br />

2 2 ≡ 4 mod 11<br />

2 3 ≡ 8 mod 11<br />

2 4 ≡ 16 mod 11 ≡ 5 mod 11<br />

2 5 ≡ 32 mod 11 ≡ 10 mod 11<br />

2 6 ≡ 64 mod 11 ≡ 9 mod 11<br />

2 7 ≡ 128 mod 11 ≡ 7 mod 11<br />

2 8 ≡ 256 mod 11 ≡ 3 mod 11<br />

2 9 ≡ 512 mod 11 ≡ 6 mod 11<br />

2 10 ≡ 1024 mod 11 ≡ 1 mod 11<br />

Dvs 2 a mod 11 giver alle tal mellem 1-10<br />

Diffie Helmann’s nøglefordelingsprotokol<br />

Diffie Hellmann bruges til udveksle kryptografiske nøgler mellem to parter. Der stilles ikke<br />

specielle sikkerhedskrav til forbindelse. Protokollen tillader altså at Eva lytter med på linjen, uden<br />

at hun af den grund skal kunne opsnappe nøglen.<br />

Protokolen er simpel. Der er tre parter: Bob, Alice og Eva.<br />

Bob og Alice aftaler et ”g” og et ”n”, hvor g er generator mod n. De to tal behøver ikke at være<br />

hemmelige. Tallene kan genbruges og kan evt. være tildelt en gruppe.<br />

Bob vælger det tilfældigt heltal: x og udregner g x mod n. Dette tal sendes til Alice.<br />

Tilsvarende vælger Alice et tilfældigt heltal: y. Hun udregner g y mod n som hun sender til Bob.<br />

Læg mærke til, at g x mod n og g y mod n kan antage alle værdier mellem 1 og n-1. De klumper ikke<br />

sammen<br />

Når Bob modtager g y mod n fra Alice bruger han sit x til at beregne<br />

K= (g y mod n) x = g yx mod n<br />

Tilsvarende bruger Alice sit y til at udregne<br />

K= (g x mod n) y = g xy mod n<br />

Herefter har både Bob og Alice en fælles krypteringnøgle, som de kan benytte i en efterfølgende<br />

symmetrisk krypteringsalgoritme.<br />

2


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

Læg mærke til, at g xy mod n kan antage alle værdier mellem 1 og n-1 (g er en generator).<br />

Værdierne klumper altså ikke sammen inden for et mindre talområde. Der vil være i alt n-1<br />

forskellige kryptografiske nøgler.<br />

Eva kan naturligvis opsnappe de to pakker, men kan ikke finde x ud fra g x mod n uden at skulle løse<br />

et diskret logaritme problem. Der er tale om en envejsfunktion, som Eva ikke har mulighed for at<br />

løse.<br />

Derimod kan Eva iværksætte et Man In the Midle (MiM) attack. Hun opsnapper Bob’s pakke:<br />

g x mod n<br />

vælger sit eget z, og sender g z mod n tilbage til Bob. Da Bob tror pakken kommer fra Alice,<br />

udregner han tillidsfuldt den kryptografiske nøgle – som altså gælder til Eva. Samtidig sender Eva<br />

en pakke g z mod n til Alice, som tror pakken kommer fra Bob, og Eva og Alice skaber på<br />

tilsvarende måde en fælles nøgle. Når Bob og Alice herefter tror de snakker fortroligt sammen, går<br />

det over Eva, som først dekrypter – så hun kan læse meddelelsen – og derefter sender beskeden<br />

videre krypteret med den oprindelige modtagers nøgle.<br />

Diffie Hellmann sikrer altså ikke mod MiM attack. Der skal mere til.<br />

<strong>Public</strong> <strong>Key</strong> Encryption<br />

RSA er nok den mest kendte asymmetriske krypteringsmetode. RSA er navngivet efter dens<br />

opfindere: Ron Rivest, Adi Shamir og Leonard Adleman (1978) .<br />

Selvom RSA konceptet tilskrives de tre opfindere, viser senere nedklassificerede og frigivne<br />

engelske oplysninger, at konceptet oprindeligt blev opfundet af Cliff Cocks, som arbejdede ved det<br />

engelske GCHQ (Goverment Communication Headquarters). Den engelske opfindelse var i lang tid<br />

hemmeligstemplet og derfor komplet ukendt for omverdenen.<br />

RSA består af to nøgler:<br />

1) en hemmelig (privat) nøgle, som traditionelt kaldes d (svarende til decryption)<br />

2) en offentlig nøgle, som tilsvarende kaldes e – for encryption – og et tal: n<br />

Den klartekst, der skal krypteres, kodes først som et heltal (fx ved at man betragter bitstrengen som<br />

et stort heltal). Kald klarteksten M og cifferteksten C.<br />

Kryptering foregår ved udregningen<br />

C = M e mod n<br />

og tilsvarende foregår kryptering ved<br />

M = C d mod n<br />

Sættes de udtryk sammen, fås:<br />

3


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

dvs.<br />

M = C d mod n = (M e ) d mod n = (M d ) e mod n<br />

M = M de mod n<br />

Dette gælder naturligvis ikke vilkårlige værdier af e,d og n. Nøglerne skal vælges på en hel specifik<br />

måde, og proceduren gennemgås nedenfor.<br />

Læg i øvrigt mærke til, at det er ligegyldigt, om vi først anvender d og derefter e. Eller om vi først<br />

anvender e og derefter d. De to nøgler vil ophæve virkningen af hinanden.<br />

Sender Bob fortroligt til Alice, bruger han Alice’s offentlige nøgle.<br />

Omvendt kan han bruge sin egen private nøgle til at signere en meddelse, og alle andre kan bruge<br />

hans offentlige nøgle til at verificere at underskriften er autentisk.<br />

Bevis på RSA (Dette afsnit skimmes, ikke eksamensstof) :<br />

RSA baserer sig på Fermat’s lille sætning:<br />

M (n-1) ≡ 1 mod n<br />

Pierre de Fermat (1601 - 1665) var fransk jurist og amatørmatematiker. Matematikken dyrkede han<br />

som hobby.<br />

Fermat’s lille sætning 1 gælder for alle primtal n og vilkårlige positive heltal M, når M og n er<br />

indbyrdes primiske. To tal er indbyrdes primiske, når de ikke har nogen fælles divisorer bortset fra<br />

1. Dette skrives ofte som: (M,n) = 1.<br />

Vi beviser ikke Fermat’s lille sætning, men man kan hurtigt overbevise sig om, at den ”nok” gælder<br />

ved at prøve med forskellige tal.<br />

Eksempler:<br />

• n=3, M=2: 2 2 = 4 = 1 mod 3<br />

• n=5, M=6: 6 4 = 36*36 = 1296 = 1 mod 5<br />

men:<br />

• n=3, M=3: 3 2 = 9 ≠ 1 mod 3<br />

Leonhard Euler (1707 - 1783) var ligeledes matematiker - måske endda den største matematiker<br />

nogensinde. Euler generaliserede Fermat’s lille sætning og beviste i 1737 sætningen:<br />

M ϕ(n) ≡ 1 mod n (1)<br />

hvor φ(n) er defineret som det antal positive heltal, der er mindre end n og indbyrdes primisk med<br />

n.<br />

φ (n) kaldes Euler's totient funktion. Bemærk at φ (n) er defineret for alle positive heltal.<br />

1 (p-1)<br />

Først udregnes venstre side som M =M*M*M*M (ialt (p-1) gange). Dernæst divideres resultatet med p og resten<br />

skal altså være 1.<br />

4


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

Når n er et primtal ses det udmiddelbart at (1) bliver identisk med Fermat’s sætning.<br />

Eksempel:<br />

φ(7) = 6, idet der er seks heltal (1,2,3,4,5,6) mindre end 7<br />

φ(9) = 6, idet der er otte heltal (1,2,3,4,5,6,7,8) mindre end 9, men da 3 og 6 har en fælles<br />

faktor med 9, slettes disse tal. Der er altså ialt 6 heltal, der opfylder kravet.<br />

Når p og q er indbyrdes primiske, gælder det at funktionen φ(p*q) er multiplikativ, altså at<br />

φ(p*q) = φ(p)*φ(q)<br />

Da vi kun betragter primtal (som per definition er indbyrdes primiske), kan ovenstående let bevises<br />

ved at udregne φ(p*q) ud fra definitionen. Først skrives talrækken fra 1 til (p*q). I den pågældende<br />

talrække må der være (p-1) tal, der er delelige med q, og der må være (q-1) tal, der er delelige med<br />

p. Disse tal skal ikke medregnes til φ. Det endelige antal bliver derfor:<br />

p*q-1 – (p-1) –(q-1) = p*q –p – q +1 = (p-1) * (q-1) = φ(p) * φ(q)<br />

dvs.: φ(p*q) = φ(p) * φ(q)<br />

Såfremt n = p*q, hvor p og q er primtal, følger altså, at (1) kan skrives som :<br />

M (p-1)*(q-1) = 1 mod (p*q) = 1 mod n, (2)<br />

Denne sætning gælder kun hvis M er indbyrdes primisk med henholdsvis p og q. For at sikre dette<br />

vælger vi M < n.<br />

Derefter multipliceres med M på begge sider af lighedstegnet:<br />

M (p-1)*(q-1)+1 = M mod n (3)<br />

Det geniale er nu, at eksponenten i (3) kan skrives som et produkt af to tal e*d, hvis e og d<br />

opfylder<br />

e*d = 1 mod (p-1)*(q-1)<br />

Med indsættelse af e og d i (3) fås<br />

M e*d = (M e ) d = M mod n<br />

Hermed er public key encryption skabt:<br />

C = M e mod n, som giver ciffertekst<br />

Og M = C d mod n = (M e ) d mod n = M (p-1)*(q-1)+1 = M mod n = M,<br />

Den offentlige og private krypteringsnøgle: e og d kan derfor vælges ud fra:<br />

e*d = k*(p-1)*(q-1) + 1<br />

eller udtrykt ved modulo:<br />

5


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

e*d ≡ 1 mod (p-1)*(q-1) (4)<br />

Den sidste omskrivning fremgår direkte af definitionen på kongruens og modulo funktionen.<br />

RSA (Rivest-Shamir-Adleman)<br />

I public key kryptering har hver person (maskine) to nøgler. Den ene nøgle er offentlig og<br />

tilgængelig for alle. Den anden nøgle er privat (hemmelig) og kun kendt ejeren. Den offentlige<br />

nøgle består af to tal. Lad os kalde den offentlig nøgle: e,n og den tilsvarende private nøgle d.<br />

Kryptering (encryption) af en meddelelse (M) foregår ved at udregne:<br />

C = M e mod n.<br />

hvor M skal opfattes som selve heltalsværdien af teksstrengen.<br />

Afsenderen tager altså den meddelse (M), han/hun vil kryptere, og udregner M*M*M*M (ialt e<br />

gange). Derefter foretages modulo-beregningen, således at cifferteksten (C) reduceres til at ligge i<br />

intervallet fra 0 til (n-1)<br />

Tallene n og e er modtagerens offentlige nøgle.<br />

Tilsvarende vil dekryptering foregå ved:<br />

M = C d mod n, hvor d er modtagerens private nøgle.<br />

Sammenholdes de to ligninger fås:<br />

altså:<br />

M = C d mod n = M de mod n,<br />

M de = M mod n<br />

Valg af nøgler (skimmes)<br />

1. Vælg to store primtal p og q.<br />

2. Udregn n = p*q.<br />

3. Vælg e indbyrdes primisk med (p-1)*(q-1).<br />

Dvs. ingen fælles divisorer, bortset fra 1.<br />

4. Udregn d, således at e*d = 1 mod (p-1)*(q-1).<br />

5. Den offentlige nøgle er givet ved e,n.<br />

6. Den private nøgle er givet ved d.<br />

7. Destruer de to hjælpestørrelser p,q.<br />

Kravet til M


<strong>Public</strong> <strong>Key</strong> <strong>Crypto</strong> Freddie Drewsen, SEP 2011<br />

Ilustrativt eksempel:<br />

Vælg to primtal, f.eks. p = 11 og q = 13.<br />

Udregn n = 11*13 = 143<br />

Vælg e indbyrdes primisk med (p-1)*(q-1) = 10*12. Et bud kunne være e=11.<br />

Find d ud fra e*d = 1 mod(p-1)(q-1). En prøve viser hurtigt at d = 11 opfylder betingelsen<br />

11*11=121=1 mod (120)<br />

Lad os dernæst kryptere 2 som har ASCII koden 10<br />

C = 10 11 mod 143 = 100000000000 mod 143 = 43<br />

Tilsvarende vil dekryptering af 43 give<br />

M = 43 11 mod 143 = 929293739471222707 mod 143 = 10.<br />

Det bemærkes, at M skal være mindre end n. Det betyder, at vi for det valgte n, i princippet kun kan<br />

kryptere 7 bits ASCII tegn ad gangen.<br />

Hint: Brug Microsoft’s lommeregner i scientific mode til udregningerne.<br />

2 Linefeed<br />

7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!