Каков наилучший способ защитить сервер UDP с HMAC? - PullRequest
0 голосов
/ 13 мая 2018

Я надеюсь, что это не слишком самоуверенно, потому что я ищу конечный ответ.

Я разрабатываю сервер UDP в Python 3.x, который использует asyncio.Сервер будет работать с игровым движком, чтобы обрабатывать практически все взаимодействия, которые игрок совершает в игре.Поэтому я должен каким-то образом аутентифицировать игровой клиент на игровом сервере, а также не допускать повторных атак поверх всего, что может повредить или подделать игровой сервер.

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

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

Мой вопрос

Это лучший подход?Создание какого-либо типа открытого ключа, в котором для каждого сеанса создается что-то вроде токена, чтобы гарантировать, что пакеты, поступающие на сервер UDP, получены от аутентифицированных клиентов?Меня беспокоит то, что ключи все еще хранятся в EXE-файле Windows и, вероятно, могут быть взломаны и извлечены, или я просто слишком параноик?

1 Ответ

0 голосов
/ 14 мая 2018

Собираюсь ответить на мой собственный вопрос!

Нет, это не лучший подход

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

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

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

Решение

Мой игровой клиент не имеет SSL/ TSL / DTSL варианты.Вот почему я на самом деле разместил вопрос, но не уточнил это.Мой сервер, как обычно в Python, имеет такую ​​возможность.Но вчера вечером я обнаружил плагин для игрового движка, который позволяет AES-шифрованию данных, записываемых в буфер, до того, как указанный буфер будет отправлен в виде пакета на сервер UDP, что означает, что я могу зашифровать передачу данных в этих пакетах.безопасным способом, который, мы надеемся, сервер сможет расшифровать с помощью действительного закрытого ключа.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...