Supposons que j'ai créé un programme simple qui prend un fichier .dat
chiffré 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?
encryption
binary
Daniel Béjar
la source
la source
Réponses:
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.
la source
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.
la source
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 .
la source
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.
la source