Question Comment cachez-vous les clés secrètes dans le code?


Je me suis demandé depuis un certain temps comment certains logiciels cachent des clés secrètes de manière à ce qu’elles ne puissent pas être découvertes. Quelques exemples:

  • Le logiciel de lecture de DVD cache les clés CSS
  • Le logiciel avec numéros de série / codes d'enregistrement cache les clés / hachages utilisés pour valider les numéros de série

Évidemment, ces programmes font plus que simplement avoir la clé dans un octet [], car cela faciliterait le vol de leurs clés et la génération de vos propres numéros de série, etc.

Quelles sortes de stratégies sont utilisées pour masquer ces clés afin de ne pas les retrouver facilement?


42
2018-04-18 19:32


origine


Réponses:


Les raisons pour lesquelles ces clés secrètes ont été si facilement découvertes sont qu’elles étaient cachées dans un logiciel.

Évitez à tout prix de cacher des secrets dans un logiciel - l’obscurcissement ne vous mènera à rien jusqu’à présent. Demandez-vous ceci: dans quelle mesure puis-je cacher une clé dans un logiciel de quelqu'un ayant un accès complet au désassemblage, au mode utilisateur et aux débogueurs en mode noyau, et aucun travail quotidien? Ce n'est qu'une question de temps avant qu'il ne se fissure.


35
2018-04-18 19:35



Vous ne faites que cacher la clé quelque part et la décrypter quand vous en avez besoin. L'utilisation de la clé "en toute sécurité" est la partie compliquée. Les crackers peuvent définir un point d'arrêt à l'endroit où vous utilisez la clé décryptée et le vider. Ils peuvent scanner votre code à la recherche de modèles montrant que vous utilisez un algorithme de chiffrement connu (la plupart des algorithmes comportent des tableaux pré-calculés). etc.

C'est pourquoi vous devez rendre l'ensemble du logiciel exécutable difficile à analyser. Pour cela, vous utilisez des packers exécutables, exécutez du code dans une machine virtuelle, des contrôles d'intégrité, etc. Tout cela permet de ralentir le débogage et de modifier votre code.

Comme le soulignent la plupart des gens ici, vous ne pouvez pas arrêter quelqu'un, il suffit de les ralentir. Je vais à un forum de crackers et je leur demande des suggestions sur les problèmes de dissimulation. Ils sont probablement utiles si vous posez gentiment.

ps. La crypto à clé publique ne cache pas mieux la clé, mais cela peut rendre plus difficile (ou théoriquement impossible) de créer un générateur de clé, si vous faites un système de licence.


13
2018-04-18 23:02



L'essentiel est que vous ne pouvez pas. Voir tout autre commentaire ici pour les raisons. Même un logiciel de chiffrement tel que PGP / GPG stocke les clés dans un fichier, puis demande instamment que ces fichiers soient conservés sur une clé USB dans un coffre-fort ou autre chose. Les clés stockées dans le code exécutable seront découvertes.

En fait, si vous essayez de chiffrer quoi que ce soit sur un ordinateur client qui sera déchiffré par le client dans le cadre d’opérations normales, c’est aussi une erreur. Les machines clientes sont intrinsèquement non sécurisées et vous ne pouvez pas contrôler ce qu'elles vont pouvoir faire avec vos données.

Si vous essayez de vous authentifier, recherchez plutôt une authentification basée sur Internet avec des connexions à un serveur ou une sorte de KeyCode généré, utilisé pour valider le logiciel.

Les clés secrètes faisant partie d'une paire de clés publique-privée doivent être conservées dans des fichiers de données pouvant être sécurisés. Les clés symétriques doivent être générées à la volée en tant que clés de session, puis supprimées. Supposez toujours que toute personne possédant une clé secrète ou de session sur son ordinateur pourra la découvrir et l'utiliser contre vos intentions.

Lis "Cryptographie appliquée"par Bruce Schneier pour plus d'informations.


6
2018-04-18 19:53



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 (éventuellement chiffrées différemment) vérifiées l’une par rapport à l’autre, à laisser des copies factices accessibles, à stocker la clé dans un format bizarre, etc. veut votre clé, mais vous pouvez au moins dissuader un attaquant occasionnel / inexpérimenté.


5
2018-04-18 19:45



Lorsque nous avons commencé à développer notre logiciel, nous avons créé un fichier de licence daté. Ensuite, nous avons réalisé que peu de personnes sont même intéressées par l’achat de notre logiciel. Ensuite, nous avons décidé de le donner gratuitement. Beaucoup plus de gens ont commencé à s'intéresser au moins à essayer notre chef-d'œuvre. Enfin, nous avons ouvert nos logiciels. Beaucoup d'utilisateurs ont commencé à l'utiliser. Nous espérons maintenant qu'un petit nombre de ces utilisateurs pourraient devenir des clients payants (c'est-à-dire acheter un support technique ou demander une personnalisation).

En fin de compte, si quelqu'un veut casser votre logiciel, il le fera quand même. Est-ce que ça vaut vraiment le coup de perdre votre temps à essayer de le protéger avec cette clé secrète cachée?


2
2018-04-18 19:42



Vous n'avez pas toujours besoin d'une clé pour valider une licence.

Mais en ignorant ce fait, votre clé peut également être le résultat d'une autre fonction. Vous ne stockez pas réellement une valeur de clé spécifique, vous avez plutôt une fonction qui génère la clé à la volée (toujours le même résultat). Bien que ce ne soit pas impossible, il est beaucoup plus difficile à trouver car vous ne cherchez plus une valeur, mais vous devez comprendre que c'est une équation.


1
2018-04-18 19:35



Si vous pouvez vous le permettre, le mieux est de stocker la clé privée dans un jeton USB cryptographique. La clé est en écriture seulement, c'est-à-dire que vous pouvez la définir mais ne pas la lire. Le jeton effectue les opérations cryptographiques en interne, dans son matériel. Il devient très compliqué de récupérer la clé (si le jeton n’a aucune vulnérabilité connue, ce qui n’est pas le cas avec les anciennes).


1
2018-05-19 14:07



Cacher des clés secrètes dans du code ne va pas être vraiment sécurisé. Comme vous l'avez peut-être remarqué, les DVD et la plupart des enregistrements de numéros de série de logiciels sont piratés quotidiennement. Si vous voulez vraiment sécuriser quelque chose, vous devez utiliser le chiffrement à clé publique.


0
2018-04-18 19:38