надежная аутентификация клиента на сервере - PullRequest
4 голосов
/ 18 ноября 2010

Технические характеристики системы: Клиент C #, использующий .NET 3.0. Службы WCF, размещенные как службы Windows на серверах приложений. MSSql Server 2008R2 DB для хранения данных.

Хеши паролей пользователей хранятся в БД для аутентификации пользователей. Моя проблема в том, что я не знаю, как безопасно аутентифицировать клиента на сервере, используя хэш пароля клиента.

Прочитав похожие вопросы по SO, я увидел, что был рекомендован механизм «вызов-ответ». Кто-нибудь может привести хорошие примеры кодирования того, как это можно сделать?

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

РЕДАКТИРОВАТЬ: Под клиентом я имел в виду пользователя, который будет фактически использовать клиентский компьютер для входа в систему.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

Используйте SSL для связи клиент-сервер, и ваше шифрование с открытым ключом (AKA) позаботится. Вам не нужно кодировать его самостоятельно , просто настройте его на использование SSL .

0 голосов
/ 07 января 2011

Процесс будет выглядеть так: -

Сервер генерирует вызов и отправляет клиенту. например X

У клиента

passwordHashed = Hash (пароль) challengeHashClient = Encrypt (X, passwordHashed) // passwordHashed - это ключ

отправьте challengeHashClient на сервер.

На сервере

получить пароль из базы данных challengeHashServer = Encrypt (X, пароль хэшируется)

Сопоставление challengeHashServer с challengeHashClient

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

Однако, если вы используете среду Windows, почему бы не подумать об использовании аутентификации Windows Kerberos?

0 голосов
/ 18 ноября 2010

Если ваш клиент и сервер находятся в одном домене AD, самый простой вариант - использовать транспорт net.tcp с аутентификацией AD.Пользовательский токен Kerberos представляется службе и может быть аутентифицирован с использованием ролей AD.
Если вы не можете использовать встроенную аутентификацию AD и должны использовать схему, вы можете использовать пользовательское имя пользователя validator

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