Una password che utilizza tutti i possibili codici in codice Unicode causa problemi negli algoritmi di hash tradizionale, come Bcrypt?

3

Ho giocato con questa idea, ma ipoteticamente, se tu avessi un gestore di password che userebbe qualsiasi possibile renderizzabile (ad esempio non controlli caratteri come BEL, NUL, DEL, ecc. o caratteri surrogati) Codice Unicode punti e un back-end del sito e un algoritmo di hashing che li accetterebbe, quanti bit di entropia fornirebbero una password di sedici caratteri?

Non sono sicuro al 100% che sto calcolando questo correttamente, ma secondo questa risposta StackOverflow , ci sono 1.111.998 possibili punti di codice validi per questo scopo, quindi ogni carattere dovrebbe fornire log2(1111998) ≈ 20 bits of entropy per character , corretto?

Questo romperebbe qualsiasi algoritmo di hash delle password comuni come bcrypt? Ci sono problemi di non utilizzo nell'utilizzo di punti codice unicode non assegnati nelle password, ad eccezione di alcuni siti che limitano il set di caratteri disponibile per l'uso?

    
posta Brandon Anzaldi 07.07.2016 - 03:38
fonte

2 risposte

7

Non proprio. Algoritmi di hash e funzioni di derivazione della chiave (nota a margine: bcrypt è un KDF, non un hash) funziona su byte, non su caratteri. Questo significa che invece di lavorare su Unicode, vede invece i byte codificati utf-8 (o qualunque altra codifica tu usi). Quindi l'hash / KDF stesso non avrebbe problemi nell'elaborare le password Unicode.

Tuttavia , Unicode aveva molte rappresentazioni diverse per gli stessi caratteri. Ciò è dovuto a combinazione di caratteri . Sistemi operativi diversi e diversi metodi di immissione del testo possono produrre punti di codice diversi per gli stessi caratteri. Gli sviluppatori di applicazioni devono assicurarsi che i caratteri Unicode siano normalizzati prima di passarli a bcrypt.

Un'altra potenziale complicazione è che esiste un numero diverso di possibili caratteri tra la stringa Unicode non normalizzata e normalizzata. Per produrre un metodo di generazione di password Unicode uniformemente casuale, è necessario generare uniformemente i caratteri normalizzati, altrimenti il metodo di generazione della password può essere orientato verso i personaggi che hanno rappresentazioni multiple.

    
risposta data 07.07.2016 - 03:59
fonte
4

BCrypt non funzionerà con un byte NUL perché è riservato per il proprio uso interno (penso di tenere traccia della fine della password o qualcosa del genere).

Oltre a ciò che fa realmente BCrypt hash una matrice di byte, non caratteri. Dal suo punto di vista, il fatto che i numeri si uniscano e che questi numeri siano correlati a una stringa presentabile in un set di caratteri o in un altro non ha mai un fattore nell'algoritmo.

Questo vale anche per tutti gli altri principali algoritmi di hashing (per quanto ne so)

    
risposta data 07.07.2016 - 03:51
fonte

Leggi altre domande sui tag