Как правильно зашифровать TCP-данные, чтобы злой клиент не смог их прочитать/расшифровать

Я объясню лучше свою проблему.

У меня есть клиент С#, который подключается к серверу Python, этот клиент должен отправлять (только один раз) некоторые данные на сервер при установлении соединения, эти данные не должны быть изменены.

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

Что я хочу сделать, так это создать пару ключей и отправить открытый ключ клиенту, зашифровать данные с помощью этого ключа и отправить зашифрованные данные на сервер, я думаю, что таким образом данные не могут быть расшифрованы или изменены, каждый подключенный клиент будет иметь другую пару ключей. Это возможно? Я искал, но я действительно не понимаю, как работает RSA. Есть идеи, как это сделать?


person Dani S.    schedule 05.09.2012    source источник
comment
Добро пожаловать в stackoverflow, Дэни С.   -  person Maarten Bodewes    schedule 06.09.2012


Ответы (1)


Очень простой ответ: не пытайтесь создать свой собственный протокол, вместо этого используйте SSL (или, скорее, TLS). Особенно, если вы не знаете, как это реализовать. Вы можете использовать свои собственные самоподписанные (таким образом, бесплатные) сертификаты.

person Maarten Bodewes    schedule 05.09.2012
comment
Или IPSec, если ему действительно нужен зашифрованный TCP. - person Gumbo; 05.09.2012
comment
@Gumbo для одного TCP-сокета SSL должно быть достаточно. IPSec находится на уровне IP, как следует из названия. Это намного сложнее и, по всей вероятности, не нужно. - person Maarten Bodewes; 05.09.2012