Taggat med: hmac

Så lagrar Facebook lösenord

På en konferens nyligen så avslöjade Facebook hur de lagrar sina lösenord. Eller rättare skrivet hur de hashar sina lösenord.

  1. $cur  = ’plaintext’
  2. $cur  = md5($cur)
  3. $salt = randbytes(20)
  4. $cur  = hmac_sha1($cur, $salt)
  5. $cur  = cryptoservice::hmac($cur)
  6.         [= hmac_sha256($cur, $secret)]
  7. $cur  = scrypt($cur, $salt)
  8. $cur  = hmac_sha256($cur, $salt)

1. Det första steget är tämligen självförklarande.

2. Gör först en MD5 av lösenordet. Detta ligger troligtvis kvar pga historia då detta troligtvis enbart var det enda steget. Om en användare loggar in och enbart har en md5 så kommer lösenordet att uppdateras med det nya systemet enligt nedan.

3. En salt på 160 bitar är genererad slumpmässigt. För att förhindra kollisioner så bör den vara minst 64 bitar pga antalet användare och övriga bitar är troligtvis för att framtidssäkra.

4. En HMAC med sha1 skapas som sedan skickas in i nästa steg.

5. Detta steg är för att inneha en central kontrolldel och att förhindra offline eller online forceringsattacker mot lösenord.

7-8. scrypt för att försvåra forcering samt skapande av regnbågstabeller. Vi har många gånger tidigare skrivit om scrypt. Samt sista steget är för att göra databasen med lösenord mindre.

Facebook håller även koll på lösenordsdumpar som publiceras på internet och förekommer ditt lösenord i en sådan dump så kommer Facebook att varna dig.

Bedömt så har Facebook lagt mycket kraft bakom lösenordshashningen och det ser mycket bra ut.

Joachim Strömbergson
Joachim Strömbergson

Joachim Strömbergson som är säkerhetsexpert på företaget Assured som också har tittat på Facebooks sätt att lagra lösenord kommenterar enligt följande:

För att sammanfatta min känsla efter 5 sekunder är att man är duktig och använder seed, man har till och med vad som ser ut att vara ytterligare en hemlighet vilket gör det än svårare att försöka göra regnbågsattacker. Vidare använder man dessutom scrypt för att införa work factor som försvårar uttömmande sökning.

Källa på informationen är det som Facebook uppgav vid konferensen Real World Crypt 2015.

Uppdatering: Per Thorsehim tipsar även om att Alec Muffett från Facebook höll en presentation vid konferensen Passwords 2014 i Norge där han berättar mer i detalj:

Facebook lösenord

Nya tidsattacker mot HMAC

Det har uppdagats en ny typ av fjärrmässiga tidsattacker (exploiting remote timing attacks). Det var under konferensen BlackHat som gick av Bild CC: flickr.com/photos/stevegrosbois/3362637206/staplen för några dagar sedan i Las Vegas där kryptogurun Nate Lawson visade hur det är möjligt att lista ut huruvida den första byten i en HMAC-sträng är korrekt eller ej. Denna typ av attack påverkar exempelvis oAuth eller OpenID och används av flertalet stora webbtjänster såsom Twitter.

Det är inte första gången som tidsattacker utnyttjas fjärrmässigt i kryptoimplementeringar, utan detta har påvisats ett antal gånger historiskt.

Läs mer på Nate:s blogg eller ComputerWorld.

Kryptobugg i SNMPv3

Amerikanska US-CERT har gått ut med en varning där de berättar att SNMPv3  ( RFC  3410) med tillhörande säkerhetsmekanism (RFC 3414) innehåller en allvarlig säkerhetsbugg. Den felaktiga koden förkortar nämligen den HMAC som används till 1 byte vilket gör det tämligen trivialt att göra en så kallad brute-force attack.

Denna säkerhetsbugg återfinns främst i Net-SNMP och UCD-SNMP vilket är mycket vanligt förekommande programvaror på Internet.

Läs det fullständiga meddelandet här.

HMAC och WordPress

WordPress version 2.5.1 släpps till följd av att en kryptobugg i Cookie-hanteringen gör det möjligt beräkna den HMAC som används för säkerställa att rätt användare är inloggad:

The authentication mechanism assumes that an attacker cannot calculate the HMAC. However, this assumption is broken because the two inputs used to calculate the HMAC (username and expiration) are not clearly delineated.

Läs mer om buggen här:

Undrar du vad HMAC är? Förklaring enligt Wikipedia:

In cryptography, a keyed-Hash Message Authentication Code (HMAC or KHMAC), is a type of message authentication code (MAC) calculated using a specific algorithm involving a cryptographic hash function in combination with a secret key. As with any MAC, it may be used to simultaneously verify both the data integrity and the authenticity of a message. Any iterative cryptographic hash function, such as MD5 or SHA-1, may be used in the calculation of an HMAC; the resulting MAC algorithm is termed HMAC-MD5 or HMAC-SHA-1 accordingly. The cryptographic strength of the HMAC depends upon the cryptographic strength of the underlying hash function, on the size and quality of the key and the size of the hash output length in bits.