Devo decodificare una password di base64 prima dell'hashing per la memorizzazione?

1

Il mio server ottiene le password codificate in base 64 dal client e io le seleziono per l'archiviazione in una tabella delle credenziali.

Devo decodificare la password e cancellare la password del testo libero, o semplicemente cancellare la stringa codificata?

    
posta Lynn Owens 11.01.2014 - 20:14
fonte

2 risposte

2

In teoria, la decodifica o la non decodifica non ha importanza, perché la codifica Base64 è una permutazione pubblica (ogni sequenza di caratteri Base64 può essere decodificata e ri-codificata da tutti, e questo è deterministico). Se la codifica Base64 rinforza o indebolisce la funzione di hashing della password e la funzione di hashing della password è scadente e debole e deve essere sostituita con qualcosa di più strong.

In pratica , alcune funzioni di hashing della password presentano limitazioni; in particolare, la maggior parte delle implementazioni di bcrypt accettano password di dimensioni fino a 51 o 55 byte, non di più. Poiché la codifica Base64 aumenta la dimensione dei dati (ogni 3 byte restituisce 4 caratteri, reencoded come 4 byte), l'hashing della codifica Base64 implica una dimensione massima della password inferiore. Per questo motivo, è consigliabile decodificare Base64 ed elaborare la password non elaborata.

Tuttavia c'è anche una buona ragione non per decodificare Base64, a seconda della libreria di supporto. Se l'implementazione dell'hash della password utilizza stringhe come input, allora quel codice necessariamente esegue la codifica da carattere a byte. Ciò può implicare problemi di codifica molto scomodi, specialmente con caratteri non ASCII (un semplice carattere latin-1 come "é" ha diverse rappresentazioni in Unicode, producendo sequenze di byte diverse). È importante che questa codifica sia deterministica (quando la password è verificata, dovrebbe usare la stessa codifica di quando è stata scelta inizialmente). Quando si riceve Base64, il chiamante ha già fatto il lavoro e presumibilmente concorda con se stesso. Pertanto, è consigliabile non decodificare Base64, e invece di cancellarlo direttamente.

O forse no. Una visualizzazione alternativa è che i problemi di codifica richiedono un'elaborazione sistematica e può essere una buona idea decodificare sistematicamente tutto ciò che ricevi, per garantire la codifica con le stesse regole (la codifica regole sul server). Ciò potrebbe effettivamente aiutare se l'utente utilizza diversi tipi di software client, con diverse regole di codifica.

Quindi, davvero, dipende da te. Personalmente, decoderei Base64, perché mi fido più di altre persone per elaborare correttamente le stringhe Unicode, ed evita di abbassare artificialmente la password massima dimensione nel caso in cui la funzione di hashing sia bcrypt (altre funzioni come PBKDF2 non hanno tali limiti).

    
risposta data 23.01.2014 - 17:31
fonte
0

Dipende da te, non c'è meno o più sicurezza quando si tratta di archiviare quelle password. Il principio di Kirkhoff afferma che la sicurezza di un sistema di crittografia non dovrebbe essere compromessa se l'algoritmo cade nelle mani del nemico.

Quindi questo significa che se l'utente malintenzionato conosce il tuo schema, non avrebbe altri passaggi da seguire, tranne la codifica in base64 che codifica la password prima di provare a bruteforce. Mentre questo potrebbe significare che ci vorrebbe un po 'di tempo in più per forzare le password, è trascurabile rispetto al sovraccarico dell'algoritmo di hashing della password. (a patto che ne abbia preso uno buono come PBKDF2, scrypt o bcrypt)

    
risposta data 11.01.2014 - 20:17
fonte

Leggi altre domande sui tag