Стоит ли предпочесть алгоритмы хеширования с более длинными выходами для хранения паролей? - PullRequest
0 голосов
/ 14 сентября 2011

Я создаю сайт, где безопасность важна (опять же, когда это не важно?), И я искал лучший способ хранения своих паролей.Я знаю, что у MD5 есть проблемы как с коллизиями, так и с SHA-1, поэтому я пытался сохранить свои пароли с помощью SHA-256 или SHA-512.к меньшему?(т. е. 512 против 256) Требуется ли значительно больше времени для взлома пароля в кодировке SHA-512 по сравнению с паролем в кодировке SHA-256?

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

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Для хранения пароля вам нужно больше, чем простая хеш-функция; вам нужно:

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

Так что вам нужно bcrypt .

Для точки размера выходного хеш-кода: если этот размер равен n бит, то n должен быть таким, чтобы злоумышленник не смог реально вычислить хеш-функцию 2 n раз; Для этого вполне достаточно 80 бит. Выход 128 битов, таким образом, уже избыточен. Вы по-прежнему не хотели бы использовать MD5, потому что он слишком быстрый (хотя 100000 вложенных вызовов MD5 могут быть достаточно медленными), а также потому, что в MD5 были обнаружены некоторые структурные недостатки, которые напрямую не влияют на его безопасность для хеширования паролей, но, тем не менее, плохие отношения с общественностью. В любом случае, вы должны использовать bcrypt, а не самодельную структуру.

0 голосов
/ 17 сентября 2011

Некоторые ответы здесь дают вам сомнительный совет.Я рекомендую вам перейти на IT Security Stack Exchange и выполнить поиск по "хэшированию паролей".Вы найдете много советов, и многие из них были тщательно проверены людьми на обмене стека безопасности.Или вы можете просто послушать @ Томаса Порнина, который знает, о чем он говорит.

0 голосов
/ 14 сентября 2011

Столкновения не имеют отношения к вашему сценарию, поэтому слабые стороны MD5 не имеют значения.Однако самое главное - использовать хеш, который требует много времени для вычисления.Прочитайте http://codahale.com/how-to-safely-store-a-password/ и http://www.jasypt.org/howtoencryptuserpasswords.html (даже если вы не используете Java, методы все еще действительны).

В любом случае я бы держался подальше от MD5, поскольку естьхэши, которые работают так же хорошо.

...