Шифрование и декомпиляция

Я собираюсь выставить свое Android-приложение на рынок. Я недавно зашифровал все мои соединения сервер / клиент. Что меня интересует, так это если мои данные зашифрованы с использованием специального ключа, и если человек декомпилирует мой код и извлекает ключ, то стоит ли вообще шифровать данные в первую очередь? Мои коммуникации проходили намного быстрее, когда данные не были зашифрованы. Поскольку игра является экшн-игрой, лаг станет огромным "забавным убийцей", и по своему опыту я знаю, что это расстраивает. Я знаю, что шифрование делает приложение намного безопаснее, безопаснее для геймеров и сервера, но вызывает огромную задержку. Стоит ли безопасность снижения производительности? Стоит ли даже использовать шифрование, когда ваш код можно просто декомпилировать? Я уже использую Android Proguard, но если кто-то действительно захочет декомпилировать мой код, им потребуется время, чтобы разобраться со всем этим мусором.

3 ответа

Решение

Я думаю, это безопасно работать при этих предположениях.

  • Клиенту нельзя доверять. Когда-либо.
  • Сервер является авторитетным источником информации.

Не доверяйте данным, которые отправляют вам клиенты, проверяйте и проверяйте их (например, если кто-то пытается "телепортироваться" из одного угла карты в другой, отправляя измененное местоположение).

Принимайте только те данные, которые действительны.

Запрет мошенников.

Шифрование в порядке, но когда оно не вредит игре или игровому процессу (в вашем случае это наносит вред).

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

Я бы, вероятно, использовал аутентификацию вместо шифрования (хэширование всех данных, которые вы отправляете, чтобы вы могли проверить их на стороне сервера). Это будет работать для обычной игровой информации, потому что нет особой необходимости в конфиденциальности. Если вы не отправляете личные данные пользователя, такие как имя, возраст, данные кредитной карты и т. Д., Я предлагаю вам использовать обычную аутентификацию, которая намного быстрее шифрования. Вы можете использовать действительно простые хеш-функции или если вы думаете, что ваша игра действительно мотивирует людей вмешиваться в нее, то вы можете использовать хеш-функции военного уровня, такие как SHA-256 или выше. Но независимо от того, какую схему хэширования вы используете, она должна занимать гораздо меньше времени / ресурсов, чем реализация правильной схемы шифрования.

Другие вопросы по тегам