Introduktion till krypteringsmetoderna RSA och Merkle-Hellman

Relevanta dokument
NÅGOT OM KRYPTERING. Kapitel 1

Grundfrågor för kryptosystem

Kryptografi - När är det säkert? Föreläsningens innehåll. Kryptografi - Kryptoanalys. Kryptering - Huvudsyfte. Kryptografi - Viktiga roller

Offentlig kryptering

RSA-kryptering och primalitetstest

Primtal, faktorisering och RSA

Krypteringteknologier. Sidorna ( ) i boken

MA2047 Algebra och diskret matematik

Kryptering HEMLIG SKRIFT SUBSTITUTION STEGANOGRAFI KRYPTOGRAFI

Metoder för sekretess, integritet och autenticering

Några satser ur talteorin

Grundläggande krypto och kryptering

Grundläggande kryptering & chiffer

Den mest väsentliga skillnaden mellan

Kryptering. Krypteringsmetoder

Kryptering. Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin

Kryptografi: en blandning av datavetenskap, matematik och tillämpningar

Kryptering och primtalsfaktorisering

Utdrag från Verklighetens Kvadratrötter: Sida 1 en bok om matematikens användningsområden skriven av Marcus Näslund. Mer info:

256bit Security AB Offentligt dokument

Krypteringens historia och användningsområden

Att använda kryptering. Nyckelhantering och protokoll som bygger på kryptering

Kryptering & Chiffer Del 2

MATEMATIK I SÄKERHETENS TJÄNST OM KODNING OCH KRYPTERING 1

RSA-kryptografi för gymnasiet. Jonas Gustafsson & Isac Olofsson

Blockkedjor. en introduktion för datavetare. Rikard Hjort, 24 maj 2019

Kryptografi: en blandning av datavetenskap, matematik och tillämpningar

Datasäkerhet. Petter Ericson

Föreläsning 10. Grundbegrepp (1/5) Grundbegrepp (2/5) Datasäkerhet. olika former av säkerhet. Hot (threat) Svaghet (vulnerability)

Objektorienterad Programkonstruktion. Föreläsning 16 8 feb 2016

Övning 6 - Tillämpad datalogi 2012

Kryptoteknik. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)

Writing with context. Att skriva med sammanhang

Dagens föreläsning. Datasäkerhet. Tidig historik. Kryptografi

Skydd för känsliga data

Hemligheternas Matematik

Säker lagring av krypteringsnycklar

Övning 6. Komprimering, kryptering, dokumentering & testning

Abstract. 1. Inledning

Föreläsninsanteckningar till föreläsning 3: Entropi

Att stödja starka elever genom kreativ matte.

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Säkerhet. Säker kommunikation - Nivå. Secure . Alice wants to send secret message, m, to Bob.

Matematikens Element. Vad är matematik. Är detta matematik? Anders Fällström Institutionen för matematik och matematisk statistik Umeå universitet

PGP håller posten hemlig

Föreläsninsanteckningar till föreläsning 1: Introduktion

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Modul 3 Föreläsningsinnehåll

Nämnarens kryptoskola fördjupning. Enkel transposition

Sats 2.1 (Kinesiska restsatsen) Låt n och m vara relativt prima heltal samt a och b två godtyckliga heltal. Då har ekvationssystemet


Styrteknik: Binära tal, talsystem och koder D3:1

Kravspecifikation Fredrik Berntsson Version 1.1

Adding active and blended learning to an introductory mechanics course

COMPUTABILITY BERÄKNINGSBARHET. Källa: Goldschlager, Lister: Computer Science A Modern Introduction 2. upplaga 1988, Prentice Hall

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Algebra och kryptografi Facit till udda uppgifter

Moderna krypteringssystem

EIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011

En introduktion till några klassiska chiffer

Hela tal LCB 1999/2000

Stad + Data = Makt. Kart/GIS-dag SamGIS Skåne 6 december 2017

Estetisk- Filosofiska Fakulteten Svenska. Susanna Forsberg. En skola för alla. att hjälpa barn med ADHD och Aspergers syndrom. A School for Everyone

Elektroniska signaturer - säker identifiering?

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

Protokollbeskrivning av OKI

Att dela en hemlighet

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Ökat personligt engagemang En studie om coachande förhållningssätt

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men

Tentamen i Kryptologi 1DT

σ 1 = (531)(64782), τ 1 = (18)(27)(36)(45), τ 1 σ 1 = (423871)(56).

Kvalitetsarbete I Landstinget i Kalmar län. 24 oktober 2007 Eva Arvidsson

ENKEL Programmering 3

Kryptering. Wearable Computers D 10p. Namn: Josef Israelsson Datum: Lärare: Björne Lindberg Ulf Brydsten Lars Karlsson

Teknikprogrammet Klass TE14A, Norrköping. Jacob Almrot. Självstyrda bilar. Datum:

Gesäll provet Internetprogrammering I. Författare: Henrik Fridström. Personnummer: Skola: DSV

Introduktion till protokoll för nätverkssäkerhet

Second handbook of research on mathematics teaching and learning (NCTM)

Lösningar till utvalda uppgifter i kapitel 5

Make a speech. How to make the perfect speech. söndag 6 oktober 13

Datasäkerhet och integritet

Utvärdering SFI, ht -13

State Examinations Commission

Om oss DET PERFEKTA KOMPLEMENTET THE PERFECT COMPLETION 04 EN BINZ ÄR PRECIS SÅ BRA SOM DU FÖRVÄNTAR DIG A BINZ IS JUST AS GOOD AS YOU THINK 05

Låt n vara ett heltal som är 2 eller större. Om a och b är två heltal så säger vi att. a b (mod n)

Workplan Food. Spring term 2016 Year 7. Name:

E V - C E R T I F I K AT: VA R F Ö R A N V Ä N D A D E N S TA R K A S T E S S L AUTENTISERINGSPROCESS?

Ett säkert Internet. Betalningsformer för säkra transaktioner över Internet. Författare: Anders Frånberg. Examensarbete I, 10p Vårterminen - 00

Projektmodell med kunskapshantering anpassad för Svenska Mässan Koncernen

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Lösning till tentamensskrivning i Diskret Matematik, SF1610 och 5B1118, torsdagen den 21 oktober 2010, kl

Join the Quest 3. Fortsätt glänsa i engelska. Be a Star Reader!

Kommentar till bilderna. Att spara hörsel för framtiden. Bara det värdefulla är vi beredda att skydda! Hörseln vad kan vi förstå?!

Krypteringsprogrammet Kryptogamen

DNSSec. Garanterar ett säkert internet

Transkript:

Fakulteten för teknik- och naturvetenskap Avdelningen för matematik Nadia Ehsas Introduktion till krypteringsmetoderna RSA och Merkle-Hellman Introduction to the Encryption Methods RSA and Merkle-Hellman Examensarbete 15 hp, kandidatnivå Matematik Datum: 2011-04-29 Handledare: Igor Gachkov Examinator: Håkan Granath Karlstads universitet 651 88 Karlstad Tfn 054-700 10 00 Information@kau.se www.kau.se

Sammanfattning Den här uppsatsen handlar om ämnet kryptografi, som innebär bland annat konsten att göra värdefull information oläslig för alla som inte har nyckeln att återskapa den. Kryptografi är ett oerhört viktigt ämne för vårt samhälle idag, både på individs- och riksnivå. Även om det flesta av oss inte inser det direkt, så är faktiskt kryptografin dagligen en del av varje individs liv, inte minst när vi skickar mejl och betalar räkningar via Internet. Därför är det inte så svårt att inse hur oerhört viktigt det är att forska kring och utveckla denna lära. Med mitt arbete vill jag bland annat få svar på följande frågor: Hur tillämpar man krypteringen i praktiken? Vilka svagheter finns det och vilka säkerhetsproblem som kan förknippas med krypteringsalgoritmerna? Varför anses RSA vara en stark krypteringsalgoritm och hur kan man utföra attack mot RSA? Dessutom vill jag undersöka Merkle-Hellmans algoritmen, som bygger på en annan krypteringsmetod jämfört med RSA. Metoden som jag tillämpar för att besvara alla dessa frågor bygger främst på att hitta trovärdiga källor, både i form av Internetsidor och i form av böcker. Under arbetets gång gör jag även några små krypteringsförsök i form av olika exempel, som komplettering till den teori jag skriver om. Lite kort kan man säga att bland alla krypteringsalgoritmer som finns, så är RSA den mest flitigt använda asymmetriska krypteringsalgoritmen idag. Detta beror främst på två saker: metoden är mer eller mindre lätt att applicera i praktiken och jämfört med många andra krypteringsalgoritmer så är RSA en ganska säker krypteringsmetod. Säkerheten bygger främst på att hittills har ingen lyckats att hitta någon riktig dekrypteringsmetod. Genombrottet inom faktoriseringsproblemet sägs innebära att RSA och många andra liknande asymmetriska algoritmer skulle bli knäckta och därmed bli helt värdelösa. Förutom skyddet mot själva insynen kan krypteringstekniken användas även för att skapa elektroniska signaturer. Fördelen med detta är att man säkert kan identifiera komponenter och användare. Således kan man lätt kontrollera den elektroniska informationens trovärdighet och angriparen har inte en chans att skicka informationen under en falsk identitet. 2

Den oerhört snabba datoriseringen, med alla kraftfulla processorer, har gjort att gamla krypteringssätt har blivit osäkra. Därför pågår ständigt ny forskning där man försöker utveckla starkare och snabbare krypteringsalgoritmer. Sammanfattningsvis, är krypteringen oerhört viktig för informationssäkerheten eftersom rätt hanterad är metoden det enda säkra sättet att skydda känslig information från obehöriga. Abstract In this essay we discuss some aspects of the cryptography science, which includes the art of making valuable information unreadable for anyone who doesn t have the key to re-create it. Cryptography is an extremely important topic for our society today, both at individual and national level. Although most of us may not realize it right away, cryptography is actually daily the part of every individual's life; even when we, for instance, send emails and pay bills via the Internet. Therefore, it is not hard to realize how important it is to research and develop this theory. With my work I want to answer for instance the following questions: How do you apply encryption methods in practice? What are the weaknesses and the vulnerabilities that may be associated with encryption algorithms? Why is RSA considered to be a strong encryption algorithm and how you can perform attacks against RSA? In addition, I want to examine Merkle-Hellman algorithm, which is based on a different encryption method than RSA. The method that I apply for answering these questions is based primarily on finding trustworthy sources, both in terms of Internet sites and in terms of books. During the work, I also make some encryption attempts, as a supplementing to the theory I write about. In short, we can say that RSA is the most widely used asymmetric encryption algorithm among all encryption methods that are available today. This is mainly due to two things: method is more or less easy to apply in practice and compared to many other encryption algorithms RSA is a safe encryption method. The security is based primarily on the fact 3

that so far has nobody been able to find any real decryption method. The breakthrough in the problem of factorization is said to mean that RSA and many other similar asymmetric algorithms would be cracked, and thus become completely worthless. In addition, the encryption technology can also be used in order to create electronic signatures. The advantage of this feature is that one can safely identify components and users. Thus, one can easily verify the electronic information s credibility, and the attacker has no chance to send the information under a false identity. The extremely rapid computerization, with all powerful processors available, has made the old encryption methods unsafe. Therefore, new researches are constantly in progress, all attempting to develop stronger and faster encryption algorithms. In summary, the science of cryptology is incredibly important for the information security; because rightly used this method is the only secure way to protect sensitive information from unauthorized access. 4

Innehållsförteckning SAMMANFATTNING... 2 ABSTRACT... 3 INNEHÅLLSFÖRTECKNING... 5 1 INTRODUKTION... 6 1.1 BAKGRUND... 6 1.1.1 Varför behövs kryptering?... 6 1.1.2 Användning av kryptografi... 7 1.2 MÅL MED DENNA UPPSATS... 7 2. VIKTIGA BEGREPP... 9 2.1 KRYPTOLOGI... 9 2.2 OLIKA TYPER AV KRYPTON... 9 2.2.1 Substitutionskrypton... 9 2.2.2. Transpositionskrypton... 10 2.3 SYMMETRISKA OCH ASYMMETRISKA KRYPTOSYSTEM... 11 3. RSA ALGORITMEN... 12 3.1 GENERERING AV PRIMTAL... 12 3.2 KRYPTERING MED RSA... 14 3.2.1 Teori... 14 3.2.2 RSA i praktiken.... 17 3.2 VARFÖR ANSES RSA VARA EN STARK KRYPTERINGS ALGORITM?... 20 3.4 FORCERA RSA... 22 3.4.1 Scenario 1... 23 3.4.2 Scenario 2... 26 3.4.3 Scenario 3... 29 3.4.4 Attack vid användning av gemensam modulo... 30 4 MERKLE-HELLMANS KAPPSÄCKS-METOD... 34 4.1 MERKLE-HELLMAN... 34 4.1.1 Grunderna för Merkle-Hellman algoritmen... 34 4.1.2 Kryptering med Merkle-Hellman... 37 4.1.3 Dekryptering av Merkle-Hellman:s krypto... 38 5 SLUTSATS... 41 APPENDIX:... 42 KÄLLOR:... 58 BILAGA PROGRAMMERA I MINIRÄKNARE... 59 5

1 Introduktion 1.1 Bakgrund 1.1.1 Varför behövs kryptering? De flesta människor världen över är idag mycket beroende av tele- och datanätet. Vi är vana vid att det ska vara bekvämt och snabbt att exempelvis skicka elektroniska mail, betala räkningar, boka biljetter eller till och med delta i konferenser på distans. Utan dessa tillgångar skulle livet utan tvekan försvåras betydligt idag. Men de underbara verktygen är inte helt perfekta. Det finns en hel del säkerhetsproblem som kan förknippas med dem. Som några exempel kan man nämna följande problem: - Informationen som sänds via nätet kan avlyssnas, vilket kanske inte ens upptäcks av vare sig sändare eller mottagare. - Informationen som överförs via dessa medium kan modifieras av obehöriga, och inte heller detta kanske upptäcks av mottagare. - Angripare kan ha otillbörlig åtkomst till resurser. Om ett godtyckligt system saknar skydd mot en person som försöker koppla upp sig, finns det risk att den personen otillbörligt använder sig av detta systems resurser. Det kan exempelvis röra sig om ett försök att göra dataintrång någon annanstans. 1 Människan har, under alla tider, velat skydda sig mot sådana angripare och det är så kryptografin föddes. Ordet kryptera kommer av grekiskans kryptos och det kan översättas som dold eller gömd. Kryptering är konsten att göra informationen oläslig för alla som inte har nyckeln att återskapa den. Den värdefulla informationen ska helt enkelt se meningslöst ut för alla obehöriga. Genom att kryptera kan man exempelvis ändra ordet student till 3abi#5p. Förutom skyddet mot själva insynen kan krypteringstekniken användas också för att skapa elektroniska signaturer och därmed även för säker identifiering av komponenter och användare. Således, kan man lätt kontrollera den elektroniska informationens trovärdighet och angriparen har inte en chans att skicka informationen under en falsk 1 http://www.itkommissionen.se 6

identitet. På så sätt är det också relativt lätt att upptäcka i fall ett meddelande har blivit förvanskad under överföringsprocessen. 2 Således, krypteringen är oerhört viktig för informationssäkerheten eftersom rätt hanterad är metoden det enda säkra sättet att skydda känslig information från obehöriga. 1.1.2 Användning av kryptografi Krypteringen användes förr mest av militären. Nuförtiden har även privatpersoner, företag och organisationer tillgång till resursen. Men även idag anses krypteringen som ett känsligt område i många länder. I vissa av dem, bland annat i USA, är starka krypteringsalgoritmer förbjudna och får inte exporteras. I Sverige däremot är användningen av krypteringsmetoden fri och regeringens politik är att varje användare ska ha rätt att välja sådan teknik på egen hand och efter egna behov. 3 Den oerhört snabba datoriseringen, med alla kraftfulla processorer, har gjort att gamla krypteringssätt har blivit osäkra. Därför pågår ständigt ny forskning där man försöker utveckla starkare och snabbare krypteringsalgoritmer. 1.2 Mål med denna uppsats Mitt främsta mål med denna uppsats är att fördjupa mina kunskaper inom kryptografi ämnet. Jag vill veta vad läran handlar om och få en inblick i de allmänna principerna som kryptografin använder sig av. Att gå igenom de vanligaste termerna och kunna använda dem på ett korrekt sätt, att undersöka vilka olika typer av kryptering det existerar och veta hur de fungerar ingår också i mina mål. Jag har för avsikt att göra uppsatsen så lättläslig som möjligt, därför ska jag försöka vara väldigt tydlig med mina förklaringar. Man behöver inte vara någon expert inom kryptografi ämnet för att kunna följa de olika avsnitten i denna uppsats. Men det antas att läsaren har de grundläggande matematiska kunskaper som undervisas på universitetsnivå; detta är viktigt eftersom man måste kunna förstå matematiken bakom de olika uträkningarna som görs under arbetets gång. Vill man ha en snabb repetition kan man ta en titt på Appendix längst bak i denna uppsats. De viktigaste och mest grundläggande begreppen tas upp där, som man måste känna till om man ska jobba med krypteringen. 2 Schneier s.16 3 http://www.itkommissionen.se 7

RSA är idag den mest kända och mest flitigt använda krypteringsmetoden i hela världen. Därför faller det naturligt för mig att undersöka bland annat just denna algoritm. Att se vad det är för principer som används bakom den och ta reda på svårighetsgraden av RSA i praktiken står också på önskelistan. Varför har RSA blivit så populär och varför sägs RSA vara säkrare än andra krypteringsmetoder är två andra frågor som jag vill ge svar på. Dessutom ska jag undersöka den så kallade Merkle-Hellmans algoritm, som bygger på en annan krypteringsalgoritm jämfört med RSA. Det blir intressant att se hur dessa två krypteringsmetoder skiljer sig från varandra. Under arbetets gång ska jag göra några små krypteringsförsök i form av olika exempel till den teori som jag kommer att skriva om. Och jag har även för avsikt att skriva ett litet program i miniräknaren som ska underlätta alla de nödvändiga uträkningarna som måste göras under själva krypteringen. Det är inte heller så svårt att inse hur oerhört viktigt det är att känna till svagheter hos sitt verk för att kunna ha en chans att skydda sig mot en oönskad attack. Därför har jag som mitt sista mål att ta reda på vad det är som behövs för att forcera ett RSA krypto och om möjligt visa exempel på detta. 8

2. Viktiga begrepp 2.1 Kryptologi Innan vi går vidare, ska vi försöka klargöra några termer. Först har vi begreppet krypto som betyder algoritm, eller metod, för att förvanska meddelanden så att obehöriga inte kan läsa dem. Sedan har vi begreppet kryptologi som i sin tur delas in i två delområden: - Kryptografi, som handlar om hur man döljer ett meddelandets budskap för obehöriga, genom att på något förbestämt sätt förvanska detta meddelande. Då säger man att man krypterar ett meddelande. - Kryptoanalys, vilket är precis motsatsen till kryptografi. Denna del av kryptologi undersöker hur man forcerar, eller knäcker, ett krypto. Det kallas att dekryptera ett meddelande. Detta är precis vad de obehöriga försöker göra om de inte har tillgång till de hemliga nycklarna som kan återskapa den ursprungliga informationen. 4 2.2 Olika typer av krypton 2.2.1 Substitutionskrypton Kryptografi har sin historia ca 4000 år tillbaka då Egyptierna var första med att använda metoden. 5 En mycket enkel kryptering, eller omvandling av texten, som användes flitigt förr i tiden kallas för substitutionskrypton. Det innebär helt enkelt att man ersätter varje tecken i det känsliga meddelandet med ett antal andra tecken enligt en förutbestämd tabell, som både sändare och mottagare kommer överens om. Antag till exempel att man använder sig av ett alfabet på 28 bokstäver, då existerar det ca 300 000 000 000 000 000 000 000 000 000 möjliga nycklar. Om en angripare försöker forcera kryptot blir det praktiskt omöjligt för honom eller henne att testa alla möjliga kombinationer! 6 4 Schneier s.15 5 http://www.cyberinfo.se 6 http://w3.msi.vxu.se 9

Exempelvis: a-r, b-q, c-å, d-j, e-y, f-e, g-w, h-z, i-ä, j-u, k-p, l-m, m-a, n-g, o-v, p-s, q-n, r-h, s-i, t-f, u-k, v-x, w-o, x-l, y-d, z-t, å-c, ä-b. Då kan ordet Hello skrivas som ZYMMV. Även Julius Ceasar använde sig av substitutionskrypton. 7 Men istället för någon given tabell innebar hans krypteringsmetod att flytta framåt bokstäverna med tre; det vill säga A flyttas till D, K till N och så vidare. Denna metod fungerade bra på hans tid men lär absolut inte fungera idag. Det enklaste sättet att knäcka en sådan kryptering är att använda sig av en så kallad språkanalys, eller frekvensanalys, där man bland annat tittar på upprepade tecken och vanliga bokstavspar i kryptogrammet. Idag har kryptoanalysen blivit så bra och datorerna så kraftfulla att det nu krävs mycket mer avancerade metoder än denna. 2.2.2. Transpositionskrypton En annan grundläggande typ av krypton är transpositionskrypton. Den viktigaste skillnaden från substitutionskrypton är att tecknens identitet här förblir exakt detsamma. Metoden innebär istället att man ändrar på ordningsföljden av tecken i det hemliga meddelandet. Exempelvis: MATEMATIKEN AIANMEMTKTE Idag är allmänna krypton i regel en kombination av flera olika substitutions- och transpositionskrypton, där substitutionsdelen av krypton bygger på att man omvandlar alla bokstäver, tal och tecken i det känsliga meddelandet till siffror enligt en viss tabell oftast ASCII (American Standard Code for Information Interchange) eller ANSI-tabellen. Sedan använder man en rad olika matematiska formler och algoritmer för att kryptera numren. 8 7 Schneier s.272 8 http://www.wedran.com/se 10

2.3 Symmetriska och asymmetriska kryptosystem Fram till 1970-talet var alla av de dittills använda kryptosystem endast av den symmetriska typen; det vill säga man använde exakt samma nyckel vid såväl kryptering som dekryptering. Några exempel på symmetriska krypton är DES (Data Encryption Standard), AES (Advanced Encryption Standard) och IDEA 9, där DES är den äldsta och mest kända av dessa. År 1976 blev DES USA regeringens standardkrypteringsmetod. 10 Men år 1998 lyckades man att knäcka den, därför blev algoritmen ersatt av AES istället, år 2001. 11 Problemet med symmetriska krypton är nyckeldistributionen. Hur ska sändare och mottagare komma överens om vilken nyckel som ska användas? Exempelvis kan man tänka sig följande lösningar, men ingen av dem är bra nog: - Användning av telefonnätet. Detta distributionssätt är inte säkert mot avlyssning. - Personlig överlämning av nyckeln. Väldigt opraktiskt om man bor långt ifrån varandra. - Lita på en kurir. Problemet med detta är att det existerar många sändare och många mottagare och kurirerna vill säkert få betalt för sina tjänster. 12 Under 1975-1976 har Whitfield Diffe och Martin Hellman kommit på hur man kunde lösa detta problem. De föreslog att man skulle använda sig av ett asymmetriskt krypto istället, vars grundprincip bygger på att man använder två helt olika nycklar - en vid kryptering samt en vid dekryptering. Man krypterar med den öppna nyckeln som är tillgänglig för allmänheten, och man dekrypterar med den privata nyckeln som är känd endast av dess innehavare. Tyvärr fungerade Diffes och Hellmans underbara idé enbart i teorin i praktiken kunde de inte ta fram någon asymmetrisk krypteringsalgoritm. Dock, sedan deras utmärkta idé var introducerad har många försökt att utveckla en asymmetrisk krypteringsalgoritm och till slut har man faktiskt lyckats med detta. Men de flesta nya metoder var antingen för osäkra eller opraktiska för att man skulle kunna använda dem. Detta berodde främst på två saker. Antingen krävde algoritmen att man använde en nyckel som var mycket stor eller så fick man att den slutliga chiffertexten var 9 http://www.cyberinfo.se 10 Schneier s.305 11 Schneier s.308 12 http://w3.msi.vxu.se/~pa/seminarier/puv050224.pdf 11

mycket längre än den ursprungliga klartexten. Bland alla dessa algoritmer fanns det ändå några som fungerade bra, men endast för vissa specifika ändamål. Några dög endast till distributionen av nycklar, vissa andra fungerade bra om man ville skapa ett krypto och tredje passade utmärkt för de elektroniska signaturerna. Men ingen algoritm täckte alla dessa tre områden samtidigt. År 1977 har dock två dataloger Ronald Rivest och Adi Shamir tillsammans med en matematiker Leonard Adleman 13 trots allt lyckats att introducera ett av de första asymmetriska kryptosystem som verkligen fungerade och som var lätt att förstå och framför allt lätt att använda. Algoritmen fungerade bra både för att skapa chiffertext och för att skapa elektroniska signaturer. Metoden kallades för RSA efter dess uppfinnare och algoritmen används även i våra dagar. I nästa avsnitt ska vi titta lite närmare på hur RSA fungerar och vad det är som gör algoritmen så säker. Ett annat exempel på ett asymmetriskt kryptosystem är en så kallad Merkle-Hellmans kappsäcks metod. Senare tittar vi lite närmare även på denna metod. Det enda problemet med RSA algoritmen är att den fungerar väldigt långsamt jämfört med till exempel den symmetriska motsvarigheten DES. Och arbetstiden förlängs betydligt om man tar större mängd data. Därför används RSA i praktiken mest för att kryptera kortare meddelanden. Det kan exempelvis röra sig om att kryptera privata nycklar av andra krypteringssystem som fungerar snabbare än RSA. 14 3. RSA algoritmen 3.1 Generering av primtal En ytterst viktig ingrediens i RSA algoritmen är de så kallade primtal. Med ett primtal anses ett heltal, större än ett och som endast kan delas med sig själv och ett. Exempel på sådana tal är 2, 3, 5, 7, 11 och 13. Men det är bevisat att även tal som 73, 2 521, 2 365 347 734 339 och (2 756 839-1) hör också till primtal. 15 Om ett heltal d delar både heltalet m och heltalet n, det vill säga att resten blir lika med noll vid divisionen av m med d respektive n med d, kallas då d för en gemensam delare till m och n. Två heltal m och n sägs vara relativt prima om den enda gemensamma 13 http://w3.msi.vxu.se/~pa/seminarier/puv050224.pdf 14 http://www.wedran.com/se 15 Schneier s.280 12

positiva delaren de har är 1. Exempelvis är talen 15 och 22 relativt prima, men inte 12 och 18, eftersom de två sist nämnda har flera gemensamma delare, nämligen: 1, 2, 3 och 6. Mängden av primtal är oändligt stort och dessa tal har som sagt oerhört stor betydelse inom kryptografi. När det gäller asymmetriska krypton använder man nuförtiden oftast nycklar, primtal, av längden som är minst 768-bitar, helst 1024 eller 2048, för bästa säkerhet. 16 Sådana tal kan vara upp till 600 siffror långa. Naturligtvis blir även dekrypteringen mycket långsammare, men samtidigt försvårar man forceringen betydlig, vilket är just meningen med detta. Således, ju längre tal man väljer desto säkrare blir krypteringen. En annan viktig fråga som man bör ställa sig är hur får man reda på om ett heltal är ett primtal eller inte, det vill säga hur genererar man ett primtal? Det existerar ganska många olika algoritmer som kan hjälpa till på traven, men tyvärr ger ingen av dem en säkerhet på hundra procent. Det enda riktigt säkra sättet att avgöra om ett heltal p är ett primtal eller inte är att dela det med varje tal från 2 till roten ur p. Vilket är ganska krävande om det rör sig om stora siffror. Ett sätt att underlätta jobbet är att använda sig av hjälpsatser. En av dem kallas för Fermats lilla sats, ett resultat i talteorin. Fermats lilla sats säger att om p är ett primtal, så gäller för varje heltal a att a (p-1) 1(mod p). Om villkoret inte är uppfyllt kan vi konstatera direkt att p är inget primtal och vi slipper slösa bort våra krafter på att dela p med alla tal från 2 till roten ur p. Om villkoret däremot är uppfyllt får vi det bara bekräftad att p möjligtvis är ett primtal. Dock, kan vi fortfarande inte vara hundra procent säkra på det. Det existerar nämligen tal som uppfyller villkor enligt Fermats lilla sats, men som inte är prima. Sådana tal kallas för Carmichaeltal (eller absolut pseudoprimtal). 17 Det är osäkert att använda dessa tal vid krypteringen, men de är ytterst ovanliga. Således, om villkoren i Fermats lilla sats är uppfyllt måste p testas ytterliggare för att vi ska kunna avgöra om p är ett primtal eller inte. 16 http://www.wedran.com/se 17 http://w3.msi.vxu.se/~pa/seminarier/puv050224.pdf 13

Låt oss nu ta ett exempel på hur Fermats lilla sats fungerar. Antag att vi vill testa talet 7, det vill säga p = 7. Välj då ett godtyckligt heltal a som inte är delbart med talet 7. Låt a = 3. enligt Fermats lilla sats får vi då 3 (7-1) = 3 6 = 729 1 ( mod 7). Således, villkoret enligt Fermats lilla sats är uppfyllt. Vi testar p ytterliggare genom att dela det med 2 och 3. (Det är ingen idé att dela det med 4, 5 och 6 för att resultatet ändå inte kommer att bli något heltal). Vi konstaterar att 7 är relativt prim med både 2 och 3. Alltså är heltalet 7 ett primtal. Antag nu att vi vill testa heltalet 8 istället, det vill säga p = 8. Vi väljer a = 3 och får då 3 (8-1) =3 7 = 2187 3 (mod 8). Det vill säga villkoret för Fermats lilla sats är inte uppfyllt. Därför kan vi konstatera direkt att heltalet 8 inte är ett primtal. Och det ser man ju eftersom 8 är delbart med både 2 och 4! Mer om generering av primtal kan du läsa i Appendix. 3.2 Kryptering med RSA 3.2.1 Teori RSA är en gammal krypteringsmetod, men den är säker och beprövad. Många företag anlitar sig idag på just denna algoritm, inklusive giganterna Microsoft, Apple, Sun och Novell. Att denna metod har blivit så populär beror på att den är så lätt att förstå och framför allt relativt lätt att tillämpa i praktiken. Andra fördelar med RSA är att algoritmen är en av de få som kan användas både för att kryptera ett meddelande och för att skapa elektroniska signaturer. Dessutom garanterar RSA en säker utväxling av nycklar, en ytterst viktig egenskap som de symmetriska algoritmerna saknar. Man använder en öppen nyckel för att kryptera ett meddelande, men bara mottagaren kan dekryptera chiffertexten till klartexten med sin privata nyckel. Och det är just det som är bland annat fördelen med RSA att alla har varsin nyckel, ett varsitt lösenord. Elektroniska signaturer använder man exempelvis för att säkerställa avsändarens identitet och meddelandets integritet, det vill säga för att säkerställa att avsändaren är äkta 14

och att meddelandet inte har ändrats på vägen. För att skapa elektroniska signaturer använder man så kallade hashfunktioner (även kallade enkelriktade funktioner) för att först räkna ut en kort kontrollsumma på meddelandet (message digest). Kontrollsumman består av en till synes meningslös serie bokstäver, siffror och andra tecken och den är ett slags krypterat kondesat (hash) av meddelandet. Kontrollsumman är mycket kortare än själva meddelandet, dessutom kan man inte räkna ut det ursprungliga meddelandet med hjälp av kontrollsumman. Man får inte heller samma kontrollsumma som resultat av två olika meddelanden, även om det bara är en enda bokstav som två meddelanden skiljer sig på. Och det är just kontrollsumman som krypteras med den privata nyckeln. Det krypterade kondensatet bifogas sedan meddelandet, som kan vara krypterat eller skickas i klartext. När mottagaren tar emot meddelandet dekrypterar han först den elektroniska signaturen med hjälp av avsändarens publika nyckel. Sedan räknar mottagaren ut kontrollsumman på själva meddelandet han fick. Till sist jämför han den beräknade kontrollsumman med kontrollsumman som dekrypterades med avsändarens publika nyckel. Om dessa två kondensaten stämmer överens med varandra kan mottagaren lita på avsändarens identitet och meddelandets integritet, det vill säga att meddelandet inte har förändrats på vägen över nätet. 18 Ovanstående teori kan illustreras i följande figur 19 : 18 http://sv.wikipedia.org/wiki/kryptering 19 http://www.mstcindia.co.in 15

Nu ska vi gå igenom den teori som behövs för att kryptera med RSA. För att få fram den offentliga respektive den privata nycklarna använder man två slumpvist valda stora primtal p och q. För att få maximal säkerhet måste p och q vara av ungefär samma bitlängd, men skillnaden mellan p och q bör inte vara för liten heller. Sedan beräknar man produkten n = p*q. Efteråt väljer man slumpvist en krypteringsnyckel e, sådan att e och produkten (p-1)*(q-1) ska vara relativt prima. Flera olika alternativ på e är möjliga, men vissa av dem är dock mindre lämpliga att användas av olika anledningar. Värdena e = 3, e = 17 och e = 65537 (=2 16 +1) är bland de vanligaste som används 20. Det beror bland annat på att ett litet värde på e gör att man får den snabbaste beräkningen; med ett stort värde på e får man ett säkrare chiffer. Andra anledningar till att man väljer just e = 65537 är att talet har endast två ettor i binärform, vilket också gör att beräkningen går snabbare. Man bör dock välja ett ännu större värde på e om meddelandet m är litet eller om man ska skicka samma eller nästan samma meddelande till flera mottagare. Sist men inte minst behöver vi en hemlig nyckel d som ska användas vid dekrypteringen. Den får vi fram med hjälp av utökad Euklides algoritm 21. Relationen mellan d och e ska uppfylla villkoret: ed 1 mod (p-1)(q-1) eller med andra ord d e -1 mod (p-1)(q-1). Lägg märke till att d och n är också relativt prima. Således, talen e och n är de öppna nycklarna, medan d utgör den privata nyckeln. Primtalen p och q behövs inte längre, dem kan man kasta bort, men absolut inte avslöja! Annars blir hela algoritmen värdelös. Vid krypteringen av ett långt meddelande m måste man alltid först dela det i flera mindre digitala block m 1, m 2, m 3 m i. Varje blocks längd ska nämligen vara mindre än n. Om man behöver kryptera ett bestämt antal block, kan man alltid lägga till några extra nollor till vänster om blocken. Denna åtgärd påverkar inte resultatet och garanterar att man alltid får en längd som är mindre än n. Kryptogrammet c kommer då att bestå av block c 1, c 2, c 3 c i. Krypteringsformeln är ganska enkel och ser ut så här: e c i m i (mod n), där m 1, m 2, m 3 m i sätts i tur och ordning in i formeln efter varandra. 20 Schneier s.525 21 Appendix 16

d Dekrypteringsformeln kan då skrivas som m i c i (mod n), eftersom: d c i mod n = (m e i ) d ed k(p-1)(q-1)+1 k(p-1)(q-1) mod n = m i mod n = m i mod n = m i m i mod n = =m i *1(mod n) = m i (mod n) ger tillbaka det ursprungliga meddelandet m. All ovanstående teori kan man nu sammanfatta i en liten tabell: De öppna nycklarna: n produkten av två slumpvist valda primtal p och q (som måste bevaras hemliga) e relativt prim med produkten (p-1)(q-1) Den privata nyckeln: d e -1 mod (p-1)(q-1) Krypteringsformeln: c m e (mod n) Dekrypteringsformeln: m c d (mod n) Omvänd ordning är möjligt. Det vill säga meddelandet kan vara krypterad med d och sedan dekrypterad med e; det spelar ingen roll vilken man använder först. 22 3.2.2 RSA i praktiken. Antag nu att vi vill skicka en ytterst hemlig information via ett osäkert medium. För överskådlighetens skull och bara för att visa hur RSA-metoden fungerar i praktiken antar vi att meddelandet ser ut så här: (35+7)/(57-1) Innan själva krypteringen utförs kodar vi varje tecken i ovanstående meddelande enligt Tabell 1 nedan. Detta är återigen bara ett enkelt exempel på ett substitutionskrypto. Men som vi har redan nämnt tidigare så använder man i verkligheten andra bestämda och mer avancerade tabeller, oftast ASCII eller ANSI-tabellen. 22 Schneier s.522-523 17

Tabell 1 1 = 15 5 = 19 9 = 24 * = 28 2 = 16 6 = 21 0 = 25 / = 29 3 = 17 7 = 22 + = 26 ( = 31 4 = 18 8 = 23 - = 27 ) = 32 Vid kodningen undviker man nollan eftersom missförstånd kan uppstå när man sedan ska använda krypteringsformlerna, vilket i sin tur kan leda fram till fel dekryptering. Alltså kan vi nu koda uttrycket (35+7)/(57-1) som: m = 31171926223229311922271532 Sedan väljer vi slumpvist ut två primtal. Vi har påpekat tidigare att i verkligheten använder man stora och helst ungefär lika långa primtal för att uppnå maximal säkerhet, men återigen för överskådlighetens skull nöjer vi oss med två mindre primtal. Tag till exempel p = 59 och q = 83. Nu beräknar vi produkten n = p*q av dessa två tal, som då blir 59*83 = 4897. Efteråt beräknas värdet av produkten (p-1)(q-1): 58*82 = 4756. Nyckeln e måste nu vara relativt prim med talet 4756. Säg att vi väljer e = 17. Till slut beräknas motsvarande värde på d, sådan att d e -1 mod (p-1)(q-1), det vill säga 17-1 (mod 4756). Värdet på d utgör den privata nyckeln och det får man fram med hjälp av utökad Euklides algoritm: 4756 = 279*17+13 17 = 1*13+4 13 = 3*4+1 4 = 1*4 Om man nu går baklänges i uträkningen ovan får man då följande: 1 = 13-3*4 = 1*13-3(17-1*13) = 1*13-3*17+3*13 = 4*13-3*17 = 4*(4756-279*17)-3*17 = 4*4756-1116*17-3*17 = 4*4756-1119*17 Det vill säga resultatet blir 1 = 4*4756 1119*17. Men 4*4756 0 (mod 4756); detta leder till att sambandet ovan blir ekvivalent med 1-1119*17 (mod 4756). 18

Alltså d = 17-1 (mod 4756) -1119 (mod 4756) 3637 (mod 4756), det vill säga d=3637, och det är den privata nyckeln, som man kommer att använda sig av när man sedan ska dekryptera chiffertexten. Lägg märke till att d och n är också relativt prima. Talen e och n är de öppna nycklarna, medan d utgör den privata nyckeln. Talen p och q behövs inte längre, så dem kan man göra sig av med, men än en gång: de ska absolut inte avslöjas! Innan vi ska kryptera meddelandet m ska vi dela upp det i minde digitala block, vars längd ska vara minde än n. Det är också viktigt att längden på alla dessa block ska vara lika. Säg till exempel att vi väljer längden 3. Om det inte går att dela m jämnt kan man i så fall lägga till nollor från vänster, vilket påverkar inte slutresultatet. Vi får då följande: m 1 = 311 m 4 = 232 m 7 = 222 m 2 = 719 m 5 = 293 m 8 = 715 m 3 = 262 m 6 = 119 m 9 = 032 Nu ska vi kryptera varje block för sig med hjälp av krypteringsformeln c i m e i (mod n). Om vi testar att mata in nedanstående värden i en vanlig miniräknare får vi då gigantiska siffror att jobba med. Men eftersom jag har en programmerbar miniräknare (Texas Instruments TI-83 Plus) har jag själv försökt att programmera den. Längst bak i uppsatsen hittar du en bilaga på det. 23 Med hjälp av programmet fick jag då följande resultat: c 1 = 311 17 4859 (mod 4897) c 6 = 119 17 1476 (mod 4897) c 2 = 719 17 1430 (mod 4897) c 7 = 222 17 0960 (mod 4897) c 3 = 262 17 2625 (mod 4897) c 8 = 715 17 1403 (mod 4897) c 4 = 232 17 3749 (mod 4897) c 9 = 032 17 2581 (mod 4897) c 5 = 293 17 1737 (mod 4897) 23 Se Bilaga 1 19

Alltså, chiffertexten som vi får är: c = 4859 1430 2625 3749 1737 1476 0960 1403 2581 När vi nu ska dekryptera chiffertexten ska varje block dekrypteras separat med hjälp av den privata nyckeln d. Man använder då dekrypteringsformeln: m i c d i (mod n). Om man först skrev programmet för att underlätta föregående uträkningar, skulle man den här gången inte klara sig utan programmet alls! För nu rör det sig om så stora tal att inte ens en miniräknare klarar av dem och man får helt enkelt följande felmeddelande i rutan: ERR: OVERFLOW 1: Quit 2. Goto Med hjälp av programmet får man fram följande resultat: m 1 = 4859 3637 311 (mod 4897) m 6 = 1476 3637 119 (mod 4897) m 2 = 1430 3637 719 (mod 4897) m 7 = 0960 3637 222 (mod 4897) m 3 = 2625 3637 262 (mod 4897) m 8 = 1403 3637 715 (mod 4897) m 4 = 3749 3637 232 (mod 4897) m 9 = 2581 3637 032 (mod 4897) m 5 = 1737 3637 293 (mod 4897) Vilket är precis det kodade meddelandet som vi hade innan vi krypterade det: m = 311719262232293119222715032. Enligt Tabell 1 kan vi nu avläsa att det hemliga meddelandet är (35+7)/(57-1)! 3.2 Varför anses RSA vara en stark krypterings algoritm? RSA anses vara en beprövad och mycket säker krypteringsalgoritm. Men vi bör ställa oss frågan varför det är så. Vad är det som egentligen gör algoritmen så stark? Svaret på frågan hittar vi i några mycket speciella och mycket betydelsefulla egenskaper hos RSA. Metoden för krypteringen är nämligen offentlig, medan metoden för dekrypteringen är 20

hemlig. Trots att själva principen för dekrypteringen är känd av alla, hjälper det inte speciellt mycket när vi ska forcera kryptot. Dekrypteringen är nämligen ytterst beroende av vissa tal som hålls hemliga och som obehöriga inte kan räkna ut eller åtminstone har väldigt stora svårigheter att räkna ut. 24 Det som skulle vara mest tragiskt vore om en angripare skulle hitta den privata nyckeln d. Det skulle innebära att en obehörig kunde läsa alla meddelanden och kunde också utan problem förfalska signaturer. Nyckeln d kan lätt bestämmas om man känner till de två primtalen p och q. Men det skulle i sin tur innebära att man fick först faktorisera talet n, som är produkten av p och q. Och det är just här som hela svårigheten ligger! För om man inte känner till primtalen p och q, blir det genast betydligt svårare att beräkna den privata nyckeln d, även om motsvarande öppna nycklar är kända, det vill säga talen n och e. 25 Faktoriseringen av stora tal hör bland de svåraste matematiska problemen som finns. Exempel: Försök att faktorisera följande tal: 1. 35 2. 477 310 661 Svar: 1. p = 5 och q = 7, samt 2. p = 17389 och q = 27449. 26 Inte så lätt eller hur? Tänk dig då att försöka faktorisera ett ännu större tal! Faktoriseringen av n anses vara det uppenbaraste sättet att knäcka RSA. Dock är detta bara ett antagande. Ingen har någonsin bevisat att man måste faktorisera n för att få fram den privata nyckeln. Det är möjligt att man i kryptoanalys kommer på en helt annan dekrypteringsalgoritm för RSA. Men om den nya metoden kommer att hjälpa oss att få fram den privata nyckeln d, kan man då lika gärna använda metoden för faktoriseringen av stora tal. Än så länge har dock ingen i hela världen lyckats göra detta. Man kan också forcera RSA om man gissar värdet på produkten (p-1)(q-1). Men denna variant är inte direkt lättare än faktoriseringen av n. 27 24 http://www.math.su.se 25 http://www.isk.kth.se 26 http://w3.msi.vxu.se/~pa/seminarier/puv050224.pdf 27 Schneier s.525-526 21

Man kanske kan tänka sig ett alternativ där man testar alla möjliga kombinationer med en tillräckligt kraftfull dator tills man hittar de rätta värdena. Så kan man tänka förstås, men frågan är bara hur lång tid det tar. Hundratals datorer ihopkopplas av studenter på stora universitet och de alla arbetar i dagar och veckor med att dekryptera ett meddelande. Alternativet visar sig faktiskt vara ännu mindre effektiv än faktoriseringen av n! 28 Om man tror att man är så pass smart att man försöker skapa en databas med alla möjliga primtal, för att sedan använda denna till dekrypteringen av RSA algoritmen, så kan man konstatera direkt att det inte är någon bra idé heller. I boken Applied Cryptography har man beskrivit det ungefär så här: även om man kunde spara 1Gb data på en minnesenhet som väger bara ett gram, skulle databasen över alla primtal av längden upp till 512-bit vara så pass tung att den skulle kollapsa i ett svart hål. Således, det är ingen idé att ens försöka. Sammanfattningsvis, än så länge kan vi nog känna oss ganska trygga. Men RSA och många andra liknande assymetriska kryptosystem som används så flitigt idag kommer att bli helt värdelösa om man någon dag i framtiden lyckas lösa det stora faktoriserings problemet. 3.4 Forcera RSA Som vi har konstaterat tidigare anses RSA vara en ganska säker krypteringsalgoritm. I föregående avsnitt har vi förklarat varför det är så oerhört svårt att knäcka metoden. Trots det, finns det vissa andra knep som man kan använda sig av för att få fram den hemliga informationen eller för att förfalska en signatur. Man behöver inte ens känna till den privata nyckeln, däremot måste man få lite hjälp på traven av själva nyckelinnehavaren. Och det är just innehavaren av d som brukar vara den som hjälper till utan att ens vara medveten om det! I följande avsnitt ska vi visa hur man kan gå tillväga för att knäcka RSA och även visa varför flera användare med olika nycklar bör inte använda samma modulo n för kryptering av ett meddelande. Kryptot blir nämligen mycket känslig, och med lite kunskap kan meddelandet därmed bli lätt dekrypterad. Vi tittar lite närmare på fyra olika fall 29. 28 http://www.wedran.com/se 29 Schneier ss.526-528 22

3.4.1 Scenario 1 Antag att genom avlyssning får Eva tag på Alices hemliga meddelande c, som är krypterad med RSA-algoritmen (med hjälp av Alices publika nyckel e). Nu vill Eva läsa detta meddelande; det vill säga hon vill ta reda på m. Matematiskt framställs m av formeln: m c d (mod n). För att göra detta tar Eva fram de båda publika nycklarna e och n och sedan väljer hon ett slumpvist tal r (som måste vara mindre än n). Med hjälp av dessa värden utför hon nu följande beräkningar: x r e (mod n) y xc (mod n) t r -1 (mod n) Eftersom x r e (mod n), kan vi då skriva om sambandet som r x d (mod n). 30 Nu ber hon Alice att kryptera y med hjälp av Alices privata nyckel d. Alice har ju inte sett y förut. Utan att ens kanske bli misstänksam krypterar hon y och skickar sedan u y d (mod n) tillbaka till Eva. Sedan återstår det för Eva att göra en sista enkel beräkning: t*u = r -1 y d = r -1 x d c d c d (mod n) m (mod n). (r -1 och x d är ju varandras inverser r -1 x d =1(mod n) ). Det vill säga Eva får fram Alices ursprungliga meddelande m! 30 Dekrypterings formeln 23

Exempel med siffror: Antag att m = 135872, p = 17 och q = 31 n = pq = 17*31 = 527 (p-1)(q-1) = 16*30 = 480 Vi väljer e = 11 som är relativt prim med 480. Använd nu utökad Euklides Algoritm för att få fram den privata nyckeln d: d e -1 (mod (p-1)(q-1)) d 11-1 (mod 480) 480 = 43*11+7 11 = 1*7+4 7 = 1*4+3 4 = 1*3+1 3 = 1*3 Går vi nu baklänges i Euklides algoritm får vi då följande samband: 1 = 4-1*3 = 4-1*(7-1*4) = = 4-1*7+1*4 = 2*4-1*7 = = 2*(11-1*7)-1*7 = 2*11-2*7-1*7 = = 2*11-3*7 = 2*11-3(480-43*11) = = 2*11-3*480+129*11 =131*11-3*480 Det vill säga 1 = 131*11-3*480 Men eftersom vi räknar modulo 480 blir därför (-3)*480 0 (mod 480) och kvar blir sambandet 11*131 1 (mod 480), detta är i sin tur ekvivalent med sambandet 11-1 131 (mod 480). Alltså d = 131 Nu ska m = 135872 krypteras. Vi delar upp m i mindre block, eftersom längden av m i måste vara mindre än längden av n. m 1 = 13, m 2 = 58 och m 3 = 72. Sedan krypterar vi respektive block med krypteringsformeln: c 1 = 13 11 344 (mod 527) c 2 = 58 11 337 (mod 527) c 3 = 72 11 081 (mod 527) 24

Alltså, chiffertexten som sänds och som Eva lyckas att få tag i är c = 344337081. Slumpvist väljer vi ut ett tal r, till exempel r = 21, där r ska vara mindre än n. Sedan utför vi följande beräkningar: 1. x r e (mod n) x = 21 11 353 (mod 527) 2. y 1 xc 1 (mod n) y 1 = 353*344 222 (mod 527) y 2 xc 2 (mod n) y 2 = 353*337 386 (mod 527) y 3 xc 3 (mod n) y 3 = 353*081 135 (mod 527) 3. t = r -1 (mod n) t = 21-1 (mod 527) Återigen används utökad Euklides Algoritm: 527 = 25*21+2 21 = 10*2+1 2 = 1*2 Går vi baklänges i Euklides algoritm får vi då följande samband: 1 = 21-10*2 = 21-10(527-25*21) = = 21-10*527+250*21 = = 251*21-10*527 Det vill säga 251*21 1 (mod 527) 21-1 251 (mod 527) Alltså t = 251 Sedan krypteras y med den privata nyckeln d och vi får då: d u 1 y 1 (mod n) u 1 = 222 131 273 (mod 527) d u 2 y 2 (mod n) u 2 = 386 131 164 (mod 527) d u 3 y 3 (mod n) u 3 = 135 131 458 (mod 527) Nu återstår det bara en sista enkel uträkning: tu 1 (mod n) 251*273 13 (mod 527) = m 1 tu 2 (mod n) 251*164 58 (mod 527) = m 2 25

tu 3 (mod n) 251*458 72 (mod 527) = m 3 Vilket är precis det ursprungliga meddelandet m = 135872! 3.4.2 Scenario 2 Antag att Trent är en advokat och antag också att Alice representerar en avsändare som vill skicka en elektronisk handling till Trent som han måste skriva under (i detta fall menas kryptering med RSA algoritmen av hela dokumentet) för att bevittna att handlingen är äkta. Trent krypterar meddelandet och sedan skickar han handlingen tillbaka till Alice. Det är så det ska gå till om man ska bevittna en äkta handling. Antag nu att Mellory är en annan avsändare som vill att Trent ska kryptera en viss handling som Trent i vanliga fall aldrig skulle bevittna (till exempel kan det gälla ett förfalskad datum på handlingen eller att man har förfalskat vem handlingen gäller). Vi kallar en sådan handling för m. Syftet med detta scenario är att visa hur Mellory kan lura Trent till att bevittna m. Först väljer Mellory ut ett slumpvist tal x och beräknar y x e (mod n). Nyckeln e är ju publik (den ska vara publicerad, för att andra skall kunna ha en möjlighet att kontrollera Trents signaturer), så Mellory har inga problem med att få fram den. Efteråt beräknar Mellory m ym (mod n) och skickar sedan den nya handlingen m för kryptering till Trent. Och det är just här som det avgörande misstaget från Trents sida sker. Om Trent är inkonsekvent och blint krypterar Mellorys handling m, bevittnar han därmed helt omedvetet det förfalskade meddelandet m! Och detta går till på följande sätt: Efter krypteringen skickar nämligen Trent meddelandet m d (mod n) tillbaka till Mellory. Nu återstår det för Mellory endast att räkna ut värdet på ((m d mod n)*x -1 )(mod n) som är lika med m d (mod n) och som i sin tur är exakt den signerade handlingen m! 31 Detta illustreras i figuren på nästa sida. 31 Schneier s.527 26

Exempel med siffror: Tag p = 17 och q = 23 n = 17*23 = 391 (n-1)(q-1) = 16*22 = 352 Antag att m = 173569 m 1 = 17, m 2 = 35 och m 3 = 69. e är en publik nyckel, så den är känd av både Trent och Mellory. Tag exempelvis e = 59, som är då relativt prim med n. d = e -1 (mod (p-1)(q-1)) d = 59-1 (mod 352) Utökad Euklides Algoritm ger: 352 = 5*59+57 59 = 1*57+2 57 = 28*2+1 2 = 1*2 Går vi baklänges i ovanstående Euklides algoritm får vi då följande samband: 1 = 57-28*2 = 57-28(59-1*57) = = 57-28*59+28*57 = 29*57-28*59 = 29(352-5*59)-28*59 = 29*352-173*59 Med andra ord 1-173*59 (mod 352) Alltså, d = 59-1 -173 (mod 352) 179 (mod 352) 27

Således, d = 179 är Trents privata nyckel. Slumpvist väljer Mellory ut ett tal x, till exempel x = 7 och sedan beräknar han y = 7 59 14 (mod 391). Alltså, m 1 ym 1 (mod n) m 1 = 14*17 238 (mod 391) m 2 ym 2 (mod n) m 2 = 14*35 099 (mod 391) m 3 ym 3 (mod n) m 3 = 14*69 184 (mod 391) Således, meddelande som Mellory skickar till Trent för kryptering är m = 238099184. Trent använder nu sin privata nyckel d för att kryptera m: d m 1 (mod n) = 238 179 374 (mod 391) d m 2 (mod n) = 099 179 228 (mod 391) d m 3 (mod n) = 184 179 092 (mod 391) Nu skickar Trent den krypterade handlingen (m d mod n) = 374228092 tillbaka till Mellory. När Mellory får det, räknar han ut m d ((m d mod n)*x -1 ) (mod n), som är precis den krypterade handlingen m! Vi behöver nu därför beräkna x -1 (mod n), det vill säga 7-1 (mod 391). Utökad Euklides Algoritm ger: 391 = 55*7+6 7 = 1*6+1 6 = 1*6 Går vi baklänges i Euklides algoritm ovan får vi då följande samband: 1 = 7-1*6 = 7-1*(391-55*7) = =7-1*391+55*7 = 56*7-1*391 Detta är i sin tur ekvivalent med 1 56*7 (mod 391) Det vill säga 7-1 56 (mod 391). Alltså, ((m 1 d mod n)*x -1 )(mod n) 374*56 221 (mod 391) ((m 2 d mod n)*x -1 )(mod n) 228*56 256 (mod 391) ((m 3 d mod n)*x -1 )(mod n) 092*56 069 (mod 391) 28

Således, den krypterade handlingen m är 221256069, vilket borde exakt vara lika med m d (mod n), så vi kontrollerar: m 1 d (mod n) 17 179 221 (mod 391) m 2 d (mod n) 35 179 256 (mod 391) m 3 d (mod n) 69 179 069 (mod 391) Således, m = 221256069 - vilket överensstämmer med ovanstående värde! Det vill säga Mellory fick sin handling m bevittnad 3.4.3 Scenario 3 Eva vill att Alice ska signera en viss handling m 3 (med signering menas här kryptering av hela dokumentet med RSA algoritmen). För att få detta gjort tar hon fram två andra meddelanden - m 1 och m 2 - sådana att: m 3 m 1 m 2 (mod n). Om Eva kan övertala Alice att signera m 1 och m 2, kommer det i så fall att vara ekvivalent med signeringen av m 3. Detta får man fram på följande sätt: d d d m 3 (m 1 mod n)*(m 2 mod n). Som en slutsats kan man konstatera att RSA bör aldrig användas för kryptering av elektroniska handlingar som obehöriga vill att man ska kryptera. 32 Man ska vara extremt försiktig med det, annars kan det i vissa fall leda till tragiska följder. Exempel med siffror: Tag p = 29 och q = 41 n = pq = 29*41 = 1189. (p-1)(q-1) = 28*40 = 1120. Om e = 641 d = e -1 (mod (p-1)(q-1)) = 641-1 (mod 1120). Utökad Euklides Algoritm ger: 1120 = 1*641+479 641 = 1*479+162 479 = 2*162+155 162 = 1*155+7 155 = 22*7+1 7 = 1*7 32 Schneier s.528 29

Går man baklänges i Euklides algoritm ovan får man då följande samband: 1 = 155-22*7 = 155-22(162-1*155) = = 155-22*162+22*155 =23*155-22*162 = = 23(479-2*162)-22*162 = 23*479-46*162-22*162 = = 23*479-68*162 = 23*479-68(641-1*479) = = 23*479-68*641+68*479 =91*479-68*641 = = 91(1120-1*641)-68*641 = 91*1120-91*641-68*641 = = 91*1120-159*641 Detta är i sin tur ekvivalent med: 1-159*641 (mod 1120) eftersom 91*1120 0 (mod 1120). 641-1 -159 (mod 1120) 641-1 961 (mod 1120). Alltså d = 961 är Alices privata nyckel. Antag nu att m 1 = 379, m 2 = 115 och m 3 = 781 (då är villkoret m 3 m 1 m 2 (mod n) uppfyllt). Och antag sedan att Eva får Alice att kryptera m 1 och m 2, det vill säga: m d 1 (mod n) 379 961 338 (mod 1189) m d 2 (mod n) 115 961 115 (mod 1189) d d d m 3 (m 1 mod n)*(m 2 mod n) 338*115 822 (mod 1189), vilket är precis den krypterade handlingen m 3! Kontroll: m d 3 (mod n) 781 961 822 (mod 1189), vilket överensstämmer med ovanstående värde! 3.4.4 Attack vid användning av gemensam modulo När det gäller en grupp användare kan man tänka sig ett alternativ där alla deltagare blir tilldelade ett gemensamt värde på n, men var och en av dem får istället sina egna nycklar e respektive d. Tyvärr kommer inte denna variant att fungera och här ska vi förklara varför. 30

Antag att ett och samma meddelande har krypterats med två olika nycklar e 1 respektive e 2, men man använde samma modulo n. Och antag sedan att de båda nycklarna är relativt prima - vilket är också alltid fallet. Då är det möjligt att få fram klartexten m, det vill säga det ursprungliga meddelandet, utan att ha någon kännedom alls om de privata nycklarna d 1 och d 2. Låt oss se hur detta kan gå till. Givet: Klartexten m, två publika nycklar e 1 och e 2 och gemensam modulo n. Två olika användare krypterar nu m: c 1 m e1 (mod n) c 2 m e2 (mod n) n, e 1, e 2, c 1 och c 2 är kända av alla. Eftersom e 1 och e 2 är relativt prima, kan man med hjälp av utökad Euklides Algoritm bestämma r och s, sådana att re 1 +se 2 = 1. Antingen r eller s kommer nu att vara negativt; antag att det blir r. -1 Återigen används utökad Euklides Algoritm för att bestämma c 1 (mod n). Slutligen beräknas (c -1 1 ) -r (c s 2 ) m (mod n), vilket är exakt det ursprungliga meddelandet m! Slutsats: använd aldrig samma modulo n för en grupp användare! 33 Exempel med siffror: Antag att m = 4729, där m 1 = 47 och m 2 = 29. p = 19 och q = 37 n = 19*37 = 703 (gemensam modulo för alla användare). e 1 = 317 och e 2 = 223 e1 c 11 m 1 (mod n) c 11 = 47 317 100 (mod 703) e1 c 12 m 2 (mod n) c 12 = 29 317 014 (mod 703) Alltså c 1 = 100014 e2 c 21 m 1 (mod n) c 21 = 47 223 232 (mod 703) e2 c 22 m 2 (mod n) c 22 = 29 223 452 (mod 703) Alltså c 2 = 232452 n, e 1, e 2, c 1 och c 2 är publika (de är kända av alla). 33 Schneier s.528 31

Eftersom e 1 och e 2 är relativt prima, existerar det r och s sådana att re 1 +se 2 = 1. Utökad Euklides Algoritm ger: 317 = 1*223+94 223 = 2*94+35 94 = 2*35+24 35 = 1*24+11 24 = 2*11+2 11 = 5*2+1 5 = 1*5 Går vi nu baklänges i Euklides Algoritm ovan får vi då följande samband: 1 = 11-5*2 = 11-5(24-2*11) = = 11-5*24+10*11 = 11*11-5*24 = = 11(35-1*24)-5*24 = 11*35-11*24-5*24 = = 11*35-16*24 = 11*35-16(94-2*35) = = 11*35-16*94+32*35 = 43*35-16*94 = = 43(223-2*94)-16*94 =43*223-86*94-16*94 = = 43*223-102*94 = 43*223-102(317-1*223) = = 43*223-102*317+102*223 = 145*223-102*317 Således, sambandet ovan är 1 = 145*223-102*317 Alltså r = -102 och s = 145. Nu använder vi utökad Euklides Algoritm igen för att bestämma c -1 1 : c 1 = 100014 c 11 = 100 och c 12 = 014 n = 703 c -1 11 : 703 = 7*100+3 100 = 33*3+1 3 = 1*3 32

Går vi nu baklänges i algoritmen får vi: 1 = 100-33*3 = 100-33(703-7*100) = = 100-33*703+231*100 = 232*100-33*703 Detta är i sin tur ekvivalent med sambandet: 232*100 1 (mod 703) Det vill säga 100-1 232 (mod 703). Således, c -1 11 = 232. c -1 12 : 703 = 50*014+3 014 = 4*3+2 3 = 1*2+1 2 = 1*2 Går vi nu baklänges i algoritmen får vi: 1 = 3-1*2 = 3-1(014-4*3) = 3-1*014+4*3 = =5*3-1*014 = 5(703-50*014)-1*014 = = 5*703-250*014-1*014 = 5*703-251*014 Detta är i sin tur ekvivalent med sambandet: -251*014 452*014 (mod 703) 1 (mod 703) Det vill säga 014-1 452 (mod 703) Således, c -1 12 = 452. -1 Alltså, c 1 = 232452 Sedan räknar man ut (c -1 1 ) -r s *c 2 m (mod n). (c -1 11 ) -r s *c 21 = (232) -(-102) *232 145 = 232 247 47 (mod 703) (1) (c -1 12 ) -r s *c 22 = (452) -(-102) *452 145 = 452 247 29 (mod 703) (2) (1) och (2) tillsammans ger (c -1 1 ) -r *c s 2 (mod n) = 4729, som är precis lika med m (mod n) = 4729! Vilket innebär att vi fick tillbaka det ursprungliga meddelandet m utan att ens behöva -1-1 veta de privata nyckarna d 1 = e 1 (mod n) och d 2 = e 2 (mod n). 33

4 Merkle-Hellmans kappsäcks-metod 4.1 Merkle-Hellman Merkle-Hellman var den första asymmetriska krypteringsalgoritmen som man började använda i stor skala. I början fungerade metoden endast för krypteringen av meddelanden, men senare har man lyckats att modifiera motsvarande kryptosystem så att algoritmen kunde användas även för elektroniska signaturer. Dock, används inte metoden längre i praktiken eftersom två kryptografer - Shamir och Zippel - lyckades knäcka algoritmen runt 1982. Därför har denna krypteringsalgoritm mest ett historiskt värde idag. 4.1.1 Grunderna för Merkle-Hellman algoritmen 34 Algoritmens säkerhet bygger på ett välkänt kappsäcksproblem, som allmänt anses vara ett mycket svår problem. Detta matematiska problem kan formuleras på följande sätt: Antag att ett antal olika vikter är givna. Och antag också att en kappsäck ska fyllas på med några av dem, men att vi orkar bära bara ett visst antal kilogram. Hur ska vi då välja en rätt kombination av vikterna, så att deras totala vikt får ett bestämt värde? Matematiskt kan man skriva sambandet som: S = b 1 M 1 + b 2 M 2 + b 3 M 3 + + b n M n ; Där M 1, M 2, M 3,, M n är olika vikter (och där M i M j för alla i,j N); Det vill säga alla viker är olika... S är summan av alla vikter som läggs in i kappsäcken; b 1, b 2, b 3, b n antar antingen värde 1 om vikten läggs in i kappsäcken, eller värde 0 om vikten inte läggs in... Exempel 1: Antag att {3,7,11,14,21,27} är en mängd av sådana vikter. Då är det möjligt att packa en kappsäck så att dess totala vikt blir 51 (S = 51) om man väljer att lägga i vikterna 3,7,14 och 27. Däremot är det helt omöjligt att packa en kappsäck så att S blir exempelvis lika med 53! 34 Schneier ss.516-518 34

I en Merkle-Hellman algoritm skrivs det hemliga meddelandet som en binär vektor, där varje element talar om vare en vikt tas med i kappsäcken eller inte. Precis som tidigare står 1 för alla vikter som läggs in i kappsäcken och 0 för övriga. Motsvarande krypterade meddelandet blir då summan av alla vikter som läggs in i kappsäcken. Den privata nyckeln är den givna vektorn av alla vikter; det är just den talföljden som vi inte får avslöja. Exempel 2: Antag att vi har en vektor med följande vikter {3,7,11,14,21,27}. Detta är därmed den privata nyckeln som absolut inte får avslöjas. Om vi, av alla ovanstående vikter, väljer att lägga in i kappsäcken elementen 3,7,14 och 21, skrivs det i binär form som 110110 och om vi istället väljer elementen 7,14 och 27 blir den nya vektorn 010101. Alltså 110110 respektive 010101 är de hemliga meddelanden som man vill skicka säkert via ett (möjligtvis) osäkert medium. Motsvarande krypton för dessa meddelanden blir då 3+7+14+21=45 respektive 7+14+27=48, alltså 45 respektive 48. På samma sätt, om ingen vikt läggs in i kappsäcken blir det hemliga meddelandet 000000 och motsvarande kryptogrammet blir då också 0. I själva verket existerar det två olika typer av kappsäcksproblem, där skillnaden mellan de båda typerna ligger i svårighetsgraden. Man skapar därför den publika nyckeln med hjälp av det svåra problemet. Med en sådan nyckel kan man då lätt kryptera ett meddelande men inte dekryptera. Däremot ska den enklare varianten av kappsäcksproblemet användas för att skapa den privata nyckeln. På så sätt underlättas dekrypteringen av det hemliga meddelandet vid kännedom av den privata nyckeln. Det låter kanske lite förvirrande och konstigt, men vi ska senare ta ett exempel på detta för att klargöra hur processen går till. Hela poängen med metoden är att obehöriga, som inte känner till den privata nyckeln, måste försöka lösa den svåra varianten av kappsäcksproblemet! Men vad anses egentligen med den svåra och den lätta varianten av ett kappsäcksproblem? Låt oss nu titta lite närmare på detta. 35

Antag till exempel att vi har en vektor där varje nästkommande element är strikt större än totala summan av alla föregående element (*). Då har vi nämligen att göra med den enklare typen av ett kappsäcksproblem. Ett exempel på en sådan vektor kan vara {1,4,7,15,30,59}. Övriga vektorer med element som inte uppfyller denna egenskap kallas för normala vektorer, där {2,3,5,8,14,28} är ett exempel på en sådan vektor. Kappsäcksproblemet med (*) egenskapen är enkel att lösa och här nedan ska vi ta ett exempel på detta: Exempel 3: Antag att vektorn {2,3,7,15,29,57} är given och att vi vill fylla på en kappsäck så att dess totala vikt blir lika med S = 77. Har problemet då en lösning? Först och främst kan vi konstatera att vektorn ovan uppfyller (*) egenskapen. Elementet med den största vikten är 57, där 57 < 77. Alltså läggs elementet 57 in i kappsäcken. (77-57) = 20. Men 20 < 29 elementet 29 kan inte packas ner i kappsäcken, däremot kan vi lägga dit elementet 15. 20-15 = 5; Men 5 < 7 Elementet 7 kan inte heller packas ner i kappsäcken. Om vi nu fortsätter på samma sätt får vi då att även elementen 2 och 3 tas med i kappsäcken och att den totala vikten av alla utvalda element blir just 77, vilket i sin tur innebär att vi har hittat en lösning! Skulle vi ha använt Merkle-Hellman algoritm för vektorn ovan, skulle det hemliga meddelandet i så fall vara 110101 och motsvarande kryptot skulle då vara 77. Om man däremot hade en normal vektor, skulle problemet i så fall genast försvåras betydligt. Det finns nämligen ingen känd lätt metod för att lösa ett sådant problem med normala vektorer. Enda sättet är att gå igenom alla möjliga kombinationer av vikter, vilket är inget lätt alternativ om antalet element är mycket stort. Dessutom fördubblas antalet möjliga viktkombinationer som man måste gå igenom om man tillför ett nytt element till vektorn, vilket resulterar i en fördubbling av beräkningstiden. Det vill säga antalet möjliga kombinationer är exponentiellt beroende av antalet element i vektorn. 36

Således, dessa två olika typer av kappsäcksproblemet utgör grunden för Merkle-Hellman krypterings algoritm. Men för att göra kryptoanalytikernas liv ännu svårare har de två matematikerna (Merkle och Hellman) lyckats att ta fram ännu ett användbart verktyg. Metoden kan nämligen göra om den enkla varianten av kappsäcksproblemet till den svåra. Vilket tillför självklart en extra säkerhet. Vi tittar närmare på metoden i nästa exempel. Exempel 4: Antag att {2,3,7,15,29,57} är en vektor med (*) egenskapen. Det är den privata nyckeln. Välj då ett tal m sådan att det ska vara större än summan av alla andra element i vektorn. Till vektorn ovan passar exempelvis talet m = 115. Välj sedan ett annat tal n som är relativt prim med m. I vårt fall kan vi exempelvis ta n = 53. Multiplicera nu varje element i den givna vektorn med n (mod m). Vi får då: 2*53 106 (mod 115) 3*53 44 (mod 115) 7*53 26 (mod 115) 15*53 105 (mod 115) 29*53 42 (mod 115) 57*53 31 (mod 115) Alltså, {106,44,26,105,42,31} är den motsvarande normala vektorn. I Merkle-Hellman krypteringsalgoritm används denna normala vektor som den privata nyckeln. 4.1.2 Kryptering med Merkle-Hellman Till slut ska vi ta en titt på själva Merkle-Hellman krypteringsalgoritm. 35 Precis som i RSA ska man dela upp det givna meddelandet i några mindre digitala block, men nu ska varje blocks längd vara lika med antalet element i vektorn. Om vi fortsätter på föregående exempel har vi då verktorn {106,44,26,105,42,31} given. Antag att meddelandet som ska krypteras är 011000110101101110. 35 Schneier s.519 37

Eftersom antalet element i vektorn är 6, blir därför meddelandet efter uppdelningen: 011000 110101 101110. Och eftersom 1 står för alla element som läggs in i kappsäcken och 0 för övriga, går krypteringen av ovanstående meddelande till på följande sätt: 011000 motsvarar 44+26 = 70 (avläs från vektorn!) 110101 motsvarar 106+44+105+31 = 286 101110 motsvarar 106+26+105+42 = 279 Alltså, kryptogrammet är 70,286,279. 4.1.3 Dekryptering av Merkle-Hellman:s krypto 36 Riktig mottagare av kryptogrammet känner till den privata nyckeln, det vill säga han vet hur vektorn med (*) egenskapen ser ut från början (innan man gjorde om den till en normal vektor). Dessutom är värdena på n och m också kända. För meddelandets dekryptering måste mottagaren först bestämma inversen n -1, sådan att n(n -1 ) 1(mod m). Sedan måste varje del av kryptogrammet multipliceras med n -1 (mod m). De nya värdena delas i sin tur upp i mindre element (som ska vara beståndsdelar av den ursprungliga vektorn med (*) egenskapen. Dessutom ska elementena behålla samma ordning som i vektorn efter uppdelningen!). I och med detta kan man sedan avläsa det hemliga meddelandet. Låt oss förtydliga detta med siffror. Exempel 5: Vi fortsätter med det påbörjade exemplet. Vektorn med (*) egenskapen är {2,3,7,15,29,57}, m = 115 och n = 53. Kryptot är 70,286,279. Först ska man räkna ut inversen till n, det vill säga vi ska bestämma n -1 = 53-1. Och detta gör vi på nästa sida med hjälp av utökad Euklides algoritm. 36 Schneier s.519 38

Utökad Euklides algoritm ger: 115 = 2*53+9 53 = 5*9+8 9 = 1*8+1 8 = 1*8 Som vanligt går vi baklänges i Euklides algoritm ovan och vi får då följande samband: 1 = 9-1*8 = 9-1(53-5*9) = 9-1*53+5*9 = 6*9-1*53 = 6(115-2*53)-1*53 = 6*115-12*53-1*53 = 6*115-13*53 Sambandet ovan är ekvivalent med (-13)*53 1(mod 115) 53-1 -13 (mod 115) 102 (mod 115). Alltså, n -1 =102. Nu multiplicerar vi varje element i kryptogrammet med 102 och delar sedan upp de nya värdena i mindre element. Mindre element ska som sagt väljas ur den ursprungliga vektorn med (*) egenskapen. Uppdelningen kan jämföras med problemet i Exempel 3. Och glöm inte att behålla samma ordning på dem som i vektorn. Det är oerhört viktigt! 70*102 10 (mod 115) = 3+7 011000 286*102 77 (mod 115) = 2+3+15+57 110101 279*102 53 (mod 115) = 2+7+15+29 101110 Alltså det hemliga meddelandet är 011000 110101 101110. Vilket är precis det vi hade från början! För ökad säkerhet ska vektorn med (*) egenskapen i praktiken bestå av minst 250 element, där varje element ska vara mellan 200 och 400 bitar lång; medan talet m bör vara mellan 100 och 200 bitar lång. Då blir det helt meningslöst att ens försöka knäcka ett 39

sådant kryptosystem genom att gå igenom alla tänkbara kombinationer. Även om en dator kan kontrollera 1 000 000 varianter per sekund kommer det att ta mer än 10 46 år att lösa detta problem. Även en miljon datorer som jobbar parallellt kommer inte att kunna klara av det! Trots det, var faktiskt Merkle-Hellman kryptosystem knäckt inte av en miljon datorer, utan av ett par kryptografer Shamir och Zippel. Runt 1982 fann de att de kunde återskapa vektorn med (*) egenskapen ur den normala publika vektorn. Därför som sagt används inte längre Merkle-Hellman krypteringsalgoritm idag, utan metoden har mest ett historiskt värde. 37 37 Schneier ss.519-520 40

5 Slutsats Sammanfattningsvis är kryptologi utan tvekan ett oerhört viktigt ämne för vårt samhälle idag och vi har gjort oss väldigt beroende av denna lära. Kryptografi är faktiskt dagligen en del av varje individs liv, även om de flesta av oss inte inser det direkt. Användningsgraden är självklart ytterst varierande för de olika individerna, men det är just krypteringen som är med och skyddar oss när vi bland annat skickar mail och betalar räkningar via Internet. Och dessa är bara några enkla exempel på hur kryptografi tillämpas i vardagen. Dessutom används starka krypteringsalgoritmer dagligen i de flesta länder för att skydda information på riksnivå och utan dessa element skulle livet bokstavligen krascha idag och allting skulle bara bli ett kaos. Och som vi har redan nämnt tidigare så är RSA den mest flitigt använda asymmetriska krypteringsalgoritmen idag. Detta beror främst på två saker: metoden är mer eller mindre lätt att applicera i praktiken och jämfört med många andra krypteringsalgoritmer (bland annat Merkle-Hellman) så är RSA en ganska säker krypteringsmetod. Säkerheten bygger främst på att hittills har ingen lyckats att hitta någon riktig dekrypteringsmetod. Genombrottet inom faktoriseringsproblemet sägs innebära att RSA och många andra liknande asymmetriska algoritmer skulle bli knäckta och därmed bli helt värdelösa. Dock, som situationen ser ut just nu, är möjligheten för en sådan risk minimal och med hänsyn till detta ser framtiden ganska ljust ut. Människor idag kan vara mycket stolta över sina framgångar och resultat. Man har utan tvekan åstadkommit mycket inom säkerhetsbranschen. Men det betyder absolut inte att man får slappna av. Snarare tvärtom. Kryptoanalysen ligger nämligen i fas med kryptografins utveckling. Båda går i jämn takt med varandra. Datorerna blir allt kraftigare och kraftigare med tiden. Och som en följd krävs det att man kontinuerligt utvecklar de existerande krypteringsmetoderna; förbättringarna visar sig exempelvis i form av allt längre nycklar och dylikt. Ständig forskning pågår kring kryptologi läran. Men har man en gång etablerat en metod är det alltid svårt att bara lämna den ifrån sig, speciellt om den är så pass användbar som denna. Därför kan vi vara ganska säkra på att vi kommer att se mer av kryptologin även i framtiden och vi kommer att kunna följa dess utveckling i många många år framöver. 41

Appendix: I den här delen av uppsatsen ska vi ta upp några av de mest grundläggande matematiska begrepp som man måste vara bekant med när man jobbar med krypteringen. Vi beskriver lite kortfattad vad de olika termer och satser innebär och vad dessa går ut på. Moduloräkning. För att bättre förstå detta begrepp och för att inse hur användbar verktyget är, låt oss först börja med ett enkelt exempel. Antag att Monica lovade sin pappa att komma hem kl.21, men hon blev försenad 11 timmar. I så fall, vad är klockan när hon väl kommer hem? 21+11=32 Räknar vi modulo 24 får vi följande: 21+11 = 32 8 (mod 24) Med andra ord 32 och 8 är ekvivalenta när man räknar modulo 24. Det här enkla exemplet från vardagen är faktiskt ett exempel på moduloräkningen. När man räknar modulo n har man en ring bestående av talen {0,1,2,3,...,n-1,n}. Tal över n finns inte. Med andra ord räknar man i Z n. Således, tiden på en klocka är ett exempel på Z 24. Detta innebär att tal större än 24 är inte med i mängden. Får vi exempelvis 25 är detta ekvivalent med 1 modulo 24. På samma sätt är 30 ekvivalent med 6 modulo 24, och så vidare. Man går alltid tillbaka till ringen bestående av talen {0,1,2,...,24}. Tiden på en klocka är egentligen resten vid heltalsdivision med 24, det vill säga: 13/24 = 0, rest 13 43/24 = 1, rest 19 Moduloräkningen kan på så sätt beskrivas som aritmetiken där man bara intresserar sig för resterna och inte bryr sig om kvoten. Att räkna modulo n innebär således att räkna med resterna vid division med heltalet n. Man kallar två olika tal, a och b, för ekvivalenta modulo n om de båda ger exakt samma rest vid division med heltalet n. Detta betecknas som a b (mod n). 42

Exempelvis: 12/7 = 1, rest 5 26/7 = 3, rest 5 Vi ser att både 12 och 26 ger resten 5 när vi räknar modulo 7. Således, 12 och 26 är ekvivalenta modulo 7, eller 26 12 (mod 7). När två tal är ekvivalenta moludo n säger vi att de tillhör samma restklass, eller ekvivalensklass. Exempelvis är följande mängder restklasserna modulo 4: [0] 4 = {...,-12,-8,-4,0,4,8,12,...} [1] 4 = {...,-11,-7,-3,1,5,9,13,...} [2] 4 = {...,-10,-6,-2,2,6,10,14,...} [3] 4 = {...,-9,-5,-1,3,7,11,15,...} För alla restklasser modulo n gäller generellt att de är disjunkta inbördes samtidigt som unionen av dem ger hela Z. På så sätt utgör varje enskild restklass en partition av mängden av alla heltal Z. 38 Modulo aritmetiken är mycket lik den vanliga aritmetiken; bland annat är den på samma sätt kommutativ, associativ och distributiv. Det vill säga: (a+b) mod n = ((a mod n) + (b mod n)) mod n (a - b) mod n = ((a mod n) - (b mod n)) mod n (a*b) mod n = ((a mod n) * (b mod n)) mod n (a*(b+c)) mod n = (((a*b) mod n) + ((a*c) mod n)) mod n Moduloräkningen är således en mycket viktig och användbar verktyg som man måste kunna, eftersom begreppet används flitigt även inom kryptografi. 39 38 http://www.sm.luth.se 39 Schneier s.278 43

Att hitta inversen till ett tal modulo n. När det gäller att hitta inversen till ett tal när man räknar modulo n, så är denna process lite mera avancerat i modulo världen jämfört med dess lättare motsvarighet på hela Z planet. Dock är det oerhört viktigt att kunna göra det eftersom inversen till ett tal modulo n är en nödvändig ingrediens i vissa viktiga algoritmer inom kryptografin, bland annat RSA. Inversen till 17 är lika med 1/17 om man räknar på hela Z. Men vad blir inversen till 17 om man exempelvis räknar modulo 4756?! Detta är en mycket viktig fråga som vi måste kunna besvara. Och svaret på detta får man bland annat genom att använda sig av en så kallad utökad Euklides algoritm. Låt oss nu ta ett exempel på hur denna algoritm fungerar i praktiken. Antag att e = 17 och n = 4756. Om vi vill beräkna inversen till 17 modulo 4756, innebär det att vi måste hitta ett tal d, sådan att: 17*d 1 (mod 4756) eller ekvivalent kan vi skriva det som d 17-1 (mod 4756). Då fungerar Euklides algoritm på följande sätt. Börja med att dividera det större talet n med det mindre talet e. Det ger en rest r 1. Dividera sedan det mindre talet e med den erhållna resten r 1. Vi får en ny rest r 2. Fortsätt processen genom att nu dividera resten r 1 med den nya resten r 2. Det ger ytterliggare en rest r 3. På samma sätt upprepas processen tills den sista erhållna resten r k blir lika med 1. I vårat fall nedan blev det bara tre steg, men det kan bli betydligt fler steg än så innan vi når det önskade resultatet. 40 4756 = 279*17+13 n = 4756, e = 17, r 1 = 13 17 = 1*13+4 e = 17, r 1 = 13, r 2 = 4 13 = 3*4+1 r 1 = 13, r 2 = 4, r 3 = 1 När vi har hittat resten 1, återstår det bara några få omskrivningar innan vi har hittat den slutliga lösningen, det vill säga inversen till 17 modulo 4756. Vi vill ju hitta ett heltal d, sådan att d*e 1 (mod n). Därför utökar vi nu Euklides algoritm och därmed går 40 http://www.sm.luth.se 44

baklänges i uträkningen ovan genom att successivt ersätta de erhållna resterna. På så sätt får vi fram en linjärkombination av e och n, alltså: 1 = 13-3*4 = 1*13-3(17-1*13) = = 1*13-3*17+3*13 = 4*13-3*17 = = 4*(4756-279*17)-3*17 = = 4*4756-1116*17-3*17 = = 4*4756-1119*17 Vi kan alltså skriva att 1 = 4*4756-1119*17. Men eftersom vi räknar modulo 4756 kommer sambandet ovan att vara ekvivalent med (-1119)*17 1 (mod 4756), eftersom 4*4756 0 (mod 4756). Alltså har vi nu hittat talet d sådan att d*e 1 (mod n). Det vill säga lösningen till problemet är d = 17-1 -1119 (mod 4756) 3637 (mod 4756). Därmed har vi nu hittat inversen till 17 modulo 4756, vilket är talet d = 3637. När det gäller att hitta inversen till ett tal modulo n, är det inte säkert att problemet alltid har en lösning. Det beror helt och hållet på förhållandet mellan talen e och n. Ekvationen d e -1 (mod n) har en entydig lösning då och endast då talen e och n är relativt prima. Om e och n har flera gemensamma delare än talet 1, det vill säga om de inte är relativt prima, då saknar ekvationen d e -1 (mod n) någon lösning alls. I så fall kan man aldrig hitta inversen till talet e mod n. Om talet n däremot är ett primtal, kan vi konstatera direkt att varje tal mellan 1 och (n-1) är relativt prim med n och därmed har en entydig invers mod n. 41 Eulers fi-funktion. Ytterliggare ett sätt att beräkna inversen till talet e modulo n är att använda sig av en så kallad Eulers fi-funktion. Dock är det inte alltid som man kan tillämpa metoden tyvärr. Eulers fi-funktion betecknas som φ(n) och är namngiven efter en schweizisk matematiker Leonhard Euler (1707-1783). Funktionen betracktas som en viktig aritmetisk funktion inom talteorin och den lyder så här: 41 Schneier ss.282-283 45

Om n är ett positivt heltal, då definieras funktionen φ(n) som antalet positiva heltal mindre än eller lika med n som är relativt prima med n. 42 Exempelvis är φ(12) = 4, eftersom de fyra talen {1, 5, 7, 11} är relativt prima med 12. Om n är ett primtal innebär det att alla tal mellan 1 och (n-1) är element i mängden som utgör φ(n). För alla n 1 gäller att 0 ingår aldrig i detta mängd. 43 Således, om n är ett primtal, då är φ(n) = n 1. Dessutom, om två tal p och q är relativt prima, är φ(n) en multiplikativ funktion; det vill säga om n = pq => φ(n) = φ(pq) = φ(p)*φ(q) = (p-1)(q-1). 44 Med allt detta som bakgrund, tar vi nu och tillämpar Eulers fi-funkion tillsammans med Fermats lilla sats (som vi beskrev tidigare i uppsatsen; för repetition se s.9). Vi får då följande samband: Om största gemensamma delaren SGD (e, n) = 1, Blir då e (n-1) 1 (mod n), eller ekvivalent e φ(n) 1 (mod n), eftersom φ(n) = n 1 då n är ett primtal. (Mer om SGD kan du läsa i nästa avsnitt). Nu är det inte så svårt att räkna ut inversen d till talet e modulo n, det vill säga d e -1 (mod n). Det blir d e φ(n)-1 (mod n). Till exempel vad blir inversen till 5 modulo 7? Eftersom 7 är ett primtal får vi då att φ(7) = 7 1 = 6. Därmed får vi att inversen till 5 modulo 7 blir: 5 6-1 = 5 5 3 (mod 7). Genom att använda sig av denna beräkningsteknik, kan man generalisera sambandet mellan e och d på följande sätt: e*d b (mod n) Med hjälp av Eulers fi-funktion får vi då lösningen: d (b*e φ(n)-1 ) mod n Och med hjälp av Euklides Algoritm beräknar vi till slut: d (b*(e -1 mod n)) mod n. 42 http://sv.wikipedia.org Eulers fi-funktion 43 Schneier s.285 44 http://sv.wikipedia.org Eulers fi-funktion 46

Villkoret SGD (e, n) = 1 måste fortfarande vara uppfyllt. Men om SGD (e, n) 1 så är det inte helt kört. I detta fall kan sambandet e*d = b (mod n) antingen ha flera lösningar eller ingen lösning alls. Om man ska jämföra dessa två olika metoder för att beräkna inversen d till ett tal e modulo n, så gäller generellt att Euklides algoritm fungerar snabbare än Eulers fi-funktion, särskilt för tal som är 500 bit långa. 45 Största gemensamma delaren. Detta begrepp är väldigt viktig att känna till, speciellt då vi försöker att avgöra om två tal är relativt prima eller inte. Två tal e och n sägs vara relativt prima om och endast om den enda gemensamma delaren de har är talet 1, eller ekvivalent kan vi säga att e och n är relativt prima om deras största gemensamma delare är 1. Detta betecknas som SGD (e, n) = 1. Exempelvis är talen 15 och 22 relativt prima, eftersom SGD (15, 22) = 1; men inte 12 och 18, eftersom de två sist nämnda har SGD (12, 18) = 6. En av metoderna att beräkna SGD för två tal är återigen Euklides algoritm. 46 Och metoden fungerar på precis samma sätt som vi beskrev tidigare i Appendix. Svaret på frågan om talens största gemensamma delare får man av den sista icke-försvinnande resten. Av exemplet som vi hade tidigare med talen 17 och 4756 får vi därmed att SGD (17, 4756) = 1. Precis på samma sätt kan vi beräkna SGD för talen 264 och 6512. Euklides Algoritm ger: 6512 = 24*264 + 176 264 = 1*176 + 88 176 = 2*88 + 0 Vi ser att sista icke-försvinnande resten är 88, därmed kan vi dra slutsatsen att SGD (264, 6512) = 88 och vi kan därför konstatera att talen 264 och 6512 är inte relativt prima med varandra. 45 Schneier ss.285-286 46 http://www.sm.luth.se 47

Kvadratisk rest. Inom talteorin kallas ett heltal a för kvadratisk rest modulo n om det uppfyller följande villkor: x 2 a (mod n) för något heltal x. Om man inte kan hitta sådana värden på x, det vill säga om villkoret ovan inte är uppfyllt kallas då a för kvadratisk icke-rest. 47 Exempelvis är talen 1, 2 och 4 kvadratiska rester modulo 7, eftersom det existerar värden på x som uppfyller ekvationen x 2 a (mod n): 1 2 = 1 1 (mod 7) 2 2 = 4 4 (mod 7) 3 2 = 9 2 (mod 7) 4 2 = 16 2 (mod 7) 5 2 = 25 4 (mod 7) 6 2 = 36 1 (mod 7) Däremot är talen 3, 5 och 6 kvadratiska icke-rester modulo 7, eftersom det finns inga värden på x som uppfyller kraven: x 2 3 (mod 7) x 2 5 (mod 7) x 2 6 (mod 7) Om n är jämn, existerar det exakt (n-1)/2 kvadratiska rester modulo n och lika många kvadratiska icke-rester. Dessutom, om a är en kvadratisk rest modulo n, då har a exakt två kvadratrötter, där värdet på den ena ligger mellan 0 och (n-1)/2 och värdet på den andra mellan (n-1)/2 och (n-1). En av dessa kvadratrötter är samtidigt en kvadratisk rest modulo n, och den kallas då för huvudkvadratrot. 48 Med andra ord kvadratisk rest a modulo n existerar om talet a har en kvadratrot i modulär aritmetik när modulen är n. 49 47 http://sv.wikipedia.org Kvadratisk rest 48 Schneier s.288 49 http://sv.wikipedia.org Kvadratisk rest 48

Legendresymbolen. För att bestämma kvadratiska rester kan man bland annat använda sig av en så kallad Legendresymbol. Metoden har fått sitt namn efter den franska matematikern Adrien-Marie Legendre och används framför allt inom talteorin. 50 Om p är ett primtal och a är ett heltal relativt prim med p betecknas då Legendresymbolen som L (a, p). Den kan vara antingen lika med 0,1 eller -1. L (a, p) = 0, om a är delbar med p. L (a, p) = 1, om a är en kvadratisk rest modulo p; dvs om x 2 a (mod p) för något heltal x. L (a, p) = -1, om a är en kvadratisk icke-rest modulo p. Värdet på L (a, p) kan man beräkna på följande sätt: L (a, p) = a (p-1)/2 mod p. Dessutom kan man använda sig av följande algoritm: 1. Om a = 1, då är L (a, p) = 1 2. Om a är jämn, då är L (a, p) = L (a/2, p)*(-1)^((p 2-1)/8) 3. Om a är udda och a 1, då är L (a, p) = L ( p mod a, a)*(-1) (a-1)(p-1)/4 Jacobisymbolen. Jacobisymbolen, betecknad som J (a, n) är en generalisering av Legendresymbolen och är definierad för varje heltal a och för varje udda positiv heltalsvärde n. Funktionen är bland annat användbar då man ska avgöra om ett tal är ett primtal eller inte, därför kommer vi att ha nytta av metoden även senare i Appendix. Det existerar flera olika formler för att beräkna Jacobisymbolen, här är ett sätt att göra det på: Definition 1: Jacobisymbolen J (a, n) är definierad endast om n är udda. Definition 2: J (0, n) = 0. Definition 3: Om n är ett primtal, då är Jacobisymbolen J (a, n) = 0 om a är delbar med n. 50 http://sv.wikipedia.org Legendresymbolen 49

Definition 4: Om n är ett primtal, då är Jacobisymbolen J (a, n) = 1 om a är en kvadratisk rest modulo n. Definition 5: Om n är ett primtal, då är Jacobisymbolen J (a, n) = -1 om a är en kvadratisk icke-rest modulo n. Definition 6: Om n är ett sammansatt tal, då är Jacobisymbolen J (a, n) = J (a, p 1 )*...* J (a, p m ), där p 1,..., p m är primtalsfaktorer till n. Med hjälp av följande algoritm kan man rekursivt beräkna Jacobisymbolen: Regel 1: J (1, n) =1 Regel 2: J (a*b, n) = J (a, n) * J (b, n) Regel 3: J (2, n) = 1 om (n 2-1)/8 är jämn, annars är J (2, n) = -1. Regel 4: J (a, n) = J ((a mod n), n) Regel 5: J (a, b 1 *b 2 ) = J (a, b 1 ) * J (a, b 2 ) Regel 6: Om SGD (a, b) = 1 och dessutom om a och b är udda: Regel 6a: J (a, b) = J (b, a) om (a-1)(b-1)/4 är jämn Regel 6b: J (a, b) = -J (b, a) om (a-1)(b-1)/4 är udda Om man från början vet att n är ett primtal, då är det lättare att beräkna a ((n-1)/2) mod n istället för att använda sig av algoritmen ovan. I detta fall är Jacobisymbolen ekvivalent med Legendresymbolen. Man kan aldrig använda Jacobisymbolen för att bestämma om a är en kvadratisk rest modulo n eller inte; med undantag då n är ett primtal föstås. Dessutom om J (a, n) = 1 och n är ett sammansatt tal, behöver påståendet att a är en kvadratisk rest modulo n inte vara sant. Exempelvis: J (7, 143) = J (7, 11) * J (7, 13) = (-1)*(-1) = 1 Dock existerar det inga sådana heltal x som uppfyller villkoret x 2 7 (mod 143)! 51 Primitiva rötter modulo p. Om p är ett primtal och g är mindre än p, då kallas g för primitiv rot modulo p, om för varje tal b, som ligger mellan 1 och p-1, existerar det ett tal a sådan att g a b (mod p). 51 Schneier ss.289-291 50

Exempelvis, om p = 11, då är 7 en primitiv rot modulo 11, eftersom: 7 10 = 282 475 249 1 (mod 11) 7 3 = 343 2 (mod 11) 7 4 = 2 401 3 (mod 11) 7 6 = 117 649 4 (mod 11) 7 2 = 49 5 (mod 11) 7 7 = 823 543 6 (mod 11) 7 1 = 7 7 (mod 11) 7 9 = 40 353 607 8 (mod 11) 7 8 = 5 764 801 9 (mod 11) 7 5 = 16 807 10 (mod 11) Således, varje tal b från 1 till 10 kan skrivas som 7 a (mod 11) för något tal a. Primtalet p = 11 har fyra primitiva rötter: 2, 6, 7 och 8. Andra tal är inte primitiva rötter modulo 11; exempelvis talet 3 saknar lösningen till ekvationen 3 a 2 (mod 11). Som vi ser är det inte så lätt att bestämma om ett tal g är en primitiv rot modulo p eller inte. Dock, underlättas uppgiften om vi kan primtalsfaktorisera talet p-1. Låt q 1, q 2,, q n vara de olika primtalsfaktorer till p-1. För att nu avgöra om g är en primitiv rot modulo p eller inte, beräkna värdet för: g (p-1)/q mod p, för alla värden q = q 1, q = q 2,, q = q n. Om resultatet blir lika med 1 för något tal q, kan vi då konstatera direkt att g är inte en primitiv rot modulo p. Om resultatet däremot blir 1 för alla q, då är g en primitiv rot modulo p. Om vi exempelvis tar primtalet p = 11 igen, kan vi då primtalsfaktorisera p-1 = 10 som 10 = 2*5. Det vill säga q 1 = 2 och q 2 = 5. Då får vi följande: 7 (11-1)/5 5 (mod 11) 7 (11-1)/2 10 (mod 11) Ingen av svaren är lika med 1, därför kan vi konstatera att 7 är primitiv rot modulo 11. 51

Låt oss nu göra samma test på talet 3: 3 (11-1)/5 9 (mod 11) 3 (11-1)/2 1 (mod 11) Således visar testet att 3 är ingen primitiv rot modulo 11! Om man behöver hitta en primitiv rot modulo p kan man slumpvist välja ett tal mellan 1 och p-1 och tillämpa metoden ovan för att avgöra om talet är en primitiv rot eller inte. Det existerar ganska många primitiva rötter modulo p, så man bör hitta åtminstone en av dem relativt snabbt. 52 Primtalsfaktorisering. Att primtalsfaktorisera ett tal innebär att hitta dess primtalsfaktorer. 10 = 2*5 60 = 2*2*3*5 252601 = 41*61*101 2 113-1 = 3391*23279*65993*1868569*1066818132868207 Uppgiften att hitta primtalsfaktorer eller att faktorisera som det också kallas är en av den äldsta i talteorin. Denna process är egentligen inte så svår, men är oerhört tidskrävande. Den bästa algoritmen som existerar idag för att hitta primtalsfaktorer är en så kallad Number Field Sieve (NFS) metoden. 53 Den Generella NFS är den snabbaste kända algoritmen för att primtalsfaktorisera tal som är över 100 siffror långa. 54 Andra faktoriseringsalgoritmer är bland annat: - Quadratic Sieve (QS). QS sägs vara den andra snabbaste metoden känd (efter den Generella NFS) för att bestämma primtalsfaktorer till tal som är under 100 siffror långa. 55 52 Schneier ss.291-292 53 Schneier s.294 54 http://en.wikipedia.org General number field sieve 55 http://en.wikipedia.org Quadratic sieve 52

- Lenstra Elliptic Curve Factorization Method (ECM). Denna algoritm har plats nummer tre när det gäller snabbheten att bestämma primtalsfaktorer till ett tal och som det framgår av namnet så bygger principen huvudsakligen på elliptiska kurvor. 56 - Monte Carlo Polland Algoritm. - Continued Fraction Factorization. Denna algoritm är inte användbar på grund av tiden som den kräver. - Trivial Division. Detta är den äldsta kända faktoriseringsalgoritmen som existerar. Metoden innebär att man testar alla primtal som är mindre än eller lika med roten ur talet som skall primtalsfaktoriseras. Idag använder man stora datanätverk som kan vara kopplade världen över för att bestämma primtalsfaktorer till väldigt stora tal. Och det kan vara som sagt mycket tidskrävande. Om man ska faktorisera ett tal n, då expanderar tiden som behövs för att utföra även de snabbaste varianterna av QS asymptotiskt enligt formeln: e (1+0(1))*(ln(n))^(1/2)*(ln(ln(n)))^(1/2) Algoritmen NFS är mycket snabbare; tiden som behövs för att utföra den kan uppskattas till: e (1,923+0(1))*(ln(n))^(1/3)*(ln(ln(n)))^(2/3) Denna lära om faktoriseringen utvecklas mycket snabbt och den går inte att förutspå. Innan NFS var upptäckt, trodde många att det inte gick att hitta en faktoriseringsmetod som asymptotiskt kunde vara snabbare än QS. Men det visade sig senare att de hade fel... 57 Generering av primtal. För att man skall kunna genomföra algoritmer med öppna nycklar behöver man primtal. Och i alla relativt stora nätverk behövs dessa i massor. Innan vi börjar med själva genereringen av primtal, låt oss först besvara några uppenbara frågor. Om varje enskild användare skulle behöva ett eget primtal, skulle inte då mängden av alla primtal ta slut? Nej. I verkligheten existerar det ungefär 10 151 56 http://en.wikipedia.org Lenstra elliptic curve factorization 57 Schneier ss.294-296 53

primtal av längden mellan 1 till och med 512 bit. Och som det är känd så existerar det totalt 10 77 atomer i hela Universum. Även om varje atom i hela Universum från världens allra början skulle behöva en miljard primtal varje mikrosekund, skulle vi totalt använda endast 10 109 primtal, och vi skulle ändå ha cirka 10 151 primtal kvar! Vad händer om två användare råkar slumpvist välja exakt samma primtal? Detta kommer inte att hända. Har man 10 151 primtal att välja emellan, så är sannolikheten att två olika användare väljer exakt samma primtal mycket mycket mindre än sannolikheten att din dator kommer att gå sönder just i samma ögonblick som du vinner på lotteri... Antag att man skapar en databas över alla möjliga primtal. Kan man då använda denna databas för dekrypteringen av algoritmer med öppna nycklar? Nej. Man kan konstatera direkt att det inte är någon bra idé heller. I boken Applied Cryptography har man beskrivit det ungefär så här: Även om man kunde spara 1Gb data på en minnesenhet som väger bara ett gram, skulle databasen över alla primtal av längden upp till 512-bit vara så tung att den skulle kollapsa i ett svart hål. Om primtalsfaktorisering är en så svår uppgift, hur kan man då säga att genereringen av primtal är lättare? Det beror nämligen på faktum att det är mycket lättare att avgöra om ett tal är ett primtal eller inte än att hitta dess primtalsfaktorer. Att generera ett slumpvist tal och sedan försöka faktorisera det är fel väg att gå om man vill hitta ett primtal. Det rätta sättet att hitta ett primtal är att generera ett slumvist tal och sedan kontrollera om talet är ett primtal eller inte. Det existerar nämligen flera olika tester och algoritmer för just detta ändamål, och för vissa är felmarginalen relativt litet. Antag att för ett visst test kan man få fel resultat en gång av 2 50. Detta innebär att sannolikheten att testet visar att ett primtal är sammansatt är inte mer än 1/10 15. Om man av någon anledning skulle behöva en högre säkerhet på att det genererade talet är just ett primtal, kan man i så fall höja kravet på felmarginalen. 58 58 Schneier ss.296-297 54

Solovay-Strassen test. Robert Solovey och Volker Strassen har tillsammans tagit fram en algoritm som kan användas som ett slags sannolikhets test för att avgöra om ett tal är sammansatt eller om det är sannolikt ett primtal. Största fördelen med denna algoritm är att man slipper Carmichaeltal, det vill säga tal som uppfyller villkor enligt Fermats lilla sats men som egentligen inte är primtal. Dessa blir påpekade som sammansatta enligt denna algoritm. Nackdelen med metoden är dock att även om ett tal blir påpekad som ett primtal är det egentligen bara en sannolikhet, algoritmen ger absolut ingen strikt bevis på att talet är ett primtal. 59 I praktiken ger inte Solovay-Strassen testet en tillräcklig säkerhet som man skulle önska sig. Den har i stort sätt blivit ersatt av Miller-Rabin testet, men metoden är fortfarande av ett stort historiskt värde. 60 Antag att vi vill testa talet p. 1. Välj då ett slumpvis tal a, mindre än p. 2. Om SGD (a, p) 1, då är p ett sammansatt tal och därmed går inte vidare i testet. 3. Beräkna j = a (p-1)/2 mod p. 4. Beräkna Jacobisymbolen J (a, p). 5. Om j J (a, p), då är p definitivt inte ett primtal. 6. Om j = J (a, p), sannolikheten att p är inte ett primtal överstiger inte 50%. Tal a som inte direkt påvisar att p tillhör inte primtal, kallas för vittnen. Om p är ett sammansatt tal, då är sannolikheten att ett slumpvist vald tal a är ett vittne inte mindre än 50%. Upprepa därför testet t gånger med t olika värden på a. Sannolikheten att alla t t. 61 tester visar att p är sammansatt överstiger inte 1/2 Lehmann test. Lehmann har oberoende utvecklad ett lite enklare test jämfört med Solovay-Strassen för att avgöra om ett tal p är ett primtal eller inte. Dessa är följande steg i metoden: 1. Välj ett slumpvis tal a, mindre än p. 2. Beräkna a (p-1)/2 mod p. 3. Om a (p-1)/2 1 eller -1 (mod p), då är talet p definitivt inte ett primtal. 59 http://ru.wikipedia.org 60 http://en.wikipedia.org Strassen primality test 61 Schneier ss.297-298 55

4. Om a (p-1)/2 1 eller -1 (mod p), då är sannolikheten att p är inte ett primtal inte mer än 50%. Och återigen, sannolikheten att ett slumpvist vald tal a är ett vittne till ett sammansatt tal p är inte mindre än 50%. Upprepa testet t gånger. Om resultatet blir lika med 1 eller -1, men inte alltid 1, då är p ett primtal med en sannolikhet på att slutsatsen är fel 1/2 t. 62 Miller Rabin test. Det här enkla testet används flitigt i praktiken och det utvecklades av Michael Rabin. Dock, vissa idéer som ingår i algoritmen tillhör Gary Miller. Välj ett slumpvis tal p som ska testas. Beräkna b, som är antal gånger som man kan dela p-1 med 2 (det vill säga 2 b är den största graden av talet 2 som man kan dela p-1 med). Beräkna sedan m, sådan att p = 1 + 2 b *m. 1. Välj ett slumpvis tal a, mindre än p. 2. Låt j = 0 och z = a m mod p. 3. Om z = 1 eller om z = p-1, då går p vidare i testet och kan möjligtvist vara ett primtal. 4. Om j > 0 och z = 1, då är p inte ett primtal. 5. Låt j = j+1. Om j < b och z (p-1), låt då z = z 2 mod p och gå tillbaka till steg 4. Om z = p-1, då går p vidare i testet och kan möjligtvist vara ett primtal. 6. Om j = b och z p-1, då är p inte ett primtal. Sannolikheten att ett sammansatt tal går vidare minskas snabbare i detta test jämfört med de övriga tester som vi har tittat på tidigare. Det är garanterat att tre fjärdedelar av alla möjliga värden på a kommer att vara vittnen. Detta innebär att ett sammansatt tal kommer att gå vidare i testet med en sannolikhet som inte är större än (1/4) t. I praktiken så är även detta ganska pessimistiskt. För de flesta slumpvist valda tal är cirka 99,9% av alla möjliga värden på a vittnen. 63 62 Schneier s.298 63 Schneier ss.298-299 56

Praktiska tillämpningar. I praktiska tillämpningar kan man generera primtal snabbare. 1. Generera ett slumpvis n-bit långt tal p. 2. Låt den äldsta och den yngsta bitar vara lika med 1. (Äldsta bit garanterar den nödvändiga längden på primtalet, yngsta bit garanterar att talet är udda). 3. Försäkra dig om att p är inte delbart med de mindre primtalen: 3, 5, 7, 11, och så vidare. Många gånger kontrollerar man delbarheten med alla primtal under 256. Dock, blir säkerheten högre om man kontrollerar delbarheten med alla primtal under 2000. 4. Genomför sedan Miller-Rabin testet för något slumpvis tal a. Om p godkänns av testet, generera i så fall ett annat slumpvis tal a och upprepa testet igen. För att påskynda uträkningarna välj inte så stora värden. Utför testet minst fem gånger. Även om ett av testerna påvisar att p inte är godkänd, generera då ett annat tal p och gör ett nytt försök. Steg 3 är inte nödvändigt, men den är rekommenderad att genomföra. En extra kontroll av delbarhet med 3, 5 och 7 tar bort 54% av alla udda tal som från början är kandidater till primtal innan vi ens går in i steg 4! En liknande kontroll av delbarhet med alla primtal under 100 tar bort 76% av dessa udda tal, och samma kontroll av delbarhet med alla primtal under 256 tar bort 80%...Ju högre talet n som ska testas är, desto fler förberedande uträkningar måste göras innan vi genomför Miller-Rabin testet. 64 64 Schneier s.299 57

Källor: Schneier Bruce, Applied Cryptography, John Wiley & Sons Inc, Russian language edition by Triumph Publishing, Moscow, 2002 Vedran Arnautovic, RSA Kryptering, 2007 http://www.wedran.com/se/?rsa/rsa.html Tambour Torbjörn, RSA kryptering, Matematiska Institutionen http://www.math.su.se/~torbjorn/undervisn/rsa.pdf Svensson Per-Anders, Från Caesar till kvantdatorer, en kort odyssé genom krypteringens historia, 24 Februari 2005, Växjö Universitet http://w3.msi.vxu.se/~pa/seminarier/puv050224.pdf Kungliga Tekniska Högskolan http://www.isk.kth.se/~johanseg/files/annat/matte/kryptering.doc Jack-Benny, Cyberinfo Säkerhet på Nätet http://www.cyberinfo.se/index.php?sida=krypt IT-kommissionen, 7 April 2004 http://www.itkommissionen.se Luleå University of Technology http://www.sm.luth.se Wikipedia den fria encyklopedin på nätet: http://sv.wikipedia.org University in Maryland, Robert Campbell, 6 Oktober 2002 http://www.math.umbc.edu/~campbell/calculators/ti8x/numbthy.html 58

Bilaga Programmera i miniräknare När man försöker räkna ut tal som 688 79 (mod 3337) med hjälp av en miniräknare 65, är det naturligt att man först försöker räkna ut vad talet 688 79 blir, för att sedan dela det med 3337 och ta reda på resten. Detta beror på att de flesta enklare miniräknare saknar en direkt funktion för moduloräkning. Men slår man 688 79 på miniräknaren, får man följande felmeddelande: ERR:OVERFLOW 1:Quit 2:Goto Vanliga miniräknare klarar nämligen inte av så stora tal. Ett utmärkt alternativ för att lösa detta problem är därför att skriva ett litet program i miniräknaren. I en Texas Instruments TI-83 Plus börjar man programmeringen genom att gå in på: PRGM -> NEW -> Create new Ge programmet ett namn, exempelvis Algoritm och tryck sedan på ENTER. I nästa steg matar man in kommandon. Mitt program ser ut på följande sätt: PROGRAM:ALGORITM :ClrHome (1) :Input BASEN=,C (2) :Input EXPONENTEN=,K (3) :Input MODULUS=,M (4) :K-2*iPart(K/2) A (5) :{A} L 1 (6) :K/2-fPart(K/2) K (7) :While K 1 (8) :K-2*iPart(K/2) B (9) :augment (L 1,{B}) L 1 (10) :K/2-fPart(K/2) K (11) 65 Till mitt förfogande hade jag en Texas Instruments TI-83 Plus 59

:End (12) :augment (L 1,{1}) L 1 (13) :If L 1 (1)=1 (14) :Then (15) :{C} L 2 (16) :Else (17) :{1} L 2 (18) :End (19) :For (I,2,dim(L 1 ),1) (20) :If L 1 (I)=1 (21) :Then (22) :(C 2 -ipart(c 2 /M)*M) F (23) :I-2 N (24) :While N=/=0 (25) :(F 2 -ipart(f 2 /M)*M) F (26) :N-1 N (27) :End (28) :augment ({F},L 2 ) L 2 (29) :End (30) :End (31) :prod(l 2 ) G (32) :(G-iPart(G/M)*M) G (33) :Disp THE ANSWER, G (34) Programmet bygger i första hand på principen att omvandla decimaltal till binär form. Alla de vanliga tal som vi använder i vardagen kallas för decimaltal (det vill säga 0,1,2,3,4,5,6,7 etc). Namnet kommer från latinets deci = tio. Det betyder helt enkelt att man räknar med basen tio. Datorer däremot använder sig av något som kallas för binära tal. I det binära talsystemet räknar man med basen två. Det betyder att endast två olika siffror används, noll och ett. För att exempelvis omvandla det binära talet 100101 till ett decimaltal, använder man sig av följande talföljd: 60

+1*2 5 +0*2 4 +0*2 3 +1*2 2 +0*2 1 +1*2 0, eller ekvivalent: +1*32+0*16+0*8+1*4+0*2+1*1 Noll står framför tal som ska ignoreras, det vill säga platsen är tom när det gäller värdet. Ettan står för tal som ska räknas med. På så sätt får man att det binära talet 100101 är lika med dess decimala motsvarighet 37. Det finns en mycket enkel algoritm som omvandlar decimaltal till binär form. Och den lyder så här: 1. Man heltals dividerar talet D med 2 och låter resultatet vara ett nytt värde på D. 2. Resten (som är antingen 0 eller 1) sparas som b i. 3. Öka i med ett och upprepa algoritmen tills D=0. Exempel: D=25 25/2=12, resten b 0 =1 12/2=6, resten b 1 =0 6/2=3, resten b 2 =0 3/2=1, resten b 3 =1 1/2=0, resten b 4 =1 Det vill säga talet 25 i binär form blir 11001. Och det är just denna algoritm som används vid programmeringen i miniräknaren i steg 5 till steg 13. Här vill vi omvandla exponenten till binär form. När man väl har gjort det kan man lätt skriva om exponenten som summan av ingående element ur talföljden 32+16+8+4+2+1 På så sätt, om exponenten är till exempel talet 25, vilket är 11001 i binär form, är det lika med summan av elementen (16,8,1). Om vi exempelvis måste räkna ut C 25 (mod M), kan vi alltså skriva det som: C 25 =C 16+8+1 =(((C 2 ) 2 ) 2 ) 2 *((C 2 ) 2 ) 2 *C Alltså, resten av programmet utför moduloräkningen av talet C 2 och sparar alla element i listan L 2, för att sedan beräkna den slutliga produkten av alla element i listan. 61

Här följer några förklaringar till de olika kommandon som man använder i programmet. ClrHome - gör att alla tidigare beräkningar raderas från miniräknares skärm. Input kommandot visar i displayen det som står i citationstecken och samtidigt uppmanar användaren att i tur och ordning mata in värdena på variablerna B, X och M, där B i vårt fall är basen, X är exponenten och M är modulo i uttrycket B X (mod M). För exemplet ovan är därför B=688, X=79 och M=3337. Kommandot While utför en grupp instruktioner så länge villkor är sant och hoppa sedan tillbaka. Villkor kontrolleras vil While-instruktionen. End markerar slutet på gruppen där återhopp sker. If-instruktionen är en villkorlig hoppinstruktion. Om villkor är falskt (noll) hoppas efterföljande instruktion över. Om villkor är sant (skilt från noll) utförs efterföljande instruktion. For( är en loop som upprepar en hoppinstruktion och ökar variabel med ökning rån början till slut. End används för att markera slutet på loopen. ipart ger heltalsdelen av ett reellt eller komplext tal, uttryck, lista eller matris. augment( fogar samman elementen i lista A och lista B. Och till slut har vi kommandot Disp som visar på miniräknarens skärm allt som står i citationstecken och värdet på variabeln som står efter kommatecknet. I rad nr.25 betyder N=/=0 att N är skillt från noll. När man sedan vill köra programmet, trycker man på PRGM -> EXEC -> 1.ALGORITM -> ENTER -> ENTER 62

Till slut ser resultatet ut så här på skärmen, där 1570 är svaret: BASEN=688 EXPONENTEN=79 MODULUS=3337 THE ANSWER 1570 Done 63