За последние 24 часа нас посетили 16809 программистов и 1647 роботов. Сейчас ищут 850 программистов ...

Хеширование паролей - как лучше и безопаснее это сделать?

Тема в разделе "Подворотня", создана пользователем eldor, 7 дек 2013.

  1. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Хм, я всегда думал, что если хакнули ваш код, то никто не будет дешифровать вашу БД, - просто внедрят одну строчку кода и получат все (или почти все) пароли за месяц-другой.
    100% гарантию может дать только одно существо во Вселенной. Но я не знаю ни одно человека, кто получил такую гарантию.
    Цель любой защиты, это увеличение стоимости её преодоления до такой степени, что оно становится невыгодным. Остальное - от лукавого.
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

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

    Именно так. Вот вы это и не делаете. Т.е. из-за недальновидности, инертности или еще чего, не знаю, не делаете совершено банальнейших копеечных вещей, которые могут осложнить жизнь злоумышленникам очень прилично.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    я в игноре видимо
     
  4. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Да не стоит. Понятно, что MD5(string(4-8)) вскрывается легко простым перебором, об этом спору нет. Не стоит тратить время на это.
    Тут-то спор идёт не о том, что MD5 нельзя вскрыть принципиально, а о том, что MD5(string) достаточен для создания хеша паролей юзеров, чтобы хранить их в БД. Естественно, string должен быть достаточно сложен для этого. При этом аргумент противников MD5, что он быстро просчитывается, уже не катит. Второй аргумент, что если хакнут исходники, то получат алгоритм и быстренько просчитают MD5 по нему, уже более серьёзен.
    Как-то так...
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    У тя слишком крутая видюха просто =) У меня вот две в сумме даже 700 не вытянули.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Тема доставила! :D Приятно видеть как умные интеллигентные люди готовы убить друг друга и помочиться на труп.
    Ради Правды, конечно же.
     
  7. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Спор не порождает истины, но полезен для ума ;)

    Добавлено спустя 15 минут 12 секунд:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    Не совсем правильная аналогия. Скорее так: есть две двери - одна ведёт к коду, другая к БД. За второй (БД) дверью есть сейф (хеш-код), а ключ от этого сейфа лежит за первой дверью. Как-то так.
    Повторюсь, что если хакер получил доступ к коду, то он в любом случае получит то, за чем пришёл, тем или иным способом. Суть хранения хешей в БД в том, чтобы сильно осложнить получения паролей юзеров тому, кто стырил только БД. При получении доступа к исходникам, толку от них мало, каким бы крипто-алгоритмом их не создавали.

    п.с. Вообще, я далёк от хакерства и вполне могу не знать на сколько для них всё это сложно. Моё IMHO это просто опыт и знания разработки ПО.
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Это ваше предположение. Закладки в коде легко находятся. И вот вам хеш
    $5$rounds=5000000$0123456789ABCDEF$IzlBiJZRhAnEbj7g9uwzTOKpFPkTCzCSSNfgi7/Hr/A
    Соль тут известна - 0123456789ABCDEF, пароль - 5 знаков A-Za-z0-9. Никаких подмешиваний и изменений исходного пароля. Попробуйте подберите.

    Добавлено спустя 6 минут 33 секунды:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    Да лана, чо мелочится. Вот вам трехзначный(!) пароль $5$rounds=7000000$0123456789ABCDEF$IzVTeXkbiqiykCX01Xqp.fM.7421TMC32zlcuyqUryC
    Вперед, всего 3 знака.
     
  9. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Это для меня? Если да, то - не, я и простой MD5 вскрыть не могу, а уж тем более SHA256 с 5 млн. итераций. Я ж написал - я не хакер и далёк от них. :)
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    А чо вскрывать то? Простой перебор на PHP можете же написать? Проверять стандартно, как в документации
    Код (Text):
    1. if (crypt($test, '$5$rounds=7000000$0123456789ABCDEF$IzVTeXkbiqiykCX01Xqp.fM.7421TMC32zlcuyqUryC') === '$5$rounds=7000000$0123456789ABCDEF$IzVTeXkbiqiykCX01Xqp.fM.7421TMC32zlcuyqUryC')
    - совпало, в $test верный пароль

    Добавлено спустя 9 минут 15 секунд:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    Ну если не хотите, я вам просто объясню фишку. Он считается 3 секунды. Трехзначный пароль A-Za-z0-9 - это 238 тыс. комбинаций. Это 8 дней. Трехзначный(!) пароль.
    Понятно, что процессоры не стоят на месте (хотя, последнее время, почти стоят), именно по-этому в crypt для blowfish и sha алгоритмов заложено масштабирование. Вот выше sha алгоритм, там rounds=7000000 - по сути затраты на вычисления. Я поставил 7 мил, поддерживается до 999 мил.
    Понятно, что пароли 123 уязвимы много сильнее. И в принципе если вы хотите подмешивать секретный ключ - ради бога. Чуть повысите безопасность, если сольют только базу. Чуть понизите совместимость, ибо чистый crypt - он у всех один, можно на одну базу паролей посадить несколько приложений не внося в них изменения. Ну это разработчику решать. Но лишь как второстипенная защита.
     
  11. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    В PHP? Что-то не хочется, учитывая что этот crypt() делает ~1 млн. итераций в секунду. :)

    Добавлено спустя 4 минуты 22 секунды:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    По сути, crypt() делает то же самое, о чём я писал выше - создаёт сложную string. Итерации это один из способов как её создать.
     
  12. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Разница лишь в том, что crypt ее никуда ничего прячет - вы хоть сейчас можете пойти и почитать исходники - что именно она делает. А вы пытаетесь во главу стола поставить именно скрытность.
     
  13. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Разница есть - при регистрации/логине ~1 чел/сек твой cript положит сервер.
     
  14. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Это ты так пошутил? Круто, чо ;) Если у меня будет каждую секунду регистрироваться или даже регистрироваться + авторизоваться пользователь - у меня будет далеко не один сервер. Просто потому, что есть много куда более затратных вещей. И crypt будет все-равно будет меньше процента.
     
  15. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    а чем обычный мд5 вам не подходит?
     
  16. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Да ничего крутого, - достаточно пары тысяч посетителей, которые вдруг решили залогинеться в течении часа. А пара тыс.посетителей в часы пик это даже не средний уровень.
    Зависит от. Но точно понятно, что твой crypt потребует отдельный сервер уже при 1 логине/сек в пиковые минуты. Иначе не сервер, а "черепаха". :)
     
  17. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Хороший вопрос!
     
  18. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    ну не модно уже
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    ну это один поток на одно ядро. всё не так просто работает.

    Добавлено спустя 1 минуту 6 секунд:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    мд5 плох тем, что его вроде как сводят к меньшему набору битов на перебор. что еще более ускоряет процесс.
     
  20. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Угу, делать им нехера было, вот они все побежали логинится ;) Фантазер.
     
  21. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    А вообще, кстати, такое чувство, что никто не пытался защищать трафик при авторизации. Я этим вопросом озадачивался однажды, когда в 2010 году делал для души аналог твиттера. Я использовал js-библиотеку md5 для хэширования пароля до отправки на сервер. Есть реализации и для blowfish. Это та ситуация, где md5 применительно к обычным паролям пользователей (буквы + цифры, 6-8 символов) сильно уязвим.
    [​IMG]
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    поэтому http2.0 тотально https =)
     
  23. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Да, действительно не всё так просто, crypt($test, '$5$rounds=7000000$0123456789ABCDEF$IzVTeXkbiqiykCX01Xqp.fM.7421TMC32zlcuyqUryC') ~6 секунд на поток на Core i7 3.4Gh, 8 потоков - 1.25 логинов/с на процессор.

    Добавлено спустя 7 минут 26 секунд:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    Ты не понял. Если у тебя в сутки в среднем логинется 0.3 чел/сек (~25 тыс/сутки), то в часы пик будет в 3 раза больше. Я не могу сказать сколько должно быть зарегистрированных юзеров для 25 тыс.логинов в сутки, то это точно не крупный проект - там их заметно больше.
     
  24. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    А вы не путаете логин и автологин по сессионной куке? Вы рассуждаете про такого сферического коня сами знаете в чем, что ясно дело всерьез с какими-то цифрами что-то доказывать... ну я точно не буду.
    Не нравится секунда - поставьте 0.5, или 0.2. На 0.2 обычный пятизначный пароль будет лет 5 подбираться. Я же вам общую идею показал, а дальше уже сами думайте - сколько процессора вы готовы отдать и сколько за будут эти пароли подбирать.

    Добавлено спустя 3 минуты 13 секунд:
    Re: Хеширование паролей - как лучше и безопаснее это сделать?
    Проблемы тут банальны. JS реализация - медленная. Значит серьезных расчетов не сделаешь, значит подбираться это будет быстро. В общем идея то хорошая, но много проще и эффективнее решается через https. Ну разве что денег на сертификат.
     
  25. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хеширование паролей - как лучше и безопаснее это сделать

    Про общую идеею понятно.