Была одна книжка по криптографии, правда я от туда всего пару статеек прочёл, ИМХО(чтение книг вредно сказывается на глазах, читать надо только то, что действительно информативно и поможет в будущем) Ага, как-то задумывался над способом авторизации, кстати, паролем ничего, ни в коем случае, нельзя шифровать, тем более html !!!, его можно будет вычислить статистически после первой же страницы Имеется ввиду пакеты длиной больше длины пароля, можно рассматривать способ разбиения страницы на пакеты, перемешивания их и добавления в каждый предыдущий пакет, пароль к следующему. В этом случае о XOR-шифровании не может быть и речь, лучше обмен байта по коду символа пароля. Хотя тоже не очень надёжно и очень не экономично. Если надо защищать не пароль а страницы, то уж лучше ssl использовать.
Да так будет погиморойнее. Сам пароль будет скрыт от хакера, но впринципе при снифании ничего не мешает: 1)узнать те самые 256 байт от сервера и результат который мы получим от хэширования этих данных хешем паролем, если пароль не сложный и алогоритм хеширования пароля и данных не особо криптостойкий, то есть шанс узнать его, тут решающую роль играет алгоритм хэширования. 2)Что нам мешает перехватить результативный хэш, отправленый клиентом и находящийся в сессии у сервера и обратится с ним к серверу? Только ограничение по IP, но можно предположить, что имея доступ к трафику злоумышним может и подделать IP.
Мешает: 1) Время, это не 6ти и даже не 16ти-байтовую хэш брутить. 2) Этот способ защищает только от смены пароля и от повторной авторизации и обеспечивает сохранность пароля. Для полной сохранности, можно яваскриптом посылать последовательность действий пользователя и если она не совпадает с серверной, сессия сразу-же прерывается. Кстати, насчёт шифрования данных паролем, только-что придумал; можно на зашифрованный паролем блок данных(тот что использовался при авторизации) наложить несколько заранее известных масок и вычислить от каждой из них хэши(также очень желательно, чтоб длины шэший зависели от самих данных, например усекать их по контрольной сумме данных, а-то снова статистика ), затем этими известными только клиенту и серверу хэшами шифровать получаемые и передаваемые данные. ЗЫ Ладно, для маленького партальчика защита пойдёт
я прочитал про технологию создания сертификатов SSL, там при создании сертификата можно использовать 3 рандомных текстовых файла сжатых gzip тут уж точно невозможно никак угадать какие именно данные были в этих файлах а значит нельзя подделать сертификат. А если авторизация будет проходить как к примеру на хостинге агава: Доступ по SSL и авторизация на уровне HTTP-аутентификации. Можно ли при такой авторизации злоумышленику получить коды доступа или авторизоватся?!
Вот последние мысли по данной теме: При входе пользователя на страницу с формой авторизации создается сессия и рандомом генерируется код Captcha, в базу записываются данные Ip, Session_id, Captcha код, дата, время... Пользователь вводить Логин и пароль нажимает вход. Логин и пароль передаются обработчику уже в формате Md5. Обработчик сравнивает данные, Логина, пароля, скрипта от которого был подан запрос и сравнивает Captcha код который он берет из базы по Session_id. Если хоть один момент не верен то блок по Ip на минуту... Какие будут замечания по данному предложению?!
сделай свою ф-ию алгоритма хеширования пароля, к примеру: PHP: ............ $pass=null; $abc="abcdefghjkmnpqrstuvwxyz". "ABCDEFGHJKLMNPQRSTUVWXYZ"; $arr=explode(chr(32),trim(chunk_split($abc,1,chr(32)))); $size=count($arr)-1; for($i=0;$i<$PasswordSize;$i++) $pass.=$arr[rand(0,$size)]; // Создание пароля // Финкция "Шифровка пароля" function encrypt($s, $key) { for($i=0;$i<=strlen($s);$i++) $r.=substr(str_shuffle(md5($key)),($i % strlen(md5($key))),1).$s[$i]; for($i=1;$i<=strlen($r);$i++) $s[$i-1]=chr(ord($r[$i-1])+ord(substr(md5($key),($i % strlen(md5($key)))-1,1))); return urlencode(base64_encode($s)); } // -------------------------- $timed = date("YmdHis"); // Время регистрации $timef = date("d.m.Y H:i:s"); // Время регистрации для письма //+++++++++++++++++ $key = md5($timed); // КЛЮЧ Для Кодирования/Декодирования $s = $pass; $encrypted = encrypt($s, $key); // Кодирование пароля с ключом $passmd = $encrypted; //----------------- #$ucode = md5($_POST['email']); // Код для активации $umail = $_POST['email']; $ulog = $_POST['login']; ........... PHP: ................ // Функция Декодирования function decrypt($s, $key) { $s=base64_decode(urldecode($s)); for($i=1;$i<=strlen($s);$i++) $s[$i-1]=chr(ord($s[$i-1])-ord(substr(md5($key),($i % strlen(md5($key)))-1,1))); for($i=1;$i<=strlen($s)-2;$i=$i+2) $r.=$s[$i]; return $r; } $qe=mysql_query("SELECT pass,hash FROM users WHERE login='".$_POST['login']."' LIMIT 1"); $re=mysql_fetch_array($qe); if(mysql_num_rows($qe)) { $key = $re["hash"]; // КЛЮЧ Для Кодирования/Декодирования $encrypted = $re["pass"]; $decrypted = decrypt($encrypted, $key); // Декодирование пароля с ключом $pass = $decrypted; // ------- decode end --------- if ($_POST['pass'] == $pass) { ..................
Помогите настроить SSL?! Я уже с помощью Open_SSL и сертификаты создал... Поставил WEB сервер (на ОС Windows) Apache + PHP + MySQL + mod_ssl В Апаче прописал следующее: httpd.conf: Code: LoadModule ssl_module modules/mod_ssl.so <IfModule mod_ssl.c> Include conf/ssl.conf </IfModule> ssl.conf Code: SSLRandomSeed startup builtin SSLRandomSeed connect builtin <IfDefine SSL> Listen 192.168.110.197:443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLSessionCache dbm:logs/ssl_scache SSLSessionCacheTimeout 300 SSLMutex default <VirtualHost _default_:443> DocumentRoot "c:/sweb/home/system/www/ssl" ServerName system.ssl ServerAdmin [email protected] ErrorLog logs/error_log_ssl.log TransferLog logs/access_log_ssl.log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile conf/ssl.crt/server.crt SSLCertificateKeyFile conf/ssl.key/server.key <FilesMatch "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "C:/sweb/home/system/www/ssl"> SSLOptions +StdEnvVars AuthType Basic AuthName "By Invitation Only" AuthUserFile c:/sweb/usr/local/apache2/conf/passwd.txt Require valid-user </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> </IfDefine> В чем проблемма?! не идет загрузка =(
[off]Дельная была идея сделать wiki для а-чата, а то я себя после этих сообщений полным ламером чувствую. Будет на что ссылаться... http://slovari.yandex.ru/dict/informatica/article/info/info-490.htm?text=hash [/off]
Складывается впечатление, что наш народ думать разучился... :-( Кто запрещает при авторизации взять на вооружение, следующие параметры: - разрешение экрана - версия браузера - локальное время клиента - и т.д. И использовать эти данные как salt в md5... А "куда" вставить и какое количество бит salt'a использовать это по фантазии разработчика...
складывается впечатление, что у многих очень много ума, чтобы искать себе геморой на жопу. проще 5 символов сгенирировать и не парится.
А кто мешает применять при этом captcha-код??? P.S.: При таком раскладе геморой будет не у тебя, а у того кто будет в таких дебрях разбираться... Мы не ищем лёгких путей!!!
Зачем тогда вообще использовать авторизацию?! Зачем пароль вообще каким-либо способом шифровать??? P.S.: Я вообще предложил применить в шифровании пароля так называемый salt, а как его альтернативу брать дополнительные данные которые всегда у каждого пользователя будут уникальными... Для начала читай все посты, а потом рассказывай про свою образованость
Зачем при авторизации уникальные данные, которые у каждого КОМПЬЮТЕРА будут разные???, что ими шифровать??? Не надо отвечать вопросами на вопросы, ты просто скажи зачем при авторизации соль, пока-что я твои посты расцениваю как флуд-оффтоп...
Ок! Перейду на твой язык восприятия... Добавить соль к паролю и защифровать. Выше сказано было достаточно... Я предлагал, как АЛЬТЕРНАТИВНЫЙ метод... Если кому-то не нравится, я лично не навязываю такой способ никому! Ответь на такой вопрос, нахрена тогда пароль в чистом виде шифровать в md5 и передавать на сервак?! Если lookup можно сделать не напрягаясь! Давай перейдём на реальные вещи, для твоего понимания... 1) Открываю страницу авторизации, вижу форму: login, pass, captcha. 2) Ввожу login, pass, captha 3) Отправляю: login, md5(md5(captcha):md5(pass)), captcha Это как пример соли в пароль, можно не именно так... P.S.: Смысл уловил?!
добавлю к hidden: мы, кстати говоря, вообще не обязаны передавать этот самый блок длинной 256 в открытом виде к прочтению Code: http://ru.wikipedia.org/wiki/Алгоритм_Диффи_—_Хеллмана