Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.119.199] |
|
Сообщ.
#1
,
|
|
|
Подскажите пожалуйста толковый пример.
Задача примерно такая : при коннекте клиента к серверу, сервер отправляет маску, по которой клиент должен будет зашифровать логин\пароль и отправить серверу. Маска в идеале должна генерится рандомайзом, или как минимум выбираться из списка. Я не преследую цель достигнуть максимальной безопастности, просто чтоб нельзя было заснифить. Желательно чтоб алгоритм был не перегружен, так как такая процедура будет повоторяться довольно часто. |
Сообщ.
#2
,
|
|
|
А какого вида маску ты хочешь? Просто пример хоть какой-то приведи.
|
Сообщ.
#3
,
|
|
|
Свободно распространяемых реализаций MD5 достаточно много и они существуют практически для всех сред разработки, от ПХП до С++.
Можешь построить алгоритм идентификации/аутентификации так: Клиент К знает свой идентификатор И пароль П -- строки символов произвольной длины. Сервер С хранит пары И(i) и П(i) всех своих клиентов. 1. К -> С Клиент подключается к серверу и выдает запрос на аутентификацию в системе. 2. Сервер генерирует и запоминает случайную строку Р 3. С -> К Сервер сообщает клиенту строку Р 4. К -> С Клиент вычисляет и сообщает серверу Т = MD5(П+Р) (хеш MD5 от строки, полученной конкатенацией пароля П и случайной строки Р) и И (свой идентификатор/логин) 5. Сервер тоже вычисляет Н = MD5(П(i)+Р), где П(i) -- пароль, хранящийся на сервере и соответствующий переданному клиентом идентификатору И. 6. С -> К Сервер сравнивает Т и Н. Если они совпадают, то клиент знает пароль, следовательно, аутентифицирован. Вместо MD5 можно использовать схему Эль-Гамаля (с возведением в степень по модулю), RSA или другие односторонние функции... |
Сообщ.
#4
,
|
|
|
В твоем случае правильным будет создавать предварительный зайищенный канал для обмена масками и зашифрванными данными. Посмотри алгоритм Diffie-Hellman'а для генерации ключей для создания предварительного защищенного канала (клиенти сервер вырабатывают симетричные ключи, при этом прослушивающая сторона не может узнать их). В поисковиках его можно легко найти и программируется он не сложно.
Проснифирить это, как и то, что предложил Visitor можно атакой Man-In-The-Middle. Злоумышленник устанавливает с клиентом коннект, выдавая себя за сервера, а с сервером выдает себя за клиента, разумеется трафик должен полностью перехватываться, то есть настоящий клиентский трафик не доходит до сервера. Посомтри OpenSSL (www.openssl.org) - том есть реализация DH и MD5, и SSL'а. P.S. Если все таки надо, чтобы совсем секьюрно было смотри IKE (протокол установки защищенного соединения, в частности IPSec) |
Сообщ.
#5
,
|
|
|
Цитата Visitor,1.03.04, 12:51 Свободно распространяемых реализаций MD5 достаточно много и они существуют практически для всех сред разработки, от ПХП до С++. Можешь построить алгоритм идентификации/аутентификации так: Клиент К знает свой идентификатор И пароль П -- строки символов произвольной длины. Сервер С хранит пары И(i) и П(i) всех своих клиентов. 1. К -> С Клиент подключается к серверу и выдает запрос на аутентификацию в системе. 2. Сервер генерирует и запоминает случайную строку Р 3. С -> К Сервер сообщает клиенту строку Р 4. К -> С Клиент вычисляет и сообщает серверу Т = MD5(П+Р) (хеш MD5 от строки, полученной конкатенацией пароля П и случайной строки Р) и И (свой идентификатор/логин) 5. Сервер тоже вычисляет Н = MD5(П(i)+Р), где П(i) -- пароль, хранящийся на сервере и соответствующий переданному клиентом идентификатору И. 6. С -> К Сервер сравнивает Т и Н. Если они совпадают, то клиент знает пароль, следовательно, аутентифицирован. Вместо MD5 можно использовать схему Эль-Гамаля (с возведением в степень по модулю), RSA или другие односторонние функции... Вот! Это как раз что мне и нужно, я что-то подобное думал, но такой вариант подходит мне больше. А где можно достать сорс MD5 ? Спасибо. |