- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
function makehash($str,$salt='',$strength='08'){
if (!$salt):
$salt = "";
for ($i = 0; $i < 22; $i++) {
$salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);
}
endif;
return crypt($str, "$2a$".$strength."$".$salt);
}
Любой нормальный человек пошлет таких умников шифровать что-нибудь другое.
Смысл же использования пропадает. Как бы бкрипт может получив существующий хеш и пароль вернуть новый хеш, который, если совпадет с существующим хешем будет свидетельстовать о том, что исходный пароль был таким же. Но для этого нужно чтобы бкрипт выполнялся в условии запроса.
Можно сделать по-другому, и хранить хеш, например, в базе, или в коде ПХП, но тогда весь смысл задумки теряется, и бкрипт превращается в обычный мдп5 примененный Х раз, или что-то типа того.
Эээ по логину?
Я чот нифига не понял, что ты имеешь в виду. Ты хочешь хранить в базе плейнтекст, а потом его бкриптить?
>Можно сделать по-другому, и хранить хеш, например, в базе, или в коде ПХП, но тогда весь смысл задумки теряется, и бкрипт превращается в обычный мдп5 примененный Х раз, или что-то типа того.
Ну в этом и есть смысл бкрипта :)
Т.е. хеш генерируемый бкриптом выглядит так:
мэджик, сколько раз запускать алгоритм, соль, результат.
Когда мы хотим узнать совпадает ли пароль, мы берем готовых хеш, вытаскиваем из него соль, хешируем новый пароль с той же солью, и если сошлость, то все круто. Но соль эту не имея хеша нам не получить. Или можно забить на эту уникальную возможность, и использовать соль одну на всех. Но тогда это скорее повышает уязвимость.
1. SELECT hash FROM db WHERE username=%username%
2. Вычленяем соль.
3. Хешируем введенный пароль с солью из п.2.
4. Сравниваем хеши.
Кроме того, это значит, что восстановление информации об учетке по паролю таки потребует выгрести все пароли из базы.
Можно хоть один сайт, который такое умеет? Обычно же наоборот, все сбрасывают пароль, зная что-то об учетке ;)
> если не хочется людей желающих чтобы их звали koljan77 ограничивать в выборе юзернеймов
А если они внезапно установят одинаковый пароль, то писать "извините, у другого Василия Пупкина уже используется такой пароль"? Нахуй, нахуй, такие наркоманские схемы... Имхо в таких случаях проще сделать уникальное поле login + неуникальное поле display name, чем заставлять юзера использовать только сгенеренные сервером пароли.
Время от времени появляется какая-нибудь однокласница, которой срочно нужно показать свои фотографии, вот и приходится вспоминать то ник, то пароль...
Гмаил тоже так умеет. И ФБук тоже.
Про пароль - я бы кстати тоже что-нибудь такое придумал, чтобы разрешать использовать одинаковые пароли. Например, дату добавлял в соль, и с ней генерировал запись. Просто если человек потом выяснит, что с его именем никто не зарегистрирован - тоже некомильфо получтися.
В Скайпе как правило с одним и тем же ником по 100500 человек.
Искать юзера по паролю?
Ну вылогинился, нажал кнопочку "забыли свое имя пользователя?", предлагает ввести запасное мыло или фио, указанное при регистрации. Ткните носом, где можно узнать учетку по паролю...
P.S. Поиск учеток по паролю это не просто дыра в безопасности, это самое настоящее goatse. Вводим 123456 и другие простые пароли и имеем учетки ;) А если не дают выбрать конкретную учетку - то имеем отличный способ завалить кучу людей спамом от сервака ;)
> В Скайпе как правило с одним и тем же ником по 100500 человек.
Ну так display name != login.
А то. Нормально спроектированная система просто не в состоянии найти двух пользователей с одним паролем.
В идеале пароли в плейнтексте вообще должны быть только на стороне клиента во время их ввода ;)
Для взаимной аутентификации клиента и сервера - да. В общем случае - нет, всех задач PKI оно не решает.
- Как с помощью SRP ты сможешь проверить, что сервер того же paypal это именно сервер paypal, а не китайская подделка, если ты на нем еще не зареган?
- Как ты будешь использовать SRP для цифровой подписи?
- Как сервер сможет проверить, что ты Вася Пупкин, а не просто некто, зерегистрировавшийя с верификатором b84a2f6fd141?
3. Вылезти из монитора и посмотреть на меня?
2. А кому она нужна, по крайней мере, при аутентификации (какое слово хреновое) юзера?
Кстати, кто-нибудь в курсе - почему его упорно не добавляют в реализации SSL? Есть какая-то полуебошная реализация в OpenSSL, которую я толком и не смог настроить.
Да причем тут утечка... Кому нахуй сдался мой пароль в духе xK#6nB9Rt, уникальный для каждого сайта? Проблема в том, что можно залететь и зарегаться на фейковом сервере и работать с ним даже не узнав об этом (и в результате просрать кредитку, персональные данные и т.п.). Эту проблему SRP не решает. Зато сейчас ее более-менее решает PKI.
> А кому она нужна, по крайней мере, при аутентификации
При аутентификации не нужна. Для заверения всяких доков и писем нужна. Если тебе что-то нинужно, это не означает, что это не нужно никому.
> 3. Вылезти из монитора и посмотреть на меня?
Сходишь в ближайший к тебе филиал какого-нибудь УЦ, получишь сертификат. И его будут принимать все серваки, которые доверяют данному УЦ.
Так что не надо так категорично выпиливать PKI отовсюду ("Заодно и PKI станет ненужно"). Парольная аутентификация юзера это ж далеко не единственная задача криптографии...
> Кстати, кто-нибудь в курсе - почему его упорно не добавляют в реализации SSL?
Х.з. если честно. Вроде и бы не патентовано, и алгоритм простейший.
У SRP есть еще один неприятный момент - он не работает с эллиптическими кривыми.
Да там вроде только возведения в степень, умножения да сложения... Все эти операции вполне выполнимы и над точками эллиптических кривых, так что, мне кажется, можно портануть.
Или есть статьи, в которых доказывается, что нельзя?
Вот тебе ECSRP :)
http://grouper.ieee.org/groups/1363/passwdPK/submissions/p1363ecsrp.pdf
На кривые портируется DH, а в SRP есть сложение/вычитание по модулю простого числа.
ECSRP разве стал стандартом? На SSL-SRP есть RFC и то его не реализовывают, а это еще лет 100 мутить будут. http://crypto.stackexchange.com/questions/6519/can-srp-be-used-with-elliptic-curves (синего цвета нет, как бебекот панель добавить в прыщелисе или в userjs?)
https://groups.google.com/forum/#!msg/sci.crypt/DVSWBTKSVsg/nCGrwSnejuAJ тут какая-то дискуссия 97 года.
Да нет не преподавали, сам учил... И судя по тому, что спутал поле с группой - выучил криво ;) Спасибо за ссылку.
> ECSRP разве стал стандартом?
Да на него я даже RFC не нашел.
>спутал поле с группой
и криктографию с алгемом
Мне физически больно это читать.
Конечно, ведь там как минимум одной запятой нет.
Юзать готовые алгоритмы и протоколы, понимая в общих чертах как это все работает мне это не мешает.
А я когда-то знал, что из них что (в институте проходили), но уже забыл. Все что не юзаешь быстро забывается...
Про Гмаил знаю, потому что так восстанавливал.
Гмаил разный в разных странах, так что тут я не помощник. У нас теперь регистрация без номера телефона вообще не возможна (у меня раритетный акк, в котором телефон не требуют).
Я про это.
http://postimg.org/image/wyb68h7ct/
http://postimg.org/image/5jbbv5uu9/
Именно, логин. Опять же, я скайпом пользуюсь раз в пару месяцев, и использование всегда начинается с восстановления пароля.
Фейсбук - точно так можно, у меня есть несколько аккаунтов с одним именем, еще со времен когда чат для него делали.
Как теперь должен поступать сервер в момент входа одного из этих юзеров? ;)
Я раньше :)
http://govnokod.ru/13916#comment199026
>Кроме того, это значит, что восстановление информации об учетке по паролю
Вы не можете выбрать этот пароль, т.к. его уже выбрал пользователь vasya127. Выберите другой.