Ожидания пользователей и нормализация Юникода


Это немного мягкий вопрос, не стесняйтесь, дайте мне знать, если есть лучшее место для этого.

Я разрабатываю код, который принимает пароль, требующий международных символов , поэтому мне нужно будет сравнить входную строку Юникода с сохраненной строкой Юникода. Достаточно просто.

Мой вопрос заключается в следующем-ожидают ли пользователи международных наборов символов нормализации в таком случае? Мои поисковые запросы Google показывают некоторые конфликты во мнениях от "Всегда делай это" (http://unicode.org/faq/normalization.html) чтобы "не беспокоить". Есть ли какие-то плюсы/минусы в том, чтобы не нормализоваться? (то есть, меньше шансов угадать пароль и т. д.)

2 5

2 ответа:

Я бы рекомендовал, если ваше поле пароля принимает ввод Unicode (предположительно UTF-8 или UTF-16), нормализовать его перед хэшированием и сравнением. Если вы не нормализуете его, и люди обращаются к нему из разных систем (разных операционных систем или разных браузеров, если это веб-приложение, или с разными языками), то вы можете получить один и тот же пароль, представленный с разной нормализацией. Это будет означать, что ваш пользователь введет правильный пароль, но он будет отклонен, и это не было бы очевидно, почему, и у них не было бы никакого способа исправить это.

Я бы не стал беспокоиться по нескольким причинам:

  1. Вы собираетесь сделать вещи менее безопасными. Если два или более символов представлены в вашей БД как одно и то же, то это означает, что существует меньше возможных паролей для сайта. (Хотя это, вероятно, не так уж и много, поскольку количество возможных паролей довольно велико.)
  2. Вы будете создавать код в своей программе, которая выполняет сложную работу, которая (вероятно) является частью библиотеки, которую вы не писали...и в конце концов ... в результате кто-то не сможет войти в систему. На мой взгляд, лучше держать вещи простыми и верить, что люди, использующие разные наборы символов, знают, как правильно их печатать. Тем не менее, я никогда не реализовывал это в международной форме пароля, поэтому я не мог сказать вам, что такое стандартный шаблон дизайна.