Jump to content
  • 0

Шифрование юзерских паролей


Sserg-135
 Share

Question

24 answers to this question

Recommended Posts

  • 0

md5(md5($pass))

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

Link to comment
Share on other sites

  • 0

salt одинакова для всех паролей в пределах сайта?

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

А также (правда по довольно старым данным) алгоритма дешифрования md5 нет, есть возможность, зная хеш и оригинальный пароль (!) найти другую комбинацию символов, дающую такой же хеш, то есть реально при хранении учетных данных это существенной угрозы не представляет? Правда может уже что-то и изменилось?

Получается, что можно нагородитm что-то вроде sha1(md5($pass . salt))

:-)

Link to comment
Share on other sites

  • 0
А также (правда по довольно старым данным) алгоритма дешифрования md5 нет, есть возможность, зная хеш и оригинальный пароль (!) найти другую комбинацию символов, дающую такой же хеш, то есть реально при хранении учетных данных это существенной угрозы не представляет? Правда может уже что-то и изменилось?

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

Чтобы нельзя было определить одинаковые пароли можно сделать так:

$salt = createRandom5Bytes();
$hash = $salt . md5($pass . $salt);

как я понял из описания в Unix именно так пароли храняться.

Но, потом из базы получать неудобно поскольку мы $salt сразу не знаем и сгенерить хеш не можем, получиться такая ерунда:

SELECT * FROM users WHERE
login = 'login' AND
SUBSTRING(hash, 5, 32) = MD5(CONCAT('password', SUBSTRING(hash, 0, 5))

помоему это перебор, хотя хотелось бы услышать мнение специалистов.

Link to comment
Share on other sites

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

Ну от этого ни при каком алгоритме хеширования застраховаться нельзя, хоть md5, хоть sha1, вот salt разве что и поможет?

Link to comment
Share on other sites

  • 0

Подправил SQL запрос в своем сообщении, а то думаю про пароль, про него и пишу, а про логин то и забыл, в результате получился запрос, который по всей базе будет MD5 считать да еще и ищет пользователя не по логину, а по паролю, теперь должно работать.

Sserg-135, одна из целей использования salt как раз в усложнении пароля и увеличении его длины, чтобы проблематичней было подобрать, а какое это усложнение если из "password" получиться "password1", опять таки пример из моего предыдущего сообщения (после внесенной поправки конечно :)) вполне юзабелен.

rash, если соль случайная она приписывается, созданному хешу, к примеру, первые 5 символов соль остальное хеш, опять таки стоит посмотреть, что я нагородил в предыдущем посте, там как раз видно как это решается.

снова rash, так я и не сказал, что при какой-то из алгоритмов от этого защищает, иначе к чему возиться с солью.

Dimitry Wolotko, сейчас докачается гляну, что там к чему.

Link to comment
Share on other sites

  • 0

Посмотрел IPB, там такая система:

$salt = 5 случайных байтов от 33 до 126 за исключением 92

$hash = md5(md5($salt) . md5($password))

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

Можно рекомендовать это как наиболее подходящий ответ на вопрос топикстартера.

Link to comment
Share on other sites

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

Ну от этого ни при каком алгоритме хеширования застраховаться нельзя, хоть md5, хоть sha1, вот salt разве что и поможет?

Любой алгоритм можно грохнуть перебором или тупо брутом.

Salt не поможет при паролях типа 123456 - но в невообразимое количество раз увеличивает безопасность пароля, для примера, rabbitdontlikepizza. Его и md5() над?жно упакует, а с солью - так вообще - бункер.

Link to comment
Share on other sites

  • 0
Посмотрел IPB, там такая система:

$salt = 5 случайных байтов от 33 до 126 за исключением 92

$hash = md5(md5($salt) . md5($password))

с запасом сделано :) 64 бита подобрать едва ли выйдет

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

Можно рекомендовать это как наиболее подходящий ответ на вопрос топикстартера.

а salt в отдельной ячейке не натолкнет злоушышленника на это идею?

Link to comment
Share on other sites

  • 0

хех, ну раз пошли разглагольствования... да хоть crypt'ом шифруйте, главное никому не говорите КАК ИМЕННО зашифровано, не зная методики криптования паролей биться можно до посинения :)

Link to comment
Share on other sites

  • 0
хех, ну раз пошли разглагольствования... да хоть crypt'ом шифруйте, главное никому не говорите КАК ИМЕННО зашифровано, не зная методики криптования паролей биться можно до посинения :)

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

Основное правило криптографии?

Link to comment
Share on other sites

  • 0
а salt в отдельной ячейке не натолкнет злоушышленника на это идею?

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

Вместо этого можно не ложить все яйца в одну корзину и добавить к тому, что есть, еще один уровень безопасности, secretSalt, который будет храниться не в базе а в конфиге, тогда:

$hash = md5(md5($salt) . md5($password) . $secretSalt)

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

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

Читаю свои сообщения и волосы дыбом стают:

с запасом сделано :) 64 бита подобрать едва ли выйдет

какие биты? почему 64? зачем их подбирать? мозг создал строку, но забыл проинициализировать, поэтому в ней оказался разный мусор из памяти :)

Link to comment
Share on other sites

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

Основное правило криптографии?

Один достаточно знаменитый человек сказал "if it run - it can be defeated" © whistle2.gif не получиццо сделать вот такого :) никогда, уменьшить шансы взлома при знании алгоритма - да, но не обнулить их совсем

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy