Utdrag från Verklighetens Kvadratrötter: Sida 1 KRYPTOLOGI Hur matematiken skyddar dina hemligheter Talteori, primtal, moduloräkning Bakgrund Den hemliga kod som under andra världskriget användes av Nazityskland för att i hemlighet sända meddelanden till sina trupper och ubåtar kallades Enigma. Tack vare många ihärdiga matematiker och kryptologer lyckades de allierade knäcka denna kod vilket möjliggjorde spionage av tyskarnas hemliga sändningar. Spindeln i nätet var matematikern Alan Turing och historiker anser idag att hans arbete kan ha förkortat kriget med så mycket som två år. 1 Turing-priset är uppkallat efter honom och kallas ofta för datavetenskapens Nobelpris. Vi ska tala om kryptering, skyddande av ett meddelande med en kod. Ungefär samma metoder används för certifiering, att kunna bevisa vem man är. Certifiering används av banker och moderna tekniker som e- legitimation för att verifiera att avsändaren verkligen är den som uppges och kan ses som ett slags matematiskt fingeravtryck. Både kryptering och certifiering är viktiga saker på internet. Kreditkort är också en stor användare av krypteringsmetoder som RSA som kommer tydliggöras i detta kapitel. Samtidigt växer sig trådlöst internet alltmer vanligt och dessa nätverk ska helst skyddas med lösenord för att undvika avlyssning och intrång. Idéerna i sig är enkla. Detta kapitel kommer göra det tydligt hur det matematiska maskineriet ser ut, men som i resten av boken är inte det rena räknandet vad som är väsentligt. Det är observationen av hur viktig den rena matematiken är för de mest vardagliga av sysslor som betyder mest. Kapitlet blir måhända något mer räknemässigt tungt än tidigare men det rekommenderas att du som läsare åtminstone skummar igenom dessa delar ändå. På internet används metoderna inte bara för e-handel. Alla sorters personuppgifter krypteras, de bör helst skickas privat till olika sidor såsom sociala nätverk eller e-posttjänster. Inte minst lösenord kräver krypteringstekniker så att ingen kan avlyssna det och knäcka ditt konto. Primtal Från och med nu kommer vi bara tala om positiva heltal: 1, 2, 3 och så vidare. Observera att talet 6 kan delas jämnt med 2 och 3, och 8 kan delas jämnt med 2. Men vissa tal är inte delbara med några andra, som 5 och 7. Dessa tal kallas primtal. 2 Euklides bevisade redan under antiken att primtalen aldrig tar slut utan är oändligt många. I slutet av boken följer ett fullständigt bevis för varför det måste vara så. Idag (2012) är det största kända primtalet, ett gigantiskt tal med över tio miljoner siffror! De tolv första primtalen: 2, 3, 5, 7, 11, 13, 17, 19, 23, 27, 31, 37 1 Historien var däremot inte lika trevlig på 50-talet. Alan Turing var homosexuell, vilket var olagligt i England vid denna tid. När hans läggning blev känd dömdes han till hormonbehandling, varefter han föll in i en djup depression och tog till slut sitt eget liv 1954. 2 Alla tal är delbara med ett och sig självt, ty x/ x och x/x, men dessa kallas för triviala fall. I strikt mening är det tal som inte går att dela på andra sätt som kallas för primtal. Talet 1 uppfyller också dessa krav men brukar av konvention inte kallas för ett primtal.
Utdrag från Verklighetens Kvadratrötter: Sida 2 Det är trots forskning sedan antikens dagar fortfarande mycket svårt att avgöra om ett visst tal är ett primtal eller inte. Denna svårighet är själva hörnstenen i varför matematikbaserad kryptering är så säker, som vi snart ska se. Moduloräkning och slumpmässighet Namnet låter mycket mer komplicerat än själva begreppet, det handlar bara om att räkna upp till ett visst tal innan man börjar om igen. Detta kallas även för klockaritmetik eftersom klockor med urtavla är ett bra exempel, de räknar bara upp till 12. När klockan är 13 säger man återigen att klockan är ett. När klockan är 14 är klockan två. Digitala klockor räknar ända upp till 23.59, men börjar sedan om på 00.00. De räknar alltså modulo 24. Modulo förkortas oftast mod. När man talar om 5 mod 3 börjar vi med att räkna 0, 1, 2. När vi kommer till 3 börjar vi då om på 0 och fortsätter. Nästa tal, det fjärde talet, blir 1 och efter det kommer 2. Alltså blir 5 mod 3 2. Man kan också se det som resten vid en division: 3 går i 5 en gång, och kvar blir 2. På samma vis blir 7 mod 6 1 och 8 mod 4 0. Räkna efter själv! Exempel: 0 1 2 3 4 5 6 7 8 9 Mod 3 0 1 2 0 1 2 0 1 2 0 Mod 4 0 1 2 3 0 1 2 3 0 1 Mod 5 0 1 2 3 4 0 1 2 3 4 Med hjälp av moduloräkning kan även en form av slumpmässighet i datorer skapas. Dessa tekniska apparater kan annars bara göra som de blir tillsagda och inte komma på något originellt. I vissa sammanhang är det inte önskvärt att saker alltid sker på samma sätt, som hur en bana på ett datorspel ska se ut eller i vilken ordning korten i ett kortspel ska läggas ut. Då används moduloräkning för att skapa så kallade pseudoslumptal, nästan slumptal. Bara nästan, eftersom det faktiskt är en bestämd algoritm som genererar dem. Välj tre tal, och. Ett psuedoslumptal skapas genom att räkna ut: (( ) ) Till exempel kan vi låta,, och börja med 2. Nästa tal blir då: ( ) Vill vi ha ett nytt slumptal gör vi samma beräkning, fast med det senaste talet, 12, istället: ( ) och så vidare, så följer 21, 14, 6... Till slut börjar mönstret om igen, men det märker vi så snabbt på grund av att vi har valt så små tal. Normalt används till exempel vad som kallas Mersenne Twister, med mycket
Utdrag från Verklighetens Kvadratrötter: Sida 3 större val av konstanterna a, b och c. Denna repeterar inte sitt mönster förrän efter uträkningar, ett tal med cirka 6000 siffror! Samtidigt har den statistiskt nästan samma sannolikhet att visa vilket tal som helst vid en given tidpunkt. Förutsägbarheten är med andra ord mycket låg. Att programmera in ett första tal att börja med är problematiskt, eftersom det kommer ge samma talföljd varje gång och göra metoden förutsägbar. Lyckligtvis finns det i datorn en klocka som räknar hur många millisekunder datorn varit påslagen. Detta tal är olika varje millisekund och är därför något som slumpgeneratorn brukar utgå ifrån. Kryptering Det vanliga exemplet brukar vara att Alice vill skicka ett paket till sin vän Bob, något de vill genomföra utan att en tredje person ska kunna öppna paketet och se vad som ligger inuti. Vi antar att lås inte går att dyrka upp och att alla paket till slut kommer fram orörda. Hur ska de då göra? Det visar sig att det inte är så lätt som det först låter när de inte kan kommunicera på något annat vis. Visst, Alice kan sätta ett hänglås på paketet och skicka det. Ingen på posten kommer kunna tjuvkika, men det kommer inte Bob heller kunna, han har ingen nyckel. Posten kan enkelt behålla paketet tills även nyckeln skickas. Eller tvärtom, behålla nyckeln tills paketet kommer, ifall nyckeln skickas först. Även om postkontoret skulle tröttna och ge upp finns risken att meddelandet hunnit bli utdaterat och värdelöst om för lång tid passerat. Detta gäckade kryptologer och matematiker länge. Att uppfinna kluriga koder är en gammal konst, men det är problemet med att förmedla nyckeln som alltid varit det allra klurigaste. Måste den skickas kan någon få tag i den. Om så sker blir koden (låset), hur genial den än må vara, helt värdelös. Den tjuvkikande kan bara använda sin nyckel för att dekryptera (öppna låset) och se meddel-andet som skickades. Det dröjde många år innan en lösning upptäcktes. Om Bob vill ta emot paket skickar han lås till alla som vill skicka något. Dessa personer, som Alice, sätter låset på paketet de vill skicka och sänder det till Bob. Alice har ingen nyckel och kan därför inte öppna paketet, men det behöver hon inte heller, det viktiga är att Bob kan det. Om Alice i sin tur vill ha ett svar kan hon skicka ett öppet lås till Bob, som han på precis samma vis använder för att skicka ett meddelande till Alice. Att tänka ut det såhär är en sak, men att hitta en matematisk formel eller algoritm som uppfyller alla dessa krav är något mycket mer komplicerat. Att kunna skicka krypterade meddelanden som bara mottagaren kan läsa (så kallad asymmetrisk kryptering), är den geniala grunden till dagens krypteringsstandard RSA. RSA Namnet kommer från efternamnens första bokstäver hos de tre män som upptäckte den matematiska varianten av ovanstående idé 1978, kryptologerna Ron Rivest och Adi Shamir tillsammans med matematikern Leonard Adleman. Det är idag känt att matematikern Clifford Cocks upptäckte samma sak några år tidigare, men då under anställning av den brittiska underrättelsetjänsten. Hans arbete förblev hemlighetsstämplat i över 20 år och saknade under den tiden erkännande i detta sammanhang. När det kommer till att kryptera text låter man datorn representera bokstäver med olika tal, till exempel kan a ersättas av 01, b ersättas av 02 och så vidare. Kryptering av filer på datorn (bilder, dokument) är lika ickekonstigt. De lagras på hårddisken som en lång serie ettor och nollor.
Utdrag från Verklighetens Kvadratrötter: Sida 4 Inom området talteori analyseras siffror och tal, deras egenskaper och olika mönster. Så till synes enkla begrepp gör det svårt att dra några djupa slutsatser. Att det däremot finns många djupa samband och mönster gör området ack så fascinerande. Århundraden av forskning inom talteori har gett många viktiga resultat, som bland annat används inom RSA. Det vackra ligger i hur enkelt men samtidigt så kraftfullt det faktiskt är: Välj två primtal, kalla dem och, och multiplicera ihop dem. Kalla denna produkt för. Välj också ett tal, (nästan) vilket som helst, kalla det. 3 Enbart dessa två tal, och, utgör det utomordentligt enkla hänglås som vem som helst kan använda för att skydda sitt paket på vägen till Bob. Om vi kallar Alices meddelande för räknar hon bara ut, eller snarare låter hon sin dator göra det. Resultatet kallas och är ett helt annat tal som hon med säkerhet kan skicka till vem som helst. Det hjälper inte tjuven ifall och är kända, dessa utgör bara låset. För att öppna det behövs nyckeln och den har bara Bob. Han tar fram den genom de två primtal som byggde upp. Bob håller självklart dessa hemliga. Eftersom primtalen bygger upp N finns hemligheten bevarad i det talet och kan alltså luskas fram. Att RSA ändå är säkert bottnar i den oerhörda svårigheten att dela upp N i de två primtalen. Detta kallas primfaktorisering och har alltid endast en unik lösning, om än svår-funnen. Försök själv att primfaktorisera 713, det vill säga hitta två primtal som ger 713 när de multipliceras med varandra. 4 För säker-hets skull är de tal som används i kryptering gigantiska, hundratals eller tusentals siffror långa. Talet är nyckeln som används för dekrypteringen och ska uppfylla att ( ) är jämnt delbart med ( ) och ( ). För att kunna hitta denna nyckel måste alltså båda primtalen vara kända, inte bara deras produkt. När Bob tar emot det krypterade meddelandet räknar han ut. Uträkningen återskapar det ursprungliga meddelandet. Denna algoritm har blivit en vanlig och viktig standard. Tyvärr är den lite för komplicerad för att nyttjas hela tiden, det tar lite för lång tid att räkna med dessa enorma tal även för dagens datorer. RSA kan istället användas för att skicka nyckeln till enklare koder som går snabbare för datorn att hantera. Dessa enklare koder är fortfarande säkra nog så länge som nycklarna är i säkert förvar, vilket RSA ansvarar för. Ett exempel på RSA I detta exempel kommer jag tyvärr inte använda riktiga tal, alltså sådana som dyker upp i verkliga sammanhang. Jag har försökt göra det så gott det går i denna bok, men i detta fall är det inte värt det. Anledningen är att primtalen p och q som används för RSA-kryptering oftast är enorma tal, hundratals siffror långa! Istället har jag valt lite mer jordnära tal för att ge perspektiv på saken. De mindre talen gör inte precis att RSA-algoritmens charm framstår mindre tydligt, snarare tvärtom. En vän har ett meddelande M och önskar skicka det till oss. Låt oss säga att hennes meddelande är. Meddelandet kan stå för vad som helst, ett lösenord, ett textmeddelande, ett kontonummer eller kanske en del av ett hemlighållet fotografi. Informationen måste hållas säker, därför väljer vi RSA-kryptering. 3 Det finns vissa begränsningar för vad får vara, men vi behöver inga djupare detaljer här. 4 Rätt svar:.
Utdrag från Verklighetens Kvadratrötter: Sida 5 Vi konstruerar ett hänglås genom att välja två primtal och, och så väljer vi ett. 5 Då är. Vi sänder ut och till vår vän som krypterar meddelandet till något vi kallar. Här kan vi passa på att se vad som händer om meddelandet vore lite annorlunda, säg. Då blir. Om blir. Vi kan inte urskilja något mönster alls, precis som vid genereringen av psuedoslumptalen. Det är ju tur det, annars vore det ingen vidare säker kod. Alltså kan skickas helt obemärkt till oss. Vem som helst får läsa det, det spelar ingen roll, de begriper inte vad som står ändå! Bara den som kan dekryptera förstår innebörden och nu är det upp till oss att göra det. För detta vill vi hitta ett tal så att ( ), alltså i detta fall ( ), är jämnt delbart med och. Det finns en del matematiska tekniker för detta, men till slut upptäcker man att fungerar. Att hitta är ett mycket, mycket enklare problem än att försöka lista ut och från. Varför vill vi ha just ett tal med dessa egenskaper? Forskning inom talteori har visat att bara ett sådant tal kan göra om vårt krypterade C till det meddelande M som vi vill läsa. Mycket av de nödvändiga resultaten upptäcktes långt före RSA:s och även datorernas tid, men idag är vi väldigt tacksamma över att redan ha gjort dessa upptäckter. För att dekryptera meddelandet beräknar vi det redan nu stora talet: ( ) Om du inte minns, gå tillbaka och se efter vilket meddelande vår vän ville skicka från början. Jämför med vad vi lyckades räkna fram här. Heureka! Det fungerar, och våra datorer kan göra detta åt oss både snabbt och säkert för att skydda trådlösa internetuppkopplingar och hela internet självt! Certifiering, matematiska fingeravtryck som exempelvis bankers hemsidor använder för att bevisa att de verkligen representerar den bank de påstår, använder samma metoder. Alla kan veta produkten av två primtal men bara banken känner till vilka det faktiskt är och kan använda dem till att bevisa sin identitet. För mer information om kryptologi rekommenderas till exempel Kodboken av Simon Singh, som förklarar historiken och matematiken bakom kryptologi mycket väl. 5 Talet e måste väljas så att det är större än 2 och inte delar och. Eftersom och / inte går jämnt upp, detsamma för, så fungerar e3 bra. Men hade exempelvis inte fungerat eftersom / går jämnt upp.