Почему значения хэша MD5 необратимы?

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

Если на моем сервере, в PHP я создаю:

md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"

Когда вы запускаете ту же строку через функцию MD5, вы получаете тот же результат при установке PHP. Процесс используется для получения некоторого значения из некоторого начального значения.

Разве это не означает, что есть способ деконструировать происходящее и отменить хеш-значение?

Что такого особенного в этих функциях, что делает невозможным восстановление результирующих строк?


person barfoon    schedule 01.12.2008    source источник
comment
Например, простой пример необратимого значения - по модулю. Например, 10% 3 = 1, но вы не можете поменять местами от 1 до 10, так как это также может быть 4   -  person Gab Royer    schedule 30.07.2009
comment
Если бы вы могли восстановить данные, у вас был бы самый эффективный алгоритм сжатия без потерь :)   -  person Dan Diplo    schedule 30.07.2009


Ответы (16)


Входной материал может быть бесконечной длины, а выходной всегда 128 бит. Это означает, что бесконечное количество входных строк будет генерировать один и тот же результат.

Если вы выберете случайное число и разделите его на 2, но запишете только остаток, вы получите 0 или 1 - четное или нечетное соответственно. Можно ли взять этот 0 или 1 и получить исходное число?

person Serafina Brocious    schedule 01.12.2008
comment
Другими словами, ни число - ›остаток, ни строка -› md5 не являются инъективными функциями. - person Federico A. Ramponi; 01.12.2008
comment
Федерико, вы наверняка имеете в виду, что ни то, ни другое не являются биективными функциями? Оба они инъективны. - person Mihai Limbășan; 02.12.2008
comment
moocha: Injective означает 1 к 1. MD5 определенно не 1 к 1, так как домен больше, чем диапазон. Еще один момент, который стоит отметить, заключается в том, что с учетом контрольной суммы MD5 очень сложно найти даже одну строку, которая хеширует ее. Возможно, стоит добавить к ответу для пояснения. - person biozinc; 02.12.2008
comment
Вы утверждаете, что бесконечное количество строк будет генерировать один и тот же результат. Разве это не противоречит утверждению в вопросе о том, что эти типы функций генерируют уникальное хеш-значение. В вашем примере случайных чисел дает значение, которое почти никогда не бывает уникальным. Я смущен. - person Rob Sobers; 24.06.2009
comment
Невозможно иметь хэш-функцию, генерирующую уникальные значения. Вы сопоставляете бесконечное количество значений с конечным числом значений, что гарантирует коллизии. - person Serafina Brocious; 27.06.2009
comment
Я предлагаю, чтобы ваш ответ не касался ключевого момента. Как упоминалось в biozinc, для безопасного хэша пароля важно то, что вы не можете найти никакой ввод, который создает вывод, а не то, что вы не можете найти исходный ввод. При этом MD5 не обязательно так безопасен, как мог бы (en.wikipedia.org/wiki / MD5 # Collision_vulnerabilities). - person Mike Pelley; 05.07.2010
comment
То же свойство неинъективности было бы справедливо для substr($input." ", 0, 16) (с 16 пробелами), но это определенно не очень хорошая хэш-функция (здесь атаки на прообразов тривиальны). - person Paŭlo Ebermann; 22.08.2011
comment
Действительно ли MD5 работает с бесконечно длинным входным значением? Или просто существует бесконечное множество возможных входных значений (каждое конечной длины)? - person Dave L.; 30.04.2012
comment
Верно, но, судя по информации в вашем ответе, может показаться, что хеш-функции по своей природе уязвимы для коллизий. Я понимаю, что MD6 общеизвестно так, но те, которые обычно считаются безопасными, якобы нет. Как перейти от mod 2 операции к созданию реальной хеш-функции, у которой нет 50% -ной вероятности столкновения двух случайно заданных входных данных? - person wwaawaw; 24.09.2012
comment
@DaveL., Я думаю, что как только вы ограничиваете длину, вы автоматически ограничиваете количество перестановок, которые могли бы поместиться в это ограничение длины. Подумайте об этом: если у вас есть X бит в качестве максимальной длины, это представляет собой число, выраженное в базе 2. Если вы на секунду забудете, что это двоичный код, и просто подумайте о десятичных (нормальных) числах и скажите, что у вас есть 8 цифр в для выражения числа, наибольшее число, которое может быть выражено, будет 99999999 (youtu.be/0Ba9HAKxw9M ), а самый низкий будет _3 _... - person wwaawaw; 24.09.2012
comment
@DaveL. Тогда есть только 100000000 числа, которые могут быть выражены в таком количестве мест, и то же самое верно, когда вы имеете дело с двоичными. - person wwaawaw; 24.09.2012
comment
@adlwalrus Я не думаю, что вы поняли это различие. Например, существует бесконечное количество целых чисел, но каждое целое число имеет конечную длину или для представления требуется конечное число битов. Точно так же я ожидал, что MD5 может работать с бесконечным числом возможных входных значений, но не с входным значением бесконечной длины (он никогда не завершится или не произведет выход). - person Dave L.; 26.09.2012
comment
Будучи полным криптонобом и всем остальным, я не совсем квалифицированный человек, чтобы ответить на этот вопрос, и я не знаю ответа наверняка, но я готов поспорить, что нет ограничения на длину входного значения, и я Скажу почему. Существует ограничение на длину ввода для асимметричного шифрования RSA, но его можно преодолеть с помощью взлома с использованием симметричного, а затем асимметричного шифрования симметричного ключа конечной длины. Если бы существовало такое ограничение, я уверен, что разработчики любого алгоритма хеширования нашли бы такой же умный механизм преодоления последствий для таких случаев, например, разбив его на ... - person wwaawaw; 26.09.2012
comment
... блоков, а затем объединение и хеширование хэшей этих блоков до тех пор, пока не будет достигнута предельная длина ввода. Учитывая, что я не криптограф, и я мог бы подумать об этом на месте, я уверен, что разработчики хешей могли придумать что-то получше, и я действительно не вижу причин, по которым они могут не использовать это, так что я сказал, что готов поспорить, что они действительно использовали что-то в соответствии с тем, что я придумал. - person wwaawaw; 26.09.2012
comment
Хеш-функции по своей природе уязвимы для коллизий; просто хорошие хеш-функции распределяются более равномерно, и, следовательно, их потенциал коллизий ближе к оптимальному. Никакой хеш неуязвим для коллизий. - person Serafina Brocious; 01.10.2012
comment
@DaveL .: Он использует бесконечное неформально, чтобы означать неограниченное. - person David Schwartz; 15.02.2013
comment
Этот ответ неверен и очень далеко заходит в объединении функции, которая почти является действительно необратимой функцией, такой как f(x) = 1, с хеш-функцией, используемой, скажем, для паролей. Если у вас есть несколько кандидатов на пароли, такие как password, 8ZDEyCJ!WM и tXhN7TW&zq, не совсем сложно определить, какой из них является оригинальным. Это не просто теоретическая вещь: такие статистические закономерности на человеческом языке используются для взлома всевозможных криптографических вещей. - person Olathe; 20.02.2013
comment
Олате: В этом отношении f (x) = x% 5 обратимо. Вы говорите, что, зная f (x), y = f (x ') и набор возможных x, вы можете найти x', который соответствует y; это полностью правда. Но это никак не делает функцию обратимой. Хеши - даже сломанные хеши - необратимы. Это не означает, что невозможно подобрать f () или найти атаку по прообразу. - person Serafina Brocious; 13.03.2013
comment
@CodyBrocious Качество хеш-функции в основном измеряется не равномерностью ее распределения (простая функция остатка может быть лучше), а твердостью (с точки зрения времени вычислений) нахождения коллизий, прообразов или других атак. - person Paŭlo Ebermann; 19.03.2013

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

person Autodidact    schedule 01.12.2008
comment
подумайте, как быстро было бы загрузить дистрибутивы Linux, если бы вместо этого вы могли просто получить md5 :) - person Colin Pickard; 18.02.2009
comment
@ Колин Пикард: мы больше не будем загружать дистрибутивы Linux, мы будем записывать их. :) - person tzot; 12.06.2009

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

Рассмотрим эту функцию (в нотации PHP, как вопрос):

function simple_hash($input) {
     return bin2hex(substr(str_pad($input, 16), 0, 16));
}

Это добавляет некоторые пробелы, если строка слишком короткая, а затем берет первые 16 байтов строки, а затем кодирует их как шестнадцатеричные. Он имеет тот же размер вывода, что и хэш MD5 (32 шестнадцатеричных символа или 16 байтов, если мы опускаем часть bin2hex).

print simple_hash("stackoverflow.com");

Это выведет:

737461636b6f766572666c6f772e636f6d

Эта функция также имеет то же свойство не-инъективности, что и выделено ответом Коди для MD5: мы можем передавать строки любого размера (при условии, что они помещаются в наш компьютер), и она будет выводить только 32 шестнадцатеричных цифры. Конечно, это не может быть инъекционным.

Но в этом случае легко найти строку, которая соответствует одному и тому же хешу (просто примените hex2bin к своему хешу, и он у вас есть). Если ваша исходная строка имела длину 16 (как в нашем примере), вы даже получите эту исходную строку. Ничего подобного не должно быть для MD5, даже если вы знаете, что длина ввода была довольно короткой (кроме как путем проверки всех возможных вводов до тех пор, пока мы не найдем тот, который соответствует, например, атака грубой силой).

Важные предположения для криптографической хеш-функции:

  • трудно найти какую-либо строку, создающую данный хэш (сопротивление прообразу)
  • трудно найти другую строку, дающую такой же хэш, как заданная строка (сопротивление второму прообразу)
  • трудно найти любую пару строк с одинаковым хешем (сопротивление столкновениям)

Очевидно, моя функция simple_hash не удовлетворяет ни одному из этих условий. (На самом деле, если мы ограничим пространство ввода «16-байтовыми строками», тогда моя функция станет инъективной и, таким образом, даже доказуемо устойчивой к второму прообразу и стойкой к столкновениям.)

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

Чтобы ответить на вопрос:

Что такого особенного в этих функциях, что делает невозможным восстановление результирующих строк?

Что действительно делает MD5 (и другие хэш-функции, основанные на конструкции Меркла-Дамгарда), так это применение алгоритма шифрования с сообщением в качестве ключа и некоторым фиксированным значением в качестве «простого текста», используя полученный зашифрованный текст в качестве хеша. (Перед этим ввод дополняется и разбивается на блоки, каждый из этих блоков используется для шифрования вывода предыдущего блока, с его вводом выполняется операция XOR, чтобы предотвратить обратные вычисления.)

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

Для хэш-функций, подобных MD5, и атаки по прообразу (с одноблочной хешированной строкой, чтобы упростить задачу) у вас есть только ввод и вывод вашей функции шифрования, но не ключ (это то, что вы ищете).

person Paŭlo Ebermann    schedule 22.08.2011
comment
Да, я знаю, что это довольно запоздалый ответ, но принятый ответ нельзя допускать. - person Paŭlo Ebermann; 22.08.2011
comment
Я думаю, что ваша критика имеет определенную ценность, но вы не смогли ответить на фактический вопрос. Что такого особенного в этих функциях, что делает невозможным восстановление результирующих строк? Ваш ответ фокусируется на качествах, которыми должен обладать криптографический хеш, но не имеет никакого объяснения того, как они реализованы в md5. Здесь вы можете указать точный алгоритм вычисления сумм MD5, чтобы показать, как это необратимо, но другие ответы дают более простое объяснение, не вдаваясь в подробности. - person Autodidact; 10.06.2015
comment
(продолжение ...) 2. В этих объяснениях используется математика, чтобы показать фундаментальную проблему, из-за которой такие операции теряют информацию и становятся необратимыми. - person Autodidact; 10.06.2015
comment
@SandeepDatta Я добавил несколько абзацев об этом. - person Paŭlo Ebermann; 28.10.2015
comment
Хотя другие ответы в этой ветке более технически верны, этот ответ является наиболее полезным. Неинъективная функция f (x) = 1 необратима, но не интересна. Полезность хеширования заключается в сопротивлении прообразу, когда трудно найти любой ввод, дающий определенный вывод. - person Justin J Stark; 17.12.2018

Ответ Коди Броциуса правильный. Строго говоря, вы не можете «инвертировать» хэш-функцию, потому что многие строки отображаются в один и тот же хеш. Обратите внимание, однако, что либо поиск одной строки, которая сопоставляется с заданным хешем, либо поиск двух строк, которые сопоставляются с одним и тем же хешем (т. Е. collision < / em>), было бы большим прорывом для криптоаналитика. Большая сложность обеих этих проблем является причиной того, почему хорошие хеш-функции полезны в криптографии.

person Federico A. Ramponi    schedule 01.12.2008

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

E.g.,

"hello" -> "1ab53"
"Hello" -> "993LB"
"ZR#!RELSIEKF" -> "1ab53"

(Очевидно, что это не настоящее шифрование MD5)

Большинство хэшей (если не все) также неуникальны; скорее, они уникальны достаточно, поэтому столкновение маловероятно, но все же возможно.

person Trevel    schedule 01.12.2008

Хороший способ придумать алгоритм хеширования - подумать об изменении размера изображения в Photoshop ... скажем, у вас есть изображение размером 5000x5000 пикселей, а затем вы измените его размер до 32x32. То, что у вас есть, по-прежнему является представлением исходного изображения, но оно намного меньше и эффективно «отбрасывает» определенные части данных изображения, чтобы оно соответствовало меньшему размеру. Так что, если бы вы изменили размер этого изображения 32x32 до 5000x5000, все, что вы получили бы, - это расплывчатый беспорядок. Однако, поскольку изображение 32x32 не такое большое, теоретически можно было бы уменьшить размер другого изображения для получения точно таких же пикселей!

Это просто аналогия, но она помогает понять, что делает хеш.

person nbevans    schedule 13.12.2008
comment
Хотя изменение размера изображения - это процесс с потерями, все же довольно легко создать изображение с исходным размером 5000 × 5000, которое (при повторном применении функции сжатия) уменьшится до того же изображения 32 × 32. Поиск такого прообраза должен быть трудным для хорошей хэш-функции. - person Paŭlo Ebermann; 22.08.2011

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

person Gamic    schedule 01.12.2008
comment
Существует 365 возможных значений дня рождения, которые находятся в диапазоне от 2 ^ 8 до 2 ^ 9. 128-битный хеш имеет 2 ^ 128 возможных значений - в 2 ^ 120 раз больше. Да, столкновения более вероятны, чем вы можете себе представить, но они все же астрономически маловероятны. - person Tim Keating; 02.03.2010
comment
Вам понадобится около 2 ^ 64 разных значений, чтобы иметь хороший шанс на хэш-коллизию. Еще довольно много. - person Paŭlo Ebermann; 22.08.2011

Поскольку количество возможных входных файлов больше, чем количество 128-битных выходных файлов, невозможно однозначно назначить хэш MD5 каждому из возможных.

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

Иногда используются следующие критерии:

  1. Сопротивление прообразу: для заданной хеш-функции и заданного хеш-кода должно быть сложно найти вход, который имеет заданный хеш-код для этой функции.
  2. Сопротивление второму прообразу: для данной хэш-функции и ввода должно быть сложно найти второй, другой ввод с таким же хешем.
  3. Устойчивость к коллизиям: для данной функции has должно быть сложно найти два разных входа с одним и тем же хешем.

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

Число 3 подразумевает число 2.

Что касается, в частности, MD5, то он оказался некорректным: Как нарушить работу MD5 и других хэш-функций.

person Geoglyph    schedule 02.12.2008

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

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

person martinlund    schedule 01.12.2008
comment
Ах да. Мне понравилось читать сообщение Джеффа о хэш-таблицах (codinghorror.com/blog/archives/000949.html), и эта ветка помогла в понимании концепции. - person barfoon; 01.12.2008

Китайские ученые нашли способ, называемый «коллизией выбранных префиксов», для создания конфликта между двумя разными строками.

Вот пример: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
Исходный код: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip

person gameboy90    schedule 13.03.2012

Лучший способ понять, что означают все ответы, получившие наибольшее количество голосов, - это на самом деле попытаться вернуть алгоритм MD5. Я помню, что несколько лет назад я пытался вернуть алгоритм MD5crypt, но не для восстановления исходного сообщения, поскольку это явно невозможно, а просто для создания сообщения, которое будет выдавать тот же хэш, что и исходный хэш. Это, по крайней мере теоретически, предоставит мне способ войти в систему на устройстве Linux, на котором хранится пароль user: password в файле / etc / passwd, используя сгенерированное сообщение (пароль) вместо исходного. Поскольку оба сообщения будут иметь один и тот же результирующий хэш, система распознает мой пароль (сгенерированный из исходного хеша) как действительный. Это совсем не сработало. Через несколько недель, если я правильно помню, использование соли в первом сообщении убило меня. Мне нужно было создать не только действительное начальное сообщение, но и солидное действительное начальное сообщение, чего я никогда не мог сделать. Но знания, которые я получил в результате этого эксперимента, были хорошими.

person Vinicius    schedule 15.02.2017
comment
Если бы вы смогли сгенерировать ввод, который произвел данное хеш-значение MD5 любым разумно эффективным способом, это было бы большим делом для криптосообщества, и его следует опубликовать. Это совершенно не зависит от того, был ли конкретный ввод соленым. - person Dave L.; 23.02.2017

Как уже было сказано большинством, MD5 был разработан для потоков данных переменной длины, которые должны хешироваться в блок данных фиксированной длины, поэтому один хеш используется для многих потоков входных данных.

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

person Tim Matthews    schedule 03.12.2008

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

Например, попробуйте следующий хэш-код на странице http://gdataonline.com/seekhash.php, чтобы узнать какой текст я использовал для вычисления хэша

aea23489ce3aa9b6406ebb28e0cda430
person Babar    schedule 30.05.2009
comment
Ах да, хеш банального семибуквенного слова. Теперь используйте его, чтобы выяснить этот текст песни из 11 слов с пробелами и знаками препинания: 9f2c08d4e6158bd4854b15be50c8daa8. Увидимся через несколько тысячелетий. - person Tim Keating; 02.03.2010
comment
6fba2bbab8a8366309bf67c7df12c622? Подсказка: это может быть OEM-версия конкретной версии Mac OS X! - person scherand; 08.04.2010
comment
@ Тим Китинг, @scherand: Просто указываю на слабость алгоритмов хеширования, потому что хеш строки всегда один и тот же, нам не обязательно взламывать алгоритм, чтобы выяснить фактическую строку. - person Babar; 08.04.2010
comment
Но ты сказал не это. Вы сказали, что хэши предварительно вычисляются для всех возможных строк и сохраняются для облегчения доступа, что явно неверно (набор всех возможных строк бесконечен ... и даже набор всех правдоподобных строк действительно очень велик). ИМХО, это искажает представление о том, насколько легко провести словарную атаку против разумной ключевой фразы. - person Tim Keating; 08.04.2010

f (x) = 1 необратимо. Хеш-функции не являются необратимыми.

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

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

Однако при этом игнорируется тот факт, что разумный открытый текст, созданный из семени password, намного, намного более вероятно, чем другой, созданный семенем Wsg5Nm^bkI4EgxUOhpAjTmTjO0F!VkWvysS6EEMsIJiTZcvsh@WI$IH$TYqiWvK!%&Ue&nk55ak%BX%9!NnG%32ftud%YkBO$U6o, в той степени, что любой, утверждающий, что второе было возможным, был бы посмеян.

Точно так же, если вы пытаетесь выбрать между двумя потенциальными паролями password и Wsg5Nm^bkI4EgxUO, это не так сложно, как думают некоторые математики.

person Olathe    schedule 19.02.2013
comment
Где вы берете свои Большинство шифров просто XOR данных со знанием ключевого потока? Это верно для потоковых шифров, но есть и блочные шифры, которые так не работают. - person Paŭlo Ebermann; 19.03.2013

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

Что касается вашего вопроса: это односторонний хеш. Входные данные (независимо от длины) будут генерировать выходные данные фиксированного размера, которые будут дополнены на основе алгоритма (512-битная граница для MD5). Информация сжимается (теряется) и ее практически невозможно сгенерировать из обратных преобразований.

Дополнительная информация о MD5: он уязвим для коллизий. Я недавно прочитал эту статью, http://www.win.tue.nl/hashclash/Nostradamus/

Открытый исходный код для реализации крипто-хеширования (MD5 и SHA) можно найти в Mozilla code. (библиотека freebl).

person FL4SOF    schedule 01.12.2008

Мне нравятся всевозможные аргументы. Очевидно, что реальная ценность хешированных значений состоит в том, чтобы просто предоставить нечитаемые человеком заполнители для строк, таких как пароли. У него нет особого преимущества для повышения безопасности. Предполагая, что злоумышленник получил доступ к таблице с хешированными паролями, он / она может:

  • Зашешируйте пароль по своему выбору и поместите результаты в таблицу паролей, если он / она имеет права записи / редактирования в таблицу.
  • Сгенерируйте хешированные значения общих паролей и проверьте наличие подобных хешированных значений в таблице паролей.

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

person webi    schedule 23.09.2014
comment
Настоящая ценность хешированных значений заключается не в том, чтобы предоставлять заполнители, нечитаемые человеком. Если 'password1' хешируется в 'newval', разве это не скрывает значение аналогичным образом, хотя хеш читается и имеет смысл? Более того, пароли - это ПЛОХОЙ пример, потому что их НИКОГДА не следует хешировать. Если предположить, что злоумышленник имел доступ для записи в указанную базу данных, это определенно возможно. Однако кажется, что вы просто отказываетесь от правильного использования таких хеш-функций, один пример приведен во многих ответах выше - целостность сообщения. Собственно, это причина, по которой я сегодня нахожусь в этой ветке. - person Shane; 04.10.2016