Va bene normalizzare le password unicode con NFC / NFD?

8

Attualmente sto progettando un accesso per un servizio web. Userò un'implementazione PBKDF2 per l'hashing delle password.

Tuttavia, intendo consentire l'unicode per le password, poiché avrò utenti internazionali, che potrebbero voler utilizzare, ad esempio, caratteri cirillici. Per evitare problemi con l'ambiguità Unicode, ho pensato di utilizzare la normalizzazione Unicode NFC prima di codificare la password come utf8 e di passarla all'hash.

La domanda ora è: è sicuro o introduce qualche ambiguità indesiderata nella convalida della password? È chiaro che "a\u0308" (a + combinazione di diaresi) e "ä" dovrebbero essere uguali, ma NFC piega le eventuali differenze su cui gli utenti potrebbero fare affidamento?

Modifica :

Ho scoperto che esiste un profilo stringprep ( RFC 3454 ) chiamato SASLprep (RFC 4013) che viene apparentemente usato per password e nomi utente in alcuni protocolli. Specifica di utilizzare una normalizzazione KD, che considero una cattiva idea. Piega le differenze come ² e 2 , che sono almeno due caratteri comunemente presenti nei keybord nel mondo occidentale, che potrebbero essere usati per arricchire l'entropia della password. Sfortunatamente, non è stato fornito alcun motivo per questo.

    
posta Jonas Schäfer 20.02.2014 - 19:05
fonte

1 risposta

4

Se tratti 2 e ² come lo stesso personaggio, stai essenzialmente rimuovendo un personaggio dal set di caratteri. Questo non è poi così grave se aumenta l'usabilità, specialmente se ciò incoraggia le password più lunghe.

Dì che prendi una password di 8 caratteri, con una raccolta casuale da un set di 2000 caratteri. Questo dà log₂ (2000⁸) ≈ 88 bit di entropia. Se avevi una password di 9 caratteri, disegnata da 1000 caratteri (la metà di molti!), È log₂ (1000⁹) ≈ 90 bit di entropia. In effetti:

+-----+---------------------------+
|     |    character set size     |
| len |  500 | 1000 | 2000 | 4000 |
|-----+------+------+------+------|
| 6   |  54  |  60  |  66  |  72  |
| 7   |  63  |  70  |  77  |  84  |
| 8   |  72  |  80  |  88  |  96  |
| 9   |  81  |  90  |  99  |  108 |
| 10  |  90  |  100 |  110 |  120 |
| 11  |  99  |  110 |  121 |  132 |
+---------------------------------+

Come puoi vedere, nell'intervallo normale delle lunghezze delle password e delle dimensioni dei caratteri Unicode, la dimensione esatta del set di caratteri non è così importante.

    
risposta data 25.02.2014 - 23:11
fonte

Leggi altre domande sui tag