За последние 24 часа нас посетили 22366 программистов и 1637 роботов. Сейчас ищут 922 программиста ...

Bcrypt

Тема в разделе "PHP для новичков", создана пользователем donvasin, 6 июн 2014.

  1. donvasin

    donvasin Новичок

    С нами с:
    29 апр 2014
    Сообщения:
    25
    Симпатии:
    0
    Привет!
    Пароль шифрую в базу с помощью функции crypt() на php

    Примерно вот так:

    Код (Text):
    1. $hashed_pass = crypt($pass, $salt);
    Но при вводе пароля, достаточно набрать 8 первых символов, чтобы тебя пустило на сайт.

    В чем ошибка? Или, я вроде где то читал, это зашито в сам crypt()?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    какой у тебя salt и какой длины результат ?

    Добавлено спустя 1 минуту 50 секунд:
    http://docs.php.%6eet/manual/ru/function.crypt.php
    вот была тема близкая: viewtopic.php?f=13&t=47470&p=377094&hilit=blowfish#p377055
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Юзаю алгоритм Whirlpool, не знаю проблем и печалей :) Что и Вам советую.
     
  4. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    В $pass что-нибудь подмешиваешь?
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Эм..подсоливание это как бы само собой разумеющийся процесс. Еств подмешиваю :) С солью-то вкуснее, чем вовсе без нее. Хоть вирпулл и силен, но от словарного перебора только соль помогает.
     
  6. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    То, что хэш солится я и так вижу...

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

    Добавлено спустя 8 минут 57 секунд:
    Хотя не только у меня одного...
    http://stackoverflow.com/questions/11801169/what-is-tha-max ... t-function
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хэш солится? Зачем солить хэш? И гже ты "и так видишь"? То что крипт хранит соль в хэше не значит, что хэш солится)))))))) Солится пароль, потом хэшируется. Просто для удобства, потом соль с хэшем в одну строку пишутся.
    Ну это и есть "посолить пароль". Внесение случайной последовательности символов:
    1) Ломает словарный перебор;
    2) Крайне затрудняет прямой перебор;
    3) Радужные таблицы идут лесом; (которых для того же вирпула, вроде и нет в природе)

    Обрезание входящих строк - ну это уже к документации конерктного алгоритма.
     
  8. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ну такое, давай не будем вдаваться в вопросы терминологии, все равно понял о чем я. Не понял? ... Кароч, пароль он и в африке пароль, так что солится ли пароль - тоже еще тот вопрос. Сама соль на пароль никак не влияет, а вот на хэш влияет, поэтому я придерживаюсь мнения, что солится хэш.

    Ноуп... Функция crypt вторым параметром не зря принимает именно $salt (переводим транслейтом "Salt" => "Соль"), так что я бы придержался мнения, что не в $pass нужно писать соль. Можно, конечно, что-то приписать к хэшируемой строке, но тогда может получиться что-то вроде вопроса ТС...
     
  9. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Следует добавлять "набора хешей". Ибо один единственный хеш соль не защищает. Разве что от радужных.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все смешалось, люди кони... Придерживайся любого мнения, но когда ведешь диалог, придерживайся общепринятой терминологи, будь добр.

    Солят именно пароль. Солить = добавить соль к данным. Потом от просоленного пароля снимают хэш. Солить хэш = добавить соль к хэшу. Семантика такая семантика.
    Ептьс))) Ты спросил, солю ли я $pass у вирпула. Я сказал да. Потому что вирпулл НИКАК не связан с функцией crypt :)

    Так что я - солю пароль перед хэшированием.
    Для crypt это делать не обязательно. И, более того, параметр $salt для crypt - не просто строка. Соль тут определяет алгоритм, по которому будет вестись хэширование. n начальных байтов соли - служебные. Указывают не только алгоритм, но и, к примеру, количество проходов, либо позволяют настроить каике-то тонкости конкретного метода хэширования. По сему опять же - курите доки, там все написано.
     
  11. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Поясни пожалуйста... Я тебе аргументировал, почему я сказал именно "Солить хэш"

    ??? Где я у тебя такое спросил? Я у тебя вообще ничего не спрашивал)))
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Солят именно пароль. Солить = добавить соль к данным. Потом от просоленного пароля снимают хэш. Солить хэш = добавить соль к хэшу. Семантика такая семантика. Ты же когда еду солишь, не придерживаешься мнения, что ты посолил свои фекалии, на которые, на уровне химического состава, это тоже, отчасти, влияет? Так и тут. Солишь именно то, на что соль падает. А не то, что потом получается.

    Добавлено спустя 59 секунд:
    ок.

    1)
    2)
     
  13. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    ))) Вот оно - ЭГО!))) Ты не думал, что я у ТС мог спросить?)))
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Просто как-то на форумах принято, что если пост без обращения, то он адресуется автору предыдущего поста. Если с обращением, то тому, к кому обратились. Даже не принято, а является естественным и логичным положением дел. Эго тут не при чем. А то так можно и через 10 страниц к кому-то обращаться, как бы подразумевая это, но никому об этом не говоря.
     
  15. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Ааа... Ну буду знать)) Ок, ес-ес))
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Так вот - геморройный "этот ваш бкрипт".
     
  17. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Иногда Whirlpool будет излишним.
    Using a Whirlpool encryption might be overkill—especially since managing a 512-bit string is a little bit ungainly.
    Главнее всего тут аргумент "СОЛЬ", а если будет соль и никто не будет видеть исходников, то Whirlpool будет лишним.
    В таком случае можно и обойтись просто sha1 с тем - же 512 битом, хотя и 160ки хватит + соль = счастье.
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ды как сказать. Он есть не просит, так что меня все устраивает.
     
  19. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Путаете соль и секретный ключ. Используйте профессиональную терминологию.

    Для тех, кто "не осилил" добавили password_hash в 5.5
    Понимаете, между просто хеш функцией и функцией хранения пароля есть одна огромная разница - время вычисления. Хеш функции не ставят задачей замедлить вычисление, более того - чем быстрее считается, тем лучше. Для хранения паролей же важно повышать время вычисления. Кроме того, неплохо бы, что бы хеш-алгоритм использовал много памяти и вообще плохо поддавался подсчету с помощью специального железа, и Whirlpool, как алгоритм AES семейства таким не является.
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Понимаете, функция хранения пароля - это просто обертка над хэш-функциями, использующая N байт отдельно указанной соли в качестве руководства к действию, как то - выбор алгоритма и "стоимость рассчетов". Где эта самая стоимость указывается в виде количества итераций. Для того же blowfish, к примеру, если не ошибаюсь, в виде степени двойки. Все равно, что сделать, к примеру 1000000 итераций тем же вирпулом.
    Слово "блочный" сразу делает Whirlpool алгоритмом "AES семейства"? И да, если дам захешированную им строку, найдете коллизию? Ну так, чисто чтобы сферические кони проскакали мимо.
     
  21. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    И вы делаете много итераций? Тогда молодец. Но я, почему-то, уверен, что не делаете, а ограничились hash('whirlpool', $string).
    И bcrypt - не совсем обертка, это самостоятельные алгоритмы, которые за базу берут известные криптографические. Например, Blowfish и crypt_blowfish - разные вещи, первый вообще ни разу не хеш алгоритм.
    А так да - это удобная обертка для генерации хеша нужной вычислительной сложности с заданным алгоритмом. Так что не знаю, чем он гиморойнее вашей поделки на базе Whirlpool.
    Во-первых, причем тут коллизии? Во-вторых, он семейства AES - из этого не делается секрета, как и из того, что один из авторов Whirlpool так же участвовал при создании AES. Читайте интернеты, там все написано. Ну и в третьих - я не занимаюсь подбором пароля, так что у меня нет ПО, считающее Whirlpool на GPU.
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Функции хранения паролей - это просто хоть какой-то способ привить нормальное хэширование паролей сообществу разработчиков. Определенный процент которых не стыдится до сих пор открытые пароли в куках хранить. А чо, работает же! Потому и попробовали стандартизировать механизм. Так-то и сессии можно свои организовать без проблем. Они простые как два пальца. Но, чтобы люди не стреляли в ногу, их стандартизировали. Но это не значит, что все, кто юзают не стандартные сессии, а свою реализацию, основанную на других подходах - дебилы.

    Лично для меня crypt не геморроен, просто я сделал свой выбор в пользу вирпула, исходя из определенных причин. Другое дело, что об этот crypt уже столько народу голову порасшибало, что мама дорогая. Ибо надо курить много доки. А на это нет времени, потому что надо кодить!!!111один!!1раз. Как-то так. С новой функцией в 5.5, надеюсь, станет все так же прозрачно как с введением сессий. Ну, более менее.
     
  23. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Угу, классическая отмаза на уровне классического же анекдота - "некогда инструкцию читать, лес валить нужно".
    Можно один вечер не попить пифка, а повысить свой профессиональный уровень на эту тему и пользоваться дальше всю жизнь.

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

    donvasin Новичок

    С нами с:
    29 апр 2014
    Сообщения:
    25
    Симпатии:
    0
    Немного запутался в ответах, но постараюсь описать, солю не пароль, соль указываю вторым параметром к функции crypt(), чтобы она генерировалась не случайно, а задавалась скриптом и хранилась в базе данных.

    Солить сам пароль в данной ситуации смысла не вижу, факт остается фактом, crypt() у меня принимает только 8 символов первые.

    Собственно вопрос, у всех так или я туплю?)))

    Чтобы еще понятней было, сейчас вот так(пример):

    Код (Text):
    1. // рега
    2. $pass = 'pass123456';
    3. $salt = 'wRD1dfghTu124Fsdg12dfFf452fggDfgdDfwe';
    4. $hashedpass = crypt($pass, $salt);
    5.  
    6. //вход
    7. $pass = $_POST['pass'];
    8. $hashedpass = crypt($pass, $salt_from_mysql);
    9. if($hashed_pass == $hashed_pass_from_mysql) return true;
    Так вот true возвратит уже если в $_POST['pass'] будет содержаться 'pass1234'
     
  25. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Эмнямням... А какому из алгоритмов шифрования соответствует ваша соль? Что возвращает crypt? Длина хеша короче 13 символов?