Во-первых, много аплодисментов и похвал за хранение хэша SSN.
Похоже, что вы резервируете номера SSN как своего рода «резервное имя пользователя». В этом случае вам потребуется другая форма аутентификации, кроме имени пользователя - пароль, номер водительского удостоверения, номер паспорта, подтверждение места жительства и т. Д.
Кроме того, если вы обеспокоены тем, что злоумышленник прогнозирует 10000 лучших SSN для пациента, родившегося в 1984 году в Аризоне, и пробует каждый из них, вы можете установить экспоненциально увеличивающийся ограничитель скорости в своем приложении. * Для дополнительной защиты, встроите систему уведомлений, которая предупреждает системного администратора, когда появляется необычно большое количество неудачных попыток входа в систему. **
* Пример экспоненциально возрастающего ограничения скорости:
После каждого неудачного запроса задержите следующий запрос на (1,1 ^ N) секунд, где N - количество неудачных запросов с этого IP. Отслеживание IP и неудачных попыток входа в систему в таблице БД; Не следует добавлять слишком много нагрузки, в зависимости от аудитории вашего приложения (вы работаете на Google?).
** В случае, когда злоумышленник имеет доступ к нескольким IP-адресам, уведомление предупредит системного администратора, который может использовать свое суждение, чтобы выяснить, нет ли у вас притока глупых пользователей или это злонамеренная попытка.