Какая нормализация Юникода (и другая обработка) подходит для паролей при хешировании?

Если я принимаю полный Юникод для паролей, как я должен нормализовать строку перед передачей ее хеш-функции?

Цели

Без нормализации, если кто-то устанавливает свой пароль на "mañana" (ma\u00F1ana) на одном компьютере и пытается войти в систему с "mañana" (ma\u006E\u0303ana) на другом компьютере, хэши будут разными, и логин будет потерпеть неудачу. Это находится под контролем пользовательского агента или его операционной системы.

  • Я бы хотел, чтобы эти хэши были одинаковыми.
  • Меня не интересуют гомоглифы, такие как А, А и А (греческий, кириллический, латинский).

Ссылка

Формы нормализации Unicode: http://unicode.org/reports/tr15/#Norm_Forms

Вопросы

  • Любая процедура нормализации может вызвать столкновение, например. "office" == "office".
  • Нормализация может изменить количество байтов в строке.

Дополнительные вопросы

  • Что произойдет, если сервер получит последовательность байтов, которая недопустима UTF-8 (или другой формат)? Отклонить, так как он не может быть нормализован?
  • Что произойдет, если сервер получит символы, которые не назначены в его версии Unicode?

Ответы

Ответ 1

Это пространство намеренно оставлено пустым; переехал в другое место.