Come può un sistema imporre un numero minimo di caratteri modificati nelle password, senza memorizzare o elaborare vecchie password in chiaro?

48

In alcuni ambienti, è necessario che gli utenti cambino un determinato numero di caratteri ogni volta che creano una nuova password. Questo naturalmente impedisce che le password possano essere facilmente indovinate, specialmente con la conoscenza di vecchie password come un dipendente partito potrebbe avere per un account di servizio condiviso.

Ho separato domande aperte per indirizzare il pulsante di questa applicazione. Tuttavia, sono anche curioso di sapere come funziona questa applicazione sul back-end. Se non è possibile ricavare una password non crittografata da un algoritmo di hash strong, in che modo il sistema determina quanti caratteri sono stati modificati nelle nuove password?

    
posta Iszi 19.04.2011 - 15:19
fonte

6 risposte

42

Non sono sicuro di confrontarmi con tutte le password che l'utente ha precedentemente utilizzato, in quanto dipende molto dal sistema di hashing che usi e direi se è possibile derivare qualche somiglianza dall'hash quindi non è molto buono sistema per cominciare.

Ma partendo dal presupposto che l'utente deve fornire la propria password corrente quando si imposta la nuova password, è possibile almeno controllare quella nuova rispetto a quella corrente, poiché in quel momento si avranno entrambi come unhashed.

Il modulo pam_cracklib su Linux controlla le password come questa e fa 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 precedente a causa del cambio di caso ("password" o "password")?
  • Almeno un numero minimo di caratteri nella nuova password non è presente nella vecchia password? È qui che entra in gioco il parametro "difok".

Puoi trovare ulteriori dettagli a riguardo qui .

    
risposta data 26.05.2011 - 13:11
fonte
26

Questo può essere fatto facilmente con la modifica della password (dove è richiesto all'utente e deve fornire sia la vecchia che la nuova password).

    
risposta data 19.04.2011 - 15:28
fonte
7

Di solito, quando cambi la tua password, devi prima inserire la vecchia password. Questo è utile per la sicurezza, per garantire che qualcuno che cammina vicino al tuo computer non possa modificare molto rapidamente la password e bloccarti mentre la schiena è girata. Consente inoltre al server di imporre regole sulla distanza della password. Il server deve solo conservare la vecchia password in memoria per tutto il tempo necessario a verificare che la nuova password sia sufficientemente diversa da quella precedente. Non ha mai bisogno di memorizzare la password unshed.

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 la loro password spesso, sceglieranno una password che sia molto facile da ricordare, o scriverla in un posto facilmente accessibile. C'è un piccolo vantaggio nella scadenza della password, e la perdita attesa della forza della password da rendere gli utenti cambiare la propria password ogni pochi mesi più che compensare quei 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 Sta costringendo gli utenti a cambiare le password utili? e Richiedere una modifica regolare della password ma memorizzare le password precedenti?

    
risposta data 03.06.2013 - 23:38
fonte
5

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

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

    
risposta data 26.05.2011 - 14:41
fonte
5

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

Il metodo consisterebbe nel prendere la password e iterarla attraverso l'algoritmo di hashing e verificare i confronti con i valori memorizzati.

Ad esempio, la maggior parte degli utenti (e le persone del service desk amano ripiegare su questo come ultima risorsa con tipi di tipo arrabbiato-arrabbiato) itereranno le loro password in modo incredibilmente semplice.

Quindi prendere la password: # foob @ r1 e renderla # foob @ r2 che probabilmente vedrai può essere testata senza la conoscenza di # 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 ragioni di efficienza, gli ultimi quattro sono quelli in cui le persone cambiano, quindi è probabile che vedrete un botto più grande per voi. Se stai andando a fare non consecutivi e consecutivi, stai aspettando una grande attesa per l'utente finale e una grossa fetta di processore.

    
risposta data 31.05.2011 - 02:08
fonte
4

Di solito, quando cambi la tua password, devi prima inserire la vecchia password. Questo è utile per la sicurezza, per garantire che qualcuno che cammina vicino al tuo computer non possa modificare molto rapidamente la password e bloccarti mentre la schiena è girata. Consente inoltre al server di imporre regole sulla distanza della password. Il server deve solo conservare la vecchia password in memoria per tutto il tempo necessario a verificare che la nuova password sia sufficientemente diversa da quella precedente. Non ha mai bisogno di memorizzare la password unshed 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, questa è una storia diversa. È abbastanza facile controllare il riutilizzo della password con hash vecchi: per ogni hash precedente, calcola l'hash della nuova password con il vecchio salt e confronta con il vecchio valore hash. Su un sistema configurato correttamente, questo dovrebbe richiedere alcuni secondi.

È diverso se il server sta controllando 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 sta usando gli hash appropriati, allora deve provare le varianti sulla nuova password e hash ogni variazione con tutti i vecchi sali. Ciò potrebbe richiedere minuti o più con un numero non trascurabile di variazioni. Quindi, se il server si lamenta della somiglianza con una password precedente, sarei cauto sul fatto che stiano memorizzando password con hash errate.

Esiste un altro approccio per la somiglianza, che consiste nel memorizzare l'hash di ogni variazione di password, ognuna indipendentemente salata, non appena viene impostata la password. Ma questo non ti compra molto: il server ha ancora bisogno di calcolare l'hash della nuova password con tutti questi sali, che richiede ancora molto tempo, troppo a lungo per una tipica modifica della password.

Un modo per recuperare vecchie password che effettivamente funziona, ma che non ho mai visto implementato ovunque, è quello di 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:

  • Ricava una chiave simmetrica dalla nuova password (utilizzando un algoritmo di rafforzamento della chiave).
  • Ricava una chiave dalla vecchia password allo stesso modo.
  • Decrittografa l'elenco delle vecchie password con la vecchia chiave.
  • Aggiungi la precedente password all'elenco.
  • Esegui i controlli di politica - tutte le password precedenti sono conosciute a questo punto. Se la nuova password supera i controlli ...
  • Cripta l'elenco delle vecchie password con la nuova chiave.
  • Modifica la password e l'elenco crittografato delle password precedenti del database.

Questo è un po 'rischioso perché se la password corrente è compromessa, anche tutte le password precedenti sono esposte. Ma consente di applicare una politica di distanza della password a un numero qualsiasi di password precedenti con uno sforzo di calcolo ragionevole.

    
risposta data 04.06.2013 - 02:09
fonte

Leggi altre domande sui tag