Клиент / серверная криптография для паролей - PullRequest
1 голос
/ 06 мая 2011

Я создаю клиент-серверное приложение на C ++, и каждый клиент должен предоставить пароль. Очевидно, что я хочу, чтобы это было безопасно во время транспортировки, поэтому я искал способ шифрования пароля; так что только серверное приложение может расшифровать его снова.

Проблема, с которой я сталкиваюсь, заключается не в том, чтобы заставить функции работать, а в том, чтобы понять, что мне нужно сделать, чтобы связать это с кодом. Я пытаюсь понять и прочитал MSDN (похоже), но все же я только учусь, поэтому мне действительно нужны четкие и точные рекомендации по моей реализации.

Это звучит правильно?

  1. Я получаю контекст для CSP как на сервере, так и на клиенте.
  2. Я генерирую ключ на сервере или загружаю его (что угодно).

а потом я

экспортируя открытый ключ с сервера и отправляя его клиенту, клиент импортирует ключ, а затем шифрует пароль и возвращает его, так что только сервер может расшифровать его снова. (Не удается, когда я пытаюсь).

ИЛИ тогда я

экспортировать сеансовый ключ или пару ключей обмена (один открытый), зашифрованные с помощью пары ключей обмена?

О, я так потерян, я даже не могу ясно объяснить.

Пожалуйста, помогите мне понять это ...

Ответы [ 3 ]

1 голос
/ 06 мая 2011

Если вам не нужна зашифрованная связь для других целей, таких как передача данных, вы можете использовать Challenge-Response для проверки пароля.Пароль не нужно передавать по сети, и нет риска повторной атаки, когда третья сторона просто пересылает некоторые пакеты.С другой стороны, возможна атака «человек посередине» (MITM).

Если вам нужна защита от MITM или вам нужен зашифрованный канал для другой связи, вы должны использовать TLS с сертификатами или Public-Key-Encryption сдве пары ключей.

1 голос
/ 06 мая 2011

Не делай ничего.

Это очень важно. Не выполняйте это самостоятельно.
Повторите, не делайте ничего, вы поймете это неправильно.

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

Ваша заявка должна просто принять имя пользователя / пароль и подтвердить правильность. Не пытайтесь реализовать криптографическую часть.

1 голос
/ 06 мая 2011

Это действительно зависит от того, какое решение для аутентификации вы хотите использовать. Варианты разнообразны.

Вы можете, например, полагаться на базовую аутентификацию ОС. Вам не нужно управлять паролями вообще. Но для этого требуется более тесная интеграция с доменом, в котором работает ваше приложение.

Другой вариант - использовать HTTPS и простую аутентификацию. Он в основном использует SSL для шифрования связи и затем отправляет пару имя пользователя / пароль. Довольно просто и поддерживается всеми веб-серверами. Возможно, вы могли бы довольно легко найти код C ++, который позаботится об этом за вас (поищите в StackOverflow такой вопрос), если вы не хотите полагаться на существующий веб-сервер, такой как устанавливаемый IIS.

...