Нет, невозможно отменить хеш-функцию, такую как MD5: с учетом выходного хеш-значения невозможно найти входное сообщение, если не известно достаточно информации о входном сообщении.
Расшифровка - это не функция, которая определена для хеш-функции; шифрование и дешифрование являются функциями шифра, например AES в режиме CBC; хеш-функции не шифруют и не дешифруют. Хеш-функции используются для переваривания входящего сообщения. Как следует из названия, обратный алгоритм невозможен по замыслу.
MD5 был разработан как криптографически безопасная, односторонняя хэш-функция. Теперь легко генерировать коллизии для MD5 - даже если большая часть входного сообщения заранее определена. Итак, MD5 официально взломан, и MD5 больше не следует рассматривать как криптографически безопасный хеш. Однако по-прежнему невозможно найти входное сообщение, которое приводит к хэш-значению: найдите X, когда известен только H (X) (и X не имеет предварительно вычисленной структуры, по крайней мере, с одним 128-байтовым блоком предварительно вычисленных данных) . Отсутствуют известные атаки с использованием предварительного образа на MD5.
Как правило, также возможно угадывать пароли с помощью грубой силы или (расширенных) словарных атак, сравнивать базы данных или пытаться найти хэши паролей в так называемых радужных таблицах. Если совпадение найдено, значит, с точки зрения вычислений, вход был найден. Хеш-функции также защищены от коллизионных атак: поиск X'
так, чтобы H(X') = H(X)
задано H(X)
. Таким образом, если обнаружен X
, вычислительно достоверно, что это действительно входное сообщение. В противном случае вы все-таки совершили бы столкновение. Таблицы Rainbow могут использоваться для ускорения атак, и существуют специализированные интернет-ресурсы, которые помогут вам найти пароль с учетом определенного хеша.
Конечно, можно повторно использовать хеш-значение H(X)
для проверки паролей, сгенерированных в других системах. Единственное, что должна сделать принимающая система, - это сохранить результат детерминированной функции F
, которая принимает H(X)
в качестве входных данных. Когда X
передается системе, тогда H(X)
и, следовательно, F
можно пересчитать, и результаты можно будет сравнить. Другими словами, не требуется расшифровывать хеш-значение, чтобы просто проверить правильность пароля, и вы все равно можете сохранить хеш-код как другое значение.
Вместо MD5 важно использовать хэш пароля или PBKDF (функция получения ключа на основе пароля). Такая функция указывает, как использовать соль вместе с хешем. Таким образом, идентичные хэши не будут сгенерированы для идентичных паролей (от других пользователей или в других базах данных). По этой причине хэши паролей также не позволяют использовать радужные таблицы, если соль достаточно велика и правильно рандомизирована.
Хэши паролей также содержат рабочий фактор (иногда настраиваемый с использованием счетчика итераций), который может значительно замедлить атаки, пытающиеся найти пароль с учетом соли и хеш-значения. Это важно, так как база данных с солями и хеш-значениями может быть украдена. Наконец, хэш пароля также может быть жестким для памяти, поэтому для его вычисления требуется значительный объем памяти. Это делает невозможным использование специального оборудования (GPU, ASIC, FPGA и т. Д.), Позволяющего злоумышленнику ускорить поиск. Другие входные данные или параметры конфигурации, такие как перец или степень распараллеливания, также могут быть доступны для хэша пароля.
Тем не менее, он по-прежнему позволяет любому проверять пароль, заданный H(X)
, даже если H(X)
является хешем пароля. Хэши паролей по-прежнему детерминированы, поэтому, если кто-то знает весь ввод и сам алгоритм хеширования, тогда X
можно использовать для вычисления H(X)
и - опять же - результаты можно сравнить.
Обычно используются хэши паролей bcrypt, scrypt и PBKDF2. Также существует Argon2 в различных формах, который стал победителем относительно недавнего конкурса по хешированию паролей. Здесь, на CrackStation, есть хорошая запись в блоге о правильной защите паролей.
Можно сделать так, чтобы злоумышленники не смогли выполнить вычисление хэша для проверки правильности пароля. Для этого перец можно использовать в качестве входа в хеш пароля. В качестве альтернативы хеш-значение, конечно, может быть зашифровано с использованием шифра, такого как AES, и режима работы, такого как CBC или GCM. Однако для этого требуется хранение секрета / ключа независимо и с более высокими требованиями к доступу, чем хэш пароля.
18.09.2018
password
иCPfvwl#qr*w4*96C@&@xj$T2ZggJC%
и бесконечное количество других входных данных могут давать один и тот же хэш, у нас нет нулевых способов определения оригинала, как предполагает ответ. Этот вид очевидного теста (и, для его автоматизации, тестирования, чтобы увидеть, соответствует ли открытый текст кандидата статистике ожидаемых открытых текстов) используется все время для определения того, был ли уже взломан обычный шифротекст или нет. 20.02.2013