Зашифрованный контент в играх

45

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

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

Вот еще один пример того, что я представлял. У меня есть игра-головоломка, скажем, с 20 уровнями, каждый из которых зашифрован с использованием другого ключа. Вместо того, чтобы хранить ключ дешифрования в программе, позволяющей кому-то декомпилировать программу и находить ее, я создаю ключ шифрования / дешифрования на основе решения предыдущей головоломки. Таким образом, игрок должен будет на самом деле разгадать головоломку, прежде чем получать какую-либо информацию о следующем уровне, даже при просмотре игровых данных.

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

Есть ли сегодня программы / игры, которые сделали что-то подобное? Хранить зашифрованный контент в своих играх? А если нет, то почему? Есть ли много правил и положений об этом, на уровне магазина или страны? Кто-нибудь видит какие-либо очевидные подводные камни, которые мне не хватает? Игнорируя такие вещи, как пользовательский опыт, эта идея кажется мне здравой и заставляет меня удивляться, почему я этого раньше не видел.

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

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

Так что при 2 * 10 ^ 28 возможных комбинаций, которые можно попробовать, вероятно, люди с большей вероятностью найдут контент по назначению, а не по просмотру игровых данных.

Редактировать 2 : рассматриваемый контент будет зашифрован произвольным и секретным ключом перед отправкой потребителю. Этот ключ, очевидно, не будет поставляться с игрой. Ему или ей придется каким-то образом ломать голову над ключом, учитывая ряд подсказок, сделанных на основе ключа, которые скрыты в игре или где-то еще. Однако эта система была бы прозрачной для пользователя, поскольку вы не знали бы, что контент зашифрован, если вы на самом деле не просматриваете игровые данные.

Как уже упоминалось, у этого есть один очевидный недостаток в том, что его использование ограничено. Как только один человек понял это, он / она может поделиться этим со всеми, если не ключ / решение, то сам контент. Однако, если вы намерены сохранить что-то настолько секретное, что один человек не сможет решить его, а люди должны будут вместе решать его, или вы боитесь, что ваше пасхальное яйцо настолько хорошо спрятано (умышленно), что оно Скорее всего, кто-то найдет его в коде, а не через игру. Тогда я думаю, что это может работать отлично.

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

Кристер
источник
56
Ответы сосредоточены на технических деталях, но если ваша цель состоит в том, чтобы скрыть спойлеры, считают , что эта информация будет доступна на просто играть в игру , в какой точке (если ваша игра популярна) она будет идти прямо на статью Wikia для каждого читать, проигрывать или нет.
Леушенко
4
Дубликат по разработке стека обмена играми: «Как я могу защитить свои игровые данные от случайного взлома?»
Филипп
5
Разве это не излишне для развлекательного продукта? Я имею в виду, что люди могут получить «ключ», посмотрев прохождение игры или давай поиграть, или просто спросить людей, которые уже играли в нее. Также игра может стать более подверженной ошибкам из-за этого «более или менее неясного» способа иметь дело с вещами. В противном случае мне нравится идея, и это будет хороший трюк, но он все равно не остановит людей от взлома / мошенничества, а скорее усложнит его
BlueWizard
3
Я думаю, что это было бы особенно здорово, если ваши пользователи известны тем, что они взломали вашу игру, а головоломка действительно очень сложная. Вы можете представить на форумах "что это за странный зашифрованный файл".
PyRulez
5
@PyRulez Ах, да! Это было моей главной мотивацией. Я ненавижу, когда эти противные правительства просматривают файлы игры, чтобы найти все пасхальные яйца. Все только для того, чтобы они могли опубликовать это на форумах своих врагов и разрушить мораль страны.
Кристер

Ответы:

90

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

Насколько мне известно, это определенно возможно. На самом деле, для меня странно, что другие ответы говорят, что это совершенно невозможно, даже если очень четко сказано, что ключ не генерируется и не хранится, просто считывается из состояния игры (что может иметь возможные googleplexes). ценности). Аргумент, что «игра знает, как ее расшифровать», чтобы она не работала, подразумевал бы, что любое программное обеспечение с открытым исходным кодом для шифрования / дешифрования (например, TrueCrypt) изначально небезопасно, потому что вы знаете, «как» дешифровать контейнеры (просто введите строка, основанная на вводе с клавиатуры, это просто верно?).

В простейшем случае представьте, что сама игра является симулятором клавиатуры и задает вопрос «каков пароль к моим зашифрованным файлам?», Ясно, что все мы согласны с тем, что наличие исходного кода для игры не поможет. А теперь представьте, что игра задает вопросы «как называется самое большое животное на Земле, соединенное с именем самого маленького животного?». Разве не ясно, что даже наличие исходного кода игры не поможет, и вам все равно придется решать головоломку?

Относительно того, возможно ли это, ответ является абсолютным ДА, это возможно.

Mk12
источник
9
Я чувствую, что ваш ответ пока единственный, который, кажется, полностью понимает мой вопрос. Слишком многие, кажется, автоматически думают, что мой вопрос так же, как некоторые другие вопросы шифрования, связанные с игрой. Я понимаю, откуда они приходят, хотя мне бы хотелось, чтобы они прочитали мой вопрос немного лучше.
Кристер
7
Что вы предлагаете, так это то, что решение проблем хранится только в зашифрованном виде. Определенно возможно подтвердить правильное решение, но в принципе невозможно вернуться к этому. (как-к-магазин-пароли-101). Вторая часть вопроса о том, как скрыть контент, не требующий отображения пользовательского ввода, решить, однако, невозможно (обратите внимание, что когда я говорю «нет пользовательского ввода», я имею в виду это очень строго)
WorldSEnder
3
Я думаю, что главное в том, что решить головоломку может только один пользователь, потому что первый может сообщить об этом всем остальным. Что делает весь смысл упражнения шифрования немым.
Мастер
4
С исходным кодом (или a stringsна исполняемом файле) загадка, такая как «Как называется самое большое животное ...?» Возможно, игрок / хакер все еще должен решить эту проблему , но, по крайней мере, он может избежать опасного путешествия в место, где возникает вопрос. Поэтому сами загадки также должны быть несколько скрытыми ( часто может быть достаточно текста в виде графики ; более детально, я думаю, я помню игру, в которой обычные трехмерные объекты, если смотреть с определенной точки, в перспективе объединяются с решением загадки или другого важного информация ...)
Хаген фон Айцен
4
Приведенные цитаты типа «Это может, например, разрушить его для всех, если вы разместите в Интернете» Исходный вопрос ... извините, но в этом ответе отсутствует смысл. Он был бы так же уязвим для того, чтобы испортить его для всех, если опубликованы ответы или расшифрованные файлы или что-то еще, и столь же уязвим для публикации.
Натан Тагги
57

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

Это называется «фундаментальная проблема криптографии»: Алиса хочет послать сообщение Бобу, и Чарли не сможет прочитать его, даже если он его схватит. Проблема с подходом, который вы предлагаете, состоит в том, что Боб и Чарли в этом случае - один и тот же человек .

Я понимаю желание не портить ваших пользователей, но если людям нужны спойлеры, они их найдут, а если нет, то будут активно избегать спойлеров. Но если вы хотите по-настоящему сделать отличную игру, идите противоположным путем: радикальной открытости. Посмотрите на такие вещи, как Neverwinter Nights , Starcraft или серия Elder Scrolls , игры, которые остаются популярными в течение многих лет после выпуска. Они делают это потому, что поставляют с игрой мощные инструменты дизайна, которые позволяют пользователям копаться во всем, выяснять, как это работает, создавать и делиться своим собственным контентом. Игра - это просто игра, пока она не станет сообществом , а сообщества терпят.

Мейсон Уилер
источник
3
В этом случае, хотя взломать шифрование было бы равносильно написанию бота, который решал головоломки. Наверное, сложнее, чем просто завершить игру и записать ответы
Ewan
15
Я просто хочу сказать, что этот ответ на самом деле не отвечает на мой вопрос! Я на самом деле хочу, чтобы люди «взломали код» или, скорее, решили мою головоломку. В этом весь смысл, и да, как только кто-то это выяснит, я не могу помешать ему поделиться решением, я не пытаюсь. Однако вы ошибаетесь, говоря, что «он должен содержать всю информацию, необходимую для его расшифровки», поскольку весь смысл был в том, что эта информация была предоставлена ​​пользователем. Читайте обновленный вопрос для деталей.
Кристер
6
@Christer Да, и вот почему: Мейсон говорит, кого волнует, смогут ли они получить доступ к файлам игры, чтобы узнать ответ на загадку, потому что на самом деле это сделает только меньшинство ..
Безумный,
9
@JonasDralle Это отвратительно циничная точка зрения, и это тоже неправда. Сильное, устойчивое сообщество, созданное вокруг Морровинда и Обливиона , не помешало Скайриму продавать; во всяком случае, это сделало его более успешным!
Мейсон Уилер
3
@Cronax Если вы используете шифрование в стиле «one time pad», в данном случае ключом является решение головоломки, у вашего злоумышленника нет лучшего варианта, чем brute-foricng по размеру пространства ключей. С правильной загадкой, которая может быть неосуществимо большой в течение жизни вселенной. Кроме того, если пасхальное яйцо - это, скажем, сообщение от разработчика, злоумышленник не сможет отличить настоящее сообщение от случайного, правильного сообщения.
Бен Ааронсон
10

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

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

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

Axl
источник
Хотя зашифрованные данные с локально сохраненным ключом всегда можно взломать. На практике все современные приложения и игры используют это в определенной степени.
Эван
Проверьте soomla и как это делают монеты
Ewan
Я полагаю, что вопрос заключался в том, чтобы скрыть будущий контент от любопытных игроков, а не о том, как защитить валюты и статистику игроков от взлома
axl
1
Поскольку речь идет о пасхальном яйце, привлечение внимания - это именно то , что вы хотите.
PyRulez
6
Сложнее будет лишь привлечь более решительных людей. Я думаю, что это отличная маркетинговая стратегия для игры :)
sampathsris
9

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

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

И вот как следствие. Расшифровка обычно двоичная. Либо у вас есть точный ключ дешифрования, необходимый для дешифрования данных, либо у вас его нет.

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

Взять, к примеру, Портал, Испытательная камера 10. Вы должны идти налево, делать что-то, затем идти направо и делать что-то, все, чтобы опустить платформу.

Или вы можете просто дать себе некоторую скорость и броситься на платформу, когда вы идете прямо внутрь.

GLaDOS: Итак, вы создали игру-головоломку. Игра-головоломка, которая наказывает людей, которые больше всего любят головоломки. Отличная работа. Но, по крайней мере, эти хакеры не получат ваши драгоценные данные. Потому что люди, которым нравится решать головоломки, это именно те люди, которые ищут решения для головоломок в Интернете.

Так что это того стоит.

Таким образом, логические игры, такие как Adventures of Lolo, SpaceCHEM и Portal (среди миллионов других), прямо сейчас. Вместо этого вы должны разработать свою игру так, чтобы невозможно было создать головоломку, имеющую более одного решения. Это требует очень большой осторожности и обычно требует существенного ограничения игрового процесса.

GLaDOS: Итак, вы создали игру-головоломку. Игра, в которую должны играть люди, которые любят находить творческие решения головоломок. И вы сделали игру, в которой нет креативных решений головоломок. * Медленно хлопать *

Я не говорю, что вы не можете создать такую ​​игру. Или что такая игра не может быть хорошей. Только то, что такая игра должна быть разработана определенным образом.

О, и вы должны разработать этот игровой процесс так, чтобы было невозможно (или очень сложно) механически найти решение.

GLaDOS: Итак, вы создали игру-головоломку. Игра-головоломка, которую интереснее взломать, чем играть. Отличная работа.


Конечно, есть одна оговорка к этому: значение «решения». Или, что более важно, какие элементы решения вы принимаете во внимание?

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

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

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

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

Николь Болас
источник
2
@Christer: ваш пример только выдает неуместность вашего общего вопроса. Содержание «секретного алтаря вне любого квеста» по определению не имеет значения для любой игры, которая в основном касается выполнения квестов . И если ваша игра не о выполнении квестов, почему у вас есть квесты в нем? В любом случае, общий факт остается фактом: вы тратите очень много времени на то, что не имеет никакого отношения к вашей игре или вашим игрокам. Вы должны сосредоточить свое очень ограниченное время и энергию на вещах, которые имеют значение .
Николь Болас
2
@Christer: « Кроме того, поскольку тот факт, что шифрование используется, прозрачен для 99,9% пользователей, это не является веским аргументом, поскольку это ужасная идея». Если это заставит пасхальное яйцо занимать больше времени в разработке, что может перейдите к действительно полезным функциям, тогда да, это ужасная идея. Вы потратили больше времени на формулировку своего вопроса и ответов на ответы, чем заслуживает эта функция . В то время вы могли бы написать свою настоящую игру. Если он прозрачен для 99,9% пользователей ... то зачем им это важно, если он зашифрован? Зачем тратить время на 0,1% людей?
Николь Болас
2
Извините, но я люблю повеселиться, делая свои игры! Не каждый может быть роботом, производящим игры. Также позвольте мне быть судьей, сколько времени это займет и сколько я бы хотел потратить. Сама часть шифрования, по крайней мере, будет прямолинейной для реализации.
Кристер
1
The consequence here is that whatever game you design must be so narrowly focused that there is only one possible solution to every level.Не обязательно: он мог зашифровать контент для каждого возможного решения и отправить дублированный зашифрованный контент для всех возможных решений. Пространство можно сэкономить с помощью двухуровневого шифрования - ключ пользователя в связанном ответе соответствует конкретному решению, документ соответствует содержанию.
Mucaho
4
@mucaho: Это требует знания «каждого возможного решения» заранее.
Николь Болас
8

Ответы здесь хорошие; Я бы посмотрел на это с другой стороны. То, что вы описываете, является особенностью . Особенности имеют свои издержки и преимущества. Затраты включают как долларовые затраты на создание функции, так и «альтернативные затраты». Это так: в мире, где у вас есть конечные доллары и конечные часы и конечные программисты, каждая функция, которую вы делаете, означает бесконечное количество возможных функций, которые не были реализованы на своем месте.

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

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

Эрик Липперт
источник
5

Проблема Алисы Боб и Ева хорошо иллюстрирует это. Как сказал Мейсон в своем ответе, вы не можете хранить секреты от Евы, если Ева тоже Боб.

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

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

Но вы забыли ключевой элемент здесь. Это игра. Если кто-то обманывает в игре, большой возглас. Вы не написали игру для читеров. То же самое можно сказать и о прохождении квестов или руководствах по прокачке: люди, которые хотят сами разобраться в этом, будут игнорировать опубликованные решения. Даже если бы вы смогли сделать взлом игры невозможным, не играя в нее (мы знаем, что это логически невозможно, но ДАЖЕ ЕСЛИ вы могли это сделать), чтобы пройти всего лишь одного парня, он опубликовал бы все необходимое, чтобы победить. Так что вы только откладываете неизбежное.

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

corsiKa
источник
2

Я считаю, что ваша идея бессмысленна.

Когда кто-то играет в вашу игру, он предпочитает играть в нее, он не делает это, чтобы выиграть награду, он делает это ради развлечения.

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

Также, как только кто-то нашел решение головоломки, то есть вашего ключа, он может просто опубликовать ее где-нибудь в Интернете.
Игроки, которые хотят обмануть, все равно смогут это сделать.


Однако если в вашей игре представлено несколько решений, таких как секретные уровни Super Mario Land, шифрование ваших активов не позволит получить легкий доступ к этим решениям.

Хотя это кажется точкой в ​​пользу вашей идеи, в конце концов, это не так.

Даже с помощью шифрования можно было бы узнать, что такие секретные решения существуют.
Как только станет известно, что существует секретное решение, предотвращение просмотра секретных активов игроками не будет иметь значения, поскольку они все равно захотят получить доступ к скрытым частям игры через саму игру (да, даже если они уже видели все скрытые объекты). текстуры / клип / аудио / текст).

Вы можете предотвратить утечку существования секретных решений, используя некоторую забывчивую технику 1 , но это все равно будет подозрительно (зачем делать это, если нет секретных решений?), Игроки потеряют интерес к их поиску, и у вас будет меньше игроков , не больше.
В конце концов, после завершения игры мы можем сыграть еще пару часов, чтобы вызвать несколько пасхальных яиц, но мы не будем играть больше минуты, если их запуск потребует колоссальных усилий!


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

1 Очень похоже на то, как VeraCrypt делает это со скрытыми томами.

Маргарет Блум
источник
1
Мне действительно нравится эта идея книги. Я понимаю, что это может расстроить многих людей, но я также могу представить, что люди действительно хотят такую ​​книгу. Я знаю людей, которые не могут не испортить концовку для себя, пропуская вперед, даже если стараются не делать этого. Думаю, такая книга может помочь. Хотя они все еще могут искать ключи онлайн, если ключи не были персонализированы. Даже тогда они могли просто посмотреть конец. Тем не менее, если бы они были в таком отчаянии, не было бы смысла пытаться остановить их дальше, как вы сказали.
Кристер
1

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


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


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

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

Однако даже в этом случае вы ошиблись, если предположить, что ключ отсутствует в игре. Если это не так, вы не могли бы направить своих игроков к этому; следовательно, вместо того, чтобы пытаться взломать сейф, вместо этого можно было бы перепроектировать игровые активы в поисках ключей. Одна потенциальная загадка, о которой я могу подумать, - это использование текстур для кодирования глифов, и тогда пароль будет состоять из нескольких доступных на клавиатуре, как показывают места, которые игрок должен был посетить (по порядку):

  • суть проблемы в том, что распознавание изображений все еще несколько затруднено для компьютеров
  • поверх которого мы подчеркиваем тот факт, что взломщики CAPTCHA настроены на буквы и цифры, а не на собственные глифы
  • поверх которого мы накладываем тот факт, что путем объединения нескольких текстур (с прозрачностью), чтобы показать игроку глиф, ни один актив в игре не содержит того, как этот глиф должен выглядеть
  • использовать другую текстуру (с фрагментами) повсюду, но никогда не таким образом, чтобы генерировать полный глиф, кроме как в скрытых местах, в которые игрок никогда не сможет добраться

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


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

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

Здесь потенциальным решением было бы связать файлы с учетной записью пользователя и ввести пароль, как обычно рекомендуется:

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

Затем, когда пользователь готов предоставить пароль:

  • пользователь должен войти в систему (если она еще не была)
  • программное обеспечение отправляет и метку времени, и пароль глифа
  • если временная метка отличается от сохраненной, сообщите пользователю, что она использует устаревший набор секретных файлов.
  • если пароль уже использовался слишком много раз, сообщите пользователю, что он использует устаревший набор секретных файлов.
  • в противном случае хешируйте соль + пароль, чтобы получить ключ
  • в противном случае отправьте ключ обратно пользователю, чтобы он мог видеть свои личные файлы
  • увеличить количество попыток ввода пароля этим аккаунтом

Цель здесь состоит в том, чтобы как можно больше препятствовать совместному использованию аккаунта:

  • общий доступ к учетной записи для генерации секретных файлов ограничен (а), потому что в день может быть сгенерирован только один, и (б) бесполезным, поскольку последний созданный файл делает другой устаревшим
  • Совместное использование учетной записи и распространение связанных секретных файлов бесполезно, поскольку данный пароль может использоваться только N раз, прежде чем он больше не даст ключ.

И мы почти у цели.


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

Решение простое (и делает практически все вышеперечисленное устаревшим 1 ): не доверяйте клиенту.

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

... это называется социальным давлением;)

1 За исключением файла позиционирования текстуры, который мы использовали, чтобы не дать программе угадать ключ и, тем не менее, позволить пользователю получить его.

Матье М.
источник
Спасибо за вдумчивый ответ. Вы делаете хорошие очки. Хотя я хотел бы добавить, что ключ / решение не нужно хранить в игре, как вы сказали. Например, он может быть скрыт в html игровой веб-странице, может быть, вы хотите вознаграждать людей, просматривающих подобные вещи. Но даже в игре вы можете быть более креативными, например, использовать загадки в качестве решения, геометрию, которая раскрывает информацию при взгляде под углом, использовать вещи, связанные с контекстом, которые вы, вероятно, не получите, если не прочтете многие знания игра. Например, у Skyrim есть книги или журналы на компьютерных терминалах.
Кристер
Я не упомянул об этом в своем вопросе, так что не волнуйтесь. Как я себе это представлял, так это то, что вы будете играть всю игру, и это было похоже на полную игру. Однако была эта скрытая дверь, в которой был странный замок, который вы никогда не проходили. Мы надеемся, что это заставит людей любопытствовать и говорить, возможно, даже заставить людей работать вместе, чтобы понять это. Поскольку никто не понял этого, это также будет своего рода слава, чтобы иметь возможность выяснить это. Может быть, если пройдет достаточно времени, неуловимые секреты двери породят легенды! Отстой, что это испортил кто-то, просто просматривающий игровые активы.
Кристер
@Christer: Отстой, что это испортил кто-то, только просматривающий игровые активы. => это разрешимо с помощью секретных файлов, чтобы действительно описать это место (в основном повторное использование существующих текстур), как только секрет один раз выйдет, однако, он выйдет ...
Мэтью М.
0

Это интересная идея; вариант на дисках с загадками и системы защиты от копирования типа «слово из руководства». Я думаю, что некоторые из игр "ARG" работают так, когда понимают, что игроки действуют коллективно против игрового дизайнера.

Очевидно, что как только первый человек расшифрует его, они опубликуют его в Интернете.

Генерирующее или процедурное содержимое может работать одинаково: вы не видите тот же мир, что и другой игрок, если не поделитесь «семенем».

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

pjc50
источник
0

Рассмотрение дополнительных мер безопасности является интересным, но оно не добавляет конкретной ценности вашему продукту - оно демонстрирует вашу ловкость взломщикам, которые сталкиваются с вашим продуктом. В принципе, ваш антагонист догонит вас.

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

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

Avenicci
источник
0

Мейсон Уилер правильно понял: ты не можешь этого сделать. Кто-то всегда может перепроектировать вашу игру, если захочет.

Вам не нужно «защищать» свою игру так, как вы описываете. Как только один человек находит пасхальное яйцо, секрет выходит из сумки. Если у каждой копии игры есть свое пасхальное яйцо, то будет известна только копия хакера. Вас действительно волнует, что один хакер из 1000 человек нашел пасхальное яйцо без прохождения игрового процесса?

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

Насколько случайные пользователи выкладывают ваши текстуры на аватарку своего форума, ну и что? Считайте, что это реклама на низовом уровне.

Навязчивое отношение к "защите" вещей просто отвлечет вас от таких сложных реалий, как создание игры .

Когда я вижу, что люди, у которых нет продуктов, рассказывают о своих схемах защиты ИС для вещей, которых даже не существует, для меня это своего рода неожиданный момент, потому что это поднимает огромный красный флаг по всему проекту.

Тайлер Дурден
источник
-1

Некоторые возможности:

  • Обычный старый код запутывания . Это не сделает код невозможным для декодирования, но по крайней мере это будет сложно.

  • Серверное решение. Вы отправляете некоторые специальные команды на сервер, и сервер может отправить вам код ... или даже загрузить DLC.

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

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

Borjab
источник
-1

Это бесполезно, как и любая другая схема, где вы храните ключ и алгоритм на клиенте. Если вы спросите «где ключ, я полагаюсь на данные пользователей и не храню их сам?», Помните, что у вашей головоломки есть правила и ресурсы по ее определениям - она ​​решается неким алгоритмом, а не грубым принуждением. Этот точный алгоритм и его ресурсы - это алгоритм генерации ключей, который вы только что жестко запрограммировали в игре в запутанном состоянии. Любой может получить ваш «несуществующий» ключ, просто написав небольшую программу, которая решает вашу головоломку в соответствии с вашими правилами.

Олег В. Волков
источник
1
Но не каждая головоломка легко разрешима компьютером, как загадка, которая еще не была создана. Компьютеру также сложно прочитать весь диалог в игре и обработать все текстуры. Даже если бы он это сделал, как бы он узнал, когда всплыло что-то, связанное с этой загадкой? Полный ключ даже не нужно хранить в игре, возможно, есть подсказка, чтобы прочитать обратную сторону коробки, где находится ключ, компьютер не может этого сделать. Даже если бы головоломка была чем-то, что компьютер мог бы решить, как судоку, по крайней мере, он решил бы головоломку, не обходя ее.
Кристер
@Christer, ничто не отличается от того, чтобы выяснить любое другое домашнее шифрование "безопасность по неизвестности". «На коробке» - вы только что написали ключ к ресурсу «бумажная обложка», который вы предоставляете пользователю вместо ресурса «файл», который вы даете пользователю . Большое дело
Волков Олег Викторович
@Chriser, то есть решение «загадки, которая не была сделана раньше», в точности равнозначно «решению самодельного алгоритма шифрования, который не был сделан раньше».
Волков Олег Викторович
Разве вы не видите, как вы могли бы генерировать ключ дешифрования на основе пользовательского ввода? Разве вы не видите, что этот пользовательский ввод может быть чем угодно? Какой правильный пользовательский ввод генерирует хороший ключ дешифрования, который вы спрашиваете? Кто знает, это скрыто на протяжении всей игры разными интересными способами. Надеюсь, вы найдете это, как это весь смысл этого! Удачи в получении этого контента в противном случае.
Кристер
Насколько, черт возьми, это отличается от чтения источника? Вы выполняете задание по заданным правилам -> вы получаете ключ. Вот и все. За исключением того, что вы можете использовать ярлыки, просто читая «подсказки» из других игровых ресурсов, вместо того, чтобы фактически играть в игру.
Волков Олег Викторович