L'uso di PBKDF2 per la generazione di password è sicuro?

2

Lettura Ingegneria della sicurezza di Ross Anderson, chapter 2.4.7.1 Password Manglers ha un'idea che alla fine sembra risolvere il problema che ho con l'esistente "Ho bisogno per ricordare una password * strong per troppe soluzioni di sistema.

* ) le mie password sono generate casualmente, con una dimensione che dipende dal livello di importanza del servizio utilizzato, con 8 caratteri minimi e un massimo tipico di circa 16 caratteri.


Una rapida ripartizione di ciò che non mi piace delle soluzioni esistenti:

  • annotali: non sicuro, elenco non sempre accessibile;
  • memorizzarli in un file crittografato: non sempre accessibile;
  • utilizza un software dedicato: non sempre accessibile.


Quindi, in breve, stavo cercando una soluzione che fosse:

  • sempre disponibile quando connesso a Internet;
  • sicuro (nessuno può rubare o elaborare le mie password).


Quindi, la mia domanda è:
È sicuro utilizzare PBKDF2 per generare password, in base alla mia password principale (12 caratteri ascii stampabili generati casualmente) e utilizzare il nome di dominio del sito Web (stackexchange.com) come un "sale"?

<?php
$password = $_POST['password'];
$salt = $_POST['publicIdentifier'];

function passKey($password, $salt) {
    $iterationCount = pow(2, 18); // 262.144 iterations
    $outputLength = 20; // because this should be 'secure enough'?

    // Step 1: get the derived key
    $generated = hash_pbkdf2('sha256', $password, $salt, $iterationCount, $outputLength, true); // returns binary output

    // Step 2: encode as Base91
    $generated = base91_encode($generated); // because we want 'special characters' in our password string (websites often require this)

    // Step 3: return the password, sliced down to required length
    return substr($generated, 0, $outputLength);
}
echo 'generated password: '.passKey($password, $salt);

Dato che la soluzione sarebbe ospitata sul mio server web affidabile e accessibile solo tramite SSL / TLS?


Se l'utente malintenzionato ha accesso al codice utilizzato (pubblicato sopra), al "publicIdentifier" e probabilmente a un elenco di password generate, lo schema sopra indicato proteggerà l'autore dell'attacco in modo da capire la password principale?

Sono preoccupato che l'uso di una stringa breve , non generata a caso come un salino possa compromettere la forza di PBKDF2?

    
posta Monika 25.02.2016 - 14:57
fonte

2 risposte

5

Questo tipo di soluzione è stata proposta e implementata molte volte. Funziona un po ', ma ha alcuni inconvenienti:

  • Se due persone utilizzano lo stesso meccanismo per lo stesso sito di destinazione, entrambe le password utilizzano lo stesso "sale" (il nome del server), che non è l'ideale. Concettualmente, si desidera che le password per sito siano tali che la scarsa sicurezza su un sito non influenzi la sicurezza su altri siti, quindi in qualche modo si presume che alcune delle password vengano recuperate dagli autori di attacchi. Se 10 utenti utilizzano il tuo sistema sullo stesso sito e quel sito viene violato e l'utente malintenzionato ottiene tutte e 10 le password, sarà in grado di effettuare un attacco parallelo su tutte e 10 le password master perché le 10 istanze PBKDF2 utilizzeranno lo stesso sale .

    In larga misura, questo problema può essere risolto utilizzando come salt la concatenazione del nome del sito di destinazione e il tuo nome (ad esempio il tuo indirizzo email, che è unico al mondo). Si noti che il sale non ha bisogno di essere segreto o casuale; ciò di cui ha bisogno è unique .

  • Hai solo una password per un determinato sito. Se il sito desidera applicare una modifica della password e la nuova password deve essere diversa da quella precedente, il sistema non è più applicabile.

  • Molti siti cercano di applicare le "regole della password" (lunghezza minima, lunghezza massima, presenza o assenza di alcuni tipi di caratteri ...). La maggior parte di queste regole sono resti di rituali tradizionali con pochissime giustificazioni scientifiche, ma esistono ancora. Il problema è che tutte queste regole sono contraddittorie: non esiste un metodo di generazione che produrrà password conformi a tutte le serie di regole utilizzate da vari siti.

La linea di fondo è che mentre un metodo di generazione password basato su hash funziona, dovrai gestire eccezioni .

Se disponi di un server Web affidabile accessibile tramite SSL / TLS, forse potresti semplicemente archiviare le tue password lì? Forse con qualche crittografia locale, relativa alla password master che si digita e si invia al proprio server Web.

    
risposta data 25.02.2016 - 15:15
fonte
0

Se riesci ad accedere al tuo sito Web specializzato per ottenere le tue password, perché non puoi accedere a un software web specializzato per ottenerle? LastPass, ad esempio, offre il recupero online.

Potresti anche portare una versione portatile di KeePass (e altri gestori di password locali) su una chiavetta USB con il tuo database.

Al giorno d'oggi, la maggior parte dei gestori di password dispone di un'app per smartphone, quindi puoi recuperare facilmente le password da lì per digitare, supponendo che tu abbia uno smartphone e tu lo porti con te in molti posti.

In altre parole: fatto bene, e con un po 'di pianificazione, ci sono probabilmente pochissime situazioni in cui ti troverai, in cui NON puoi entrare nel tuo gestore di password quando ti serve.

    
risposta data 25.02.2016 - 16:46
fonte

Leggi altre domande sui tag