Kryptoalgoritmer i klartext

Inom säkerhetsmekanismen ssl finns ett antal kombinationer av algoritmer som kan användas för att skapa säker kommunikation. Ett exempel på en sådan kombination är ”SSL_RSA_WITH_ RC4_128_SHA” – beteckningen säger oss bland annat att det symmetriska kryptot rc4 tillämpas.

I ett symmetriskt krypto används samma nyckel för att kryptera och dekryptera. Därför måste mottagaren få nyckeln innan det går att skicka över skyddade meddelanden. Om en tredje part får tag på nyckeln går det inte att lita på säkerheten.

Symmetriskt eller inte

Asymmetriska krypton lider inte av det problemet. De arbetar med par av nycklar: den ena nyckeln används för att kryptera meddelanden, den andra nyckeln används för att dekryptera det som krypterats med den första nyckeln. Två parter som vill kommunicera utbyter nycklar för att kryptera med varandra och kan sedan skicka skyddade meddelanden till varandra.

Varför då inte bara använda asymmetriska krypton? Skälet är mycket enkelt: prestanda. Ett symmetriskt krypto är flera tusen gånger snabbare än ett asymmetriskt. Därför används det asymmetriska kryptot rsa i kombinationen vi nämnde ovan för att sätta upp en session, och den sessionen krypteras sedan med aes.

I den här artikeln tittar vi närmare på symmetriska krypton. De finns i många olika varianter, det som skiljer dem åt är till exempel hur mycket data som bearbetas i stöten, hur mycket resurser kryptot kräver, hur långa nycklarna är, hur fort det går att starta kryptot och hur säkert kryptot är.

3des – med rötterna i USA:s spiontjänst

Det första icke-militära kryptot i stor spridning heter des, data encryption standard. Det utvecklades av IBM med hjälp av USA:s underrättelsetjänsten National Security Agency i början av 1970-talet och har sedan dess använts i otaliga system och applikationer.

I dag är des officiellt pensionerat, det togs bort som godkänd standard 2008. Men det lever vidare i kryptot 3des, även kallat tdea, triple des encryption algorithm. Som namnet antyder är det ett krypto som består av des tre gånger om. Även 3des har fått stor spridning, både för generell kommunikation och inbyggt i system. EMV-systemet för kreditkort och elektronisk betalning använder exempelvis 3des.

3des har 48 iterationer och arbetar på data i block om 64 bitar. Det stora antalet iterationer och tabelluppslagningar gör att 3des är förhållandevis långsamt. Våra tester med verktyget Openssl visar att kryptot är långsammast av de krypton vi undersöker i den här artikeln.

35 år – fortfarande säkert

Des har en nyckel på 56 bitar och med tre stycken separata des-nycklar får 3des alltså en nyckel på 168 bitar.

Säkerhetsmässigt har des och 3des stått sig förvånansvärt starkt. Trots mer än 35 års bruk har inga stora svagheter i algoritmen upptäckts. I stället är det teknikutvecklingen sprungit ifatt – i dag går det att pröva alla möjliga nycklar för ett des-krypterat meddelande på några få dagar. 3des däremot är betydligt säkrare, och kommer att användas i ett antal år framöver. Dess stora spridning gör att det är ett säkert val för den som vill få olika system att fungera tillsammans. Men i dag finns det andra krypton som ger större flexibilitet, säkerhet och prestanda.

Aes – tävlingsvinnaren som står sig

År 2001 avslutades en internationell, öppen tävling om att ta fram en ersättare till des. Vinnaren blev en algoritm från Belgien med namnet Rijndael, som utsågs till ny standard med namnet advanced encryption standard – aes.

Aes har sedan dess varit framgångsrikt. Kryptot används i dag bland annat för att säkra kommunikation i rfid-standarden Zigbee, för höghastighetslänkar i många gigabit per sekund och i wlan-standarden wpa2.

Många processorer innehåller i dag stöd i hårdvaran för aes vilket gör att kryptot blir ett självklart val i nya applikationer.
Aes är precis som des ett blockkrypto, men arbetar på block om 128 bitar. Kryptot stödjer tre nyckellängder: 128, 192 och 256 bitar, men oftast bara en av längderna. Kryptot har 10 iterationer för 128 bitars nyckel och 14 iterationer för 256 bitars nyckel.

AES_subbytes
Delfunktionen Subbytes i en iteration av aes. För varje element a i matrisen med 4 gånger 3 byte slås ett nytt värde b upp i en sbox.

Opererar byte för byte
Aes är uppbyggt med operationer som arbetar på en matris om 4 gånger 4 byte. De operationer som utförs, exempelvis rotationer av rader i matrisen och uppslagning i sbox, sker för varje byte. Det gör att operationerna är små, snabba och enkla att parallellisera, vilket betyder att aes är lätt att accelerera i hårdvara. Strukturen i aes gör det även lätt att skapa implementationer med mer eller mindre resursdelning och parallellism. Det gör det möjligt att anpassa storleken på implementationen till de prestandakrav som applikationen ställer. I våra mätningar är aes generellt snabbast, och speciellt för korta sessioner och på en maskin med lägre klockfrekvens går det riktigt fort.

Krävande attacker
Säkerhetsmässigt har aes-algoritmen klarat sig bra. De senaste åren har det publicerats artiklar som visar på teoretiska attacker på aes med 192 och 256 bitars nycklar, men de attackerna kräver tillgång till stora mängder nycklar och data. Däremot har ett antal framgångsrika attacker skett mot implementationer av aes. Speciellt attacker på små, kostnadsdrivna implementationer har visat sig vara relativt lätta genomföra. De attacker som beskrivits kräver dock fysisk tillgång till maskinen där aes är implementerad.

Vi ser att aes gott kan användas som huvudsakligt krypto. Dess förmåga att skala upp och ned efter prestandakrav och snabba initiering gör det lämpligt för många applikationer, stora som små.

Läs ocksåKryptering med aes inte så säkert som man trott

Cast – bäst för korta sessioner

Cast är ett blockkrypto som funnits som internetstandard sedan 1997. Det används bland annat i krypteringsverktygen PGP och GPG. Företaget Entrust äger patent kopplade till cast, men företaget har släppt algoritmen fri för kommersiell och icke-kommersiell användning. Cast stödjer nyckellängder från 40 till 128 bitar. Med en nyckel på 80 bitar eller fler krävs 16 iterationer för att bearbeta ett block. I dag är nyckellängden i cast normalt 128 bitar. Precis som för 3des är blockstorleken 64 bitar. Cast arbetar internt med ord om 32 bitar och den huvudsakliga funktionen i en iteration utgörs av uppslagning i fyra olika sboxar.

Cast är ett relativt snabbt krypto med kort initieringstid. I våra mätningar är cast ungefär tre gånger snabbare än 3des, vilket stämmer bra då det har en tredjedel så många iterationer. Kryptots snabba initiering gör det bra för korta sessioner.

Säkerhetsmässigt har cast stått sig bra. Det finns i dag inga allvarliga attacker mot algoritmen. Däremot har det publicerats attacker på implementationer. Dessa attacker bygger på att observera sidoeffekter, exempelvis skillnad i tid eller strömförbrukning vid uppslagning i sboxarna. De attackerna är i första hand riktade mot inbyggda system och riktigt små implementationer. Vidare kräver attackerna fysisk tillgång till den enhet där kryptot är implementerat.

Godkänt – men i andra hand

Cast har bra säkerhet, stor spridning och god allmän prestanda. Vi ser därför att cast är ett bra andrahandsalternativ till aes och blowfish.

Rc4 – inte längre att lita på

Rc4, även känt som Arcfour, är ett krypto utvecklat av företaget RSA Security och lanserat redan 1987. Algoritmen var från början hemlig, men läckte 1994 ut och har sedan dess fått stor spridning. Kända användningsområden förutom ssl är i Lotus Notes, wlan-standarderna wep och wpa, bittorrent och som slumptalsgenerator i olika operativsystem.

Rc4 har en enkel uppbyggnad och kompakt storlek. Det gör den lätt att implementera, inte minst i inbyggda system. Kryptot bygger på en intern tabell på 256 byte samt två pekare som används för att uppdatera tabellen. För varje byte data som ska krypteras, uppdateras två element i tabellen och ett element plockas för att användas till att kryptera datat. Nyckeln används för att sätta upp tabellens tillstånd. Rc4 stödjer nycklar med längder från 40 till 2048 bitar, men brukar normalt inte vara längre än 256 bitar.

Den interna funktionen i rc4. Pekarna i och j används för att hitta två element i tabellen S. Värdet av elementen kombineras och används för att hitta ett tredje element som används för att kryptera datat.

Tro inte webbläsartillverkarna

Säkerheten hos rc4 är numera helt utraderad. Det finns praktiskt genomförbara attacker och EU:s kryptopanel ECRYPT II avråder från all användning av rc4. Vissa tillverkare av webbläsare anger att ssl skyddad av rc4 med 128 bitars nyckel är stark säkerhet – det är direkt felaktigt.

Rc4 är en enkel seriel algoritm och prestandan skalar därför linjärt ökad klockfrekvens. Eftersom kryptot arbetar på data i enskilda byte behöver algoritmen köras med hög klockfrekvens för att ge bra prestanda. Det tar dessutom längre tid att initiera rc4 än exempelvis aes. Det gäller speciellt för de versioner av rc4, till exempel arcfour128, där de första 256 genererade elementen kastas bort för att göra algoritmen säkrare.

När vi testar på en 2.7 gigahertz Intel Core i7-processor är rc4 dubbelt så snabb som aes-128 för sessioner med stora datamängder. Men på en maskin med lägre klockfrekvens och där sessionerna är kortare är aes flera gånger snabbare.

Ett skäl att använda rc4 brukar anges vara den flexibla nyckellängden. Rc4 stödjer nyckelstorlekar ner till 40 bitar, vilket gör det möjligt att möta exportkrav som kräver symmetriska nycklar på maximalt 56 bitar. Men som sagt är rc4 är inte det enda kryptot som har den flexibiliteten.

Vi rekommenderar att du om möjligt stänger av rc4 och i stället använder aes. I dag är aes så utbrett att du knappast riskerar problem att kunna förhandla fram en session. Fungerar det inte med aes accepteras troligen blowfish, cast eller 3des som andrahandsval.

Blowfish – flexibelt

Blowfish är ett krypto utvecklat av den amerikanske kryptografen Bruce Schneier. Algoritmen presenterades 1993 och släpptes uttryckligen fri för alla och all form av användning, vilket har lett till att Blowfish har fått stor spridning. Schneiers egna sida listar mer än 200 olika applikationer och bibliotek som använder algoritmen.

Blowfish är ett blockkrypto med en blockstorlek på 64 bitar. Nyckelländer från 40 bitar till 448 bitar stöds, men normalt är längden 128 bitar.

Blowfish har 16 iterationer och har en enkel struktur som går att parallellisera. Det gör kryptot snabbt. Likt cast bygger funktionen på stora, interna sboxar, men i blowfish är boxarna nyckelberoende. Det innebär att innan kryptot kan användas måste sbox-tabellerna skapas. Det tar tid och blowfish är därför sämre för korta sessioner.

De nyckelberoende sboxarna tar också viss plats, ungefär 4 kilobyte. För en server är det kanske försumbart, men för små, kostnadsdrivna applikationer kan tiden för initiering och kravet på extra minne för sboxarna göra blowfish till ett sämre val.

I jämförelse med 3des är blowfish mycket snabbare och i våra tester även dubbelt så snabb som cast. Tack vare sin flexibla nyckellängd och höga prestanda är blowfish ett bra alternativ till 3des och rc4. 

Läs mer:

  • EU:s panel med kryptoexperter ger råd om algoritmer och nycklar att använda. Rapporten ”ECRYPT II Yearly report on algorithms and keysizes (2009-2010)” är väl värd att titta närmare på. tinytw.se/ecrypt2010
  • Bruce Schneier är den amerikanske kryptografen, säkerhetsexperten och författaren bakom blowfish. www.schneier.com/blowfish.html
  • Openssl – Ett öppet bibliotek som implementerar kommunikationsprotokollen ssl och tls, inklusive ett antal kryptoalgoritmer som används i protokollen. www.openssl.org

Fakta

  • block: En bestämd mängd data, vanligen 64 eller 128 bitar, som bearbetas av ett blockkrypto.
  • blockkrypto: En kryptofunktion som given en nyckel och ett block data genererar ett nytt block data. Exempel på blockkrypton är aes, des och cast.
  • matris: Ett rutmönster med värden. Kryptot aes arbetar till exempel på en matris om fyra gånger fyra värden.
  • initiering: Den process som krävs för att starta upp ett protokoll eller en funktion.
  • iteration: Ett varv av den sekvens interna operationer som ett symmetriskt krypto består av. Kryptot aes består till exempel av en sekvens med fyra distinkta operationer som sedan upprepas 10 till 14 gånger.
  • parallellisering: Uppdelning av ett arbete som ska utföras i mindre delar som utförs samtidigt.
  • sbox: En tabell som byter ut (substituerar) ett värde mot ett annat.