Як зашифрувати збереження файлів без використання ключа? [зачинено]


21

Скажімо, я створив просту програму, яка бере файл, .datякий зашифрований у двійковому форматі , потім розшифровую його в байтовий масив, а потім все знову переписуємо у файл, розшифрований

Наприклад:

Я створив алгоритм бінарного шифрування. => 0100100001100101001000000110100001100101011000 ...

Але це дуже легко розшифрувати ...

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


15
Ви впевнені, що хочете зашифрувати збережені? Існують простіші способи обману, наприклад, при використанні модифікації пам'яті. Я просто стиснув би їх зліб (поставив їх у .gz), це зменшило б розмір і не дозволило б деяким з можливих шахраїв змінити його.
HolyBlackCat

36
Nitpicking: Те, що ви робите, - це кодування , а не шифрування .
Філіп

13
(припустимо, що це для одного гравця) Не намагайтеся запобігти обману в одиночній грі, це дратує і вас, і гравця. І в кінцевому рахунку марний.

6
Це неможливо , щоб зашифрувати файли збереження , так що користувач не може читати або змінювати їх. (Тому що, наприклад, вони могли просто призупинити вашу гру в налагоджувачі відразу після її розшифровки!). Однак ви можете зробити це важче (адже відкрити простий текстовий файл - це дуже просто в порівнянні з пошуком потрібного моменту, щоб призупинити гру в налагоджувачі). Це те, що ти намагаєшся зробити?
користувач253751

6
@DanielBejar Я щойно сказав вам, ви не можете зробити це неможливим, ви можете лише зробити це важче.
користувач253751

Відповіді:


77

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

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

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

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


5
Хоча я не можу уявити, щоб хтось придумав щось хороше за кілька годин. І ви витрачаєте ресурси на те, що вам, мабуть, не потрібно.
Aistis

6
"Коли це офлайн-гра, то навіщо турбуватися?" Що робити, якщо це одиночна гра з онлайн-рейтингом?
Хлопець з капелюхом

19
"що дозволяє гравцям обманювати, може додавати вашій грі цінність", - підкреслили для цього твердження Мене дуже дратують ігри, які вирішують заблокувати частину досвіду, за який я заплатив, поки не досягну певного рівня майстерності, і я радий, що в цих випадках є доступні чіти для розблокування повної гри. Наприклад, я повністю втрачений в гоночних турнірах проти ШІ в старих частинах Need for Speed ; Для мене насолода була швидше в проїзді по різноманітним пейзажам, отже, я зазвичай пропускаю гонки і розблокую всі карти та машини. Гра, яка перешкоджає цьому, мене просто роздратує.
АБО Mapper

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

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

10

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

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

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

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


Ваш другий пункт приємний. Це також може допомогти відслідковувати проблеми у випадку корупції файлів.
knowledge_is_power

4

Зберігайте трансформований хеш SHA256 фактичних даних збереження у файлі збереження.

Порівняйте збережений хеш із значенням SHA256 даних під час завантаження.

Якщо це не відповідає, вони обдурили або пошкодили файл.

Редагувати, щоб уточнити: це ускладнює розправлення системи проти обману, але все-таки можливо .


7
Ніщо не заважає людям перерахувати хеш після внесення змін. Крім того, я не розумію, чому все ще є люди, які виступають за порушений алгоритм MD5 з усіма відомими криптографічними недоліками, коли є набагато кращі альтернативи, такі як SHA-256 (для підписів) або bcrypt (для паролів).
Філіп

1
Простий, швидкий і повністю зламаний.
DeadMG

2
@DeadMG Це порушено дизайн, оскільки користувач має доступ до двійкових файлів, які повинні містити ключ. Використання більш сильного хешу або шифрування файлу чимось на зразок AES було б марною витратою ресурсів і поганим дизайном, оскільки це не забезпечує додаткової безпеки , але при цьому додає витрат. +1, тому що нижченаведена незаслужена.
Пітер - Унбан Роберт Харві

7
@Philipp, оскільки в цьому випадку MD5 явно перевершує SHA-256. Описаний підхід вимагає дешевого алгоритму контрольної суми, який саме є MD5.
Пітер - Унбан Роберт Харві

3
@ tranistor09, якщо це суто клієнтська сторона, ми нічого не можемо забезпечити, і контрольна сума працює так само, як і клієнт шифрує всю справу. У будь-якому випадку це може бути зламано.
Лолум

1

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

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

Чи все це має економічний сенс - це зовсім інша тема.


Я не знаю ... Зробити це важче лише грою ... Але дякую за допомогу! Я намагаюся з усіх сил!
Даніель Бежар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.