Domanda:
Come può un sistema applicare un numero minimo di caratteri modificati nelle password, senza memorizzare o elaborare le vecchie password in chiaro?
Iszi
2011-04-19 18:19:42 UTC
view on stackexchange narkive permalink

In alcuni ambienti, è necessario che gli utenti cambino un certo numero di caratteri ogni volta che creano una nuova password. Questo ovviamente per evitare che le password siano facilmente indovinabili, specialmente con la conoscenza di vecchie password come un dipendente defunto potrebbe avere per un account di servizio condiviso.

Ho separato domande aperte per affrontare il lato della pressione dei pulsanti di questa applicazione. Tuttavia, sono anche curioso di sapere come funziona questa applicazione sul back-end. Se una password in chiaro non può essere derivata da un algoritmo di hashing forte, come fa il sistema a determinare quanti caratteri sono stati modificati nelle nuove password?

Si potrebbe generare e salvare gli hash di password "simili" o eseguire un algoritmo di questo tipo sul nuovo passaggio e vedere se calcola che il vecchio passaggio è simile. È più probabile che stiano salvando le ultime n password e controllando che l'hash non corrisponda a nessuna di esse. J
Correlato, riguardo all'archiviazione dei vecchi hash: http://security.stackexchange.com/questions/19458/requiring-regular-password-change-but-storing-previous-paswords
Sei risposte:
Mark Davidson
2011-05-26 16:11:06 UTC
view on stackexchange narkive permalink

Non sono sicuro del confronto con tutte le password che l'utente ha utilizzato in precedenza, poiché dipende davvero dal sistema di hashing che stai utilizzando e direi che se è possibile derivare qualche somiglianza dall'hash, allora non è molto buono sistema per cominciare.

Ma supponendo che l'utente debba fornire la propria password corrente quando imposta la nuova password, si potrebbe almeno confrontare quella nuova con quella attuale poiché entrambe le saranno rimosse quel punto.

Il modulo pam_cracklib su Linux controlla le password in questo modo ed esegue alcuni controlli di base per impostazione predefinita.

  • La nuova password è solo la vecchia password con le lettere invertite ("password" vs. "drowssap") o ruotata ("password" vs. "asswordp")?
  • La nuova password differisce da quella vecchia solo per il cambio di maiuscolo / minuscolo ("password" vs. "Password")?
  • Almeno un numero minimo di caratteri nella nuova password non è presente in la vecchia password? È qui che entra in gioco il parametro "difok".

Puoi trovare ulteriori dettagli al riguardo qui.

Questo è un buon metodo ed è quello che viene effettivamente utilizzato nel mondo reale. Un programma di applicazione della cronologia / complessità delle password può anche confrontare un numero arbitrario di password storiche eseguendo l'hashing di varianti e derivazioni quando un utente imposta per la prima volta la password e memorizzandole per controllarle in seguito.
+1 @Mark e @user502. Il problema di tornare indietro oltre la password che viene aggiornata più in profondità nella storia per qualcosa di più di un semplice confronto hash (anche lievi modifiche) mi ha fatto pensare comunque all'utilità di questo. Se non utilizzo la stessa password di> 1 generazioni fa, quanto è debole rispetto a una password completamente nuova? Il mio pensiero è che il rischio potrebbe non giustificare l'hashing di tonnellate di combinazioni da memorizzare su un telefono per quel test.
Questo può essere annullato cambiando la password due volte di seguito.
@starblue "_cambiare la password due volte di seguito._" può essere annullato applicando un tempo minimo tra le modifiche. (Qualcosa che non consiglio.)
In linea di principio, al momento della modifica della password, il sistema potrebbe salvare la vecchia password (che devi inserire quando cambi la password) in chiaro per un confronto futuro. Tuttavia questa sarebbe probabilmente una cosa molto stupida da fare; un utente malintenzionato che può vedere la cronologia della scelta della password di un utente può probabilmente capire il sistema dell'utente per la generazione delle password e, se non è casuale, prevedere le scelte future.
"Ma supponendo che l'utente debba fornire la propria password corrente quando imposta la nuova password" che è falsa quando l'utente sta resettando una password dimenticata.
frankodwyer
2011-04-19 18:28:35 UTC
view on stackexchange narkive permalink

Questo può essere fatto facilmente quando si cambia la password (dove si trova e dovrebbe essere chiesto all'utente di fornire sia la vecchia che la nuova password).

Per aggiungere a ciò, funziona per controllare l'ennesima password ma non l'n-1a. Non sono a conoscenza di alcun sistema che possa catturare un utente utilizzando una sequenza di password "washington1", "newyork2", "washington3", "newyork4", "washington5", "newyork6"
Bruno - giusto, per questo dovresti iniziare a memorizzare le password in chiaro, immagino (il che non è una grande idea).
Gilles 'SO- stop being evil'
2013-06-04 02:38:42 UTC
view on stackexchange narkive permalink

Di solito, quando si modifica la password, è necessario prima inserire la vecchia password. Questo è utile per la sicurezza, per garantire che qualcuno che cammina vicino al tuo computer non possa cambiare molto rapidamente la password e bloccarti mentre giri le spalle. Consente inoltre al server di applicare le regole di distanza delle password. Il server deve solo mantenere la vecchia password in memoria per il tempo necessario a verificare che la nuova password sia sufficientemente diversa da quella vecchia. Non ha mai bisogno di memorizzare la password senza hash.

A proposito, tali regole di modifica della password sono dannose per la sicurezza. (Sì, so che sei la vittima qui.) Se gli utenti devono cambiare spesso la password, sceglieranno una password molto facile da ricordare o la scriveranno in un luogo facilmente accessibile. C'è poco vantaggio nella scadenza della password e la perdita prevista della forza della password dovuta al fatto che gli utenti cambino la password ogni pochi mesi più che compensa questi vantaggi. Per un trattamento più approfondito della scadenza della password, vedi In che modo la modifica della password ogni 90 giorni aumenta la sicurezza? e È utile forzare gli utenti a modificare le password? e È necessario modificare regolarmente la password ma memorizzare le password precedenti?

Grazie per la tua risposta! Mi sono completamente dimenticato di dover inserire di nuovo la password esistente prima di cambiarla e di conservarla in memoria fino a quando la modifica non ha senso.Grazie per i due collegamenti, mi assicurerò di dare un'occhiata.
Jacco
2011-05-26 17:41:45 UTC
view on stackexchange narkive permalink

L'utente deve inserire sia la vecchia che la nuova password per cambiare la password. Quindi confrontare la nuova password con quella vecchia può essere fatto facilmente perché la versione in chiaro è data dall'utente.

Per confrontare la nuova password con le password precedenti (diverse da quella attuale), il controllo può essere solo fatto confrontando i risultati hash. Qualsiasi metodo che consenta qualsiasi altro confronto sarebbe un buco di sicurezza.

Ori
2011-05-31 05:08:53 UTC
view on stackexchange narkive permalink

Può essere fatto solo mantenendo gli hash, potrebbe anche essere fatto su più iterazioni.

Il metodo sarebbe prendere la password e iterarla attraverso l'algo di hashing e controllare i confronti con i valori memorizzati.

Ad esempio, la maggior parte degli utenti (e la gente del service desk ama ripiego su questo come ultima risorsa con i tipi arrabbiati-importanti) itererà le loro password in modo incredibilmente semplice.

Quindi, prendendo la password: # foob @ r1 e rendendola # foob @ r2 che probabilmente vedrai può essere testato senza conoscere # foob @ r1 eseguendo rapidamente una forza bruta sull'algo. Con la moderna potenza di elaborazione è possibile scorrere i primi 4 caratteri in meno di dieci secondi.

Anche se per motivi di efficienza, gli ultimi quattro sono in genere quelli che le persone cambiano, quindi è probabile che lì vedrai un maggiore rendimento. Se hai intenzione di fare non consecutivi e consecutivi, stai guardando un'attesa piuttosto grande per l'utente finale e una grossa fetta di processore.

Gilles 'SO- stop being evil'
2013-06-04 05:09:14 UTC
view on stackexchange narkive permalink

Di solito, quando si modifica la password, è necessario prima inserire la vecchia password. Questo è utile per la sicurezza, per garantire che qualcuno che cammina vicino al tuo computer non possa cambiare molto rapidamente la password e bloccarti mentre giri le spalle. Consente inoltre al server di applicare le regole di distanza delle password. Il server deve solo mantenere la vecchia password in memoria per il tempo necessario a verificare che la nuova password sia sufficientemente diversa da quella vecchia. Non ha mai bisogno di memorizzare la password senza hash e può cancellare il vecchio hash non appena ha memorizzato quello nuovo.

Se il server controlla l'uguaglianza con le password più vecchie, non solo l'ultima, è diverso storia. È abbastanza facile controllare il riutilizzo della password con i vecchi hash: per ogni vecchio hash, calcola l'hash della nuova password con il vecchio salt e confrontalo con il vecchio valore hash. Su un sistema configurato correttamente, questo dovrebbe richiedere alcuni secondi.

È una questione diversa se il server sta verificando la somiglianza con le password più vecchie, e non solo l'uguaglianza con le password più vecchie più la somiglianza con quella precedente. Se il server utilizza hash appropriati, deve provare le variazioni sulla nuova password e hash ogni variazione con tutti i vecchi sali. Ciò potrebbe richiedere minuti o più con un numero di variazioni non trascurabile. Quindi, se il server si lamenta della somiglianza con una password precedente, sarei cauto che potrebbero memorizzare password con hash errato.

Esiste un altro approccio per la somiglianza, che è memorizzare l'hash di ogni password variazione, ciascuna salata indipendentemente, non appena viene impostata la password. Ma questo non ti costa molto: il server deve ancora calcolare l'hash della nuova password con tutti questi sali, il che richiede ancora molto tempo, troppo tempo per un tipico cambio di password.

Un modo per recuperare le vecchie password che funziona davvero, ma che non ho mai visto implementato da nessuna parte, è fare quanto segue su una modifica della password, dopo aver richiesto all'utente la vecchia password e prima di cancellare la vecchia password dalla memoria:

  • Deriva una chiave simmetrica dalla nuova password (utilizzando un algoritmo di rafforzamento della chiave).
  • Deriva una chiave dalla vecchia password allo stesso modo.
  • Decifra l'elenco delle vecchie password con la vecchia chiave.
  • Aggiungi la precedente password all'elenco.
  • Effettua i controlli dei criteri: tutte le password precedenti sono note a questo punto. Se la nuova password supera i controlli ...
  • Crittografa l'elenco delle vecchie password con la nuova chiave.
  • Cambia la password e l'elenco crittografato delle password precedenti nel database.

Questo è alquanto rischioso perché se la password corrente viene compromessa, vengono esposte anche tutte le password precedenti. Ma consente di applicare una politica di distanza delle password da un numero qualsiasi di password precedenti con uno sforzo di calcolo ragionevole.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...