hazem12 Ответов: 3

Шифрование на языке Си#


Привет,
У меня есть клиент-серверное приложение TCP/IP .
клиент перед началом получения данных с сервера отправляет свой пароль и имя пользователя, затем сервер проверяет пароль с именем пользователя, если он совпадает с базой данных сервера, сервер начинает отправлять данные, иначе сервер отказывается от соединения.
проблема в том, что мне нужен способ зашифровать сообщение, содержащее пароль, отправленный на сервер .
каков наилучший способ достижения этой цели?
я искал в интернете (шифрование с закрытым ключом ,шифрование с открытым ключом).. но у меня есть некоторые моменты:
1. в закрытом ключе проблема, где клиент сохранит закрытый ключ? а что, если я захочу изменить закрытый ключ?
2. Что делать, если кто-то сниф на данные и получить часть зашифрованного сообщения, содержащего зашифрованный пароль и отправить его снова на сервер из своей программы?

3 Ответов

Рейтинг:
1

CPallini

хазем12 писал:
1. в закрытом ключе проблема, где клиент сохранит закрытый ключ? а что, если я захочу изменить закрытый ключ?

Не можете ли вы встроить его в исполняемый файл? Есть ли веская причина изменить его?

хазем12 писал:
2. Что делать, если кто-то сниф на данные и получить часть зашифрованного сообщения, содержащего зашифрованный пароль и отправить его снова на сервер из своей программы?

Вы можете зашифровать некоторую информацию о метке времени (или счетчике) вместе с паролем.
:)


Рейтинг:
0

Keith Barrow

хазем12 писал:
1. в закрытом ключе проблема, где клиент сохранит закрытый ключ? а что, если я захочу изменить закрытый ключ??Не можете ли вы встроить его в исполняемый файл? Есть ли веская причина изменить его?


В конечном счете, вам нужно где-то встроить ключ, если вы храните его снаружи программы (например, в XML), вы открываете ключ для злоупотреблений. Не называйте ключ свойства или узнаваемое имя, и некоторые методы объявления ключа лучше других. Вам нужно будет провести некоторые исследования по этому вопросу.


хазем12 писал:
2. Что делать, если кто-то сниф на данные и получить часть зашифрованного сообщения, содержащего зашифрованный пароль и отправить его снова на сервер из своей программы?


Это проблема. Обнюханное сообщение может быть возмущено, но метод в OP предотвратит повторное использование пароля. Вы могли принимать только сообщения типа а меньше чем н несколько секунд назад, что дало бы некоторую защиту, но полагается на то, что серверные и клиентские часы относительно синхронизированы.

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


Рейтинг:
0

hazem12

hazem12 wrote:
1. in private key the problem where the client will save the private key? and what if i want to change the private key.?
Cannot you embed it into the executable? Is there a compelling reason to change it?


hazem12 wrote:
2. what if some one snif on the data and get the part of the encrypted message contained the encrypted password and send it again to server from its program?
You may encrypt some timestamp (or counter) info together with the password.




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