51 votes

Comment cachez-vous 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?

40voto

Michael Points 34110

La raison pour laquelle ces clés secrètes ont été si facilement découvertes est qu'elles étaient cachées dans le logiciel.

Évitez à tout prix de cacher des secrets dans les logiciels - l'obscurcissement ne vous mènera que jusqu'à présent. Posez-vous la question suivante: dans quelle mesure puis-je cacher une clé dans un logiciel à une personne ayant un accès complet au démontage, aux débogueurs en mode utilisateur et en mode noyau et sans travail de jour? Ce n'est qu'une question de temps avant qu'il ne se fissure.

13voto

John Smith Points 2431

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.

6voto

Furious Coder Points 609

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.

Les 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.

5voto

Promit Points 2739

Vous ne pouvez pas cacher une clé pour toujours. Mais vous pouvez certainement le rendre difficile à trouver. Certaines approches consistent à chiffrer la clé en mémoire, à conserver plusieurs copies (peut-être chiffrées différemment) qui sont vérifiées les unes par rapport aux autres, à laisser des copies factices à accéder, à stocker la clé dans un format bizarre, etc. Aucune d'entre elles ne fonctionnera si quelqu'un vraiment veut votre clé, mais vous pouvez au moins dissuader un attaquant occasionnel / inexpérimenté.

1voto

Yakov Fain Points 823

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é?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X