Qu'utilisez-vous pour regrouper / crypter les données?

14

De plus en plus de jeux empruntent la voie des données, ce qui signifie qu'il doit y avoir une couche de sécurité autour d'une manipulation facile. Je l'ai vu où les jeux regroupent complètement leurs actifs (audio, art, données) et je me demande comment ils gèrent cela? Y a-t-il des applications / bibliothèques qui regrouperont et vous aideront à gérer les actifs à l'intérieur? Sinon, y a-t-il de bonnes ressources que vous voudriez indiquer pour emballer / déballer / chiffrer?

Cette question spécifique tourne autour de C ++, mais je serais ouvert à entendre comment cela est également géré en C # / XNA.

Juste pour être clair - je ne suis pas là pour concevoir une solution pour empêcher le piratage. Au niveau fondamental, nous manipulons tous des 0 et des 1. Mais, nous voulons empêcher les 99% des personnes qui jouent au jeu de simplement modifier les fichiers XML utilisés pour construire le monde du jeu. J'ai vu de nombreux jeux regrouper toutes leurs ressources. Je suis simplement curieux de savoir quelles méthodes ils utilisent.

David McGraw
la source
Bonne question, même si je ne crois pas qu'il existe un moyen de le protéger à 100%, je pense qu'il y a une bonne façon de le compacter et de l'obscurcir et j'aimerais en savoir plus ...
Prix
Il vaut la peine de se demander si vos ressources artistiques / audio devraient même être considérées comme "sensibles". De nombreux jeux exposent délibérément leurs actifs aux joueurs, afin de soutenir une communauté de mods saine, qui à son tour peut ajouter plus de valeur au jeu (pratiquement sans frais pour le développeur, même).
Ian Schreiber
Je m'intéresse principalement aux données sensibles qui pilotent un jeu basé sur les données (fichiers xml, par exemple). Je viens de voir des jeux regrouper le tout dans un ou deux fichiers.
David McGraw
4
Quel est le problème avec les joueurs jouant avec ces données?
jsimmons
pour battre mon propre tambour .. CFL: iki.fi/sol/cfl
Jari Komppa

Réponses:

8

Une bonne stratégie consiste à créer votre propre format d'archive à partir de zéro et à en faire un indexé avec une table pointant vers des blocs de données au lieu de stocker des fichiers séquentiels entiers dans votre archive, puis de crypter votre table d'index et de compresser chaque bloc séparément à l'aide de LZMA / Bzip2.

Une autre approche consiste à utiliser des bits de générateurs de données procédurales ici et là (si vous voulez aller aussi loin, vous pouvez même obtenir les `` paramètres '' desdits générateurs à partir d'un serveur en ligne comme mesure supplémentaire), et en déchargeant une partie du travail au GPU, vous pouvez également empêcher les vidages de mémoire complets et compenser une partie des performances perdues.

Pourtant, je trouve que ces techniques entravent généralement les performances et la perte de temps de développement, tout en n'offrant à l'utilisateur final que des problèmes potentiels et des bogues inutiles.

Néanmoins, rien n'est sûr à 100%.

vaudou
la source
+1 pour cela. La compression satisfait à la fois le besoin d'obscurcir et améliorera les temps de chargement et l'empreinte de l'application. L'archivage / compression des données nécessitera de toute façon une couche d'abstraction, donc la combiner avec quelque chose qui peut se charger / décompresser en place ne devrait pas être trop d'ingénierie. Si vous optez pour la compression, je veillerais à garder la logique de compression / décompression distincte du chargement / archive. De cette façon, vous pouvez échanger un meilleur algorithme à une date ultérieure, l'infrastructure nécessaire ne change pas entre les algorithmes.
MrCranky
@MrCranky: Si vous regardez la façon dont EA le fait avec leur format d'archive .package (DBPF) (utilisé dans les jeux SPORE et The Sims), vous le verrez réellement en action. Leur moteur a un champ supplémentaire dans la table d'index pour "type de compression", un code interne pour quel algorithme utiliser. Ils utilisent différents algorithmes de compression basés sur le type de bloc (les blocs de texte utilisent une compression spéciale par exemple) Le système de versioning qu'ils utilisent permet également l'intégration de mods et la compatibilité descendante. Plus d'informations sur le format DBPF ici: simswiki.info/DatabasePackedFile
voodooattack
Choses intéressantes: je ne l'ai fait qu'au moment de la compilation avec un #define, mais le runtime ouvre de belles possibilités (comme pouvoir changer votre type de compression sans avoir à reconstruire chaque fichier pour votre jeu).
MrCranky
11

N'envoyez pas de données sensibles.

Il n'y a aucun moyen d'expédier des données cryptées afin que seul le jeu puisse y accéder. Vous pouvez essayer très fort, mais vous entrez rapidement dans les problèmes de DRM.

Si vous voulez garder vos actifs de jeu à l'abri des regards indiscrets.

  1. fermez-le
  2. xor le fichier
  3. changer l'extension en quelque chose d'ennuyeux (c'est-à-dire pas my_level.zip.xor, utiliser my_level.map).

Cela arrêtera 95% des utilisateurs espiègles. Les 5% restants vont l'obtenir, peu importe ce que vous faites.
Vous n'avez pas besoin de zip et de réellement xor. Vous pouvez plutôt utiliser lzma et utiliser AES avec une clé connue. Le point est de ne pas y consacrer beaucoup de temps.

deft_code
la source
C'est ce que je vois habituellement dans la plupart des jeux ... un cookie pour vous.
Prix
2
Vraiment juste zip + renommer est probablement suffisant.
coderanger
1
je ne pense pas, j'aime le That will stop 95% of mischeivieous users.sortir de l'effraction, alors que je crois qu'il y a encore des gens qui l'obtiendront, j'apprécierais sinon tous et chacun en est capable. De nos jours, la plupart des enfants de 10 ans savent ouvrir des fichiers dans le bloc-notes et le renommer ...
Prix
1
Sachez comment, oui. Je m'en soucierai jamais, non.
coderanger
zip + renommer ne suffit pas. Linux utilise rarement des extensions de fichier pour déterminer le type de fichier. Au lieu de cela, il examine les premiers octets et l'utilise pour déterminer son type. Un zip renommé apparaît toujours comme un zip sous Linux. Windows XP ne fait pas cela, il utilise toujours des extensions. Je ne sais pas comment Windows 7 le fait, mais je m'attends à ce qu'à l'avenir Windows utilise une technique similaire.
deft_code
4

Passer beaucoup de temps là-dessus est probablement stupide. Il existe des outils pour saisir les données de texture et de modèle directement à partir du GPU, et les sons peuvent facilement être dirigés vers un périphérique de bouclage virtuel. Tout ce qui doit être vraiment sécurisé doit vivre sur un serveur et fonctionner uniquement via un défi / réponse. La validation des données client est une autre histoire, quelque chose de plus semblable à -verify_all de Valve. C'est toujours difficile, car vous ne pouvez pas faire confiance à l'exécutable local pour l'appliquer (ou du moins vous ne pouvez pas lui faire plus confiance que vous faites confiance à votre système anti-triche de point final, ce qui est également une idée stupide).

coderanger
la source
4

Mon travail est dans un logiciel anti-sabotage. Je connais quelqu'un qui est un cracker de jeu de la vieille école. Il craque les jeux comme la respiration. Vous ne pouvez pas arrêter des gens comme lui. Si votre jeu est assez populaire, plusieurs versions crackées de votre jeu arriveront sur les sites torrent quelques jours seulement après sa sortie, peu importe ce que vous faites. Mon conseil est de faire le strict minimum pour éloigner le joe moyen qui pense qu'il pourrait vouloir donner un coup de poignard à ce truc d'ingénierie inverse.

Jake McArthur
la source
1
Voilà l'objectif. Je n'ai absolument aucune envie de combattre les hackers.
David McGraw
1

Bonne question mais c'est loin d'être facile à répondre.
D'après mon expérience avec la sécurité des données, vous devez penser aux points suivants:

1) Que sécurisez-vous, de qui et quel est l'impact si ces données ne sont pas sécurisées - la sécurité est bien plus une question d'évaluation des risques que de solutions techniques systématiques
2) Je suppose que votre plate-forme est de bureau (par exemple Windows / OSX) dans ce cas, vous avez un espace de problème différent de celui du matériel propriétaire tel que PS3 / Xenon qui ont leurs propres tentatives de sécurité au niveau du noyau (si c'est une solution valide est ouvert au débat)
3) Cryptage! = sécurité. Le chiffrement garantit uniquement que vos données ne peuvent pas être lues , il ne garantit pas que vos données ne peuvent pas être écrites ou relues / transmises par proxy.

Si vos exigences sont de rendre vos données inviolables, vous devez penser à hacher vos données (de préférence avec SHA-256 ou SHA-512) .Pour réitérer cependant, réfléchissez à la raison pour laquelle c'est important et à ce que vous gagnez en ajoutant de la sécurité à votre système.
Il convient également de savoir que l'ajout d'une technologie de cryptage à votre produit peut avoir des implications juridiques en raison des restrictions à l'exportation (la technologie de cryptage est classée comme une technologie de qualité militaire restreinte, croyez-le ou non), il est donc conseillé d'utiliser des bibliothèques qui ont surmonté ces problèmes juridiques.
Enfin - ne lancez jamais votre propre technologie de chiffrement - utilisez des algorithmes bien connus, documentés et recherchés tels que AES, Blowfish, RSA, etc.

ps La clé publique / privée n'est pas appropriée ou pratique pour chiffrer de grandes quantités de données, donc DRM / PGP, etc. utilisez un système symétrique hybride RSA + , c'est-à-dire sécurisez la clé symétrique avec RSA, puis effectuez un chiffrement symétrique standard en utilisant cette clé.

C'est un très grand sujet complexe et je ne lui ai certainement pas rendu justice

J'espère que cela pourra aider

zebrabox
la source
1

Si vous voulez un exemple d'un format qui a été conçu et construit (probablement sur-conçu) pour être petit (compressible), ridiculement sécurisé et flexible, vous devriez vous tourner vers le format MPQ de Blizzard.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

La disposition générale des archives est la suivante:

Fichier d'en-tête d'archives Données de fichier Données - Fichiers spéciaux Tableau de hachage Tableau de blocs Tableau de blocs étendu Signature numérique forte

Ce format a TOUT. Table de blocs, table de blocs étendue, données divisées en secteurs (pour une diffusion facile), prise en charge de 7 (!) Algorithmes de compression (si vous comptez la compression du son) qui peuvent être combinés arbitrairement, signature numérique faible, signature numérique forte, etc.

Si vous achetiez l'API de Blizzard qui traite de l'architecture de fichiers, vous obtiendriez tout ce dont vous auriez besoin et bien plus encore.


la source
Merci pour le lien, je n'aurais jamais pensé à en savoir plus sur les détails de MPQ (et j'ai généralement supposé qu'ils ne seraient pas disponibles)
Bill
S'il est si sécurisé, pourquoi a-t-il été rétro-conçu à un tel degré et a-t-il même des bibliothèques tierces pour interagir avec lui? ;-)
coderanger
La plupart (lire: tous) les outils pour interagir avec les fichiers * .mpq dépendent de Stormlib, qui est écrit et maintenu par un seul gars.
Pour autant que je sache, Stormlib vous oblige à avoir le jeu original dont provient l'archive, car les clés de déchiffrement sont stockées dans l'exécutable. La principale raison pour laquelle il est si sûr, cependant, n'est pas parce qu'il est impossible d'y pénétrer. Mais pour les données à la volée envoyées via le net, elles sont sans égal. Les données sont si fortement cryptées qu'il serait vain pour un tiers de les décrypter à la volée.
Et en fait, avec 'World of Warcraft', Blizzard a été le pionnier de la technologie de streaming, vous permettant de jouer au jeu avec seulement quelques pour cent de l'ensemble des données téléchargées sur votre disque dur. Le format * .mpq excelle dans ce type de travail. Sans oublier que lorsque l'installateur de Starcraft 2 a été publié par Blizzard quelques jours avant la sortie officielle du jeu, ses archives étaient si fortement cryptées qu'elles ne pouvaient être ouvertes que bien après la sortie du jeu. : P
0

Comme cela a récemment été ressuscité, votre question (et donc toutes les réponses jusqu'à présent) ne semble concerner que le chargement du fichier, qui n'est aussi sécurisé que l'exécutable qui veut le charger. Sur le PC, il n'y a rien de vraiment sécurisé (vous retardez simplement les gens), vous pouvez vérifier les choses sur les serveurs, mais même cette vérification peut être supprimée afin que les exes modifiés puissent être exécutés quoi qu'il arrive. Les consoles sont toujours "assez" sécurisées, donc dans la plupart des cas, je génère un hachage de fichiers importants, puis signe le hachage avec une clé privée, incorpore la clé publique dans le code et vérifie le hachage sécurisé par rapport au fichier.

Je pensais que je lancerais une autre attaque dans la conversation, quelque chose que je n'ai rencontré que l'année dernière car je n'ai pas tendance à expédier beaucoup sur le PC. Cheat Engine est un petit programme très bien rangé qui automatise presque tous vos propres hacks (ce qui signifie que n'importe qui peut l'utiliser). Il est assez avancé dans ce qu'il peut faire, beaucoup de hacks / cheats que j'ai vus que les gens vendent sont faits par ceci ou quelque chose de très similaire à ce que j'ai vu (tous ceux du marché de masse). Avec un peu de travail, vous pouvez vous protéger contre des choses comme ça, je suppose que tout dépend de la popularité du jeu et si quelqu'un se soucie suffisamment de vous déranger.

Opps, oublié de mentionner une bonne lib pour le chiffrement (en C ++) est LibTomCrypt .

Roger Perkins
la source