Del 1: Vanlig symmetrisk kryptering

Symmetrisk kryptering är det som man i vardagligt tal skulle kalla för ”vanlig kryptering”, dvs en klartext krypteras till en kryptotext med hjälp av en krypteringsnyckel.

 

1.1 Produktchiffer

Metoderna för kryptering har hela tiden formats av de verktyg som varit tillgängliga. Till en början gjordes kryptering bara med hjälp av papper och penna. Metoderna var därför väldigt primitiva jämfört med dagens metoder, men samtidigt hade de som försökte forcera chiffren bara tillgång till samma uppsättning av verktyg, och har man bara tillgång till papper och penna kan många av de första metoderna vara väl så komplicerade att forcera.

Under tiden kring första världskriget användes oftast produktchiffer. Produktchiffren har minst två steg, ett substitutionssteg där bokstäverna substitueras mot andra bokstäver och någon form av transposition där bokstäverna blandas samman med varandra. Oftast involverade algoritmerna någon sorts lösenord eller annan typ av krypteringsnyckel. Det gjorde det väldigt svårt att analysera den krypterade informationen, och under den tiden räckte det oftast till för att ge en ganska god säkerhet. När ett meddelande skulle telegraferas via kabel eller radio krypterades texten först med papper och penna, varpå mottagaren fick backa processen för hand. Meddelanden som skulle krypteras behövde därför hållas så kortfattade som möjligt.

Mellan första och andra världskriget hade man börjat använda maskiner för att öka på hastigheten för krypteringen, och en bit in i andra världskriget var det framförallt maskiner som användes. Istället för att använda papper och penna utförde maskinen krypteringen. Oftast hade maskinerna ett tangentbord och när man skrev på tangentbordet lös antingen lampor med bokstäver upp på en panel eller så gjordes utskrifter till hålremsor. Inuti lådorna var metoderna likartade de som utfördes med hjälp av papper och penna, i praktiken ett produktchiffer, fast chiffren kunde naturligtvis göras mer sofistikerade när beräkningarna inte behövde göras för hand. De mest kända maskinerna är antagligen Enigman eller Geheimfernschreiber (g-skrivaren).

Efter ett tag han även tekniken för kryptoforcering ikapp makinerna och under andra världskriget forcerades Enigmans krypto av Alan Turing som började använda avancerade maskiner för att knäcka krypteringen. Dessa maskiner är föregångarna till dagens datorer.

 

1.2 Flödeskrypton

Det första exemplet på ett flödeschiffer var vigenère-chiffret som bl a användes under 1800-talet vid telegrafering. Metoden går ut på att ett nyckelflöde deriveras från en krypteringsnyckel, nyckelflödet adderas sedan till texten som ska krypteras.

Flödeskrypton används än idag fast oftast i hårdvarubaserade system som telefonväxlar, krypterade faxmaskiner och mobiltelefoni. En av orsakerna till att flödeskrypton fortfarande används är att krypteringshastigheten kan göras mycket hög till en låg kostnad. Flödeskrypton används inte i samma utsträckning i datorsystem även om det fortfarande förekommer. Det vanligaste exemplet är krypteringsalgoritmen RC4 som är ett flödeskrypto som fram till alldeles nyligen användes vid kryptering i webbläsare eller vid kryptering av information på trådlösa nätverk.

Det finns många tekniska problem som dyker upp när flödeskrypton ska användas som måste lösas för att det ska bli en säker kryptering, vilket bl a är det som orsakat säkerhetsproblemet med WEP krypteringen i trådlösa nätverk.

 

1.3 Blockkrypton

Blockkrypton uppstod ur behovet av att utföra kryptering med hjälp av datorsystem under 70-talet. Blockkrypton är den absolut vanligaste typen av symmetrisk kryptering i datorsystem idag, men används även i en hel del hårdvarutillämpningar. Blockkrypton har många fördelar över flödeskrypton som i slutändan ger robustare kryptering, men till en kostnad av att krypteringen tar längre tid jämfört med snabbare flödeskrypton. Det gemensamma med blockkrypton är att informationen som ska krypteras delas in i mindre block som sedan permuteras med en matematisk algoritm.

Det första blockkryptot som användes i väldigt stor utsträckning var algoritmen DES (Data Encryption Standard). Algoritmen hade sin storhetstid under 80-90 talet och bör inte längre användas för kryptering. Istället finns modernare algoritmer som är betydligt säkrare och dessutom har högre krypteringshastighet än DES.

 

1.3.1 DES & TDEA

Krypteringsalgoritmen DES (Data Encryption Standard) är en algoritm som konstruerades av IBM under 70-talet i syfte att användas av amerikanska myndigheter. Krypteringen utförs alltid med en 56bit krypteringsnyckel vilket inte räcker för att ge en säker kryptering idag. Därför finns en förbättrad version av DES som går under olika namn men brukar kallas för något av TDEA, 3DES, Triple DES eller DES-EDE. Krypteringen görs tre gånger med samma algoritm men olika krypteringsnycklar vilket gör att krypteringen blir minst dubbelt så säker (motsvarade 112bit kryptering). Denna version av DES är säker än idag men är inte lägre att rekommendera. TDEA var en kortsiktig lösning av amerikanska myndigheter för att förbättra algoritmen tills man hittat en nya ersättare, idag har DES ersatts av den betydligt modernare algoritmen AES.

 

1.3.2 Advanced Encryption Standard

Krypteringstandarden Advances Encryption Standard (AES) är en standard (och en algoritm) som är en ersättare till den tidigare DES. Standarden är framtagen av amerikanska myndigheter för att skydda deras egen och amerikanska företags information, vilket den även används för idag och är tänkt att fortsätta användas till under många år framöver. När man skulle välja utformningen av algoritmen för standarden var man mån om att få en bred acceptans kring algoritmen i forskarvärlden. Algoritmen är därför framtagen av en stor uppslutning av internationella forskare i en process som tog flera år att genomföra. Under dessa år granskades många olika förslag till algoritmens utformning. Standardiseringen påbörjades 1997 och var slutligen klar för användning av amerikanska myndigheter under 2002. Algoritmen är idag den mest använda symmetriska krypteringsalgoritmen.

AES är ett 128bit blockkrypto, dvs informationen delas in i 128bit block och permuteras med en matematisk algoritm. Krypteringen görs med en krypteringsnyckel som kan vara 128, 192 eller 256 bitar lång. Krypteringshastigheten blir dock något lägre med de längre krypteringsnycklarna. Designen baserar sig på en vanlig konstruktion som kallas för ett SP-nätverk.

Designen för AES är vald efter en tidigare algoritm med namnet Rijndael. Algoritmen har skapats specifikt för att passa specifikationerna för AES. Hela specifikationen från Rijndael har inte förts över till AES utan har begränsats en aning. Rijndael har sitt ursprung från två belgiska forskare (Joan Daemen, Vincent Rijmen). Designen av Rijndael valdes för att det är en bra kompromiss mellan hög krypteringshastighet på olika plattformar och hög säkerhet.

AES är alltså en amerikansk standard men algoritmens design har ett europeiskt ursprung. Algoritmen har tagits fram med en öppen process med hög tillförlitlighet. Algoritmen är godkänd av amerikanska myndigheter för top secret och är godkänd för användning av hemlig information av svenska försvaret. Men man ska komma ihåg att algoritmen inte är vald för att ge maximal säkerhet utan en avvägning mellan säkerhet och hastighet. Under standardiseringsprocessen för AES föreslog man även algoritmen Serpent som ett andra mer konservativt alternativ till AES om maximal säkerhet ska uppnås.

Det finns inga kända kryptografiska svagheter av betydelse i AES, utan givet att krypteringsnyckeln är okänd är det utifrån alla kända metoder idag omöjligt att avgöra vad som är klartext och vad som inte är det.

 

1.3.3 Serpent

Serpent är precis som Rijndael ett 128bit blockchiffer som är designat för att passa specifikationen för AES standarden. Algoritmen har en konservativ och väl beprövad design med väl tilltaga säkerhetsmarginaler. Serpent är därmed en vassare algoritm när det gäller säkerhetsmål än AES. Däremot blir krypteringshastigheten med denna algoritmen betydligt långsammare jämfört med Rijndael och AES. Algoritmen är designad av ett internationellt forskarteam bestående av Ross Anderson, Eli Biham, and Lars Knudsen. Serpent är antagligen världens säkraste krypteringsalgoritm.

 

1.3.4 Twofish

Twofish är precis som Rijndael och Serpent ett 128bit blockchiffer som också det har designats för att passa specifikationerna för AES standarden. Algoritmen är designat av ett amerikanskt forskarteam med bl a Bruce Schneier. Algoritmen har vissa influenser från ett tidigare 64bit blockchiffer från tidigt 90-tal med namnet Blowfish. Det speciella med Twofish är att det är ett modernt 128bit blockchiffer som baserar sig på en äldre och beprövad design som kallas för ett feistel-nätverk, vilket gör att algoritmens kärna inte behöver utgöra en permutation utan kan designas med mycket högre frihetsgrad.

 

1.4 Kryptoforcering

Om information är korrekt krypterad med en säker krypteringsalgoritm som exempelvis AES ska det inte gå att få fram någon information om klartexten, men lyckas man ändå med detta så kallas det för att man har forcerat krypteringen. Om en kryptering med en säker algoritm kringgåtts beror det på att algoritmen har använts på ett felaktigt vis vilket har öppnat upp en väg att ta sig runt krypteringen. Det kan exempelvis handla om att krypteringsalgoritmerna inte är korrekt implementerade i hårdvara/mjukvara, eller att krypteringsalgoritmerna används på ett felaktigt vis av programvaran. Även om AES är en säker krypteringsalgoritm finns det många sätt man kan använda algoritmen felaktigt så att det går att ta sig runt krypteringen. Det är också möjligt att programvaran används felaktigt av användarna så att krypteringen blir meningslös eller kan kringgås.

 

1.4.1 Brute-force attacken

I teorin kan all kryptering knäckas med en metod som kallas för brute-force. Metoden går ut på att testa alla olika kombinationer som finns på krypteringsnyckeln tills man hittar den rätta, och då kommer algoritmen för dekryptering att återskapa informationen. Vad det i praktiken innebär är att man måste använda krypteringsnycklar som är så pass långa att det aldrig någonsin kommer gå att testa sig fram genom alla kombinationer av nycklar.

Definitionsmässigt är nyckellängden lika med den entropi som finns i krypteringsnyckeln, eller förenklat de antal bitar man måste testa sig igenom för att hitta rätt krypteringsnyckel, men om bitarna väljs helt slumpmässigt är nyckelns längd lika med antalet bitar i krypteringsnyckeln. Är nyckeln inte helt slumpmässig blir den faktiska nyckellängden kortare än antalet bitar i nyckeln.

För att en krypteringsnyckel ska vara säker mot brute-force attacken idag måste den ha en entropi på minst 70-80 bitar. Finns det flera olika kryptotexter med olika nycklar att tillgå så kan krypteringsnyckeln även behöva vara längre. För varje extra bit av entropi man lägger till krypteringsnyckeln måste man testa dubbelt så många kombinationer av krypteringsnycklar. För att vara på den säkra sidan brukar man använda minst 128bit krypteringsnyckel för att säkerställa att krypteringen är säker mot brute-force även under framtidens utveckling av datorernas kapacitet.

Något som allt mer oroar forskare på området är att det kan gå att bygga en kvantdator som kan användas för kryptoforcering. Idag finns det ingen sådan dator, men man har under de senaste åren byggt flera fungerande kvantdatorer. För att skydda sig mot brute-force av en kvantdator behöver symmetriska krypton ha ungefär dubbla nyckellängden, dvs i praktiken bör 256 bitar användas vid kryptering.

 

1.4.2 Man-in-the-middle attacken

En mycket vanlig attack mot kryptosystem är något som kallas för en man-in-the-middle (MITM) attack. En MITM-attack går ut på att man sätter sig mellan två personer och spelar dem mot varandra. Detta är en därför en mycket kraftfull attack som oftast sätter gränsen för hur säkert ett kryptosystem är i praktiken. Det kraftfulla med en MITM-attack är att den siktar in sig på den känsliga fasen där man ska komma överens om vilken krypteringsnyckel som ska användas.

I ett symmetriskt krypto går en MITM-attack går ut på att sätta sig mellan de två personerna som ska kommunicera i samband med att de ska komma överens om en krypteringsnyckel, och tricket är att få båda parter att tro att man är den andra parten. På så vis blir man en dold part i mitten som kan läsa kommunikationen.

Tänk dig följande scenario: Två personer som inte känner varandra sedan tidigare, låt kalla dem för Alice och Bob ska komma överens om en gemensam krypteringsnyckel för att börja skicka krypterade e-post mellan varandra. De väljer också att göra detta via telefon. Attacken utförs sedan av en tredje person, Eve, som vill avlyssna kommunikationen.

Attacken kan då utföras av Eve genom att börjar sprida ut falska telefonnummer i den enas, eller för att vara säker i bådas namn. Förhoppningen är sedan att när de ska ringa varandra för att komma överens om en krypteringsnyckel, så ringer de istället till det falska numret. Eve svarar då på det falska numret och presenterar sig som Allice eller Bob beroende på nummer och kommer överens om en krypteringsnyckel. Eve ringer sedan vidare till den andre av de två för att avsluta överenskommelsen av krypteringsnyckel. Alice och Bob har nu kommit överens om en gemensam nyckel som de inte tror att någon annan känner till, men så är inte fallet. Även Eve känner till nyckeln och när de böjar skicka e-post kan informationen ändå avlyssnas och läsas av Eve trotts att både Alice och Bob tror att informationen är helt skyddad med kryptering.

Attacken behöver naturligtvis inte alltid utföras över en telefonlinje, utan kan i princip utföras oavsett hur parterna väljer att komma överens om krypteringsnyckeln.

 

1.5 Krypteringsnycklar

Kryptering kan vara ett mycket kraftfullt verktyg för att skydda information, men man ska samtidigt komma ihåg att krypteringen aldrig blir starkare än de krypteringsnycklar som används. Det är därför viktigt hur man väljer krypteringsnycklar och hur man sedan hanterar dessa nycklar.

 

1.5.1 Lösenord

Ett vanligt sätt att skapa en krypteringsnyckel är att göra det från ett lösenord. Metoden har varit vanlig sedan krypto började användas på 1800-talet, men idag börjar dagens datorer bli så kraftfulla att lösenord blir en allt sämre metod för att skapa krypteringsnycklar.

När man skapar en krypteringsnyckel från ett lösenord gör man det med en nyckelgenereringsalgoritm som gör om lösenordet till en krypteringsnyckel på ett sådant vis att det blir svårare att testa olika lösenord. Används ett lösenord för kryptering utan en genereringsalgoritm så blir säkerheten mycket svag, eller i värsta fall nästan obefintlig. Men även om en nyckelgenereringsalgoritm används räcker lösenord sällan till för att ge helt säker kryptering. Lösenord innehåller helt enkelt inte tillräckligt mycket med information och dagens datorer kan testa väldigt stora mängder med kombinationer av lösenord, oftast är det bara en fråga om tid och tillgång till hårdvara innan rätt lösenord hittas. Lösenordet måste därför vara mycket långt och slumpmässigt för att det ska ge säker kryptering, minst 15-20 tecken långt men gärna längre, och dessutom bestå av olika sorters tecken. Bäst är det om de är genererade av en kryptografiskt säker slumptalsgenerator. Med andra ord så långa att de istället blir opraktiska att memorera dem.

Ett mycket bättre alternativ till lösenord är att använda en lösenfras som består av en fras eller mening med flera ord, säkerheten blir då högre än vad man kan åstadkomma med ett vanlig ord. Lösenfraser bör bestå av osannolika meningar som saknar meningsfull betydelse, helst bestående av ovanliga eller felstavade ord och även innehålla många olika tecken som stora och små bokstäver, siffror och specialtecken. Men även här uppstår ju problemet att det är svårt att memorera dessa meningar. Dessutom är det omständigt om de ska skrivas flera gånger, och dessutom blir det lätt stavfel och hela frasen får skrivas om igen.

Mängden entropi i en lösenfras är svår att uppskatta pga en metod som kallas för Markov-chaining. Men en tumregel är att skriven text innehåller inte mer än 1 bit entropi per tecken, dvs för 70-80 bit säkerhet behöver lösenfrasen vara ca 70-80 tecken lång.

Det bästa är naturligtvis att använda mer moderna algoritmer för asymmetrisk kryptering eller enbart krypteringsnycklar genererade från kryptografiskt säkra slumptalsgeneratorer med kapacitet att skapa mycket säkra krypteringsnycklar. Krypteringen blir då avsevärt mycket säkrare.

 

1.5.2 Nyckelöverföring

Den mest fundamentala egenskapen för vanlig symmetrisk kryptering är att både sändare och mottagare måste ha en gemensam hemlig nyckel för att kunna skicka information mellan varandra.

För att överföra nycklarna behöver man ha tillgång till en säkrare överföringskanal där man kan överföra nyckeln på ett säkrare sätt än än den kanal man sedan tänkte skydda med kryptering. Annars är vinsten med vanlig kryptering ganska liten eller i värsta fall helt obefintlig. Väljer man att komma överens om krypteringsnyckel via en telefonlinje får de man ska skydda sig mot inte ha möjlighet att överhöra telefonsamtalet, exempelvis genom att lyfta på en annan telefonlur i närliggande rum eller genom att sätta upp en falsk basstation för en mobiltelefon.

Inom försvaret använder man en central organisation som skapar krypteringsnycklar och sedan distribuerar dessa till alla parter som ska kommunicera via säkra kuvert. Det här är en metod som kan antas fungera bra inom försvaret, men om man inte har en gemensam organisation som kan skapa och skicka ut krypteringsnycklar via säkra kuvert måste man hitta på en annan lösning på problemet för att krypteringen över huvud taget ska vara meningsfull.

Nyckelöverföring är därför ett stort praktiskt problem med vanlig symmetrisk kryptering, men det finns därför också många lösningar på problemet. Ett exempel är något som kallas för nyckelutbytesalgoritm, där en algoritm med namnet Diffie-Hellman (DH) är den absolut vanligaste. Algoritmen kan sätta upp en gemensam hemlig krypteringsnyckel mellan två (eller fler) parter över en avlyssnad överföringskanal. Det som skickas mellan användarna är bara ”exponenter” av hemliga värden, vilket gör att även om kanalen är avlyssnad kan nyckeln överföras säkert. Diffie-Hellman kan antingen beräknas över en MODP grupp eller en elliptisk kurva. Men, problemet med  MITM-attacker kvarstår tyvärr fortfarande med denna metod. En annan och betydligt elegantare lösning är att använda modernare tekniker för asymmetrisk kryptering.

 

1.5.3 Nyckelhantering

Det är viktigt att uppdatera symmetriska krypteringsnycklar med jämna mellanrum. Det finns olika orsaker till detta. Bl a ökar risken för kryptografiska attacker om större mängder data krypteras med samma nyckel, även om det i praktiken inte ska vara något problem om det är säkra algoritmer som är korrekt implementerade. En annan är risken att en nyckel komprometteras, dvs läcker ut till en obehörig. Ju länge tid samma nyckel har använts, ju mer information kan då läsas av den obehöriga.

När en symmetrisk kryptonyckel inte längre behövs är det viktigt att den förstörs genom permanent radering, eftersom den annars kan användas för att dekryptera lagrad information i efterhand.

Det bästa är naturligtvis att använda en ny krypteringsnyckel vid varje specifikt tillfälle och sedan därefter radera den, vilket är möjligt via exempelvis hybrid asymmetrisk kryptering.

 

Tillbaka till krypteringsguiden.