Двойная безопасность хеширования - PullRequest
3 голосов
/ 04 августа 2009

Мой первый вопрос: я слышал, что хеширование строки 2 раза (например, sha1 (sha1 (пароль))), потому что второй хэш имеет фиксированную длину, верно ли это

Мой второй вопрос: что безопаснее? (var1 и var2 - две строки):

  1. sha1 (var1 + sha1 (var2))
  2. sha1 (var1 + var2)

Если это 1-й, стоит ли это стоимость исполнения?

Ответы [ 8 ]

10 голосов
/ 04 августа 2009

Хэшируя строку дважды, вы увеличиваете риск столкновений, что плохо с точки зрения безопасности.

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

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

2 голосов
/ 04 августа 2009
  • sha1 (var1 + sha1 (var2))
  • sha1 (var1 + var2)

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

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

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

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

0 голосов
/ 04 августа 2009

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

Но важнее, чем множественный хеш, использование соли необходимо для большей безопасности.

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

0 голосов
/ 04 августа 2009

Будет ли var1 + var2 таким же в ожидаемой ситуации? Я имею в виду, первое предложение в этом случае должно быть в порядке, так как вы избежите столкновения хэширования. О том, что стоит затрат, на этот вопрос вы должны ответить. Избегает столкновения стоит затрат.

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

0 голосов
/ 04 августа 2009

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

0 голосов
/ 04 августа 2009

Использование только одной соли без соли позволяет легко ее решить.

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

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

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

0 голосов
/ 04 августа 2009

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

0 голосов
/ 04 августа 2009

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

...