Предотвращение атаки прообразом на ограниченный набор значений - PullRequest
2 голосов
/ 29 ноября 2010

Я спрашивал о стоимости проведения предварительной атаки на хеши номеров социального страхования. Отличный ответ Я получил, что тип чисел социального страхования имеет только 366 000 000 хешей, что облегчает запуск атаки прообраз.

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

1 Ответ

1 голос
/ 29 ноября 2010

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

Существует два взаимодополняющих способа снижения рисков при использовании секретов с низкой энтропией:

  • Использование повторного/ повторное хеширование, чтобы сделать каждое «предположение» более дорогим для атакующего.
  • Использование солей для предотвращения разделения затрат.Злоумышленник должен оплатить полную атаку по словарю для каждого атакованного пароля / SSN.

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

соль - это часть общедоступных данных, которая используется вдоль данных для хеширования (SSN),и который отличается для каждого пользователя.Соль не должна быть секретной, но ее не следует использовать повторно (или, по крайней мере, не часто).Поскольку SSN, как правило, являются постоянными (у человека есть уникальный SSN на всю жизнь), то вы можете использовать имя пользователя в качестве соли (это отличается от паролей, где пользователь может изменить свой пароль, и должен использовать новую соль для каждогоновый пароль).Следовательно, если у пользователя Боба Смита есть SSN 123456789, вы в конечном итоге будете использовать: H («Боб Смит 123456789 Боб Смит 123456789 Боб Смит 123456789 ... Смит 123456789») с достаточным количеством повторений, чтобы сделать процесс достаточно медленным.

Предполагая, что вы можете заставить пользователя ждать одну секунду (трудно заставить пользователя ждать больше) на не столь новом компьютере, можно ожидать, что даже решительный злоумышленник будет иметь проблемыпробуя более нескольких сотен SSN в секунду.Стоимость взлома одного SSN будет считаться неделями, и, благодаря использованию имени пользователя в качестве соли, у злоумышленника не будет ярлыка (например, подсолка побеждает предварительно вычисленные таблицы, включая широко раскрученные «радужные таблицы»).

...