Зашифрований вміст в іграх


45

У мене виникла така ідея використання шифрування, щоб запобігти користувачам з'ясовувати вміст у моїй програмі поза межами самої програми. Як і користувачі, можуть знайти текстури, які ніколи не використовувались у грі, що означало би бути частиною якогось писанка під час перегляду даних гри. Це може, наприклад, зіпсувати його для всіх, якщо вони розміщені в Інтернеті.

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

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

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

Чи є сьогодні програми / ігри, які зробили щось подібне? Зберігання зашифрованого вмісту в своїх іграх? А якщо ні, чому? Чи існує багато правил і норм щодо цього на рівні магазину чи країни? Хтось бачить явні підводні камені, які мені не вистачає? Ігноруючи такі речі, як досвід користувача, ця ідея здається мені звуковою і викликає цікавість, чому я цього раніше не бачив.

Редагувати : Можливо, не ясно, що саме я говорю, тому ось конкретніший приклад.

Скажімо, у мене є функція, яка містить рядки з 20 символів і генерує симетричний ключ, який я можу використовувати для шифрування / розшифрування деякого вмісту в грі. Єдиний спосіб, яким користувач міг би дійти до цього вмісту, - це знати ці 20 символів та генерувати той самий ключ. Цей ключ ніколи не зберігається безпосередньо і генерується під час руху на основі даних користувача. Ці персонажі будуть заховані в грі в тому, що можуть бути книги, діалог з NPC, можливо, навіть поза грою на звороті коробки.

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

Редагувати 2 : Розміщений вміст буде зашифрований довільним та секретним ключем перед тим, як його надсилати споживачеві. Цей ключ, очевидно, не буде поставлений разом із грою. Йому або їй доведеться якось загадувати ключ назад разом, даючи низку підказок, зроблених на основі ключа, і які приховані протягом гри або деінде. Однак ця система буде прозорою для користувача, оскільки ви не знаєте, що вміст був зашифрований, якщо ви насправді не переглянули дані гри.

Як багато хто згадує, це має один очевидний недолік у тому, що його використання обмежене. Після того, як одна людина зрозуміла це, вона / вона може поділитися нею з усіма іншими, якщо не ключ / рішення, то сам вміст. Однак якщо ваш намір полягає в тому, щоб зберегти щось настільки секретно, що одна людина не зможе це вирішити, і люди повинні працювати над її вирішенням, або ви боїтеся, що ваше пасхальне яйце настільки добре приховане (задумом), що це швидше за все хтось знайде його в коді, а не через гру. Тоді я думаю, що це може спрацювати чудово.

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


56
Відповіді зосереджені на технічних деталях, але якщо ваша мета полягає в тому, щоб приховати спойлери, вважають , що ця інформація буде доступна на просто грати в гру , в якій точці (якщо ваша гра популярна) вона буде йти прямо на статтю Wikia для кожного читати, грати чи ні.
Левшенко


5
Це не є дещо зайвим для розважального продукту? Я маю на увазі, що люди можуть отримати "ключ", подивившись покрокове керівництво або дозволити пограти або просто попросити людей, які вже грали в нього. Також гра може стати більш схильною до помилок через цей «більш-менш незрозумілий» спосіб поводження з речами. Інакше мені подобається ідея, і це буде приємний трюк, але він все одно не зупинить людей від злому / обману, а навпаки зробить це складніше
BlueWizard

3
Я думаю, що це було б особливо круто, якби ваші користувачі знали, що зламали вашу гру, і головоломка справді складна. Ви можете уявити на форумах "що це за дивний зашифрований файл".
PyRulez

5
@PyRulez Ага так! Це було моєю основною мотивацією за цим. Я ненавиджу, коли ці примхливі уряди проходять файли ігор, щоб знайти всі великодні яйця. Все лише для того, щоб вони могли розмістити це на форумах ворогів і зруйнувати мораль країни.
Крістер

Відповіді:


90

Це питання задає питання, чи можна (не просто комерційно життєздатне чи якесь інше тлумачення) змусити принаймні одного користувача вирішити головоломку замість злому, щоб розблокувати певний вміст гри.

Наскільки мені відомо, це, безумовно, можливо. Насправді, мені дивно, що інші відповіді говорять, що це відверто неможливо, навіть коли було чітко сказано, що ключ не генерується і не зберігається, а лише зчитується з ігрового стану (у якому можуть бути можливі googleplexes значення). Аргумент про те, що "гра знає, як її розшифрувати", тому вона не працюватиме, то це означає, що будь-яке програмне забезпечення для шифрування / дешифрування з відкритим кодом (наприклад, TrueCrypt) по суті не є безпечним, оскільки ви знаєте "як" розшифрувати контейнери (просто введіть рядок, заснований на введенні клавіатури, це просто так?).

В абсолютному простому випадку, уявіть, що сама гра є симулятором клавіатури, і вона задає питання "що таке пароль для моїх зашифрованих файлів?", Явно ми всі згодні, що наявність вихідного коду для гри не допоможе. А тепер уявіть, що гра задає питання "як називається найбільша тварина на Землі, поєднана з ім'ям найменшої тварини?". Чи не зрозуміло, що навіть наявність вихідного коду гри не допомогло б, і вам все одно доведеться вирішувати головоломку?

Що стосується того, чи можливо це, відповідь є абсолютною ТАК, це можливо.


9
Я вважаю, що ваша відповідь є єдиною на даний момент, яка, здається, повністю розуміє моє питання. Забагато людей, здається, автоматично вважають, що моє питання так само, як і деякі інші питання щодо шифрування, пов'язані з грою. Я розумію, звідки вони беруться, хоча хочу, щоб вони трохи краще прочитали моє запитання.
Крістер

7
Що ви пропонуєте, це те, що рішення проблем зберігається лише в зашифрованому вигляді. Однозначно можливо підтвердити правильне рішення, але в принципі неможливо відмовитись від цього. (як зберігати паролі-101). Другу частину питання про те, як приховати вміст, який не потребує введення користувача, відображати, однак неможливо (зауважте, що, коли я кажу, що користувача немає, я маю на увазі це дуже строго)
WorldSEnder

3
Я думаю, головний момент - це лише те, що вирішити головоломку можна лише одного користувача, адже той перший може інформувати всіх інших. Що робить увесь сенс вправи шифрування приглушеним.
cmaster

4
Із вихідним кодом (або а stringsна виконуваному файлі) загадка на зразок "Як називається найбільша тварина ...?" може все-таки вирішити гравця / хакера, але принаймні він може уникнути небезпечного подорожі до місця в грі, де виникає питання. Тому самі загадки також повинні бути дещо прихованими (текст, оскільки графіки часто може бути достатньо; більш детально, я думаю, я пам’ятаю гру, де звичайні 3d-об'єкти, якщо дивитися з певної точки, перспективно поєднуються до вирішення загадки чи іншого важливого інформація ...)
Хаген фон Ейтцен

4
Враховуючи цитати на кшталт "Це може, наприклад, зруйнувати його для всіх, якщо вони розміщені в Інтернеті". від початкового запитання ... вибачте, але ця відповідь відсутня в суті. Це було б так само вразливим, щоб зруйнувати його для всіх, якщо відповідь або розшифровані файли або що-небудь ще розміщено, і настільки ж вразливі для їх опублікування.
Натан Туггі

57

Його судили. Багато, багато разів. Існує ціла підгалузь, яка присвячена спробам використання шифрування, щоб уникнути доступу користувачів до програми так, як вони вважають за потрібне. І це ніколи не працює. Найкращі схеми захисту, як правило, тривають близько місяця, перш ніж вони зламаються, і справа в Інтернеті полягає в тому, що коли він зламається один раз, він тріщить всюди назавжди, як тільки хтось розміщує його. Очевидний камінь, який вам не вистачає, полягає в тому, що для того, щоб ваша програма використовувала дані, вона повинна містити всю інформацію, необхідну для її розшифрування, і якщо комп'ютер може це зробити, людина, яка має доступ до комп'ютера, може це зробити. що.

Його називають "основною проблемою криптографії": Аліса хоче надіслати повідомлення Бобу, не маючи змоги прочитати Чарлі, навіть якщо він його знайде. Проблема підходу, який ви пропонуєте, полягає в тому, що Боб і Чарлі в цій справі одна і та ж людина .

Я можу зрозуміти бажання не псувати ваших користувачів, але якщо люди хочуть спойлерів, вони знайдуть їх, а якщо цього не зробити, вони схильні активно уникати спойлерів. Але якщо ви хочете по-справжньому зробити чудову гру, підіть навпаки: радикальна відкритість. Подивіться на такі речі, як Neverwinter Nights , Starcraft або серія Elder Scrolls , ігри, які залишаються популярними роками та роками після виходу. Вони роблять це через те, що вони постачають потужні інструменти дизайну з грою, які дозволяють користувачам занурюватися у все, з'ясовувати, як це працює, а також створювати та ділитися власним вмістом. Гра - це лише гра, доки вона не стане спільнотою , і громади не витримають.


3
У цьому випадку хоч злом шифрування було б рівнозначним для написання бота, який розгадував головоломки. Напевно, складніше, ніж просто завершити гру та записати відповіді
Еван

15
Я просто хочу сказати, що ця відповідь насправді не відповідає на моє запитання! Я насправді хочу, щоб люди «зламали код», а точніше вирішили мою головоломку. У цьому вся суть, і так, коли хтось це зрозуміє, я не можу перешкодити йому ділитися рішенням, я цього не намагаюся. Однак ви неправильно сказали, що "він повинен містити всю інформацію, необхідну для його розшифрування", оскільки вся справа в тому, що ця інформація була надана користувачем. Прочитайте оновлене запитання для детальної інформації.
Крістер

6
@Christer Це так і ось чому: Мейсон говорить, кому все одно, чи зможуть вони потрапити до ігрових файлів, щоб дізнатися відповідь головоломки, тому що насправді це зробить лише меншина .
Insane

9
@JonasDralle Це огидно цинічна точка зору, і це теж неправда. Сильна, міцна громада, яка склалася навколо Морровінда та Забуття , не завадила Skyrim продати; якщо що, це зробило це більш успішним!
Мейсон Уілер

3
@Cronax Якщо ви використовуєте шифрування стилю "одноразовий майданчик", в даному випадку - ключовим рішенням головоломки ваш зловмисник не має кращого варіанту, ніж груба форчінг за розміром простору ключів. З правильним видом головоломки, яку можна було б незрозуміло вирішити протягом життя Всесвіту. Крім того, якщо великоднє яйце - це, скажімо, повідомлення від розробника, зловмисник не міг би відрізнити реальне повідомлення від випадкового правильного - Egnlish.
Бен Аронсон

10

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

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

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


Хоча зашифровані дані за допомогою локально збереженого ключа завжди можуть бути зламані. На практиці всі сучасні програми та ігри використовують це певною мірою.
Еван

Ознайомтеся з сомлою та як вона робить монети
Еван

Я вважаю, що питання стосувалося приховування майбутнього контенту від допитливих гравців, а не про те, як захистити валюту та статистику гравців від непрацездатності
axl

1
Оскільки мова йде про великоднє яйце, привертати увагу саме те , що ви хочете.
PyRulez

6
Якщо зробити це складніше, просто залучатимуться більш рішучі люди, я думаю, що це відмінна маркетингова стратегія для гри :)
sampathsris

9

Основна причина, чому це повинно бути в gamedev.SE, полягає в тому, що виконання цього шифрування має наслідки ігрових процесів.

Ви хочете, щоб рішення однієї головоломки було ключем шифрування для наступної. Тобто, фактичні дані цього рішення повинні розшифрувати наступну загадку. Це означає, що ключ дешифрування не є частиною даних вашої гри; він генерується гравцем.

І ось наслідок. Розшифрування зазвичай двійкове. Або у вас є точний ключ розшифровки, необхідний для розшифровки даних, або ви цього не зробите.

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

Візьмемо для прикладу портал, тестову палату 10. Ви повинні піти ліворуч, зробити якісь речі, потім направо і зробити деякі речі, все, щоб опустити платформу.

Або ви можете просто дати собі деяку швидкість і підкинути себе до платформи, коли ви заходите прямо.

GLaDOS: Отже, ви склали головоломку. Гра-головоломка, яка карає людей, які найбільше насолоджуються головоломками. Хороша робота. Але принаймні ці хакери не отримають ваших цінних даних. Тому що люди, які насолоджуються розгадуванням головоломки, є саме тими людьми, які шукають рішення головоломки в Інтернеті.

Тож цього цілком варто.

Отже, головоломки, такі як Пригоди Лоло, SpaceCHEM та Портал (серед мільйонів інших), прямо зараз. Натомість ви повинні розробити свою гру такою, щоб неможливо створити пазл, який має більше ніж одне рішення. Це вимагає дуже великої обережності і зазвичай вимагає істотного обмеження гри.

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

Проблема Аліси Боб і Єви це добре ілюструє. Як зазначив Мейсон у своїй відповіді, ви не можете зберігати таємницю від Єви, якщо Єва також є Боб.

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

Але з часом це стає суперечливим. Якщо хтось може грати в гру самостійно, то також може написати програму, щоб поглинути гру. Отже, все, що ви робите, - це змусити їх повертатися назад та назад із вашого зовнішнього джерела (можливо, із якогось сервера). Після того, як вони тріснуть, як змайструвати повідомлення на вашому сервері, це та сама стара історія.

Але ви тут забуваєте ключовий елемент. Це гра. Якщо хтось обманює в грі, великий крик. Ви не писали гру для шахраїв. Це те ж саме з покроковими квестами або керівництвом по вирівнюванню: люди, які хочуть вирішити завдання самостійно, ігнорують розміщені рішення. Навіть якби вам вдалося зробити розтріскування грою неможливим, не граючи в неї (ми знаємо, що це логічно неможливо, але ВСЕ, якби ви могли), знадобиться лише один хлопець, який пройшов, перш ніж він розмістив все необхідне для його перемоги. Тож ви лише затягуєте неминуче.

Витратьте свій час на приголомшливу гру. Є десять речей, які потребують кожної гри, і останнє, що я подивився, шифрування було не однією з них.


2

Я вважаю, що ваша ідея є безглуздою.

Коли хтось грає у вашу гру, він вирішує пограти в неї, вони не роблять це, щоб виграти нагороду, вони роблять це для задоволення.

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

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


Однак якщо у вашій грі представлено кілька рішень, як-от секретні рівні Super Mario Land, шифрування ваших активів запобіжить легкий доступ до цих рішень.

Хоча це здається моментом на користь вашої ідеї, врешті-решт це не так.

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

Ви можете запобігти витіканню секретних рішень, використовуючи якусь забуту техніку 1 , але все одно буде підозріло (навіщо це робити, якщо немає секретних рішень?), Гравці втратять інтерес до їх пошуку, і у вас буде менше гравців , НЕ більш.
Зрештою, ми можемо пограти ще пару годин після того, як закінчимо гру, щоб запустити кілька писанок, але ми не будемо грати ні хвилини більше, якщо запускати їх знадобиться титанічне зусилля!


Те, що ви хочете зробити, - це як написання книги, де наступна глава зашифрована словом поточної глави, щоб запобігти читачам не зіпсувати собі закінчення.
Подумайте, чи не безглуздо?

1 Досить схоже на VeraCrypt роблять це з прихованими томами.


1
Мені справді подобається ця ідея книги. Я розумію, що це може засмутити багатьох людей, але я також міг уявити, що люди хочуть такої книги. Я знаю людей, які не можуть зіпсувати собі кінець, пропускаючи вперед, навіть намагаючись цього не робити. Тож я думаю, що така книга могла б допомогти. Хоча вони все ще могли шукати ключі в Інтернеті, якщо ключі не були персоналізовані. Вже тоді вони могли просто шукати закінчення безпосередньо. Але якби вони були такі відчайдушні, не було б сенсу намагатися зупинити їх далі, як ви сказали.
Крістер

1

Я не буду коментувати комерційну життєздатність, проте з чисто технічної точки зору це забавна проблема.


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


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

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

Однак навіть тоді є помилка у вашому припущенні, що ключ не присутній у грі. Якби цього не було, ви не могли б спрямовувати своїх гравців до нього; отже, замість того, щоб намагатися змусити сейф жорстоко, можна замість цього інженерувати ігрові активи, шукаючи підказки. Однією з можливих головоломок, яку я можу придумати, є використання текстур для кодування гліфів, і тоді пароль буде складатися з кількох доступних на клавіатурі, як це було виявлено в місцях, де гравців повинен був побувати (для порядку):

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

і будь-яка програма, яка автоматично витягує виграшну комбінацію гліфів, матиме пекло дня.


По-третє, наступна складність - це спільний доступ. Після того, як рішення секрет знайдений, він буде показаний. В ідеалі кожній особі слід вручити трохи іншу версію програмного забезпечення: таку, де ключ є унікальним для їх версії гри. Щоб зробити це практичним, я вважаю, що буде легше відокремити гру (з її активами) від "секретів" (зашифрованих) та "таємних драйверів" (генератора ключів, який розміщує безліч фрагментів текстури у багатьох різних місцях , деякі з яких складають паролі).

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

Тут можливим рішенням буде прив’язати файли до облікового запису користувача та солити пароль, як зазвичай рекомендується:

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

Потім, коли користувач готовий надіслати пароль:

  • попросити користувача увійти (якщо вона ще не була)
  • Програмне забезпечення надсилає як часову позначку, так і гліфівський пароль
  • якщо часова марка відрізняється від збереженої, порадьте користувачеві вона використовує застарілий набір секретних файлів
  • якщо пароль вже намагався занадто багато разів, порадьте користувачеві, який він використовує застарілий набір секретних файлів
  • в іншому випадку хеш-сіль + пароль для створення ключа
  • в іншому випадку відправте ключ назад користувачеві, щоб він міг бачити свої персоналізовані файли
  • збільшити кількість спроб цього пароля за допомогою цього облікового запису

Мета полягає в тому, щоб максимально унеможливити обмін обліковими записами:

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

І ми майже там.


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

Рішення просте (і робить майже все вище застарілим 1 ): не довіряйте клієнту.

Створіть таблицю лідерів на своєму веб-сайті та слідкуйте за ходом гравців у їхньому акаунті. Гравці можуть стверджувати, що вони закінчили гру все, що хочуть, але якщо їхній рахунок не відображає це, всі знають, що їх обманювали ...

... це називається соціальним тиском;)

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


Дякую за продуману відповідь. Ви заробляєте хороші бали. Хоча я хотів би додати, що ключ / рішення не потрібно зберігати в грі, як ви сказали. Наприклад, це може бути сховано на веб-сторінці html ігор, можливо, ви хочете нагородити людей, які переглядають подібні речі. Але навіть у грі ви можете бути більш креативними, як використання загадок як рішення, геометрія, яка розкриває інформацію, коли її дивитесь з кута, використовуйте речі, пов'язані з контекстом, які ви, мабуть, не отримаєте, якщо ви не прочитали багато знань гра. Як, наприклад, у Skyrim є книги чи журнали в комп'ютерних терміналах.
Крістер

Я не згадував це у своєму питанні, тому не хвилюйтеся. Як я уявляв це, ви будете грати цілу гру, і це виглядає як повна гра. Однак були ці приховані двері, які мали дивний замок на ній, до якого ти ніколи не проходив. Будемо сподіватися, що люди цікавлять і розмовляють, можливо, навіть змусять людей працювати разом, щоб зрозуміти це. Оскільки ніхто цього не придумав, це також має бути своєрідною славою для того, щоб з'ясувати. Можливо, якщо достатньо часу пройде невловимі секрети дверей, породить легенди! Гадає, що це зіпсував хтось, просто переглядаючи ігрові активи.
Крістер

@Christer: Гадає, що це зіпсував хтось, просто переглядаючи ігрові активи. => це вирішується за допомогою секретних файлів, щоб справді описати місце (здебільшого використовуються існуючі текстури), коли секрет один раз вийшов, хоча він вийшов ...
Matthieu M.

0

Це цікава ідея; варіант на дисках-головоломках та системах захисту від копіювання введіть слово. Я думаю, що деякі ігри "ARG" працюють так, де зрозуміло, що гравці виступають колективно проти ігрового конструктора.

Очевидно, що коли перша особа розшифрує її, вона опублікує її в Інтернеті.

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

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


0

Обмірковування додаткових заходів безпеки є цікавим, але це не додає вашої продукції конкретної цінності - це демонструє вашу спритність для сухарів, які стикаються з вашим продуктом. За принципом, ваш антагоніст наздогнає вас.

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

Незалежно від того, чи бажаєте ви брати участь у цьому фоновому конкурсі, це ваш дзвінок, але не дозволяйте йому відволікатися від вашого кінцевого продукту, який повинен радувати замовника. Хитра схема шифрування, яка перетворює гру на слимака, не допомагає.


0

Мейсон Уілер має право: ви не можете цього зробити. Хтось завжди може повернути інженеру вашу гру, якщо захоче.

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

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

Що стосується випадкових користувачів, які розміщують ваші текстури на аватарі форуму, то що? Розглянемо це трав’яна реклама.

Нав'язливість щодо "захисту" речей просто відволіче вас від складних реалій, таких як: створення гри .

Коли я бачу людей без жодного продукту, які розмовляють про свої схеми захисту ІР для речей, які навіть не існують, це для мене такий собі дорогоцінний момент, оскільки він піднімає величезний червоний прапор на фігнях протягом усього проекту.


-1

Деякі можливості:

  • Простий старий припухлість коду . Це не зробить код неможливим розшифрувати, але, принаймні, буде важко.

  • Рішення на стороні сервера. Ви надсилаєте на сервер деякі спеціальні команди, і сервер може надіслати вам код ... або навіть завантажити DLC.

  • За допомогою Steganography можна приховати виконуваний код в іншому вмісті.

Це не зробить вашу таємницю на 100% захищеною, але, здається, ніхто навіть не втратить гроші, якщо секрет буде розкритий.


-1

Це марно, як і будь-яка інша схема, де ви зберігаєте і ключ, і алгоритм на клієнті. Якщо ви запитуєте "де ключ, я покладаюся на введення користувачів, а не зберігаю його сам?", Пам'ятайте, що ваша головоломка має правила та ресурси за своїми визначеннями - це вирішується за деяким алгоритмом, а не грубою форсуванням. Цей точний алгоритм та його ресурси - це алгоритм генерації ключів, який ви тільки що жорстко закодували в гру в розгубленому стані. Будь-хто може отримати ваш "неіснуючий" ключ, просто написавши невелику програму, яка розгадує вашу головоломку за вашими правилами.


1
Але не кожна головоломка легко вирішується комп'ютером, як загадка, яка раніше не була складена. Комп'ютеру також важко перечитати все діалогове вікно гри та обробити всі текстури. Навіть якби це було, як би це знати, коли щось, пов’язане з цією головоломкою, спливе? Повний ключ навіть не потрібно зберігати в грі, можливо, є підказка, щоб прочитати зворотну сторону поля, де ключ, комп'ютер не може цього зробити. Навіть якби головоломка була чимось, що комп’ютер міг би вирішити, як-от судоку, принаймні, це було б вирішення головоломки, не обходячи її.
Крістер

@Christer, це нічим не відрізняється від того, щоб з'ясувати будь-яке інше саморобне шифрування "безпекою через неясність". "На скриньці" - ви щойно написали ключ до ресурсу "паперової обкладинки", який ви даєте користувачеві, а не "файловий" ресурс, який ви надаєте користувачеві . Велика справа.
Олег Вікторович Волков

@Chriser, тобто вирішення "загадки, яка не була зроблена раніше" , точно дорівнює "вирішенню саморобного алгоритму шифрування, який раніше не робився".
Олег Васильович Волков

Ви не бачите, як можна створити ключ розшифровки на основі введення користувача? Ви не бачите, що цей ввід користувача може бути чим-небудь? Який правильний ввід користувача, який генерує хороший ключ розшифровки, який ви запитуєте? Хто знає, це заховано протягом усієї гри в усілякі цікаві способи. Сподіваюсь, ви знайдете його таким, як у цьому вся суть! Вдало добиратися до цього вмісту в іншому випадку.
Крістер

Чим саме чорт відрізняється від джерела читання? Ви виконуєте завдання за встановленими правилами -> ви отримуєте ключ. Це все. За винятком того, що ви можете приймати ярлики, просто прочитавши свої «підказки» з інших ігрових ресурсів замість того, щоб насправді грати в гру.
Олег Вікторович Волков
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.