Perché controllare se una password è già utilizzata da un altro utente?

17

Questo proviene da una battuta originariamente in francese :

Enter your password.

carrot

Sorry, your password must be more than 8 characters.

carottegéante
(giant carrot)

Sorry, your password must contain a number

1carottegéante
(1 giant carrot)

Sorry, your password must not contain accented characters

50putaindecarottesgeantes
(50 damn giant carrots)

Sorry, your password must contain at least one capital letter

50PUTAINdecarottesgeantes
(50 DAMN giant carrots)

Sorry, your password must not contain two consecutive capital letters

5OPutainDeCarottesGeantesQueJeVaisTeMettreAuCulSiTuNeMedonnesPasImmediatementUnAcces!
(50 Damn Giant Carrots That I Will Put In Your Ass If You Do Not Immediately Give Me Access!)

Sorry, your password must not contain punctuation characters

AttentionMaintenantJeVaisAllerTeTrouverEtTeMettreVraimentLes50CarottesGeantesSiTuContinues (Caution Now, I'll Go Find You And Really Put 50 Giant Carrots If This Continues)

Sorry, this password is already in use.

Ma parlando in giro con un amico:

  • Ho detto:

    This is a built joke only: there is a typo on 3th answer: ne soit pas.. and at all, I don't know any user creation engine that do check for already used passwords.

  • Risposta del mio amico:

    You're right, it's a joke, but you could configure PAM to do such a check:
    password required pam_pwcheck.so nullok remember=N

Bene, non capisco!

Qualsiasi persona non autorizzata potrebbe verificare se viene utilizzata una password semplicemente creando un nuovo account (falso)!

Quale potrebbe essere l'obiettivo di questo tipo di controllo?

    
posta F. Hauri 19.01.2014 - 14:06
fonte

3 risposte

26

Non capisci cosa fa remember per pam_pwcheck ; guarda la pagina man :

remember=XX

Remember the last XX passwords and do not allow the user to reuse any of these for the next XX password changes. XX is a number between 1 and 400.

Con questa opzione, pam_pwcheck rifiuterà i tentativi di riutilizzare una password precedentemente utilizzata dallo stesso utente . Non fa nulla di cross-user; non ti avviserà se la tua password di scelta è utilizzata da qualcun altro o meno.

In effetti, un tale controllo sarebbe costoso da implementare se è presente un corretto hashing della password (con sali e molte iterazioni per la lentezza, ci vorranno diversi minuti per "provare" la password putativa per migliaia di altri utenti). Come dici tu, avvisare gli utenti di come una potenziale password è già utilizzata da un altro utente sarebbe, di per sé, un serio problema di sicurezza; ma significherebbe anche che le password non sono archiviate correttamente, e questo è un altro grave problema di sicurezza.

    
risposta data 19.01.2014 - 14:59
fonte
5

pam_pwcheck memorizza solo le password per un determinato utente, come dice l'altra risposta.

L'altra parte della domanda è: "Quale potrebbe essere l'obiettivo di questo tipo di controllo?"

Esistono dei sistemi che controllano tutte le password esistenti. Generalmente tali sistemi memorizzano le password in testo semplice o un hash non salato che non dipende dal nome utente o da qualsiasi altra cosa che impedisca di trovare rapidamente una corrispondenza. Mi sono imbattuto in questo come utente, come una richiesta di funzionalità (che ho rifiutato come impossibile con qualsiasi ragionevole mezzo di memorizzazione della password, insieme ad essere intrinsecamente imperfetta come di seguito) o come obiezione a fissare l'uso di memorizzazione in testo normale.

E l'obiettivo è duplice:

  1. Dato che le password dovrebbero essere difficili da indovinare, l'ideale sarebbe se fossero quasi casuali in termini di imprevedibilità (il problema di ricordare la password è un'altra cosa *, e spesso dimenticato quando le persone sviluppano un nuovo entusiasmo per la sicurezza della password). Dal momento che intuitivamente, casuale significa che c'è poco nel modo di ripetizione (qualcosa che qualcuno qui probabilmente saprà è un errore, ma certamente un errore che viene tenuto), quindi la ripetizione è quindi un brutto segno.

  2. Più ragionevolmente, se qualcun altro sta utilizzando la password, probabilmente è una password debole che non siamo in grado di rilevare (ad esempio, utilizzando i dettagli di un ufficio aziendale come il numero di telefono per creare la password in modo che un'altra il dipendente potrebbe provare ma altrimenti supera i test di forza), che potrebbe essere indovinato, in quanto essenzialmente l'utente lo ha effettivamente indovinato.

I difetti con il primo pensiero sono il difetto di non comprendere la ripetizione in modo casuale e con l'aspettarsi una password perfettamente casuale, a meno che non sia supportato da una politica che permetta di ricordare con sicurezza la password difficile da ricordare.

I difetti con il secondo pensiero sono:

  1. Abbiamo bisogno di archiviare la password in modo relativamente insicuro per poter effettuare il controllo in primo luogo.
  2. Abbiamo appena fatto trapelare una password a qualcuno.
  3. Probabilmente abbiamo identificato una password debole, ma non abbiamo avvertito la persona che la sta effettivamente utilizzando.

Ma ancora, questi difetti non significano che non accada. C'è poi un altro difetto nel sistema nello scherzo; rifiutando carottegéante a causa del segno diacritico. Ci sono ragioni tecniche per rifiutare i segni diacritici in vari punti (sebbene a meno di non dover interagire con il codice di altre persone, queste ragioni sono assolutamente imperdonabili nel codice moderno), ma ho visto piuttosto bizzarramente rifiutato da sistemi che accetterebbero segni diacritici in nomi utente! Allo stesso modo molti sistemi rifiutano gli spazi nelle password e così via. In generale, lo metterei nella programmazione settoriale del carico; qualcun altro l'ha fatto, quindi lo copi. In una certa misura questo non è del tutto irragionevole; Certamente copio ciò che sanno quelli che sanno meglio di me quando si parla di sicurezza, quindi non incolperei del tutto qualcuno che copi ciecamente tali politiche. Tuttavia, ci vuole solo una breve pausa per rendersi conto che non c'è modo per accettare "jdiwmfojkslofklo" ma non accettare "כסּוּ ٺقد ӐӓҾӌȕ" migliora nulla, e in effetti riduce la gamma di possibili password da attaccare.

In ogni caso, la regola che alcuni sistemi hanno rispetto agli spazi ci fornisce un approccio per tradurre lo scherzo in inglese; fai in modo che la seconda password tenti di "carote giganti" con uno spazio.

* Ecco a cosa servono le note post-it, vero?

    
risposta data 19.01.2014 - 17:06
fonte
-2

Non dovresti mai memorizzare le password degli utenti sul gateway.

Il modo più comune è prendere un hash dalla password e memorizzare solo questo hash. In questo ambito, potresti dire che c'è una collisione, ma non dovresti.

Il modo migliore per salare è concatinare username.password e prendere un hash da questa combinazione:

username / md5sum( str(username) + str(password) )

Vedi, md5sum non è sicuro più .

Meglio prendere uno sha256:

username / sha256sum( str(username) + str(password) )

È uno schizzo di soluzione, potresti trovarne uno più robusto e più intelligente.

    
risposta data 23.01.2014 - 03:51
fonte

Leggi altre domande sui tag