Нестандартный способ защиты паролей

На самом деле, в том же интернете можно найти множество различных способов защиты паролей, хранящихся в базе (например MySQL). В данном посте же будет рассмотрен тот способ, который мне показался достаточно стойким к взлому.

Немного теории о защите паролей

Очень часто, при написании сайта может возникнуть вопрос — «Как же защитить конфедециальность данных пользователя?». Единого ответа тут быть разумеется не может, но есть ряд способов, применяемых по ситуации. В данном посте мы рассмотрим лишь те, которые подходят для применения непосредственно в самом движке сайта, и мешающие удачливому хакеру, умыкнувшему у нас дамп базы получить пароль от «root» (или administrator, кому как больше нравится), получая тем самым все права и привелегии.

  • Способ №1. Мы можем просто-напросто прогнать пароль через хэш-функцию при регистрации, и затем записать результат в базу. У этого способа есть один недостаток — при использовании распространеного хэш-алгоритма (например md5 или sha 1) хакер может воспользоваться декриптором, который выдаст ему исходный пароль.
  • Способ №2. Никто не мешает нам использовать хэш-алгоритм дважды. То-есть, мы хэшируем по сути хэш. Это значительно усложняет жизнь взломщику, но все равно не дает 100% гарантии.
  • Способ №3. Шифрование с «солью». У этого способа существует множество вариаций, но смысл остается один — во время шифрования помимо исходного пароля используется также и уникальная для каждого пользователя последовательность символов.
Алгоритм

Предлагаемый мной алгоритм основан на втором и третьем способе.
  • Для понимания введем некоторые обозначеня:
  • $pass — исходный пароль;
  • md5() — шифрование при помощи алгоритма md5.
  • sha1() — шифрование при помощи sha1 соответственно.
  • $varible — переменная, учавствующая при генерации пароля.
  • $hash — получаемый в итоге хэш, который и будет записан в базу.

Итак:
  1. 1) $hash = md5($pass);
  2. 2)генерируем $salt0;
  3. 3) $hash = md5(sha1($hash).sha1($salt0)) — хэшируем $hash с солью $salt0;
  4. 4)генерируес $salt1;
  5. 5) $hash = sha1(md5($hash).md5($salt1));

И так продолжаем, пока наша параноя не исчезнет. Теперь небольшой разбор полетов.

  • 1) Соль. Ее можно генерировать по определенным законам и формулам, в зависимости от логина/пароля или времени регистрации пользователя например. А можно генерировать случайным образом, но тогда все $salt придется сохранять в базу, что не очень рационально или удобно. Это одна из слабостей данного алгоритма.
  • 2) Многоразовое хэширование действительно будет влиять на скорость обработки пароля. Соответственно, чем больше раз мы хэшируем исходный пароль, чем больше «солей» мы используем, — тем медленнее работает наш алгоритм.
  • 3) Реальная криптографическая стойкость данного алгоритма на самом деле более чем спорна. С одной стороны, взять его методом грубой силы представляется слабо возможным, засчет многоразового шифрования и использования соли. С другой стороны, а данном случае непредсказуема вероятность колизии, что представляет достаточно высокую опасность.

На самом деле данный алгоритм не претендует ни на что. Просто это один из вариантов защиты от взлома, который можно попробовать, и предложить знакомым взломщикам попробовать его взломать.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.