Comment crypter Save Files sans utiliser de clé? [fermé]

21

Supposons que j'ai créé un programme simple qui prend un fichier .datchiffré au format binaire , puis je le déchiffre dans un tableau d'octets , puis tout est réécrit dans le fichier déchiffré.

Par exemple:

J'ai créé un algorithme de chiffrement binaire. => 0100100001100101001000000110100001100101011000 ...

Mais c'est très très facile à décrypter ...

Existe-t-il un moyen, si c'est possible, ne nécessite aucune sorte de clé, de crypter ma progression de sauvegarde?

Daniel Béjar
la source
15
Voulez-vous vraiment crypter les enregistrements? Il existe des moyens plus simples de tricher, par exemple lors de l'utilisation d'une modification de mémoire. Je les compresserais simplement avec zlib (les mettrais en .gz), cela réduirait la taille et empêcherait certains tricheurs possibles de le modifier.
HolyBlackCat
36
Nitpicking: Ce que vous faites est un encodage , pas un cryptage .
Philipp
13
(en supposant que c'est pour un seul joueur) N'essayez pas d'empêcher la tricherie dans une partie solo, c'est ennuyeux à la fois pour vous et pour le joueur. Et est finalement inutile.
6
Il n'est pas possible de crypter les fichiers de sauvegarde afin que l'utilisateur ne puisse pas les lire ou les modifier. (Parce que, par exemple, ils pourraient simplement mettre votre jeu en pause dans un débogueur juste après le décryptage!). Cependant, vous pouvez le rendre plus difficile (car ouvrir un fichier texte brut est vraiment facile par rapport à trouver le bon moment pour suspendre le jeu dans un débogueur). C'est ce que vous essayez de faire?
user253751
6
@DanielBejar Je viens de vous le dire, vous ne pouvez pas le rendre impossible, vous ne pouvez que le rendre plus difficile.
user253751

Réponses:

77

En général, vous ne devez jamais inventer vos propres algorithmes cryptographiques, sauf si vous avez au moins un doctorat en mathématiques et en informatique. Mais il existe de nombreux bons algorithmes de stock qui n'ont pas d'attaques connues et ont des implémentations gratuites dans de nombreux langages de programmation. Par exemple RC5, AES ou Blowfish. Selon la technologie que vous utilisez pour développer votre jeu, il peut même offrir un cryptage sécurisé prêt à l'emploi.

Cependant, la question est de savoir si le chiffrement des sauvegardes est une bonne idée.

Tout d'abord, lorsque votre exécutable de jeu effectue le chiffrement et le déchiffrement, vous devez inclure à la fois l'algorithme et la clé dans votre exécutable de jeu. Cela signifie qu'un pirate informatique déterminé peut les trouver, les extraire et les utiliser pour créer un éditeur de sauvegarde. Il ne peut donc jamais être sécurisé à 100%.

Deuxièmement, pourquoi voulez-vous faire cela de toute façon? Lorsqu'il s'agit d'un jeu en ligne, vous devez stocker l'état de jeu en ligne où les joueurs ne peuvent pas le modifier. Quand c'est un jeu hors ligne, alors pourquoi s'embêter? Un tricheur ne peut que nuire à sa propre expérience de jeu au pire. Les joueurs honnêtes qui veulent profiter de votre jeu comme prévu ne seront pas du tout affectés par cela. D'un autre côté, permettre aux joueurs de tricher peut ajouter de la valeur à votre jeu. Il permet aux joueurs de vivre le jeu d'une manière différente, ce qui peut simplement augmenter leur plaisir à long terme de votre jeu.

Philipp
la source
5
Bien que je ne puisse pas imaginer que quelqu'un arrive avec quelque chose de bien dans quelques heures. Et vous gaspilleriez des ressources sur quelque chose dont vous n'avez probablement pas besoin.
Aistis
6
"Quand c'est un jeu hors ligne, alors pourquoi s'embêter?" Et si c'est un jeu solo avec des meilleurs scores en ligne?
Le gars avec le chapeau
19
"Permettre aux joueurs de tricher peut ajouter de la valeur à votre jeu" - a voté pour cette déclaration. Je suis vraiment ennuyé par les jeux qui décident de verrouiller une partie de l'expérience que j'ai payée jusqu'à ce que j'atteigne un certain niveau de maîtrise, et je suis heureux que dans ces cas, il existe des astuces pour débloquer le jeu complet. Par exemple, je suis totalement perdu dans les tournois de course contre l'IA dans les anciennes pièces Need for Speed ; pour moi, le plaisir était plutôt de conduire à travers des paysages variés, donc je saute généralement la course et déverrouille toutes les cartes et les voitures. Un jeu qui empêche cela m'ennuierait.
OR Mapper du
6
J'aimerais "à moins que vous ayez au moins un doctorat en mathématiques et en informatique" réécrit comme "à moins que vous ayez au moins les connaissances nécessaires pour obtenir un doctorat en mathématiques et en informatique" (et même alors, au moins en Allemagne, les cours sont souvent pleins de trucs non liés à la crypto). On n'a pas intrinsèquement besoin d'un diplôme pour surpasser les doctorats.
phresnel
5
@phresnel Bien que vous ayez techniquement raison, un doctorat est une mesure standard de la maîtrise d'un sujet théorique, décernée par des institutions de confiance. Il est donc logique de l'utiliser comme raccourci pour la quantité de connaissances et de compétences nécessaires pour atteindre le doctorat. En d'autres termes: ce que le PO signifiait est assez clair :-)
Tobia
10

Pour crypter et décrypter localement, vous devrez stocker la clé dans votre programme, afin que les gens puissent déchiffrer le cryptage s'ils démontent votre code. Il existe des astuces pour brouiller les clés, mais même avec celles-ci, un attaquant dédié trouvera la clé et la publiera ensuite en ligne pour tous ceux qui sont moins dévoués à voir. La seule chose que le chiffrement empêche, ce sont les personnes qui utilisent un éditeur hexadécimal - vous pouvez facilement déjouer cela avec la compression et tout ce qui rend le fichier illisible par un programme de décompression. Par exemple, ajoutez un octet devant les données.

Alternativement, vous pouvez ajouter le md5 du fichier de sauvegarde à la fin du fichier, vous remarquerez donc si un fichier a été falsifié. Vous pouvez ensuite l'utiliser pour refuser de charger le jeu de sauvegarde ou pour signaler les tickets de support de manière appropriée afin de ne pas perdre de temps sur les problèmes causés par les jeux de sauvegarde modifiés manuellement. Encore une fois, cela est trivial à contourner par quiconque peut lire votre code.

Si vous voulez quelque chose qui ne peut pas être contourné par quelqu'un qui a accès aux fichiers binaires sur son appareil, vous devez exécuter une partie du programme sur un serveur, qui est sous votre contrôle.

Pour répondre à votre dernière question, un type de clé et de cryptage identifie simplement l'algorithme exact qui doit être appliqué pour crypter / décrypter. Vous ne pouvez pas crypter / décrypter des données sans un algorithme qui définit comment le faire.

Peter - Unban Robert Harvey
la source
Votre deuxième point est sympa. Cela pourrait également aider à suivre les problèmes en cas de corruption de fichiers.
knowledge_is_power
4

Stockez un hachage SHA256 transformé des données de sauvegarde réelles dans le fichier de sauvegarde.

Comparez le hachage stocké à la valeur SHA256 des données lors du chargement.

Si cela ne correspond pas, ils ont triché ou corrompu le fichier.

Modifier pour clarifier: cela rend plus difficile le crack du système anti-triche mais toujours possible .

Lolums
la source
7
Rien n'empêche les gens de recalculer le hachage après avoir effectué les modifications. De plus, je ne comprends pas pourquoi il y a encore des gens qui préconisent l'algorithme MD5 cassé avec toutes ses faiblesses cryptographiques connues alors qu'il existe de bien meilleures alternatives comme SHA-256 (pour les signatures) ou bcrypt (pour les mots de passe).
Philipp
1
Simple, rapide et complètement cassé.
DeadMG
2
@DeadMG Il est cassé par conception, car l'utilisateur a accès aux fichiers binaires qui doivent contenir la clé. Utiliser un hachage plus fort ou chiffrer le fichier avec quelque chose comme AES serait un gaspillage de ressources et une mauvaise conception, car il n'apporte aucune sécurité supplémentaire , mais ajoute des coûts. +1 parce que le downvote n'est pas mérité.
Peter - Unban Robert Harvey
7
@Philipp car dans ce cas, MD5 est clairement supérieur à SHA-256. Ce qui est requis par l'approche décrite est un algorithme de somme de contrôle bon marché, qui est exactement ce qu'est MD5.
Peter - Unban Robert Harvey
3
@ transistor09 si c'est purement côté client, nous ne pouvons rien garantir et une somme de contrôle fonctionne aussi bien que le client crypte le tout. De toute façon, il peut être fissuré.
Lolums
1

J'utiliserais un algorithme de cryptage standard (car il rend plus difficile d'effectuer une crypto-analyse sur le fichier enregistré) mais pas l'un des cinq premiers les plus utilisés, et le cacherais dans votre code (car cela rend plus difficile de comprendre quel algorithme il est et où est la clé.)

Pour masquer l'algorithme de chiffrement dans votre code: prenez une version open source, comprenez son flux (quelles fonctions appellent quelles autres et dans quelle séquence), puis renommez toutes les variables, champs de structure et noms de fonction (juste pour être sûr) et répartissez les fonctions partout dans votre base de code, dans différents objets et modules, séparant éventuellement également leur exécution dans le temps (effectuez une partie du chiffrement, puis faites autre chose, puis après quelques ms, revenez-y à partir d'un morceau de code apparemment sans rapport et effectuez une autre phase du chiffrement, etc.). La clé peut être masquée de la même manière, comme un certain nombre de constantes apparemment sans rapport dans toutes vos classes, accessibles à l'exécution par les différentes parties masquées de l'algorithme de chiffrement.

La question de savoir si tout cela a un sens économique est un tout autre sujet.

Tobia
la source
Je ne sais pas ... Rendre cela plus difficile pour un simple jeu ... Mais merci pour l'aide! Je vais essayer de mon mieux!
Daniel Béjar