Ваша проблема похожа на то, что должно быть сделано при использовании паролей.Пароли вписываются в мозг человека, и, как таковые, угадать их не сложно.
Существует два взаимодополняющих способа снижения рисков при использовании секретов с низкой энтропией:
- Использование повторного/ повторное хеширование, чтобы сделать каждое «предположение» более дорогим для атакующего.
- Использование солей для предотвращения разделения затрат.Злоумышленник должен оплатить полную атаку по словарю для каждого атакованного пароля / SSN.
Один из способов сделать хеширование более дорогим - хешировать конкатенацию n копий данных.с максимально большим n (в зависимости от вычислительной мощности клиентов и, в конечном итоге, терпения пользователя).Например, для (фиктивного) SSN "123456789" используйте H (123456789123456789123456789 ... 123456789) .Вы бы подсчитали n в миллионах здесь;на базовом ПК SHA-256 может легко обрабатывать сто мегабайт в секунду.
соль - это часть общедоступных данных, которая используется вдоль данных для хеширования (SSN),и который отличается для каждого пользователя.Соль не должна быть секретной, но ее не следует использовать повторно (или, по крайней мере, не часто).Поскольку SSN, как правило, являются постоянными (у человека есть уникальный SSN на всю жизнь), то вы можете использовать имя пользователя в качестве соли (это отличается от паролей, где пользователь может изменить свой пароль, и должен использовать новую соль для каждогоновый пароль).Следовательно, если у пользователя Боба Смита есть SSN 123456789, вы в конечном итоге будете использовать: H («Боб Смит 123456789 Боб Смит 123456789 Боб Смит 123456789 ... Смит 123456789») с достаточным количеством повторений, чтобы сделать процесс достаточно медленным.
Предполагая, что вы можете заставить пользователя ждать одну секунду (трудно заставить пользователя ждать больше) на не столь новом компьютере, можно ожидать, что даже решительный злоумышленник будет иметь проблемыпробуя более нескольких сотен SSN в секунду.Стоимость взлома одного SSN будет считаться неделями, и, благодаря использованию имени пользователя в качестве соли, у злоумышленника не будет ярлыка (например, подсолка побеждает предварительно вычисленные таблицы, включая широко раскрученные «радужные таблицы»).