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.