Actualmente estoy diseñando un inicio de sesión para un servicio web. Usaré una implementación PBKDF2 para cifrar las contraseñas.
Sin embargo, tengo la intención de permitir Unicode para las contraseñas, ya que tendré usuarios internacionales, que tal vez desee utilizar, por ejemplo, caracteres cirílicos. Para evitar cualquier problema con la ambigüedad de Unicode, pensé en usar la normalización de Unicode de NFC antes de codificar la contraseña como utf8 y pasarla al hash.
La pregunta ahora es: ¿es seguro o introduce alguna ambigüedad no deseada en la validación de la contraseña? Está claro que "a\u0308"
(a + diaresis combinada) y "ä"
deberían ser iguales, pero ¿la NFC dobla más diferencias en las que los usuarios podrían confiar?
Editar :
Encontré que hay un perfil stringprep ( RFC 3454 ) llamado SASLprep (RFC 4013) que aparentemente se usa para contraseñas y nombres de usuario en algunos protocolos. Especifica usar una normalización KD, lo que considero una mala idea. Doblará las diferencias como ²
y 2
, que son dos caracteres comúnmente en los keybords en el mundo occidental al menos, que podrían usarse para enriquecer la entropía de la contraseña. Desafortunadamente, no se dan razones para eso.