Системы паролей, которые запрашивают отдельные буквы - что они хранят? - PullRequest
11 голосов
/ 22 ноября 2011

Некоторые (особенно банковские) системы паролей требуют ввода трех (указанных) букв из вашего пароля для входа в систему. Это должно победить клавиатурные шпионы и, возможно, атаки повторного прослушивания проводов (для незашифрованных сеансов).

Очевидно, что такая схема не может работать с использованием обычного хеширования пароля, поскольку для вычисления хэша вам потребуется знать весь пароль.

Что такие системы обычно хранят на стороне сервера, чтобы это работало?

Хранят ли они пароль в незашифрованном виде, или, может быть, отдельный хэш каждой буквы, или как?

1 Ответ

17 голосов
/ 22 ноября 2011

Как вы правильно заметили, стандартные схемы хеширования паролей не будут работать, если аутентификация выполняется с использованием только подстроки пароля.Существует несколько способов реализации такой системы:

Сохранение пароля в виде простого текста:

  • Простота и легкость реализации.
  • Небезопасно, если база данных взломана.
  • Может не соответствовать правилам, требующим хеширования или шифрования паролей (но использование низкоуровневого шифрования базы данных может обойти это).

Хранить пароль в зашифрованном виде, расшифровывать для проверки:

  • Не более безопасно, чем хранить его в открытом виде, если ключ шифрования также скомпрометирован.
  • Может удовлетворять правилам, запрещающимХранение пароля в обычном режиме.
  • Можно сделать более безопасным, используя выделенный аппаратный модуль безопасности или отдельный сервер аутентификации, который будет хранить ключ и предоставлять интерфейс черного ящика для шифрования ипроверка подстроки.

Хранить хэши всех (или достаточного количества) возможных подстрок:

  • Требуется намного большепространство для хранения, чем у других решений.
  • Пароль все еще можно довольно легко восстановить с помощью грубой силы, если база данных взломана, поскольку каждая подстрока может быть атакована отдельно.

Использование k -out-of- n разделение секретного порогового значения :

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

В конечном счете, все эти схемы страдают слабостью против атак методом перебора, если база данных взломана,Фундаментальная причина этого заключается в том, что в трехбуквенной подстроке типичного пароля (или даже даже очень сильного) энтропия не так уж и велика, поэтому взломать не придется много догадок.

Что из этого лучше?Сложно сказать.Если бы у меня было , чтобы выбрать одну из этих схем, я бы, вероятно, выбрал зашифрованное хранилище с использованием строгого симметричного шифрования (такого как AES) с отдельным сервером или HSM для обработки шифрования и проверки.Таким образом, по крайней мере, злоумышленник, скомпрометировавший интерфейсный сервер, не сможет просто скопировать базу данных и атаковать ее в автономном режиме (хотя он все равно может организовать атаку методом подбора, если на нем не реализовано эффективное ограничение скорости).).

Тем не менее, я бы сказал, что сама идея использования только части пароля для аутентификации глубоко ошибочна: на самом деле она не дает преимуществ безопасности, за исключением некоторых особо ограниченных.Сценарии атаки (например, перехватчик, который может наблюдать только одно событие аутентификации и не может просто продолжать попытки, пока не получат ту же самую задачу), однако это существенно ослабляет безопасность, уменьшая объем информации, необходимой для успешной аутентификации.Существуют гораздо лучшие решения, такие как TAN , для решения проблем безопасности, которые должна решать частичная аутентификация по паролю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...