Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Проведение аутентификации в сети


Автор: Nuzur 6.7.2006, 10:59

Есть Клиент и Сервер написаные мною, мне необходимо чтобы сервер опозновал клиентов и давал им права в зависимости от того какими он их опознал.
Введение пароля-логина выглядит как-то не очень красиво поскольку нужно будет синхрогизироваит БД пользователей да и подсознательно мне етот способ как-то не нравиться.

Уважаемые експерты, да и просто если есть мысли умные, подскажите пожалуйста.

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

Короче нужны идеи smile 

Автор: adonin 6.7.2006, 12:10
Не изобретайте велосипед! Всё уже придумано до вас:
http://knowhow.virtech.ru/qa/8.3
http://networkdoc.ru/files/insop/win2000/w2k_kerberos.doc 

Автор: Nuzur 6.7.2006, 16:13
adonin, Я почитал, спасибо конечно но все же хочеться чего то попроще.
Кроме того не факт что мы будем работать в одном домене, возможно и подключение через нет, как в таком случаи быть? Выходит пользователь который захочет получить доступ к моему серверу не обИзательно будет зарегистрирован в той системе. 

Автор: sllh 8.7.2006, 12:40
Хм... в таком случае, самым простым будет отправка псевдо-случайнов величины, преобразованной по определенному алгоритму, например "суббота, 13:40" в том же МД5. Конечно, существует вероятность, что если сообщение было отправлено в 40, а получено в 41 минут, то опознание не пройдет, но вероятность мала -- сделать повторный запрос... 
Как вариант, можно использовать аналог http://www.portknocking.org/ 

Автор: Nuzur 10.7.2006, 17:54
sllh, ну идея то неплохая, вопрос в том не что отправлять, а как зашифровать. Ведь в таком-то случаи можно и использовать и парольль с логином то. Нужно как-то менять ключ и ето нужно делать одновременно, а вот обойтись без малой крови то? 

Автор: adonin 12.7.2006, 10:50
Извините, что долго не отвечал. 
Nuzur,  я не имел ввиду, что вы должны пользоваться средствами Windows, я говорил о том, что Вы можете использовать идеи, реализованные в протоколе Kerberos.
Довольно простая процедура аутентификации, обеспечивающая высокую безопасность выглядит так:
1) Пользователь вводит на клиенте логин и пароль;
2) Клиент получает хеш логина и пароля;
3) Клиент формирует запрос, содержащий логин пользователя и некую зашифрованную фразу. В качестве ключа используется хеш логина и пароля. 
4) Запрос передаётся на сервер. Сервер по логину находит в базе пароль пользователя и получает хеш логина и пароля.
5) сервер, зная хеш логина и пароля расшифровывает зашифрованную фразу.
6) сервер случайным образом генерирует сессионный ключ, шифрует его и передаёт клиенту. В качестве ключа может использоваться как хеш пароля, так и переданная клиентом в запросе зашифрованная фраза.
7) клиент расшифровывает ответ сервера, получая сессионный ключ, которым шифрует все следующие пакеты.

При этом Вы гарантируете что ни один ключ не будет передан по сети в открытом виде;
Для каждой сессии будет сгенерирован свой сессионный ключ.

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

Автор: Nuzur 12.7.2006, 17:42
adonin, да идея неплохая. А вы случайно  smile , не подскажите может есть уже готовые модули или библиотечки, буду плюснуто признателен smile 

Автор: NiJazz 12.7.2006, 17:46
Nuzur, можно использовать сертификаты CryptoAPI. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)