Comment cacher les clés secrètes dans le code?
Je me suis demandé pendant un certain temps comment certains logiciels se cache les clés secrètes de telle manière qu'ils ne peuvent pas être trivialement découvert. Quelques exemples:
- Lecteur DVD Logiciel masque clés CSS
- Logiciel avec des numéros de série/codes d'enregistrement cache de clés de hachages utilisé pour valider les numéros de série
Évidemment, ces programmes de faire quelque chose de plus que simplement la clé dans un byte[], ainsi il est facile de voler de leurs clés et de générer vos propres numéros de série, etc.
Quels types de stratégies sont utilisées pour masquer ces touches, de sorte qu'ils ne peuvent pas être trouvé facilement?
- Mais comment Adobe le faire avec Photoshop par exemple?
- Un seul mot: sans succès.
Vous devez vous connecter pour publier un commentaire.
Les raisons de ces clés secrètes ont été si facilement découvert, c'est parce qu'ils ont été cachés dans le logiciel.
Éviter les secrets cachés dans le logiciel à tous les coûts de l'obfuscation ne fera que vous obtenez jusqu'à présent. Demandez-vous ceci: Comment puis-je cacher une clé dans le logiciel de quelqu'un avec un accès complet pour le démontage, en mode utilisateur et en mode noyau débogueurs, et pas de boulot? C'est seulement une question de temps avant qu'il arrive craqué.
Vous venez de cacher la clé quelque part, et de décrypter quand vous en avez besoin. À l'aide de la clé "en toute sécurité" est la partie compliquée. Craquelins peut définir un point d'arrêt à l'endroit où vous utilisez la restitution des clés et le vidage. Ils peuvent analyser votre code pour les modèles qui montrent que vous êtes en utilisant un algorithme de chiffrement (la plupart des algorithmes ont des tables précalculées). etc etc.
C'est pourquoi vous avez besoin pour rendre l'ensemble du logiciel exécutable difficile à analyser. Pour cela, vous devez utiliser l'exécutable packers, d'exécuter du code sur une machine virtuelle, les contrôles d'intégrité etc. Tout cela est de ralentir le débogage et la modification de votre code.
Comme la plupart des gens ici point, vous ne pouvez pas arrêter n'importe qui, juste pour le ralentir. J'irais à un cracker forum et demandez-y pour des suggestions sur la touche cacher problématiques. Ils sont les plus susceptibles de vous aider si vous le demandez gentiment.
ps. La clé publique de chiffrement de ne pas cacher la clé de mieux, mais il pourrait rendre plus difficile (ou théoriquement impossible) de faire un générateur de clé, si vous êtes en train de faire un système de licence.
La ligne du bas est, vous ne pouvez pas. Voir d'autres commentaires ici, pour les raisons pourquoi. Même le logiciel de chiffrement comme PGP/GPG stocke les clés dans un fichier, puis farouchement demande instamment à ces fichiers à être conservés sur un lecteur flash dans un coffre, ou quelque chose d'autre sécurisé. Les clés stockées sous forme de code exécutable sera découvert.
En fait, si vous essayez de chiffrer quoi que ce soit sur un ordinateur client qui sera décrypté par le client dans le cadre normal de ses activités, qui est aussi un fou de course. Les machines clientes sont par nature précaire, et vous ne pouvez pas contrôler ce qu'ils vont être capable de faire à vos données.
Si vous êtes en essayant de s'authentifier, au lieu de cela, regardez sur Internet en fonction de l'authentification avec des connexions à un serveur, ou une sorte de généré un mot de Code qui est utilisé pour valider le logiciel.
Clés secrètes dans le cadre d'un Public-Privé paire de Clés doivent être conservées dans les fichiers de données qui peuvent être sécurisées. Des clés symétriques doivent être générées à la volée comme les Clés de Session, puis jetés. Supposons toujours que n'importe qui qui a un Secret ou de la clé de Session sur son ordinateur sera en mesure de le découvrir, et de l'utiliser contre vos intentions.
Lire "Cryptographie Appliquée" par Bruce Schneier pour plus d'informations.
Vous ne pouvez pas cacher une clé à jamais. Mais bien sûr, vous pouvez le rendre difficile à trouver. Certaines approches sont à chiffrer la clé dans la mémoire, de conserver plusieurs copies (peut-être chiffrés différemment) qui sont vérifiés les uns contre les autres, laissez mannequin copies d'accéder à de stocker la clé dans certains bizarre format, etc. Aucun d'entre eux ne fonctionne pas si quelqu'un veut vraiment votre clé, mais vous pouvez au moins dissuader occasionnel/inexpérimentés attaquant.
Quand nous avons commencé le développement de notre logiciel, nous avons créé une, datée du fichier de licence. Ensuite, nous nous sommes rendu compte, que pas trop de gens sont intéressés par l'achat de notre logiciel. Alors, nous avons décidé de le donner gratuitement. Beaucoup plus de gens ont commencé à prendre soin d'au moins essayer notre chef-d'œuvre. Enfin, nous avons ouvert de source de notre logiciel. Beaucoup plus d'utilisateurs commencé à l'utiliser. Maintenant, on espère juste qu'un petit nombre de ces utilisateurs peuvent se transformer en clients payants (c'est à dire l'achat de prod. de soutien ou de demander la personnalisation).
La ligne du bas est, si quelqu'un veut casser votre logiciel, il/elle va le faire de toute façon. Est-il vraiment la peine de perdre votre temps à essayer de protéger ce secret caché la clé?
Vous n'avez pas toujours besoin d'une clé pour valider une licence.
Mais ignorant ce fait, votre clé peut également être le résultat d'une autre fonction. Vous n'avez pas fait de stocker une valeur de clé spécifique, au lieu de cela vous avez une fonction qui génère la clé à la volée (toujours le même résultat). Mais pas impossible, il est beaucoup plus difficile à trouver, puisque vous êtes plus à la recherche d'une valeur, mais vous devez comprendre que c'est une équation.
Si vous pouvez vous le permettre, le mieux est de stocker la clé privée de chiffrement token USB. La clé est en écriture seule, c'est à dire que vous pouvez le définir, mais de ne pas le lire. Le jeton ne les opérations cryptographiques de l'intérieur, dans son matériel. Il devient très compliqué de récupérer la clé (si le jeton n'a pas connu la vulnérabilité, ce qui n'est pas le cas avec les plus anciennes).
Cacher les clés secrètes dans le code ne va pas être vraiment sûr. Comme vous l'avez remarqué, les Dvd et la plupart des logiciels de numéro de série enregistrements piraté sur une base quotidienne. Si on veut vraiment faire quelque chose, vous devez utiliser la clé publique de chiffrement.
Vous ne pouvez pas, c'est impossible. Tout attaquant qui a accès à la machine cible serait en mesure de démonter votre code à trouver, ou trouver le fichier de clé sur la machine cible, etc.
La SEULE façon de s'assurer que la clé de chiffrement est sûr, c'est l'avoir tapé dans la main par l'utilisateur lorsqu'il est nécessaire.
Je pense que c'est l'une des plus grandes raisons que le DVD et le BluRay ont été fissuré alors rapidement. Je pense que la seule façon qu'ils pouvaient arrêter la moyenne des gens d'être en mesure de copie numérique des films à la maison est si ils ont créé un milieu qui n'était pas homologué pour une utilisation sur des ordinateurs, et ne pouvait être utilisé que sur certifiée joueurs. Serait couper la partie du marché qui voulais regarder des films sur leurs ordinateurs et les ordinateurs portables, mais serait probablement arrêter d'en avoir parfaite numérique déchire un peu plus longtemps, et mettrait un terme à la moyenne, une personne d'être en mesure de le faire.