Скажем, я сделал простую программу, которая принимает файл .dat
, зашифрованный в двоичном формате , затем расшифровываю его в байтовый массив, а затем все снова переписывается в расшифрованный файл.
Например:
Я сделал алгоритм двоичного шифрования. => 0100100001100101001000000110100001100101011000 ...
Но это очень очень легко расшифровать ...
Есть ли способ, что, если это возможно, не нужно никакого ключа, чтобы зашифровать мой прогресс сохранения?
encryption
binary
Даниэль Бежар
источник
источник
Ответы:
В общем, вы никогда не должны изобретать свои собственные криптографические алгоритмы, если у вас есть хотя бы докторская степень в области математики и информатики. Но есть много хороших стандартных алгоритмов, которые не имеют известных атак и имеют бесплатные реализации на многих языках программирования. Например RC5, AES или Blowfish. В зависимости от того, какую технологию вы используете для разработки своей игры, она может даже предложить безопасное шифрование "из коробки".
Однако вопрос в том, является ли шифрование savegames хорошей идеей.
Во-первых, когда ваш исполняемый файл игры выполняет шифрование и дешифрование, вы должны включить как алгоритм, так и ключ в свой исполняемый файл игры. Это означает, что решительный хакер может найти их, извлечь их и использовать их для создания редактора сохраненных игр. Так что это никогда не может быть на 100% безопасно.
Во-вторых, почему вы все равно хотите это сделать? Когда это онлайн-игра, вы должны хранить состояние игры онлайн, где игроки не могут ее изменить. Когда это оффлайн игра, то зачем? Мошенник может только навредить своему игровому опыту в худшем случае. Честные игроки, которые хотят получать удовольствие от вашей игры, не будут затронуты этим. С другой стороны, возможность обмана игроков может повысить ценность вашей игры. Это позволяет игрокам испытать игру по-другому, что может просто увеличить их долгосрочное удовольствие от вашей игры.
источник
Для локального шифрования и дешифрования вам потребуется сохранить ключ в вашей программе, чтобы люди могли взломать шифрование, если они разбирают ваш код. Существуют хитрости, чтобы запутать ключи, но даже в тех случаях, когда выделенный злоумышленник найдет ключ, а затем опубликует его для всех, кто менее заинтересован, чтобы увидеть его. Единственное, что мешает шифрование - это люди, которые используют шестнадцатеричный редактор - вы можете легко помешать этому с помощью сжатия и всего, что делает файл нечитаемым программой распаковки. Например, добавьте один байт перед данными.
В качестве альтернативы вы можете добавить md5 файла сохранения в конец файла, так что вы заметите, был ли файл подделан. Затем вы можете использовать это, чтобы либо отказаться от загрузки сохраненной игры, либо соответствующим образом пометить заявки в службу поддержки, чтобы не тратить время на проблемы, вызванные вручную измененными играми сохранения. Опять же, это легко обойти любому, кто может прочитать ваш код.
Если вы хотите что-то, что не может быть обойдено кем-то, кто имеет доступ к двоичным файлам на своем устройстве, вам нужно запустить часть программы на сервере, который находится под вашим контролем.
Чтобы ответить на ваш последний вопрос, ключ плюс тип шифрования просто определяет точный алгоритм, который необходимо применить для шифрования / дешифрования. Вы не можете зашифровать / расшифровать данные без алгоритма, который определяет, как это сделать.
источник
Сохраните преобразованный SHA256-хеш фактических данных сохранения в файле сохранения.
Сравните сохраненный хеш со значением SHA256 данных при загрузке.
Если это не соответствует, они обманули или испортили файл.
Изменить , чтобы уточнить: это делает его более трудным взломать античит систему , но все - таки возможно .
источник
Я хотел бы использовать стандартный алгоритм шифрования (потому что он затрудняет выполнение криптоанализа для сохраненного файла), но не входит в пятерку наиболее часто используемых, и скрывать его по всему коду (потому что это усложняет понимание того, какой алгоритм он использует). и где ключ.)
Чтобы спрятать алгоритм шифрования в вашем коде: возьмите версию с открытым исходным кодом, поймите ее поток (какие функции в какой последовательности вызывают другие и в какой последовательности), затем переименуйте все переменные, поля структуры и имена функций (просто чтобы убедиться) и распространите функции по всей вашей кодовой базе, в разных объектах и модулях, возможно, также временно разделяя их выполнение (выполнить один фрагмент шифрования, затем сделать что-то другое, затем через несколько мс вернуться к нему из, казалось бы, не связанного фрагмента кода и выполнить другой этап шифрования и т. д.) Ключ может быть скрыт таким же образом, как и ряд, казалось бы, не связанных между собой констант во всех ваших классах, к которым обращаются во время выполнения различные скрытые части алгоритма шифрования.
Имеет ли все это экономический смысл - это совсем другая тема.
источник