Стоимость прообразной атаки - PullRequest
1 голос
/ 24 июня 2010

Мне нужно знать стоимость успеха атаки Preimage («В криптографии атака preimage на криптографический хеш - это попытка найти сообщение с определенным значением хеша»., Википедия)

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

Есть ли возможность хешировать что-либо, используя определенный пароль. Это создаст еще один уровень безопасности, поскольку для получения одинаковых значений хеш-функции для сообщения потребуется знать пароль.

Я думаю об использовании SHA-2.

Ответы [ 3 ]

3 голосов
/ 24 июня 2010

Если вы хотите узнать, как дорого найти прообраз для строки, которую вы описываете, вам нужно выяснить, сколько возможных строк есть. Поскольку первые 6 цифр являются датой рождения, их значение еще более ограничено, чем наивное предположение о 10 ^ 6 - у нас есть верхняя граница 366 * 100 (каждый день года плюс год из двух цифр).

Оставшиеся 4 «случайные» цифры допускают еще 10 ^ 4 возможностей, что дает общее количество различных хешей, равное 366 * 100 * 10 ^ 4 = 366 000 000 хешей.

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

Использование соли, как предполагает Том, сделает таблицу поиска непрактичной, но с таким ограниченным диапазоном допустимых значений атака методом грубой силы все еще чрезвычайно практична, поэтому одного этого недостаточно, чтобы атака была непрактичной. 1007 *

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

Что касается «использования пароля», то звучит так, будто вы ищете HMAC - конструкцию, которая использует хеш, но может быть проверена только при наличии ключа. Если вы можете хранить ключ в секрете - нелегкая задача, если вы предполагаете, что хэши могут быть получены только в том случае, если ваша система изначально скомпрометирована - это практичная система.

Редактировать: Хорошо, поэтому «доли секунды», возможно, были небольшим преувеличением, по крайней мере, с моим тривиальным тестом Python. Тем не менее, он все еще отлично поддается грубому обращению на одном компьютере за короткий промежуток времени.

2 голосов
/ 24 июня 2010

SHA-2, соли, атаки на прообразы, грубое принуждение к ограниченному 6-значному номеру - человеку было бы здорово, если бы у нас был циферблат, который мы могли бы повернуть, что позволило бы нам настроить безопасность. Примерно так:

Time to compute a hash of an input:
 SHA-2, salted                                Better security!
  |                                            |
 \|/                                          \|/
 |-----------------------------------------------------|
.01 seconds                                           3 seconds

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

Но представьте, что вы атакующий!

Удивительно, он хэширует вещи, используя соль, но есть только 366 000 000 возможных хэшей, я пройду через 10 000 в секунду и закончу через ~ 10 часов!

Подождите, что происходит! Я могу сделать только 1 каждые 2,5 секунды ?! Это займет у меня 29 лет !!

Это было бы здорово, не так ли?

Конечно, будет.

Представляю вам: scrypt и bcrypt . Они дают вам этот набор. Хотите потратить целую минуту на хеширование пароля? Они могут это сделать. (Просто убедитесь, что вы помните соль!)

1 голос
/ 24 июня 2010

Я не уверен, что именно ваш вопрос, но чтобы сделать ваше зашифрованное значение более безопасным, используйте значения salt .

Edit: Я думаю, что вы как бы описываете значения соливаш вопрос.

...