it-swarm.dev

Facebook memorizza le password in chiaro?

Stavo per ripristinare la mia password di Facebook e ho ricevuto questo errore:

La tua nuova password è troppo simile alla tua password attuale. Prova con un'altra password.

Ho assunto che Facebook memorizzi solo gli hash delle password, ma in tal caso, come possono misurare la somiglianza delle password? Questo dovrebbe essere impossibile con una buona funzione di hashing, giusto?

La domanda è: come è possibile e quali sono le implicazioni?

Grazie in anticipo.

[~ ~ #] aggiornamento [~ ~ #]

Non ho chiarito - non mi è stato chiesto di fornire la vecchia e la nuova password. Era la procedura di "reimpostazione della password", in cui fornivo solo una nuova password, quindi la maggior parte delle risposte di suggerito duplicato non sono applicabili.

UPDATE2

mistero risolto - vedi commento (dall'ingegnere di Facebook)

185
Michał Šrajer

Speriamo e supponiamo che Facebook memorizzi solo hash della password corrente (e potenzialmente password precedenti).

Ecco cosa possono fare:

  1. l'utente imposta la prima password su "primo" e fb memorizza l'hash ("primo").

  2. in seguito, gli utenti ripristinano la password e viene richiesto di fornire la nuova password "First2"

  3. Facebook può generare un sacco di password (simile a quella nuova): ["First2", "fIrst2", "firSt2", ... "first2", ... "first", ...] e quindi confrontare l'hash di ciascuno con l'hash memorizzato.

Questa è l'unica soluzione che mi viene in mente. Qualsiasi altro?

201
Michał Šrajer

Non saprei se lo fanno (non usano nemmeno Facebook), ma è anche possibile che usino Hardware Security Modules (HSM) per i loro processi di crittografia che non memorizzano password con hash ma semplicemente li crittografa in modo reversibile. Con il volume delle richieste di autorizzazione che devono affrontare, questo avrebbe perfettamente senso, poiché i suoi ordini di grandezza sono più veloci di sicurezza (leggi: rallentamento) hashing della password , pur offrendo comunque la memorizzazione sicura delle password.

Gli HSM potrebbero quindi essere programmati per confrontare password memorizzate e nuove come input di una delle loro funzioni e semplicemente restituirne il risultato (potrebbe anche essere un valore booleano nel nostro caso), con la password originale che non viene nemmeno trasmessa o archiviata in testo semplice ovunque, oltre alla loro memoria interna (che è resistente alle manomissioni). Questo è di solito indicato come chiave protetta integrata e archiviazione/elaborazione dell'applicazione .

A proposito, molte banche usano gli HSM perché una loro corretta implementazione richiede anche sicurezza fisica per i dispositivi stessi e il modo in cui sono accessibili (inoltre, sono piuttosto costosi), ma questo ovviamente offre molta più flessibilità le password possono essere elaborate in modo sicuro senza mai essere divulgate.

22
TildalWave

C'è solo una risposta corretta a questo. Nessuno lo sa (tranne Facebook).

Facebook potrebbe memorizzare la tua password di Facebook in testo semplice, ma potrebbe esserci anche qualche schema che utilizza hash fuzzy o hash pre-calcolati di password simili.

Non c'è davvero modo di saperlo se non dovessimo entrare in Facebook e controllare tutte le loro risorse.

17
user11869

Un'altra possibilità è che Facebook memorizzi un hash della tua password e un hash del SOUNDEX della tua password. Quindi, quando inserisci la tua nuova password, può confrontare l'hash del suo SOUNDEX con quelli precedentemente memorizzati e rispondere che una password è troppo simile.

Questa è, ovviamente, pura congettura.

7
Ammusionist

Un'altra possibilità è che fb non ha l'hash, ma crittografa le password con la loro chiave principale. Di quanto potrebbero decifrarlo in qualsiasi momento per confrontarlo con quello nuovo.

  1. Speriamo di no - dovrebbero farlo con hash!
  2. Come ha sottolineato Rell3oT, nessuno lo sa tranne fb. Quindi tutto ciò che possiamo fare è gettare supposizioni selvagge sul ring.
3
mohrphium

Fornire un po 'più di dettagli sul metodo di archiviazione della password stessa.

Le precedenti risposte storiche precedono qualsiasi conferma da parte di Facebook. Ma in Passwords 14, Alec Muffett ha tenuto un discorso in cui ha descritto in modo esplicito l'archiviazione delle password su Facebook in alcuni dettagli.

Nel suo discorso, conferma che Facebook non memorizza le password in testo semplice, ma utilizza piuttosto un metodo a più passaggi che è abbastanza resistente a una varietà di attacchi:

slide from Alec Muffett talk, showing Facebook's password storage method

... come segue:

$cur  = 'plaintext'

# MD5 the plaintext.
$cur  = md5($cur)

# Hash SHA1 with a 160-bit salt.
$salt = randbytes(20)
$cur  = hmac_sha1($cur, $salt)

# Hash SHA256 with a secret salt, using an internally abstracted crypto service.
$cur  = cryptoservice::hmac($cur)
        [= hmac_sha256($cur, $secret)]

# Run the result through the scrypt KDF (using undisclosed tuning parameters)
$cur  = scrypt($cur, $salt)

# Use SHA256 (to reduce and normalize the large scrypt result)
$cur  = hmac_sha256($cur, $salt)

Questo livello di resistenza non dovrebbe sorprendere, dal momento che Muffett è l'autore di crack , uno dei primi strumenti efficaci per decifrare le password.

Quindi ora abbiamo la conferma che Facebook no archivia le password in testo semplice.

1
Royce Williams