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?

    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 access complet au désassemblage, au mode utilisateur et aux débogueurs en mode kernel, et aucun travail quotidien? Ce n’est qu’une question de temps avant qu’il ne se fissure.

    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 à parsingr. 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. J’irais dans un forum de crackers et je leur demanderais des suggestions sur les problèmes de dissimulation. Ils sont probablement utiles si vous posez gentiment.

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

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

    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 notre logiciel source. Beaucoup d’utilisateurs ont commencé à l’utiliser. Maintenant, nous espérons juste qu’un petit nombre de ces utilisateurs pourraient devenir des clients payants (c.-à-d. L’achat d’un support technique ou la demande de 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?

    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, mais vous avez 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.

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

    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.

    Vous ne pouvez pas, c’est impossible. Tout attaquant ayant access à la machine cible pourrait désassembler votre code pour le trouver ou trouver le fichier de clé sur la machine cible, etc.

    Le SEUL moyen de s’assurer que la clé de chiffrement est sécurisée est de le faire saisir manuellement par l’utilisateur lorsque cela est nécessaire.

    Je pense que c’est l’une des principales raisons pour lesquelles les DVD et BluRay ont été craqués si rapidement. Je pense que le seul moyen d’empêcher une personne moyenne de copier numériquement des films personnels est de créer un support qui ne soit pas autorisé à être utilisé sur des ordinateurs et qui ne pourrait être utilisé que sur des lecteurs certifiés. Couperait la partie du marché qui voulait regarder des films sur leurs ordinateurs et ordinateurs portables, mais cesserait probablement d’avoir des déchirures numériques parfaites pour un peu plus longtemps, et empêcherait la personne moyenne de pouvoir le faire.