Öppna ramverk hjälper
I och med att flera utvecklingsramverk blivit tillgängliga har populariteten också ökat att använda grafikkort vid lösenordsknäckning. Först ut var Nvidia med det proprietära ramverket Cuda år 2007. I slutet av 2008 släpptes ramverket OpenCL, en öppen standard för integration av beräkningsenheter som är kompatibelt med grafikkort från båda de ledande tillverkarna av grafikkort, Nvidia och AMD.

Grafikkortstillverkare har dessutom börjat släppa grafikkort som inte endast är specialiserade på grafik utan på mer generella beräkningar. Termen gpgpu, general purpose graphics processing unit, används allt oftare för denna typ av grafikkort.

Testade i praktiken
Hur mycket snabbare är då ett grafikkort än en processor på att knäcka lösenord? Vi beslutade oss för att testa detta i praktiken. Vi utrustade vår labbdator, som har en Intel Core i7-2600-processor, med ett AMD HD 7970-grafikkort. Den mjukvara som vi valde för knäckning av lösenord var 64-bitarsversionen av programvarusviten Hashcat. Vi använde oclhashcat-lite64 för knäckning med grafikkort medan hashcat-cli64 användes för knäckning med processor.


Så här ser skillnaden i prestanda mellan en processor och ett grafikkort ut när det gäller en uttömmande lösenordssökning. Värdena anger antal miljoner gissade lösenord per sekund. Observera att värdena är ungefärliga och endast syftar till att ge en uppfattning om hastighetsskillnaden.

Det framgår tydligt av resultatet att grafikkortet är betydligt snabbare än processorn, framförallt när det gäller äldre hashalgoritmer som md5 och ntlm. Vad kan vi då dra för slutsatser av våra resultat?
Låt oss anta att lösenord består av slumpmässigt utvalda tecken med en blandning av stora och små bokstäver, siffror och specialtecken. Det resulterar som sagt i att varje tecken i ett lösenord kan anta 112 olika värden. Vi antar vidare att lösenordet skyddas av hash-algoritmen ntlm, det är vanligt vid jämförelser.

Av resultatet kan man dra slutsatsen att man bör ha ett lösenord bestående av åtminstone nio slumpmässiga tecken för att vara säker från en angripare som har en ganska simpel knäckningsmaskin, en utrustad med ett grafikkort som kostar cirka fyra tusen kronor i inköp. Notera dock att det kan gå mycket snabbare om lösenordet inte består av slumpmässiga tecken.

Genom att öka investeringen kan knäckningen effektiviseras. Eftersom knäckning av lösenord är ett problem som går att parallellisera kan en angripare köpa in fler grafikkort och på så sätt nå en högre knäckningskapacitet. De flesta moderna datorer kan normalt inte utrustas med fler än en handfull grafikort, bland annat på grund av brist på pci express-platser och fysiskt utrymme.

Skapa virtuellt kluster
Det är dock möjligt att komma runt de begränsningarna genom att bygga ett kluster av flera datorer där varje dator utrustas med maximalt antal grafikkort. Dessa kan sedan slås ihop i ett virtuellt kluster med hjälp av programvaran Virtual OpenCL. Med den kan samtliga grafikkort i klustret hanteras som lokala grafikkort, så att man kan använda dem direkt i knäckningsprogrammet Hashcat.


Jämförelse mellan TechWorlds labbdator och ett grafikkortskluster bestående av 25 grafikkort. Siffrorna anger antalet miljoner lösenordsgissningar per sekund för tre vanliga hash-algoritmer.

Det är precis vad den amerikanske it-säkerhetsexperten Jeremi Gosney gjorde, och redovisade på konferensen Passwords12 i december 2012. Hans knäckningskluster bestod av tjugofem AMD-grafikkort av varierande modell.

Fakta

alu, arithmetic logical unit: Enhet för aritmetiska och logiska operationer.
asic, application specific integrated circuit: Krets designad för en specifik uppgift.
cpu, central processing unit: Enhet i en dator som exekverar ett program.
fpga, field programmable gate array: Krets som kan konfigureras efter konstruktion.
gpu, graphics processing unit: Processor som finns på grafikkort. Arbetar med högre grad av parallellisering än en normal processor.
hash: Envägsfunktion. Resultatet från en hash går inte att räkna baklänges till vilka indata som angetts.
instruktionspipeline: Instruktionspipeline är en teknik som används vid tillverkning av proccessorer för att höja processorns genomströmning av instruktioner. Kan liknas vid löpande band-principen inom biltillverkning. Varje steg i pipelinen utför en liten specialiserad uppgift innan resultatet skickas vidare till nästan pipeline-steg.
ntlm, nt lan manager: Det sätt som användes för att autentisera Windows NT-klienter mot ett Windows NT-nätverk.
regnbågstabell: Tabell med förberäknade hash-kedjor. Snabbar upp formering av osaltade lösenord och därmed knäckning av krypterade lösenord.
salt: Slumpmässigt värde som läggs till ett lösenord för att göra det svårare att knäcka lösenordet. Lagras i klartext tillsammans med det krypterade lösenordet.
simd, single instruction single data:
Processorarkitektur där varje instruktion appliceras på data lagrad i en minnescell.
sisd, single instruction multiple data: Processorarkitektur där varje instruktion appliceras på data i flera minnesceller samtidigt.