Säkerhetsdosa

Sammanfattning

De senaste dagarna har jag funderat och läst på lite om säkerheten hos bankernas säkerhetsdosor (eng. digipass). Den första banken jag kollade var Swedbank och säkerheten hos deras dosa var inte tillfredsställande.

Bakgrund

Swedbanks dosa kommer från ActivIdentity, tidigare ActivCard, och följer standarden ANSI X9.9 som inte finns på nätet utan måste beställas från ANSI. En standard som däremot finns online är FIPS 113. Bägge beskriver samma algoritm. Krypteringen som används är vanlig DES. Väl gömd inne i dosan finns 56-bitars nyckeln som DES använder. Nyckeln går inte att läsa ut. Enligt uppgifter på nätet lagras nyckeln i ett flyktigt minne som backas upp av batteri och om man försöker läsa ut nyckeln, eller om strömmen till batteriet bryts, så förstörs nyckeln och dosan blir oanvändbar. [Redigerat: jag har fått påpekat att dosan även har ett backupbatteri (eller kondensator) som håller liv i nyckeln vid byte av huvudbatteriet]. Varje dosa har en egen nyckel som också lagras i en databas hos Swedbank (där nyckeln knyts till dosans serienummer).

DES är en beprövad standard som använts i över 30 år så dosan borde vara säker… eller? Tyvärr inte, DES använder en alldeles för kort nyckel. Med moderna hemdatorer/FPGAer så kan inte DES längre anses vara säkert. Det går att genomföra en brute force attack, dvs att testa alla nycklar, en efter en, tills man hittar den rätta.

Så fungerar dosan

DES i säkerhetsdosan

Användaren matar in en 8-siffrig kod i dosan. Varje siffra översätts till siffrans ASCII-kod (0 = 0x30, 1 = 0x31 … 9 = 0x39). De åtta ASCII-koderna bildar tillsammans 64 bitar klartext som med hjälp av 56-bitars nyckeln krypteras till 64 bitar skiffertext. Av dessa 64 bitar skiffertext bildar de vänstra 32 bitarna utdata som presenteras i hexformat. En hexsiffra (0-F) motsvarar alltså 4 bitar. I outputen finns dock bara siffrorna 0-9, tecknen A-F mappas till siffrorna 0-5. Detta gör en brute force attack aningen svårare och dessutom är det lättare för användaren att läsa vanliga siffror.

Attacker mot DES

DES kryptoanalyserades första gången officiellt 1997 i tävlingen DES-I som arrangerades av RSA. Metoden som användes var brute force. Eftersom nyckellängden endast är 56 bitar blir antalet nycklar blygsamma 2^56, eller drygt 72 biljoner (kvadriljoner på engelska), 72 X 10^15. En genomsnittlig PC med 1GHz processor klarar att testa runt 5 miljoner nycklar per sekund (det skulle ta runt 166000 dagar för en standard PC att testa alla nycklar). I DES utmaningarna samarbetade tusentals datorer i ett distribuerat nätverk och hjälptes tillsammans åt att testa alla nycklarna. Med 166000 datorer skulle det istället ta en dag att testa alla nycklarna. År 1998 byggde EFF den spektakulära Deep Crack för 250.000 dollar. Den hade specialdesignad hårdvara och byggdes specifikt för att knäcka DES. Deep Crack kan testa 90 miljarder nycklar per sekund.. Mycket riktigt tog också EFF med hjälp av Deep Crack hem första priset i nästa tävling, DES-II. DES går alltså att knäcka både med ett distribuerat nätverk av datorer och/eller med specialdesignad hårdvara. Priset på elektronik sjunker hela tiden. År 2006 byggdes COPACOBANA under ledning av två tyska professorer. Den har liknande prestanda som Deep Crack men är mycket billigare. För 8900 euro kan du köpa en från projektets hemsida. Dessutom har COPACOBANA, till skillnad från Deep Crack, programmerbara FPGAer vilket gör att den kan användas till olika typer av kodknäckning.

Attacker mot säkerhetsdosan

I tävlingarna som RSA arrangerade var upplägget att både 64 bitar klartext och 64 bitar skiffertext var kända. Vi har bara tillgång till 32 bitar skiffertext. Eftersom hexsiffrorna A-F dessutom är mappade mot 0-5 har vi egentligen ännu mindre. Tim Güneysu från crypto.rub.de (som ligger bakom COPACOPANA) förklarar detta så här:

Om DES är en pseudoslumpmässig funktion med god statistisk distribution, kan vi uppskatta sannolikheten att X är en icke detekterad mappning A..F=>0..5 på en outputvektor med Pr(X)=3/8 (eftersom 6 av 16 siffror kan vara mappade). Enligt en enhetlig distribution av dessa mappningar är 3 av 8 siffror (som utgör outputvektorns 32 bitar) i snitt påverkade av ett fel. Med hänsyn till värdet innebär felet en skillnad på en bits information (”1” kan t ex tolkas som antingen ”1” eller ”B”). Totalt har vi ett statistiskt fel på 3 bitar per utvärde och kan således antas ha 29 bitar korrekt information för en första brute force attack.

Genom att mata in en serie av tal och välja en output med många siffror i intervallet 6-9 kan sannolikheten för fel minskas (eftersom 6-9 inte mappas). För varje nyckel som provas fås 64 bitar skiffertext. Om de 32 mest signifikanta bitarna av skiffertexten stämmer så har vi en nyckelkandidat. Efter att alla kombinationer gåtts igenom finns 2^32 kandidater. Eftersom vi dessutom hade 3 bitars osäkerhet pga mappningen leder detta till att vi kommer få 2^35 kandidater (nycklarna måste testas mot alla kombinationer av skiffertext som mappningen kan motsvara). Tim förklarar att det räcker med ett till klartext-skiffertext par för att avgöra vilken av dessa kandidater som är den riktiga nyckeln. Två par motsvarar 58 (29 + 29) bitars information och nyckeln är endast på 56 bitar.

Tidsuppskattning

COPACOBANA testar 2^36 nycklar per sekund vilket innebär att alla 2^56 nycklar kan testas på 2^(56-36) sekunder, drygt 12 dygn. I genomsnitt tar det drygt 6 dygn att hitta den rätta nyckeln. De flesta privatpersoner har (till skillnad från NSA och andra säkerhetstjänster) inte tillgång till en Deep Crack eller COPACOBANA. Ett distribuerat nätverk bestående av (mer eller mindre) frivilliga personer som upplåter datorkraft till beräkningar skulle också kunna knäcka en nyckel. Men om det ska kunna ske inom rimlig tid måste nätverket bestå av tusentals datorer. Låt säga att snittdatorn aningen optimistiskt beräknar 10 miljoner nycklar per sekund, då behövs 2^56/(10000000*31*24*3600) = 2690 datorer för att hitta nyckeln på en månad i värsta fallet. Det är också rimligt att tänka sig ett zombienätverk (botnet) som används för att göra sådana beräkningar. Polisen har avslöjat zombienätverk med mångdubbelt fler datorer än vad som krävs för att knäcka en DES-nyckel.

Sammanfattning

Det hela sammanfattas väl med Tims ord angående algoritmen:

With a breaking time of 2 weeks, it must be considered as completely unsecure.

Tacklista

Följande personer har bidragit med information:

  • Tim Güneysu – Givande diskussion om attackteori och COPACOBANA.
  • Matthew Kwan – Svar på frågor om mjukvaruimplementation av algoritmen bitslice-DES.
  • Alexander Peslyak (aka Solar Designer) – Svar på frågor om MMX- och SSE2-optimering av bitslice-DES.
Advertisements

Om albertveli

Grävande programmerare.
Det här inlägget postades i Säkerhet. Bokmärk permalänken.

8 kommentarer till Säkerhetsdosa

  1. Ping: Kryptoblog » Blog Archive » Analys av säkerhetsdosa för Internetbank

  2. Albert skriver:

    En person som läste denna blog mejlade sen till ActivIdentity och ställde fler frågor. Jag har fått ta del av mejlkonversationen. De svarade att vissa av deras produkter använder triple DES och andra vanlig DES. Vilken algoritm som bankdosorna använder ville de dock inte tala om. Mest troligt vanlig DES med andra ord.

  3. Bruce Schneier skriver:

    The DES algorithm is like a open book, it can be used to kill flies with.

  4. Some MYSTERIOUS security skriver:

    isn’t it time for a follow up on this?

  5. Daniel Persson skriver:

    Även om det är triple-des-two-key eller double-des så kan man reducera körtiden om man offrar ”lite” minne. Oavsett så känns bankdosorna inte allt för säkra … visserligen krävs en del för att en attack ska fungera…
    Men ponera att man kan hamna mellan banken och användaren och samla upp låt säga 4st plaintext-cipertext par så skulle man med Deepcrack eller botnet eller liknande under en inte allt för lång tid kunna ta reda på dessa 4 privata nycklar som borde ge tillräckligt med data för att återskapa den faktiska nyckeln.

    Väl skriven rapport by the way.

  6. Kommissarie Syntax, språkpolis skriver:

    Skiffer är en sedimentär bergart. Artikelförfattaren är förmodligen ute och far efter ordet chiffer. Inte för att jag vill vara en ogin besserwisser, men i en artikel som handlar om just chiffrering och dechiffrering så skulle trovärdigheten höjas ett snäpp om åtminstone det mest centrala ordet stavades rätt.

  7. albertveli skriver:

    Tack för påpekandet. Det stämmer att chiffer stavas med ch och inte med sk. Men jag orkar inte ändra just nu. Dessutom låter chiffer bögigt 🙂

    Nästa gång ska jag dock stava med ch från början (inte för att jag är bög, men jag får väl bita ihop och stava ändå).

  8. Christian Olsen skriver:

    Jag knäckte säkerhetskoden i GW basic. Ungefär lika lätt då man med ett vanligt kombinationslås drar med tummen några gånger. Men ganska idiotiskt om någon gör en ”attack” mot en bank, för du måste först logga in med ditt egna personnummer på bankens server.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s