TCP защищенное соединение - только через мой клиент - PullRequest
3 голосов
/ 07 июля 2011

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

Спасибо!

EDIT Если я собираюсь использовать TLS, могу ли я решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

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

Пример Baby: Мое приложение запускает ваше приложение и воспроизводит данные на ваш сервер, а затем перенаправляет ваш ответ обратно в приложение. Как вы можете сказать?

Тем не менее, это может быть очень многообещающий "99%" подход, использующий SSL и жестко закодировать закрытый ключ клиента в приложение - с некоторыми хитростями, которые вы можете попытаться затруднить, чтобы найти (например, посмотрите, как это делает Skype). ). Если затем вы также встроите в свою программу проверки целостности, чтобы выяснить, манипулирует ли кто-либо памятью или отлаживается в вашей программе, вы можете попытаться сделать это немного сложнее для потенциального противника. (Но учтите, что у вас всегда будет есть для доставки закрытого ключа вместе с вашим приложением, так что это не совсем безопасно для обнаружения.)

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

Другие предложили полезные ответы на ваш вопрос, но я собираюсь предложить другой подход. Пересмотрите ваши требования.

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

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

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

0 голосов
/ 07 июля 2011

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

http://en.wikipedia.org/wiki/RSA#Signing_messages

0 голосов
/ 07 июля 2011

Мой ответ по умолчанию - использовать аутентификацию по запросу / ответу.

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

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

...