Zaszyfrowana treść w grach

45

Wpadłem na pomysł użycia szyfrowania, aby uniemożliwić użytkownikom rozpoznawanie treści w moim programie poza samym programem. Podobnie jak użytkownicy mogą znaleźć tekstury nigdy nie używane w grze, które mają być częścią pewnego rodzaju pisanki podczas przeglądania danych gry. Może to np. Zrujnować go wszystkim, jeśli zostanie opublikowany online.

Wyobraź sobie sekretny pokój, w którym gracz musi nacisnąć odpowiednie cyfry na drzwiach zabezpieczających w grze, które, jeśli są poprawne, powinny wygenerować prawidłowy klucz deszyfrujący, a następnie odszyfrować tę część poziomu i otworzyć drzwi. W ten sposób jajko wielkanocne byłoby niedostępne nawet podczas przeglądania danych gry, ponieważ klucz nie jest w rzeczywistości przechowywany, jest generowany na podstawie danych wprowadzonych przez użytkownika.

Oto kolejny przykład tego, co sobie wyobrażałem. Mam grę logiczną, powiedzmy 20 poziomów, każdy zaszyfrowany przy użyciu innego klucza. Zamiast przechowywać klucz deszyfrujący w programie bezpośrednio umożliwiający komuś dekompilację programu i znalezienie go, zamiast tego generuję klucz szyfrowania / deszyfrowania na podstawie rozwiązania z poprzedniej układanki. W ten sposób gracz musiałby rozwiązać zagadkę, zanim uzyska jakiekolwiek informacje na temat następnego poziomu, nawet przeglądając dane gry.

Gracz, o ile jest kompetentny, może „brutalnie” użyć siły, biorąc pod uwagę, że liczba rozwiązań łamigłówek jest prawdopodobnie mniejsza niż liczba kluczy deszyfrujących. To naprawdę złożoność zagadki i nie jest tutaj bardzo ważna. Choć nie pisać odpowiedzi dotyczące go tutaj

Czy są dzisiaj programy / gry, które zrobiły coś takiego? Zapisujesz zaszyfrowaną zawartość w swoich grach? A jeśli nie to dlaczego? Czy istnieje wiele zasad i regulacji na poziomie sklepu lub kraju? Czy ktoś widzi jakieś oczywiste pułapki, których mi brakuje? Ignorując takie elementy, jak wrażenia użytkownika, wydaje mi się, że ten pomysł wydaje mi się słuszny i zastanawiam się, dlaczego tego nie widziałem.

Edycja : Może nie być do końca jasne, co mówię, więc oto bardziej konkretny przykład.

Załóżmy, że mam funkcję, która pobiera ciąg 20 znaków i generuje klucz symetryczny, którego mogę użyć do szyfrowania / deszyfrowania niektórych treści w grze. Jedynym sposobem, w jaki użytkownik może dostać się do tej treści, jest poznanie tych 20 znaków i wygenerowanie tego samego klucza. Ten klucz nigdy nie jest bezpośrednio zapisywany i jest generowany w locie na podstawie danych wprowadzonych przez użytkownika. Te postacie byłyby ukryte w grze w książkach, dialogu z NPC, może nawet poza grą, nawet z tyłu pudełka.

Zatem przy 2 * 10 ^ 28 możliwych kombinacjach do wypróbowania prawdopodobnie bardziej prawdopodobne jest, że ludzie znajdą treść w zamierzony sposób, a nie patrząc na dane gry.

Edycja 2 : Przed wysłaniem do konsumenta przedmiotowa treść zostanie zaszyfrowana dowolnym, tajnym kluczem . Ten klucz oczywiście nie zostanie dostarczony z grą. Musiałby w jakiś sposób rozwiązać klucz razem, biorąc pod uwagę serię wskazówek wykonanych na podstawie klucza, które są ukryte w grze lub gdzie indziej. Ten system byłby jednak przezroczysty dla użytkownika, ponieważ nie wiedziałbyś, że treść została zaszyfrowana, chyba że przejrzysz dane gry.

Jak już wspomniano, ma to jedną oczywistą wadę, ponieważ jego zastosowanie jest ograniczone. Gdy tylko jedna osoba się zorientuje, może podzielić się nim z innymi, jeśli nie kluczem / rozwiązaniem, to samą treścią. Jeśli jednak masz zamiar zachować coś w tajemnicy, aby jedna osoba nie była w stanie go rozwiązać, a ludzie muszą współpracować, aby go rozwiązać, lub obawiasz się, że twoje easter egg jest tak dobrze ukryte (z założenia), że to jest bardziej prawdopodobne, że ktoś znajdzie go w kodzie raczej podczas gry. Więc myślę, że to może działać świetnie.

Osobiście poleciłbym używać go tylko raz na grę i tylko do rzeczy, które nie wpływają na podstawową rozgrywkę, np. Pisanki, sekretne zakończenie. Każda łamigłówka musiałaby być tak skomplikowana lub dobrze ukryta, aby spowolnić ludzi na tyle, aby szyfrowanie treści było tego warte, a jeśli ta łamigłówka stanęła na przeszkodzie postępom ludzi, prawdopodobnie nikt się nie bawi.

Christer
źródło
56
Odpowiedzi skupić się na szczegółach technicznych, ale jeśli twoim celem jest, aby ukryć spoilery, uważają, że te informacje zostaną udostępnione przez zwyczajnie gry , w tym momencie (jeśli gra jest popularna) to będzie jechać prosto na artykuł Wikia, aby wszyscy czytać, odtwarzać czy nie.
Leushenko
5
Czy to nie jest przesada w przypadku produktu rozrywkowego? Mam na myśli, że ludzie mogą zdobyć „klucz”, przeglądając przewodnik lub pozwalając na zabawę lub po prostu pytając ludzi, którzy już w nią grali. Również gra może stać się bardziej podatna na błędy z powodu tego „mniej lub bardziej niejasnego” sposobu radzenia sobie z rzeczami. W przeciwnym razie podoba mi się ten pomysł i będzie to fajna sztuczka, ale nadal nie powstrzyma ludzi przed hackowaniem / oszukiwaniem, ale raczej utrudni to
BlueWizard
3
Myślę, że byłoby to szczególnie fajne, jeśli twoi użytkownicy są znani z hakowania twojej gry, a łamigłówka jest naprawdę bardzo trudna. Na forach można sobie wyobrazić „co to za dziwny zaszyfrowany plik”.
PyRulez
5
@PyRulez Ah tak! To była moja główna motywacja. Nienawidzę tego, gdy te nieznośne rządy przeglądają pliki gry, aby znaleźć wszystkie pisanki. Wszystko po to, aby mogli opublikować go na forach wrogów i zepsuć moralność kraju.
Christer,

Odpowiedzi:

90

To pytanie dotyczy tego, czy jest możliwe (nie tylko opłacalne komercyjnie lub jakaś inna interpretacja) zmusić co najmniej 1 użytkownika do rozwiązania zagadki zamiast hakowania w celu odblokowania określonej zawartości gry.

Według mojej wiedzy jest to zdecydowanie możliwe. W rzeczywistości dziwne jest dla mnie, że inne odpowiedzi twierdzą, że jest to absolutnie niemożliwe, nawet jeśli zostało bardzo wyraźnie powiedziane, że klucz nie jest ani generowany, ani przechowywany, a jedynie odczytywany ze stanu gry (który może mieć GooglePlex wartości). Argument, że „gra wie, jak ją odszyfrować”, więc nie będzie działać, oznaczałby, że każde oprogramowanie do szyfrowania / deszyfrowania open source (na przykład TrueCrypt) jest z natury niepewne, ponieważ wiesz, jak „odszyfrować” pojemniki (wystarczy wpisać ciąg oparty na danych z klawiatury, to proste, prawda?).

W absolutnie najprostszym przypadku wyobraź sobie, że sama gra jest symulatorem klawiatury i zadaje pytanie „jakie jest hasło do moich zaszyfrowanych plików?”, Wyraźnie wszyscy zgadzamy się, że posiadanie kodu źródłowego do gry nie pomogłoby. Teraz wyobraź sobie, że gra zadaje pytania: „Jak nazywa się największe zwierzę na Ziemi połączone z imieniem najmniejszego zwierzęcia?”. Czy nie jest jasne, że nawet posiadanie kodu źródłowego gry nie pomoże, a ty nadal musisz rozwiązać zagadkę?

W odniesieniu do tego, czy jest to możliwe, odpowiedź brzmi absolutnie TAK, jest to możliwe.

mk12
źródło
9
Wydaje mi się, że Twoja odpowiedź jest jedyną, która wydaje się w pełni rozumieć moje pytanie. Zbyt wielu wydaje się automatycznie myśleć, że moje pytanie jest podobne do niektórych innych pytań związanych z szyfrowaniem. Rozumiem, skąd pochodzą, ale chciałbym, żeby trochę lepiej przeczytali moje pytanie.
Christer,
7
Proponujesz, aby rozwiązanie problemów było przechowywane tylko w sposób zaszyfrowany. Zdecydowanie możliwe jest potwierdzenie prawidłowego rozwiązania, ale w zasadzie niemożliwe jest powrót do niego. (how-to-store-passwords-101). Druga część pytania, w jaki sposób ukryć treści, które nie wymagają wyświetlania danych wejściowych użytkownika, jest jednak niemożliwa do rozwiązania (zauważ, że kiedy mówię brak danych wejściowych użytkownika, mam na myśli to bardzo ściśle)
WorldSEnder
3
Myślę, że główną kwestią jest to, że można zmusić tylko jednego użytkownika do rozwiązania zagadki, ponieważ ten pierwszy może poinformować wszystkich innych. Co wycisza cały sens ćwiczenia szyfrującego.
cmaster
4
Z kodem źródłowym (lub stringsw pliku wykonywalnym) zagadka taka jak „Jak nazywa się największe zwierzę ...?” może nadal wymagać rozwiązania przez gracza / hakera, ale przynajmniej może uniknąć niebezpiecznej podróży do miejsca w grze, w którym pojawia się pytanie. Dlatego też same zagadki powinny być nieco ukryte (tekst, ponieważ grafika może często wystarczyć; bardziej szczegółowo, myślę, że pamiętam grę, w której normalne obiekty 3d, oglądane z określonego punktu, łączą się perspektywicznie z rozwiązaniem zagadki lub innego ważnego informacje ...)
Hagen von Eitzen
4
Biorąc pod uwagę takie cytaty, jak „Może to np. Zrujnować dla wszystkich, jeśli zostaną opublikowane online”. z pierwotnego pytania ... przepraszam, ale w tej odpowiedzi nie ma sensu. Byłoby równie podatne na zniszczenie go dla wszystkich, jeśli zostaną opublikowane odpowiedzi lub odszyfrowane pliki lub cokolwiek, i jest równie podatne na ich opublikowanie.
Nathan Tuggy
57

To zostało wypróbowane. Wiele, wiele razy. Istnieje cała branża poświęcona próbom użycia szyfrowania, aby uniemożliwić użytkownikom dostęp do programu według własnego uznania. I to nigdy nie działa. Najlepsze systemy ochrony trwają zwykle około miesiąca, zanim zostaną złamane, a Internet polega na tym, że gdy raz zostanie złamany, zostanie złamany na zawsze, gdy tylko ktoś go opublikuje. Oczywistą pułapką, której brakuje, jest to, że aby Twój program mógł korzystać z danych, musi zawierać wszystkie informacje niezbędne do ich odszyfrowania, a jeśli komputer może to zrobić, osoba z dostępem do niego może to zrobić że.

Nazywa się to „podstawowym problemem kryptografii”: Alice chce wysłać wiadomość do Boba, a Charlie nie będzie w stanie jej odczytać, nawet jeśli ją złapie. Problem z proponowanym przez ciebie podejściem polega na tym, że Bob i Charlie są w tym przypadku tą samą osobą .

Rozumiem chęć nie psucia użytkowników, ale jeśli ludzie chcą spoilerów, znajdą je, a jeśli tego nie zrobią, będą aktywnie unikać spoilerów. Ale jeśli chcesz naprawdę zrobić świetną grę, idź na odwrót: radykalna otwartość. Spójrz na rzeczy takie jak Neverwinter Nights , Starcraft lub seria Elder Scrolls , gry, które pozostają popularne przez wiele lat po wydaniu. Robią to, ponieważ dostarczają z grą potężne narzędzia do projektowania, które pozwalają użytkownikom zagłębić się we wszystko, dowiedzieć się, jak to działa, a także budować i udostępniać własne treści. Gra jest tylko grą, dopóki nie stanie się społecznością , a społeczności przetrwają.

Mason Wheeler
źródło
3
W tym przypadku złamanie szyfrowania byłoby równoznaczne z napisaniem bota rozwiązującego łamigłówki. Prawdopodobnie trudniejsze niż ukończenie gry i zapisanie odpowiedzi
Ewan
15
Chcę tylko powiedzieć, że ta odpowiedź tak naprawdę nie odpowiada na moje pytanie! Naprawdę chcę, żeby ludzie „złamali kod”, a raczej rozwiązali moją łamigłówkę. To jest cała kwestia i tak, kiedy ktoś to zrozumie, nie mogę go powstrzymać przed udostępnieniem rozwiązania, nie próbuję. Jednak mylicie się mówiąc „musi zawierać wszystkie informacje niezbędne do jego odszyfrowania”, ponieważ chodziło o to, że użytkownik podał tę informację. Przeczytaj zaktualizowane pytanie, aby uzyskać szczegółowe informacje.
Christer
6
@Christer Robi to i oto dlaczego: Mason mówi, kogo obchodzi, czy mogą dostać się do plików gry, aby znaleźć odpowiedź na zagadkę, ponieważ tak naprawdę zrobi to tylko mniejszość .
Szalony
9
@JonasDralle To obrzydliwie cyniczny punkt widzenia, a także nieprawda. Silna, trwała społeczność, która została zbudowana wokół Morrowind i Oblivion, nie powstrzymała Skyrim przed sprzedażą; jeśli już, to odniosło większy sukces!
Mason Wheeler,
3
@Cronax Jeśli używasz szyfrowania w stylu „jednorazowej podkładki”, przy czym - w tym przypadku - kluczem jest rozwiązanie układanki, twój atakujący nie ma lepszej opcji niż brutalne forsowanie w stosunku do wielkości przestrzeni na klawisze. Z odpowiednim rodzajem puzzli, które mogłyby być niewykonalnie duże do rozwiązania w ciągu życia wszechświata. Również, jeśli pisanka jest, powiedzmy, wiadomością od dewelopera, atakujący nie będzie w stanie odróżnić prawdziwej wiadomości od losowej poprawnej-Egnlish.
Ben Aaronson
10

Byłem już wystarczająco długo, aby wiedzieć, że jeśli treść tam jest, ktoś ją znajdzie. Utrudnienie przyciągnie bardziej zdeterminowanych ludzi. Im bardziej popularny jest twój produkt, tym bardziej staje się on interesujący. Częściowo dlatego, że jest to wyzwanie, częściowo dlatego, że jest tak wiele miejsc, w których można zdobyć „uznanie”, publikując tego rodzaju informacje.

Jeśli klucz jest generowany lokalnie przez grę, możesz znaleźć sposób na oszukiwanie w grze aż do momentu wygenerowania klucza lub po prostu wykopać odpowiedni fragment kodu. Jeśli klucz zostanie wysłany do ciebie z serwera po wykonaniu pewnych kroków w grze, ktoś oszuka twój serwer w przekonaniu, że dostał się wystarczająco daleko.

Ostatecznie Twoja gra zyska znacznie więcej na spędzaniu czasu na zabawie i angażowaniu, a także utrudnieniu w określeniu koloru następnego poziomu.

axl
źródło
Chociaż zaszyfrowane dane z lokalnie przechowywanym kluczem zawsze można zhakować. W praktyce wszystkie nowoczesne aplikacje i gry wykorzystują to do pewnego stopnia.
Ewan
Sprawdź soomla i jak robi monety
Ewan
Uważam, że pytanie dotyczyło ukrywania przyszłych treści przed ciekawymi graczami, a nie o tym, jak chronić waluty i statystyki graczy przed manipulacją
axl
1
Ponieważ chodzi o pisankę, przyciągnięcie uwagi jest dokładnie tym, czego chcesz.
PyRulez
6
Utrudnienie
9

Głównym powodem, dla którego powinno to być na gamedev.SE, jest to, że szyfrowanie ma konsekwencje dla rozgrywki.

Chcesz, aby rozwiązaniem jednej układanki był klucz szyfrujący dla następnej. Oznacza to, że rzeczywiste dane tego rozwiązania muszą odszyfrować kolejną łamigłówkę. Oznacza to, że klucz deszyfrujący nie jest nigdzie częścią danych gry; jest generowany przez gracza.

A oto konsekwencja. Deszyfrowanie jest zwykle binarne. Albo masz dokładny klucz deszyfrujący potrzebny do odszyfrowania danych, albo nie.

Konsekwencją tego jest to, że każda gra, którą projektujesz, musi być tak wąsko skoncentrowana, że ​​istnieje tylko jedno możliwe rozwiązanie na każdym poziomie. Dlatego mechanika układanki musi być bardzo starannie zaprojektowana, tak aby gracz nie mógł rozwiązać układanki w inny sposób niż cel.

Weźmy na przykład portal, komorę testową 10. Powinieneś iść w lewo, zrobić kilka rzeczy, a następnie iść w prawo i zrobić coś innego, wszystko po to, aby obniżyć platformę.

Lub możesz po prostu nabrać prędkości i rzucić się na platformę, gdy tylko wejdziesz.

GLaDOS: Więc stworzyłeś grę logiczną. Gra logiczna, która karze ludzi, którzy najbardziej lubią gry logiczne. Dobra robota. Ale przynajmniej ci hakerzy nie uzyskają twoich cennych danych. Ponieważ ludzie, którzy lubią rozwiązywać łamigłówki, to dokładnie tacy ludzie, którzy szukają rozwiązań gier logicznych online.

To jest całkowicie tego warte.

Tak więc gry logiczne, takie jak Adventures of Lolo, SpaceCHEM i Portal (pośród milionów innych) są już dostępne. Zamiast tego musisz zaprojektować grę tak, aby niemożliwe było stworzenie układanki, która ma więcej niż jedno rozwiązanie. Wymaga to bardzo dużej ostrożności i zwykle wymaga znacznego ograniczenia rozgrywki.

GLaDOS: Więc stworzyłeś grę logiczną. Gra, w którą mogą grać osoby, które lubią znajdować kreatywne rozwiązania łamigłówek. Stworzyłeś grę, w której nie ma kreatywnych rozwiązań zagadek. * powolny klask *

Nie twierdzę, że nie można stworzyć takiej gry. Albo że taka gra nie może być dobra. Tyle tylko, że taka gra musiałaby zostać zaprojektowana w określony sposób.

Och, i musisz zaprojektować tę rozgrywkę w taki sposób, aby niemożliwe (lub bardzo trudne) było mechaniczne znalezienie rozwiązania.

GLaDOS: Więc stworzyłeś grę logiczną. Gra logiczna, która jest bardziej interesująca do zhakowania niż do grania. Dobra robota.


Oczywiście jest jedno zastrzeżenie: znaczenie „rozwiązanie”. Lub bardziej konkretnie, jakie elementy rozwiązania bierzesz pod uwagę?

W przypadku każdej gry, w której porusza się postać, prawdopodobnie nie zamierzasz użyć jej dokładnych ruchów do skonstruowania klucza deszyfrującego. Na przykład, jeśli masz grę logiczną, w której gracz musi podnieść pewne elementy, aby „rozwiązać” zagadkę, możesz uzależnić klucz od kolejności dotknięcia tych elementów.

Oczywiście napotyka to powyższy problem, w którym gracz znajduje sposób na zrobienie rzeczy poza kolejnością. Co znowu oznacza, że ​​musisz zaprojektować układankę w taki sposób, aby istniało tylko jedno zamówienie.

Co więcej, wszelkie elementy użyte do zbudowania klucza deszyfrującego muszą zapewniać wystarczającą entropię, aby utrudnić odszyfrowanie metodą brute force. Korzystając z powyższej mechaniki kolejności zbierania, każdy nowy przedmiot to w rzeczywistości jeden dodatkowy bit. Jeśli poziom zawiera tylko 8 elementów, szyfrujesz 8-bit. Co za bzdury; większość smartfonów poradzi sobie z tym w kilka sekund.

W dzisiejszych czasach potrzebujesz co najmniej 128, aby było to nawet nieco trudne. Co teraz oznacza, że ​​na każdym poziomie musi znajdować się wiele elementów, które po raz kolejny wpływają na projekt gry.

Nicol Bolas
źródło
2
@Christer: Twój przykład zdradza tylko nieistotność twojego ogólnego pytania. Zawartość „sekretnego ołtarza poza zadaniami” jest z definicji nieistotna dla każdej gry, która zasadniczo polega na wykonywaniu zadań . A jeśli twoja gra nie polega na wykonywaniu zadań, dlaczego masz w niej zadania? Tak czy inaczej, ogólny fakt pozostaje: spędzasz bardzo dużo czasu na czymś, co nie ma rzeczywistego znaczenia dla twojej gry lub twoich graczy. Powinieneś skoncentrować swój bardzo ograniczony czas i energię na rzeczach, które mają znaczenie .
Nicol Bolas
2
@Christer: „ Ponieważ fakt, że szyfrowanie jest używane, jest dla 99,9% użytkowników przejrzysty, nie jest to słuszny argument, ponieważ jest to okropny pomysł. ” Jeśli sprawi, że pisanka zajmie więcej czasu na rozwój, to może przejdź do naprawdę przydatnych funkcji, a następnie tak, to okropny pomysł. Spędziłeś więcej czasu na sformułowaniu pytania i odpowiedzi na odpowiedzi, niż zasługuje ta funkcja . W tym czasie mogłeś pisać swoją grę. Jeśli jest przejrzysty dla 99,9% użytkowników ... to dlaczego miałoby to mieć dla nich znaczenie, jeśli jest zaszyfrowane? Po co spędzać czas dla 0,1% ludzi?
Nicol Bolas,
2
Przykro mi, ale lubię się bawić przy tworzeniu moich gier! Nie każdy może być robotem produkującym gry. Pozwól mi także ocenić, ile czasu to zajmie i ile chciałbym wydać. Sama część szyfrująca byłaby co najmniej łatwa do wdrożenia.
Christer
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.Niekoniecznie: mógł zaszyfrować treść dla każdego możliwego rozwiązania i wysłać zduplikowaną zaszyfrowaną treść dla wszystkich możliwych rozwiązań. Miejsce można zaoszczędzić za pomocą szyfrowania dwuwarstwowego - klucz użytkownika w połączonej odpowiedzi odpowiada konkretnemu rozwiązaniu, dokument odpowiada treści.
mucaho
4
@mucaho: To wymaga wcześniejszej znajomości „każdego możliwego rozwiązania”.
Nicol Bolas,
8

Odpowiedzi tutaj są dobre; Spojrzałbym na to z innej perspektywy. To, co opisujesz, jest funkcją . Funkcje mają koszty i korzyści. Koszty obejmują zarówno koszty dolara związane z utworzeniem funkcji, jak i „koszty alternatywne”. Są to: w świecie, w którym masz skończone dolary i skończone godziny oraz skończonych programistów, każda funkcja, którą robisz, oznacza nieskończoną liczbę możliwych funkcji, które nie zostały wykonane na jej miejscu.

Pytanie brzmi zatem: czy możesz podać rzeczywiste koszty tej funkcji? Nie ma żadnych bezpłatnych funkcji, więc bądź realistą co do kosztów. Czy chcesz zapłacić tysiąc dolarów za tę funkcję? Sto tysięcy? Milion? Jakie funkcje chcesz wyciąć, aby mieć tę funkcję?

Myślę, że gdy zaczniesz ustalać priorytety pod względem kosztów, korzyści i utraconych możliwości, zdasz sobie sprawę, że spędziłeś już zbyt dużo czasu na myśleniu o tej funkcji, gdy mogłeś zastanawiać się nad sposobami uczynienia gry przyjemniejszą.

Eric Lippert
źródło
5

Problem Alice Bob i Eve dobrze to ilustruje. Jak zauważył Mason w swojej odpowiedzi, nie możesz zachować tajemnicy przed Ewą, jeśli Ewa jest również Bobem.

Zatem każde rozwiązanie polegałoby na tym, że Bob nie posiadałby wszystkich niezbędnych informacji. Będziesz musiał traktować każdy poziom jako osobną wiadomość, zaszyfrowaną osobno od siebie, i mieć zewnętrzne źródło wiadomości na następny poziom, które będzie w stanie odpowiednio przechowywać wiadomości.

Ale w końcu staje się to dyskusyjne. Jeśli ktoś może sam zagrać w grę, może także napisać program do jej przyjęcia. Więc wszystko, co robisz, to zmuszanie ich do przechodzenia tam iz powrotem ze źródła zewnętrznego (prawdopodobnie jakiegoś serwera). Gdy już złamią sposób tworzenia wiadomości na serwerze, jest to ta sama stara historia.

Ale tutaj zapominasz o kluczowym elemencie. To jest gra. Jeśli ktoś oszukuje w grze, to wielkie whoop. Nie napisałeś gry dla oszustów. To samo dotyczy instrukcji misji lub poradników dotyczących wyrównywania poziomów: ludzie, którzy chcą samodzielnie rozwiązać problem, zignorują opublikowane rozwiązania. Nawet gdybyś był w stanie uniemożliwić złamanie gry bez grania (wiemy, że jest to logicznie niemożliwe, ale NAWET JEŚLI mógłbyś) wystarczyłby tylko jednego faceta, zanim opublikowałby wszystko, co konieczne, aby go pokonać. Więc opóźniasz tylko to, co nieuniknione.

Spędź czas, tworząc niesamowitą grę. Istnieje Dziesięć rzeczy Każda gra musi i ostatni spojrzałem, szyfrowanie nie był jednym z nich.

corsiKa
źródło
2

Uważam, że twój pomysł jest bezcelowy.

Kiedy ktoś gra w twoją grę, decyduje się na nią zagrać, nie robi tego, aby wygrać nagrodę, robią to dla zabawy.

Użytkownicy wiedzą, że największą frajdą jest granie tak, jak chciałeś, i nie będą oszukiwać , ponieważ Twoi klienci już ci ufają jako gawędziarza.

Również gdy tylko ktoś znajdzie rozwiązanie zagadki, np. Twój klucz, może po prostu opublikować ją gdzieś w Internecie.
Gracze, którzy chcą oszukiwać, nadal będą mogli to zrobić.


Jeśli jednak gra zawiera wiele rozwiązań, takich jak tajne poziomy Super Mario Land, szyfrowanie zasobów uniemożliwi dostęp do tych rozwiązań.

Chociaż wydaje się to przemawiać na korzyść twojego pomysłu, ostatecznie tak nie jest.

Nawet w przypadku szyfrowania nadal można byłoby wiedzieć, że takie tajne rozwiązania istnieją.
Gdy wiadomo, że istnieje tajne rozwiązanie, uniemożliwienie graczom spojrzenia na tajne aktywa byłoby nieistotne, ponieważ nadal chcieliby uzyskać dostęp do ukrytych części gry przez samą grę (tak, nawet jeśli widzieli już wszystkie ukryte tekstura / klip / audio / tekst).

Możesz zapobiec wyciekom z tajnych rozwiązań, stosując jakąś nieświadomą technikę 1 , ale nadal byłoby to podejrzane (po co to robić, jeśli nie ma tajnych rozwiązań?), Gracze straciliby zainteresowanie ich znalezieniem i miałbyś mniej graczy , nie więcej.
W końcu możemy zagrać jeszcze kilka godzin po ukończeniu gry, aby uruchomić jajka wielkanocne, ale nie zagramy więcej, jeśli ich uruchomienie wymagałoby gigantycznego wysiłku!


To, co chcesz zrobić, to jak pisanie książki, w której następny rozdział jest zaszyfrowany słowem bieżącego rozdziału, aby zapobiec czytelnikom zepsucia sobie zakończenia.
Pomyśl o tym, czy to nie ma sensu?

1 Zupełnie jak VeraCrypt z ukrytymi woluminami.

Margaret Bloom
źródło
1
Właściwie to lubię ten pomysł na książkę. Rozumiem, że może to frustrować wielu ludzi, ale wyobrażam sobie również ludzi, którzy naprawdę chcą takiej książki. Znam ludzi, którzy nie mogą zepsuć sobie zakończenia, skacząc naprzód, nawet gdy próbują tego nie robić. Myślę, że taka książka mogłaby pomóc. Chociaż nadal mogą wyszukiwać klucze online, chyba że klucze zostaną spersonalizowane. Nawet wtedy mogliby po prostu bezpośrednio sprawdzić zakończenie. Mimo to, gdyby byli tak zdesperowani, nie byłoby sensu próbować ich powstrzymywać, tak jak powiedziałeś.
Christer,
1

Nie będę komentować rentowności komercyjnej, jednak z czysto technicznego punktu widzenia jest to zabawne wyzwanie.


Chciałbym najpierw zauważyć, że wszystko, co nie jest zaszyfrowane, nie może być chronione. Nie możesz bramować wejścia do sekretu, krakersy znajdą sposób obejścia bramy, zamiast tego musisz uczynić cały sekret samą bramą. Jeśli chodzi o zasoby, nie musi to oznaczać całych tekstur itp., Tylko szyfrowanie planu, które są używane i jak jest wystarczające, a ze względu na wydajność będziesz chciał zaszyfrować jak najmniej danych.


Po drugie, masz rację, że jeśli klucz jest zawarty w oprogramowaniu, zostanie usunięty z oprogramowania. Wiele gier, chroniąc zawartość, stara się używać zabezpieczeń przez niejasności lub mechanizmów zapewniających, że oprogramowanie do gier nie zostało zmienione. To tylko taktyka opóźniająca.

Twój pomysł użycia rozwiązania zagadki jako klucza jest dość interesujący, jednak użycie klucza dostarczonego bezpośrednio może być z łatwością brutalne. Zamiast tego traktuj dane wejściowe użytkownika jako hasło i zastosuj najnowocześniejszy schemat mieszania haseł: wytworzony skrót jest kluczem.

Jednak nawet wtedy istnieje błędne założenie, że klucz nie jest obecny w grze. Gdyby tak nie było, nie można było skierować w to swoich graczy; dlatego zamiast próbować brutalnie wymusić sejf, można zamiast tego dokonać inżynierii wstecznej zasobów gry w poszukiwaniu wskazówek. Jedną z potencjalnych łamigłówek, o których mogę myśleć, jest używanie tekstur do kodowania glifów, a następnie hasło składałoby się z kilku dostępnych na klawiaturze, zgodnie z lokalizacjami, które gracz powinien odwiedzić (w kolejności):

  • sedno problemu polega na tym, że rozpoznawanie obrazów jest nadal nieco trudne dla komputerów
  • na którym nakładamy fakt, że crackery CAPTCHA są dostrojone do liter i cyfr, a nie niestandardowych glifów
  • na dodatek nakładamy na siebie fakt, że łącząc wiele tekstur (z przezroczystością) w celu ujawnienia graczowi glifu, żaden pojedynczy zasób w grze nie zawiera tego, jak powinien wyglądać glif
  • używaj innych tekstur (z fragmentami) w całym miejscu, ale nigdy w sposób, który generuje pełny glif, z wyjątkiem ukrytych miejsc, do których gracz nigdy nie powinien być w stanie dotrzeć

a każdy program, który automatycznie wyodrębni zwycięską kombinację glifów, będzie miał piekny dzień.


Po trzecie, następną trudnością jest dzielenie się. Po rozwiązanie tajemnicy zostanie znaleziony, to zostanie ujawnione. Idealnie byłoby, gdyby każda osoba otrzymała nieco inną wersję oprogramowania: taką, w której klucz jest unikalny dla ich wersji gry. Aby było to praktyczne, przypuszczam, że łatwiej byłoby oddzielić grę (z jej zasobami) od „sekretów” (zaszyfrowanych) i „tajnych sterowników” (generatora kluczy, który umieszcza wiele fragmentów tekstury w wielu różnych miejscach , z których niektóre tworzą hasła).

Oczywistym wektorem ataku jest oszukanie albo generatora, który zawsze wybiera to samo hasło, albo oszukiwanie weryfikatora, który zawsze akceptuje to samo hasło (na przykład przez pobranie pliku tajnych plików innej osoby).

W tym przypadku potencjalnym rozwiązaniem może być połączenie plików z kontem użytkownika i zasolenie hasła, jak to zwykle zaleca się:

  • gdy użytkownik zażąda zestawu plików, losowo wygeneruj sól i tyle haseł, ile masz sekretów, a następnie utwórz tajne zasoby (możesz na przykład ograniczyć ten proces do jednego razu / dnia / użytkownika, aby uniknąć przeciążenia serwera)
  • przechowuj znacznik czasu generacji i soli w informacjach o koncie użytkownika
  • odsyłać znacznik czasu i spersonalizowane tajne pliki do użytkownika

Następnie, gdy użytkownik jest gotowy do przesłania hasła:

  • mieć zalogowanego użytkownika (jeśli jeszcze tego nie była)
  • niech oprogramowanie wyśle ​​zarówno znacznik czasu, jak i hasło glifów
  • jeśli znacznik czasu różni się od zapisanego, poinformuj użytkownika, że ​​używa przestarzałego zestawu tajnych plików
  • jeśli hasło próbowano już zbyt wiele razy, poinformuj użytkownika, że ​​używa przestarzałego zestawu tajnych plików
  • w przeciwnym razie haszuj sól + hasło, aby wygenerować klucz
  • w przeciwnym razie odeślij klucz do użytkownika, aby mogła zobaczyć spersonalizowane pliki
  • zwiększ liczbę prób spróbowania tego hasła przez to konto

Celem jest tutaj maksymalne utrudnienie udostępniania konta:

  • współdzielenie konta w celu generowania tajnych plików jest (a) ograniczone, ponieważ tylko jeden można wygenerować dziennie i (b) bezużyteczny, ponieważ ostatni wygenerowany powoduje, że drugi
  • udostępnianie konta i rozpowszechnianie powiązanych tajnych plików jest bezużyteczne, ponieważ dane hasło może być użyte tylko N razy, zanim nie da już klucza

I jesteśmy już prawie na miejscu.


Wreszcie, nawet tam, cracker może wydać zmodyfikowaną wersję gry, w której tajne zasoby są odszyfrowywane i bezpośrednio zintegrowane (z pominięciem starannego schematu weryfikacji).

Rozwiązanie jest proste (i sprawia, że ​​prawie wszystko jest przestarzałe 1 ): nie ufaj klientowi.

Utwórz tabelę wyników na swojej stronie i śledź postępy graczy na ich koncie. Gracze mogą twierdzić, że ukończyli grę tak, jak chcą, ale jeśli ich konto to nie odzwierciedla, wszyscy wiedzą, że oszukiwali ...

... to się nazywa presja społeczna;)

1 Z wyjątkiem pliku pozycjonowania tekstur, którego użyliśmy, aby zapobiec odgadywaniu klucza przez program, a jednocześnie umożliwić użytkownikowi jego uzyskanie.

Matthieu M.
źródło
Dzięki za miłą odpowiedź. Robisz dobre punkty. Chociaż chciałbym dodać, że klucz / rozwiązanie nie musi być przechowywane w grze, jak powiedziałeś. Może być ukryty na przykład w html strony gry, być może chcesz wynagrodzić ludzi przeglądających takie rzeczy. Ale nawet w grze możesz być bardziej kreatywny, np. Stosować zagadki jako rozwiązanie, geometrię, która odsłania informacje, gdy patrzysz pod kątem, używaj rzeczy związanych z kontekstem, których prawdopodobnie nie dostałbyś, chyba że przeczytałeś wiele z wiedzy o świecie gra. Podobnie jak Skyrim ma książki lub logi w terminalach komputerowych.
Christer,
Nie wspomniałem o tym w moim pytaniu, więc nie martw się. Tak sobie wyobrażałem, że grasz przez całą grę i wydaje się, że to kompletna gra. Były jednak te ukryte drzwi, które miały dziwny zamek, którego nigdy nie przeszedłeś. Miejmy nadzieję, że zainteresuje ludzi i zacznie mówić, a może nawet sprawi, że ludzie będą pracować razem, aby to zrozumieć. Ponieważ nikt tego nie rozgryzł, jest to również rodzaj chwały za rozszyfrowanie. Może jeśli minie wystarczająco dużo czasu, nieuchwytne tajemnice drzwi zrodzą legendy! Ssanie jest zrujnowane przez kogoś, kto właśnie przegląda zasoby gry.
Christer,
@Christer: Ssanie jest zrujnowane przez kogoś, kto tylko przegląda zasoby gry. => można to rozwiązać za pomocą tajnych plików, aby opisać to miejsce (przeważnie wykorzystując istniejące tekstury), gdy tylko sekret zostanie raz
Matthieu M.
0

To ciekawy pomysł; wariant na puzzlach i systemy ochrony przed kopiowaniem z użyciem słów kluczowych. Wydaje mi się, że niektóre gry „ARG” działają w ten sposób, ponieważ rozumie się, że gracze działają wspólnie przeciwko projektantowi gier.

Oczywiście, gdy pierwsza osoba go odszyfruje, opublikuje je w Internecie.

Treści generatywne lub proceduralne mogą działać w ten sam sposób: nie widzisz tego samego świata co inny gracz, chyba że udostępnisz „zalążek”.

Nie widzę z tym żadnych problemów prawnych, chociaż Apple może odrzucić go ze swojego App Store i być może będziesz musiał podać rozwiązanie, aby uzyskać zgodę na konsole do gier.

pjc50
źródło
0

Rozważanie dodatkowych środków bezpieczeństwa jest zabawne, ale nie dodaje konkretnej wartości Twojemu produktowi - pokazuje twoją zręczność wobec krakersów, które napotykają Twój produkt. Z zasady twój antagonista cię dogoni.

W przeciwieństwie do programistów, którzy rozwijają się w kreatywności, crackerzy to ludzie analityczni - mogą intuicyjnie wykorzystywać Twój program. Gdy programiści stosują nadmierne środki bezpieczeństwa, zaprzeczają, że cracker może ponownie zmienić swój schemat ochrony .

Niezależnie od tego, czy chcesz wziąć udział w tej konkurencji w tle, to Twój telefon - ale nie odrywaj się od produktu końcowego, który musi zadowolić klienta. Dziwaczny schemat szyfrowania, który zamienia grę w ślimak, nie pomaga.

Avenicci
źródło
0

Mason Wheeler ma rację: nie możesz tego zrobić. Ktoś zawsze może odtworzyć twoją grę, jeśli chce.

I tak nie musisz „chronić” swojej gry w opisany sposób. Gdy tylko jedna osoba znajdzie jajko wielkanocne, tajemnica wychodzi z torby. Jeśli każda kopia gry ma inne pisanki, znana będzie tylko kopia hakera. Czy naprawdę obchodzi Cię to, że jeden haker na 1000 osób znalazł jajko wielkanocne bez przechodzenia przez grę?

Prawo autorskie jest takie, że nikt nie może zarabiać na grze bez ryzykowania poważnego procesu sądowego, więc prawo autorskie chroni cię.

Jeśli chodzi o przypadkowych użytkowników umieszczających tekstury na swoim awatorze na forum, co z tego? Rozważ to reklama oddolna.

Obsesja na punkcie „ochrony” rzeczy odciągnie Cię od trudnych rzeczywistości, takich jak: tworzenie gry .

Kiedy widzę ludzi bez produktu rozmawiających o swoich programach ochrony IP dla rzeczy, które nawet nie istnieją, to dla mnie taki moment na odejście, ponieważ wywołuje ogromną bzdurę czerwoną flagę nad całym projektem.

Tyler Durden
źródło
-1

Niektóre możliwości:

  • Zwykłe zaciemnianie starego kodu . Nie uniemożliwi dekodowania kodu, ale przynajmniej będzie trudny.

  • Rozwiązanie po stronie serwera. Wysyłasz specjalne polecenia do serwera, a serwer może wysłać Ci kod ... lub nawet pobrać DLC.

  • Możesz użyć steganografii, aby ukryć kod wykonywalny w innej treści.

To nie sprawi, że Twój sekret będzie w 100% bezpieczny, ale wydaje się, że nikt nawet nie straci pieniędzy, jeśli sekret zostanie ujawniony.

Borjab
źródło
-1

Jest bezużyteczny, podobnie jak każdy inny schemat, w którym przechowujesz zarówno klucz, jak i algorytm na kliencie. Jeśli zapytasz „gdzie jest klucz, polegam na danych wejściowych użytkowników i nie przechowuję go sam?”, Pamiętaj, że Twoja łamigłówka ma reguły i zasoby według definicji - rozwiązuje ją jakiś algorytm, a nie brutalność. Ten dokładny algorytm i jego zasoby JEST algorytmem generowania klucza, który właśnie zakodowałeś w grze w stanie zaciemnionym. Każdy może odzyskać „nieistniejący” klucz, pisząc tylko mały program, który rozwiązuje układankę zgodnie z twoimi zasadami.

Oleg V. Volkov
źródło
1
Ale nie każda zagadka jest łatwa do rozwiązania przez komputer, jak zagadka, która nie została stworzona wcześniej. Komputerowi trudno również odczytać wszystkie okna dialogowe w grze i przetworzyć wszystkie tekstury. Nawet jeśli tak, to skąd miałby wiedzieć, kiedy pojawi się coś związanego z tą łamigłówką? Pełny klucz nawet nie musi być przechowywany w grze, być może istnieje wskazówka, aby przeczytać tył pudełka, w którym znajduje się klucz, komputer nie może tego zrobić. Nawet jeśli łamigłówka była czymś, co komputer mógł rozwiązać, na przykład Sudoku, przynajmniej rozwiązywałaby ją, nie omijając.
Christer,
@Christer, nie różni się niczym od wymyślenia jakiegokolwiek innego domowego szyfrowania „przez zaciemnienie”. „On the box” - właśnie napisałeś klucz do zasobu „okładka papierowa” , który dajesz użytkownikowi zamiast zasobu „plik” , który dajesz użytkownikowi . Wielka rzecz.
Oleg V. Volkov
@Chriser, tj. Rozwiązanie „zagadki, która nie została wcześniej stworzona” jest dokładnie równoznaczne z „rozwiązaniem domowej roboty algorytmu szyfrowania, który nie był wcześniej tworzony”.
Oleg V. Volkov
Nie widzisz, jak możesz wygenerować klucz deszyfrujący na podstawie danych wprowadzonych przez użytkownika? Czy nie widzisz, że to wejście użytkownika może być czymkolwiek? Jakie prawidłowe dane wejściowe od użytkownika generują dobry klucz odszyfrowujący, o który pytasz? Kto wie, jest ukryty w grze na wiele interesujących sposobów. Mam nadzieję, że znajdziesz to, o co w tym wszystkim chodzi! W przeciwnym razie powodzenia w tym zakresie.
Christer,
Czym dokładnie do diabła różni się od czytania źródła? Wykonujesz zadanie według ustalonych zasad -> dostajesz klucz. To wszystko. Tyle że możesz skorzystać ze skrótów, po prostu czytając swoje „wskazówki” z innych zasobów gry zamiast w nią grać.
Oleg V. Volkov