Если вы хотите узнать, как дорого найти прообраз для строки, которую вы описываете, вам нужно выяснить, сколько возможных строк есть. Поскольку первые 6 цифр являются датой рождения, их значение еще более ограничено, чем наивное предположение о 10 ^ 6 - у нас есть верхняя граница 366 * 100 (каждый день года плюс год из двух цифр).
Оставшиеся 4 «случайные» цифры допускают еще 10 ^ 4 возможностей, что дает общее количество различных хешей, равное 366 * 100 * 10 ^ 4 = 366 000 000 хешей.
При таком небольшом количестве возможностей на современном компьютере должна быть возможность найти прообраз в доли секунды - или, в этом отношении, построить таблицу поиска для каждого возможного хэша.
Использование соли, как предполагает Том, сделает таблицу поиска непрактичной, но с таким ограниченным диапазоном допустимых значений атака методом грубой силы все еще чрезвычайно практична, поэтому одного этого недостаточно, чтобы атака была непрактичной. 1007 *
Один из способов сделать вещи более дорогими - использовать итеративное хеширование, то есть хеширование и повторное хеширование. Вы должны делать намного меньше хэширования, чем ваш атакующий, поэтому увеличение стоимости влияет на них больше, чем на вас. Однако это все еще может быть лишь временной пробел, учитывая небольшое пространство поиска.
Что касается «использования пароля», то звучит так, будто вы ищете HMAC - конструкцию, которая использует хеш, но может быть проверена только при наличии ключа. Если вы можете хранить ключ в секрете - нелегкая задача, если вы предполагаете, что хэши могут быть получены только в том случае, если ваша система изначально скомпрометирована - это практичная система.
Редактировать: Хорошо, поэтому «доли секунды», возможно, были небольшим преувеличением, по крайней мере, с моим тривиальным тестом Python. Тем не менее, он все еще отлично поддается грубому обращению на одном компьютере за короткий промежуток времени.