#c #encryption #client-server
Вопрос:
Я пишу серверный и клиентский код, в котором хочу идентифицировать на стороне сервера официальное клиентское программное обеспечение, отправляющее данные.
Протокол основан на тексте, поэтому любой может написать свой собственный клиент — и я хочу сохранить его, но хочу сгруппировать устройства по «Официальным» / «Неофициальным» на основе «отпечатков пальцев» моего официального клиентского приложения.
Вопрос:
Как я могу отфильтровать своих клиентов от отправки других клонов?
Я думаю отправить зашифрованное сообщение от моего клиента на СЕРВЕР, используя тот же ключ, поэтому, как только оно будет расшифровано, если оно действительно, я буду знать, что это мой код приложения, отправляющий — но прежде чем я пойду этим путем, есть другие идеи получше ?
Комментарии:
1. Это кажется техническим (плохим) ответом на вопрос, который лучше всего решать с помощью контрактов, одобренных профессиональным юристом
2. И вы должны, по крайней мере, подробнее объяснить свой протокол. Почему вы не используете HTTP или WebSockets?
3. Это практически невозможно сделать. Ваше время лучше потратить на установление ограничений на то, что можно и чего нельзя делать, и принятие решения о том, хорошо ли себя ведет клиент, основываясь на некоторых эвристиках, таких как скорость действий (и какого рода), которые они пытаются выполнить, если это действительно касается. Тривиально извлечь отпечаток пальца из законного приложения и поместить его в пользовательское, и на самом деле вы только облегчите работу злоумышленника, сделав это.
4. Обычно я реализую алгоритм, который создает ключ на основе текущей даты-времени и других изменяющихся данных с сервера, клиенты при подключении отправляют ключ, чтобы сервер мог их распознать. Сложность реверс-инжиниринга зависит от того, насколько сложен алгоритм и какие данные задействованы
5. Я разработал структуру, которая делает именно то, что вы описываете. Это очень трудная задача. 1) вы должны получать запросы на подключение так быстро, как они поступают, иначе вы можете подвергнуться атаке типа «отказ в обслуживании», 2) вам необходимо решить проблему аутентификации соединителя либо априорными методами, как я, либо с помощью протокола Диффи-Хелмана. Это делается для защиты вашей конечной точки прослушивания, 3) не используйте Ipv4, даже если возможность подключения Ipv6 к интернет-провайдеру еще не существует. Это произойдет к тому времени, когда вы закончите с вашим кодом. Удачи