Hash Functions и хранение паролей, интересны мнения

kruglov

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

-~{}~ 11.12.07 11:00:

Повторяю, для хранения на сервере достаточо обычного md5
От количества повторений убедительности не прибавляется.

-~{}~ 11.12.07 11:03:

Вообще, нездоровая паранойя - это одно, а здоровая - другое.

Мне кажется, многие люди отстаивают какую-то точку зрения только потому, что сами по историческим причинам делают так - и теперь придумывают оправдания, почему. "Достаточно", "не нужно"...
 

Beavis

Banned
Автор оригинала: WP
Повторяю, для хранения на сервере достаточо обычного md5.
смотря от чего этот md5 !! если от простого пароля то есть немало шансов его разгадать
 

whirlwind

TDD infected, paranoid
А если не от простого пароля, то у чела читающего md5 есть такая же прекрасная возможность прочитать любой трафик и посмотреть на код, который шифрует на стороне клиента.
 

kruglov

Новичок
whirlwind
А если не от простого пароля, то у чела читающего md5 есть такая же прекрасная возможность прочитать любой трафик и посмотреть на код, который шифрует на стороне клиента.
Т.е. дверь запирать не надо, кому надо, тот и по башке владельцу даст и в квартиру войдет?
 

Wicked

Новичок
whirlwind
знание $salt и md5($salt.$password) дает все таки меньше, чем знание md5($password).
 

Nelius

кипарис во дворе
Из прочитанного, интересную идею увидел у Beavis с никами пользователей в качестве соли. Немного ее расширю, подправлю, у меня ник может меняться, так что использовать его недопустимо, как вариант использовать логин. Вполне себе неплохой способ, если использовать алгоритм преобразования пароля на основе соли. Если тупо делать $pass.$salt то толку в этом конечно нет.
В сторону crypt я тоже смотрел неоднократно но чет так и не отважился использовать, ибо смущал его DES по умолчанию, но думаю все же отважусь провести тесты с crypt, спасибо!

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

Рассмотрим возможные ситуации взлома:

1. Взломщик смог узнать хэш пароля. Хэш пароля генерится с использованием соли, следовательно подбор даст строку которая на самом деле не является паролем.

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

3. Взломщик каким-то образом смог узнать пароль, но так как соль уникальная такой же пароль будет иметь другой хэш.

Так вот, я считаю что при использовании алгоритма "соления" (а не простого $pwd.$salt) и при использовании strong hashing например sha512, наличие уникальной соли становится избыточным.
Я хотел узнать ваше мнение о том к правильному ли выводу я пришел?
 

Alexandre

PHPПенсионер
Пусть придумает себе пароль из 20 букв, навроде "vsem-privet-vot-eto-ya", посчитайте на досуге, кто из этих паролей безопаснее (этот или ваш 8-символьный)
есть разница 8 символов или не менее 8-ми?

-~{}~ 11.12.07 15:58:

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

-~{}~ 11.12.07 16:03:

1. Взломщик смог узнать хэш пароля. Хэш пароля генерится с использованием соли, следовательно подбор даст строку которая на самом деле не является паролем.
подбор маловероятен... такого хеша посто не будет в BD
2. Взломщик смог узнать хэш пароля и соль. Так как существует определенный алгоритм который на основании соли преобразует пароль, то даже если удалось узнать строку, которая была хэшированна, необходимо знать алгоритм ее построения на основе соли.

3. Взломщик каким-то образом смог узнать пароль, но так как соль уникальная такой же пароль будет иметь другой хэш.
мне кажется ты недопонимаешь процесс "соления"
 

whirlwind

TDD infected, paranoid
Автор оригинала: Wicked
whirlwind
знание $salt и md5($salt.$password) дает все таки меньше, чем знание md5($password).
Вопрос: Где хранится salt и где хранится код md5($salt.$password) ? Ответ: на стороне клиента. Если хакер читает хэш, то он прочитает и salt и порядок $salt.$password. Это решение проблемы для бота, а не для хакера.

Все это лишняя трата времени. Если цена вопроса велика, то

это решается банальным
https
 

kruglov

Новичок
Alexandre
есть разница 8 символов или не менее 8-ми?
Есть, но ваша система не даст мне сделать себе суперзащищенный и суперзапоминающийся (для меня) пароль в 20 символов без извращений типа обязательных заглавных букв.

-~{}~ 11.12.07 16:13:

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

Увеличивает безопасность хранение пароля в DES по сравнению с хранением plain-textом? Да.
В MD5 по сравнению с DES? Да.
В Blowfish / Sha по сравнению с MD5? Да.
В Sha с salt по сравнению с Sha без оного? Да.

Так какого хрена тут дискуссия, извините?
 

whirlwind

TDD infected, paranoid
kruglov

те, которые советуют salt не использовать, серьезно полагают, что они ничуть не выигрывают в безопасности по сравнению с plainttext и md5(password). Они наивно полагают, что только SSL, над которым работали не самые последние умы, может обеспечить должный уровень безопасности ;)

PS. Пардон, тока что заметил что господин kruglov упирает на хранение, а не на передачу.
 

Духовность™

Продвинутый новичок
Автор оригинала: dark-demon
> я, например, заставляю пользователей "выдумывать" пароль по сл. правилу

а может не надо заставлять, а? меня, например, очень раздражает такая вот "опека"..
ой как правильно!

меня это тоже безумно бесит. где мне надо, там я введу пароль такой, что б никто не догадался. а на каком-нибудь форуме малозначительном мне нужно иметь пароль 555 или 123. что бы не заморачиваться и вспоминать его.
 

Wicked

Новичок
Nelius
1) из короткого логина довольно хреновая соль получится, ага...
2)
1. Взломщик смог узнать хэш пароля. Хэш пароля генерится с использованием соли, следовательно подбор даст строку которая на самом деле не является паролем.
При хорошей соли он вероятнее вообще ничего не подберет. А если и подберет, то это будет коллизией. При плохой же соли и _хоть_что_нибудь_ подобрать легче, так еще это скорее всего окажется оригинальной строкой $salt.$password, а уж из них понять, что есть соль, а что есть пароль - не проблема.
3)
2. Взломщик смог узнать хэш пароля и соль. Так как существует определенный алгоритм который на основании соли преобразует пароль, то даже если удалось узнать строку, которая была хэшированна, необходимо знать алгоритм ее построения на основе соли.
нужно закладываться не на незнание злоумышленниками алгоритмов, а на все еще трудоемкость операции вычисления пароля (сопоставимую с брутфорсом), даже при знании соли и полученного хэша.
4)
3. Взломщик каким-то образом смог узнать пароль, но так как соль уникальная такой же пароль будет иметь другой хэш.
Ну для того юзера, для которого он узнает пароль, он уже получил доступ. Уникальные соли позволят при доступе к бд не увидеть там других юзеров, для которых подошел бы такой же пароль.

Пока что наиболее разумный способ соления я видел в проекте askeet (написан с использованием symfony), который оказался даже немного удобнее, красивее и переносимее, чем функция [m]crypt[/m](), которую я использовал до этого.

kruglov
+1 во всем
 

TutanXamoN

Новичок
Хранение в базе md5(md5($pass).md5($Unique_salt_per_user)),
передача паса через https с возможным солением до передачи ето всё отлично, но часто с разбором солей никто не заморачиваеться - будь пасс хоть трижды солёный на любом етапе передача/хранение/ввод гораздо уязвимей в етом всём есть пользователь за машиной.
А вообще давайте взглянём на задачу со стороны - для чего нужен пасс отдельного пользователя?
1. Компрометация пользователя на конкретном ресурсе (кто будет заморачиваться с солями если в 70% случаев получаем доступ к базе?).
2. Попытка использовать полученный пас на других ресурсах где зарегистрирован пользователь - тут вариантов побольше
-есть доступ к базе и часто скриптовой части (соль на раз отделяеться)
-пасс перехвачен в http пакете (несоленый - нет проблем, солёный до передачи,часто яваскриптом, - нет проблем есть маленькая задача на 10-15 мин)
-есть https с солением до передачи плюс использование уникальных механизмов и разных солей для передачи сравнения (вот тут уже посложней и проще взаимодействовать с пользователем : fake pages, e-mails, applications).

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

Учитывая любовь 90% пользователей к одинаковым паролям в большинстве случаев ищут самый дырявый узел на котором зареген юзер и пароль оттуда вводят в нашу мегазащищенную систему)

В идеале https+md5()+unique_salts везде : но даже в етом случае имеем дырку - пользователь.

Ето не призыв хранить пассы в plaintext но часто проблема хранения пароля на конкретном узле не решает задачу защищенности пользователя
 

Anarki

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

kruglov

Новичок
triumvirat
Соль - это такая фигня, которая добавляется к паролю перед шифровкой.
 

Alexandre

PHPПенсионер
Надежность шифрования должны обеспечивать ключ и криптостойкость алгоритма
я бы еще добавил - орг.тех. меры по хранению ключей

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

phpdev2007

Новичок
TutanXamoN
Все верно какие пароли не заставляй выдумывать пользователя, или какие соления не добавляй, все равно подбор возможен, и даже проще, тотже самый простой клавиатурный шпион, который шлет логи на определенный емаил получает пароль пользователя на ура, и при все возможных использования https
 

Nelius

кипарис во дворе
kruglov
Спасибо Вам за дельные советы.

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