Как скрыть IP-переменную моего сервера в приложении winforms - PullRequest
1 голос
/ 09 июля 2011

Каков наилучший способ скрыть / защитить строку, содержащую IP-адрес моего сервера в приложении C # winforms?

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

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

Я не уверен, ясен ли вопрос с вопросом, но я надеюсь, что вы, ребята, поняли идею ..

Ответы [ 2 ]

7 голосов
/ 09 июля 2011

Это нелепый подход. С самого начала безопасность из-за неясности очень слабая, и IP-адрес, к которому вы подключаетесь, отображается не только в вашем исходном коде, но и в исходящих пакетах, журналах межсетевого экрана, таблицах соединений, захвате пакетов и т. Д.

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


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

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

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

Или храните проприетарные части вашего программного обеспечения на своем сервере и никогда не загружайте их на клиент. Это самый безопасный метод.

1 голос
/ 09 июля 2011

Зачем вам нужно скрывать IP-адрес вашего сервера?

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

  1. Используйте DNS для разрешения IP-адреса вашего сервера. Не беспокойтесь о том, что это можно прослушать и даже подделать.
  2. Использовать стандартную криптографию с открытым / закрытым ключом.

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

Затем сервер шифрует ответ с помощью закрытого ключа, а приложение расшифровывает его с помощью открытого ключа.

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

РЕДАКТИРОВАТЬ: Бен сделал правильное замечание, что я только в процессе расследования. Лучше, чем установка сертификата, может быть встраивание его в сборку, поставляемую вместе с приложением, и подпись этой сборки строгим именем (файл .snk). Это гарантирует, что сертификат может быть использован для шифрования / дешифрования трафика, но не может быть изменен (поскольку сборка не будет загружаться, если она будет подделана).

Затем используйте CryptoAPI для шифрования / дешифрования ваших данных.

О, и вы также можете использовать HTTPS для связи с вашим сервером.

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

...