Riduzione della lunghezza della password con la funzione hash

6

Supponiamo che mi piacerebbe usare una stringa molto lunga come password. Ad esempio possiamo solo dire che questa stringa ha una lunghezza di 100 caratteri.

Tuttavia, supponiamo che l'applicazione per la quale vorrei utilizzare questa password supporti solo una lunghezza della password di 64 caratteri. Senza entrare nei dettagli, supponiamo che il semplice troncamento della password desiderata a 64 caratteri aumenterebbe in modo significativo la sua prevedibilità.

Sarebbe sicuro se usassi come password un hash di questa password, al solo scopo di ridurne la lunghezza?

Ad esempio, se scelgo di utilizzare un hash SHA-256 codificato in base64 della password, credo che sto cercando uno spazio di ricerca di circa 2.96 * 10 79 ( 64 possibili caratteri * lunghezza di 44). Ho scelto di usare base64 invece della rappresentazione esadecimale perché la rappresentazione esadecimale consiste in uno spazio di ricerca più piccolo (16 possibili caratteri * lunghezza di 64 = 1.16 * 10 77 ).

( EDIT: come indicato da Thomas Pornin nella sua risposta, lo spazio di ricerca sarà sempre 2 256 indipendentemente da quale codifica venga utilizzata.)

Per i miei scopi, questa dimensione dello spazio di ricerca è sufficiente. Tuttavia, il fatto che io stia usando una codifica base64 di un hash SHA-256 introduce qualsiasi prevedibilità della password? In altre parole, se un utente malintenzionato sa che la mia password è un hash SHA-256 codificato in base64 di una stringa di input (ma non sa nulla della stringa di input), sarebbe in grado di ridurre lo spazio di ricerca iniziale di 2.96 * 10 79

    
posta Andrew 20.03.2013 - 23:36
fonte

1 risposta

8

Lo "spazio di ricerca" ha dimensione 2 256 . Non viene ingrandito o ridotto a seconda che si utilizzi esadecimale o Base64. Quando si codifica una stringa a 256 bit (ovvero 32 byte) in Base64, si ottengono effettivamente 44 caratteri, ma non tutte le combinazioni di 44 caratteri (prese in un alfabeto di 64) sono possibili. Il 44 ° carattere sarà sempre un segno '=', e ci sono solo 16 possibili caratteri per la 43a posizione.

Ora, 2 256 è enorme e lontano ( molto lontano) oltre a quello che è ricercabile con la tecnologia esistente o prevedibile. È anche oltre la buona fantascienza. È anche oltre pessimo fantascienza.

L'hashing di una password con una funzione hash crittograficamente strong (e SHA-256 è davvero strong) è un modo valido per "accorciare" una password; infatti la funzione PBKDF2 (una funzione di derivazione della chiave, spesso utilizzata per l'hashing della password) inizia con tale passo (*). L'apparente "riduzione" dello spazio non è un problema perché uno spazio di dimensioni superiore a circa 2 80 non è suscettibile di ricerca esauriente.

Ovviamente, questo solleva la questione di come si calcola l'hash ... una password è chiamata "password" perché è pensata per essere ricordata da una mente umana e digitata da dita umane. Ti ricorderai di un output hash?

(*) PBKDF2 viene normalmente utilizzato con HMAC, la password essendo la chiave HMAC. In HMAC, se la chiave è più grande della "dimensione del blocco" della funzione hash interna, viene prima sottoposta a hash e il valore hash risultante viene utilizzato come chiave.

    
risposta data 21.03.2013 - 02:36
fonte

Leggi altre domande sui tag