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.
- $cur = ’plaintext’
- $cur = md5($cur)
- $salt = randbytes(20)
- $cur = hmac_sha1($cur, $salt)
- $cur = cryptoservice::hmac($cur)
- [= hmac_sha256($cur, $secret)]
- $cur = scrypt($cur, $salt)
- $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 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: