Men det är inte hela sanningen. Det finns mekanismer som trasslar till det för angriparen. Enklaste sättet att förklara det här är genom att ta upp ett av de värsta exemplen – Microsofts skydd av Windows-lösenord.


Lösenordshasharna i Windowssammanhang är ett exempel på hur saker och ting inte bör se ut. Både ntlm- och lanman-hasharna är svaga genom sin konstruktion eftersom de saknar både salt och iterationer. Då lösenordet skickas över nätverket krypteras lanman-lösenordet med des, där kryptonyckeln skickats i klartext innan krypteringen. Skillnaden ntlm version 1 (lanman) och ntlm version 2 är att nt-hashen i version 2 krypteras genom en hmac-md5-beräkning och inte des. Kryptonyckeln används som utmaning (challenge) för att förvanska den framräknade hmac-md5-summan.

Egentligen är det ingen större skillnad mellan de två olika hasharna som förekommer i Microsofts operativsystem Windows. Den äldre varianten återfinns i bland annat Windows 95, den senare i Windows NT-baserade system.

Windows hash (lm) fungerar så här:
1. Tvinga lösenordet att vara 14 tecken. Det innebär att lösenord längre än 14 tecken blir kapade, eller utökade med ”tomma” bytes så att längden blir exakt 14 tecken.
2. Konvertera alla bokstäver till versaler.
3. Dela det 14 tecken långa lösenordet i två delar med 7 tecken i vardera delen.
4. Använd respektive del av lösenordet för att kryptera strängen med KGS!@#$%.
5. Sätt ihop de två resultaten till en sträng.
Windows NT hash fungerar så här:
1. Konvertera lösenordet till unicode.
2. Genomför en md4-beräkning på lösenordet.

Unix använder salt
Om vi nu tittar på de gamla Unix-hasharna så kan vi göra en säkerhetsjämförelse:
1. I Unix finns en modifierad version av des för att förhindra att kretsar användes för lösenordsforcering.
2. Unix-system använder ett så kallat salt-värde så att det inte skulle gå att återanvända hashar – samma lösenord ger alltså inte samma lösenordshash för två olika användare.
3. Unix-lösenorden utnyttjar iterationer för att fördröja en knäckning – man använder des 25 gånger.
Inga av ovanstående åtgärder görs av Windows-system för att skydda Windows-hasharna. Windowslösenord skyddades av standardalgoritmer, saknade salt och krypteras endast en gång, alltså endast en iteration.

Windows-hashar har därför betraktats som riktigt, riktigt dåliga. De används som ett referensvärde vid all modern lösenordsforcering, eftersom siffrorna låter mer imponerande då.

Fakta

gpu, graphics processing unit: Processor som finns på grafikkort. Arbetar med högre grad av parallellisering än en normal pro­cessor.
hash: Envägsfunktion. Resultatet från en hash går inte att räkna baklänges till vilket indata som angetts.
krigsringare: Gammal lösning som testar olika telefonnummer för att hitta modemingångar.
lm, lanman: Det sätt som användes för att autentisera Windows 95-klienter mot ett Windowsnätverk.
mjukt certifikat: Certifikat med privat nyckel som ges ut på fil.
iteration: Variabel som anger antal gånger som lösenordet hashats eller krypterats.
ntlm, nt lan manager: Det sätt som användes för att autentisera Windows NT-klienter mot ett Windows-NT nätverk.
pbes, password based encryption scheme: Beskriver vilken algoritm som används för att kryptera en annan kryptonyckel.
pbkdf, password based key derivation function: Beskriver på vilket sätt en nyckel eller hash tas fram. Om det är nyckel som tas fram används den för att dekryptera en annan kryptonyckel via pbes.
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.
ssid, service set identification: Nätverks­identifierare för trådlösa nätverk.
wpa2, wi-fi protected access 2: Protokoll som används för att skydda autentisering mot trådlösa nätverk.
xor, ”exclusive or”: Operation som används i binära sammanhang. Om båda invärdena är samma blir resultatet noll, annars ett.