I generatori di password di SS64.com sono un buon approccio?

13

Ci sono due generatori di password su ss64.com:

Come funzionano

Ho creato versioni standalone di loro, oltre alla copia del codice HTML / Javascript originale versioni, se vuoi studiarle, ma ecco come funzionano:

Questa sezione spiega come funziona il generatore di password, in modo tale che sia possibile implementare una versione autonoma che non dipenda dal fare affidamento su un sito Web di terzi.

  • Hai una password principale, diciamo foo
  • Genera una password per un sito o servizio specifico, diciamo stackexchange
  • Calcoli la somma SHA1 (versione standard) o la somma SHA256 (versione strong) della stringa foo:stackexchange .

    $ echo -n "foo:stackexchange" | sha1sum      #standard version
    b99341502484edbc43ec35a5f94be8e5de7ca53a *-
    
    $ echo -n "foo:stackexchange" | sha256sum    #strong version
    c6ac66fdb639821bcc322f186fb1214d241f35ba2a91cb660daf0a284ac19a47 *-
    
  • Applichi la trasformazione Base64 sulla sequenza di byte la cui rappresentazione esadecimale è il checksum generato in precedenza:

    $ printf "\xb9\x93\x41\x50\x24\x84\xed\xbc\x43\xec\x35\xa5\xf9\x4b\xe8\xe5\xde\x7c\xa5\x3a" | base64
    uZNBUCSE7bxD7DWl+Uvo5d58pTo=
    
    $ printf "\xc6\xac\x66\xfd\xb6\x39\x82\x1b\xcc\x32\x2f\x18\x6f\xb1\x21\x4d\x24\x1f\x35\xba\x2a\x91\xcb\x66\x0d\xaf\x0a\x28\x4a\xc1\x9a\x47" | base64
    xqxm/bY5ghvMMi8Yb7EhTSQfNboqkctmDa8KKErBmkc=
    
  • (versione strong) sostituisci + con E e / con a, e prendi i primi 20 caratteri

  • (versione standard) prendi i primi 8 caratteri e poi aggiungi 1a alla fine della password per assicurarti che ci sia almeno una cifra e una lettera

Pertanto, con la password principale foo , e per il sito specifico stackexchange , la password generata standard è uZNBACSE1a e la password generata strong è xqxmabY5ghvMMi8Yb7Eh .

Ora le domande

  • La versione strong è davvero più strong della versione standard? Sarebbe ancora più strong se la versione standard usasse anche SHA256?
  • ammesso che scelgo una buona chiave master (non foo, piuttosto più di 10 caratteri casuali), sono piuttosto al sicuro con queste password generate?
  • Quali possono essere altri svantaggi di questo approccio verso la creazione di password?
posta Benoit 24.10.2013 - 09:59
fonte

2 risposte

10

Qui ci sono due livelli di forza:

  • Se la password fornita sarà, di per sé, strong (contro la forza bruta).
  • Se qualcuno che apprende una delle tue password su un sito otterrà la leva per indovinare le tue password su altri siti (ad esempio indovinando la "password principale").

La versione "standard" produce password con 48 bit di entropia: la codifica Base64 è di 6 bit per carattere e il generatore utilizza 8 caratteri (il suffisso "1a" è fisso, quindi non cambia affatto la sicurezza). 48 bit di entropia non sono male, specialmente nel contesto di attacchi online, in cui l'attaccante deve parlare al server per ogni tentativo. Se il server viene compromesso (dump del database tramite SQL injection) e il server non ha usato correttamente hashing della password , l'aggressore laborioso e motivato può sfondare; in questo senso la versione "strong" è un po 'più strong della versione standard. Tuttavia, in questo caso specifico, direi che la debolezza è nel server, non nella password (non usare l'hashing della password corretto è il punto negativo qui).

Si noti che il passaggio da SHA-1 a SHA-256 non migliora la sicurezza. Non è cattivo , ma offre un guadagno pratico solo nella misura in cui SHA-1 non fornisce una buona resistenza al preimage e, al momento, SHA-1 è ancora come nuovo sotto questo aspetto.

Per il secondo livello (dall'escalation dalla password del sito alla password principale), entrambe le versioni sono deboli perché sono troppo veloci. Data una password specifica del sito, l'enumerazione delle potenziali password principali può essere eseguita con una frequenza di pochi miliardi al secondo (con un paio di buone GPU). Inoltre, poiché la trasformazione non è salata tranne che dal nome del sito, se più persone usano lo stesso metodo per le loro password sullo stesso sito, le loro password master possono essere forzate brute in parallelo. La versione "strong" non è molto più strong a quel livello rispetto alla versione "standard", tranne per il fatto che SHA-256 è circa due volte più lento di SHA-1, raddoppiando così il costo dell'attaccante.

L'approccio presenta anche alcuni problemi di usabilità:

  • Se il server richiede che un utente modifichi la sua password, l'utente non può conformarsi, perché il metodo produce una password per una data password principale e nome del sito.

  • Se il nome del sito cambia, la generazione della password si interrompe.

  • Alcuni server hanno requisiti speciali che non sono necessariamente soddisfatti dalla password generata (ad esempio alcuni server richiedono che le password contengano almeno un segno di punteggiatura - un requisito errato, ma succede).

  • Altri hanno segnalato il problema di inserire la password principale su una pagina pubblicata da un sito Web di terze parti - pagina il cui contenuto può essere modificato senza preavviso e senza alcun avviso visibile. Una versione stand-alone evita questo problema, ma se sono consentite le applicazioni stand-alone, questo apre la possibilità di utilizzare un sistema migliore.

In effetti, soluzioni più flessibili (ad es. KeePass ) utilizzano un sistema di archiviazione. Esiste un punto di riferimento indiretto: la password principale viene utilizzata per crittografare un pacchetto che contiene le password effettive. Ciò consente di modificare le password e soddisfare altri requisiti.

    
risposta data 24.10.2013 - 20:21
fonte
6

Alcuni buoni punti menzionati sopra, ma penso che valga la pena di eseguire alcuni numeri per mostrare come la lunghezza della password influisce su questo.

Un cluster GPU capace di 350 miliardi di ipotesi / secondo
350000000000 * 60 * 60 = 1,26e + 15 tentativi / ora
o 1.10376e + 19 ipotesi / anno

Una password casuale di carattere 8 con 48 bit di entropia
2 ^ 48 = 2.8147498e + 14 combinazioni possibili
Quindi il tempo di decifrare la password di 8 caratteri:
2.8147498e + 14 / 1.26e + 15 = 0.223 Ore

Una password casuale di carattere 10 con 59 bit di entropia
2 ^ 59 = 5.7646075e + 17 combinazioni possibili
Tempo di decifrare la password di 10 caratteri:
5.7646075e + 17 / 1.26e + 15 = 457.50 ore

Una password casuale di 15 caratteri con 89 bit di entropia
2 ^ 89 = 6.1897002e + 26 combinazioni possibili
Tempo di decifrare la password di 15 caratteri:
6.1897002e + 26 / 1.10376e + 19 = 56078315.93 anni

Una password casuale di carattere 20 con 119 bit di entropia
2 ^ 119 = 6.64614e + 35 combinazioni possibili
Tempo di decifrare la password di 20 caratteri:
6.64614e + 35 / 1.10376e + 19 = 6.0213633e + 16 anni

Quindi la chiave da asporto qui è che sia la password generata che la password principale devono avere una lunghezza della password / entropia sufficiente per difendersi da un attacco offline.

Modifica: solo per aggiungere, quelli sono i tempi massimi, la media sarà la metà di quei valori.

    
risposta data 26.10.2013 - 17:14
fonte

Leggi altre domande sui tag