Utilizzo di una password hash ... come password? [duplicare]

2

Ok, questa è probabilmente un'idea davvero stupida, ma non riesco davvero a vedere perché sarebbe una cattiva idea. Forse qualcuno può illuminarmi.

Perché non potresti inserire una password con un buon algoritmo di hashing come bcrypt, e quindi usare l'hash stesso come password per il sito web?

A causa dell'effetto valanga, questo potrebbe consentire agli utenti di utilizzare sottili derivazioni della propria password regolare per creare password diverse (e possibilmente migliori) da utilizzare su siti web reali.

Ad esempio, supponiamo che la password di un utente sia "password123" e che voglia accedere a pochi siti diversi, quindi aggiungono il nome del sito all'inizio della password in questo modo:

Amazon.com="amazonpassword123"

Facebook.com="facebookpassword123"

E così via .....

Normalmente, questa sarebbe una pratica molto negativa, in quanto sarebbe banale per un utente malintenzionato indovinare il sistema di denominazione dell'utente per le password. Ma se l'utente ha eseguito le sue password tramite un algoritmo di hashing PRIMA di accedere a questi siti Web e quindi utilizzare l'hash stesso come password, abbiamo qualcosa che è molto facile da ricordare e (possibilmente) più sicuro.

C'è qualche svantaggio che non sto vedendo in questo?

    
posta user97462 15.11.2015 - 03:17
fonte

2 risposte

1

No. È una buona idea. Il trucco sta nel portare questi hash nei requisiti di lunghezza e complessità di diversi siti.

PwdHash è un ottimo esempio. Usa HMAC-MD5, ma fa cadere così tanti bit dall'output che probabilmente sta bene. (Questo è un termine tecnico.Inoltre, la resistenza alle pre-immagini MD5 è ancora ininterrotta.) Ancora più importante, hanno risolto bene il problema dei requisiti di lunghezza e complessità, e ci sono software funzionanti su molte piattaforme diverse (Firefox, Chrome, Mac OS, iOS, Android, il sito web stesso).

Password principale è un'altra app che utilizza HMAC-SHA-256, ma è disponibile solo su Mac e iOS. Inoltre, è un po 'fastidioso nella sua tecnica di codifica. Le sue impostazioni predefinite sono troppo troppo entropiche perché cercano di essere "pronunciabili" controllando le posizioni delle vocali. Ho presentato un bug report e mi è stato detto che l'entropia è irrilevante e andare a mollo la testa. Va bene se usi l'impostazione paranoica per la serializzazione, ma è troppo mal di testa rispetto a PwdHash per me.

È un po 'triste che questo sia lo stato dell'arte in questa categoria, ed è anche triste che le persone PwdHash non usino solo scrypt.

    
risposta data 15.11.2015 - 04:12
fonte
0

Una costruzione come hash(site_name + pw) genererà una password sicura fintanto che la password è alta entropia e l'hash ha bit sufficienti (ad esempio, 128+ bit che avrà il tuo hash crittografico standard, ma non usare hash non crittografici come crc32). Se utilizzi qualcosa come pw = password123 facilmente intuibile, un hacker sofisticato potrebbe essere in grado di capire il tuo schema dal vedere la tua password in un sito che controllano e quindi forzare la tua password per tutti gli altri siti (ad es. password per esempio.com è md5("examplepassword123") potrebbe essere possibile invertire testando le password del modulo md5(site_name + pw) - puoi generare miliardi di hash md5 al secondo per computer: è una cattiva idea affidarsi a un utente malintenzionato che non conosce lo schema di generazione della password, invece dovresti fare affidamento sulle tue password effettive con alta casualità intrinseca (vedi Principio di Kerckhoffs ).

Tuttavia, se usi qualcosa come bcrypt, starai bene con una password debole dato che bcrypt crea un sale casuale a 128 bit che fornisce più di sufficiente entropia per impedire che anche la password più debole sia ragionevole (supponendo che il sale sia usato differisce tra i tuoi hash). Tieni presente che dovrai memorizzare questo salt in modo casuale per poter effettuare nuovamente il login, quindi a questo punto probabilmente sarebbe stato più semplice utilizzare una password generata in modo casuale per ogni sito web che visiti.

Per fare un esempio con bcrypt usando python (nell'interprete ipython):

In [1]: import bcrypt

In [2]: bcrypt.hashpw('amazonpassword123', bcrypt.gensalt(10))
Out[2]: '$2b$10$//rLpdWc/0hljdOf90366u1uaRch7q59AxF0qcodHvDckO1nd..ky'

In [3]: bcrypt.hashpw('amazonpassword123', bcrypt.gensalt(10))
Out[3]: '$2b$10$eUsCtvQ9mvYA2qAEShaqjOqgYogRP4mohEag5bm3Hls10JPSQxU4y'

In [4]: bcrypt.hashpw('amazonpassword123', Out[2])
Out[4]: '$2b$10$//rLpdWc/0hljdOf90366u1uaRch7q59AxF0qcodHvDckO1nd..ky'

Si noti che l'hashing della stessa cosa due volte con bcrypt genera un hash completamente diverso poiché utilizzavano due diversi sali creati casualmente (con 2 ^ 10 cicli di hashing); questo è il motivo per cui Out[2] != Out[3] . Questo non è problematico quando si controllano le password con un hash bcrypt (dato che l'hash contiene il salt), quindi è sufficiente fornire l'hash memorizzato nel database da utilizzare come salt e quindi verificare che corrisponda all'hash memorizzato; questo è il motivo per cui Out[2] == Out[4] .

L'altro problema di cui preoccuparsi è che i siti interrompono silenziosamente la tua password. Usando dire un hash di bcrypt completo, in cui i primi sette caratteri sono $2b$<lg(number of rounds)>$ potrebbe indebolire gravemente la tua password. Ad esempio, una VPN fornita da un noto fornitore che utilizzo per lavoro tronca la mia password utente a 8 caratteri (sebbene mi permetta di digitare password molto più lunghe - controlla solo i primi 8).

    
risposta data 15.11.2015 - 04:52
fonte

Leggi altre domande sui tag