Je dois stocker des informations sensibles (une clé de chiffrement symétrique que je veux garder privée) dans mon application C++. L'approche simple est la suivante :
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
Cependant, exécuter l'application via le processus strings
(ou tout autre processus qui extrait des chaînes à partir d'une application binaire) révélera la chaîne ci-dessus.
Quelles techniques devraient être utilisées pour obscurcir de telles données sensibles ?
Modifier :
D'accord, donc pratiquement tous ont dit "votre exécutable peut être inversé" - bien sûr ! C'est une de mes irritations, alors je vais me plaindre un peu ici :
Pourquoi est-ce que 99 % (OK, peut-être j'exagère un peu) de toutes les questions liées à la sécurité sur ce site obtiennent en réponse un torrent de "il n'est pas possible de créer un programme parfaitement sécurisé" - ce n'est pas une réponse utile ! La sécurité est une échelle mobile entre une parfaite utilisabilité et aucune sécurité d'un côté, et une sécurité parfaite mais aucune utilisabilité de l'autre.
Le point est que vous choisissez votre position sur cette échelle en fonction de ce que vous essayez de faire et de l'environnement dans lequel votre logiciel va s'exécuter. Je ne suis pas en train d'écrire une application pour une installation militaire, je suis en train d'écrire une application pour un PC domestique. J'ai besoin de chiffrer des données à travers un réseau non fiable avec une clé de chiffrement pré-connaître. Dans ces cas, "la sécurité par l'obscurité" est probablement suffisante ! Bien sûr, quelqu'un avec suffisamment de temps, d'énergie et de compétences pourrait inverser l'ingénierie du binaire et trouver le mot de passe, mais devinez quoi ? Ça m'est égal :
Le temps qu'il me faut pour mettre en place un système ultra sécurisé est plus coûteux que la perte de ventes due aux versions crackées (bien que je ne vende pas réellement cela, mais vous comprenez mon point). Cette tendance à vouloir faire les choses de la meilleure façon possible dans le ciel bleu parmi les nouveaux programmeurs est au mieux insensée.
Merci d'avoir pris le temps de répondre à cette question - elles ont été très utiles. Malheureusement, je ne peux accepter qu'une seule réponse, mais j'ai voté pour toutes les réponses utiles.
2 votes
Peut-être si vous décrivez ce que vous essayez d'accomplir avec la clé de chiffrement, nous pouvons vous offrir des conseils sur la façon d'éviter d'avoir besoin de le faire.
3 votes
Doublon exact : stackoverflow.com/questions/926172/…
4 votes
@Kirill : il est difficile d'appeler cette question exactement la même que celle que vous mentionnez. En effet, l'idée est la même. La question ne l'est pas.
2 votes
@xtofl, tu es libre de ne pas voter. Pour moi, cela ressemble à deux questions identiques.
1 votes
Il semble effectivement y avoir un doublon - et je m'excuse pour cela. Le doublon n'est pas apparu dans les recherches, donc j'ai quand même demandé. Il est intéressant de voir que cette question a plus de réponses, et différentes...
2 votes
(Pas lié à une diatribe) La définition même d'une "clé privée" est la moitié d'une paire de clés publique/privée que vous ne partagez pas. Dans ce cas également, la clé privée est celle que vous gardez sur votre serveur; celle de votre application client est publique.
0 votes
@MSalters - merci, je n'avais pas remarqué que j'avais utilisé cette phrase. Je réalise que "clé privée" fait généralement référence à la partie privée d'une paire de clés asynchrones. Cependant, dans ce contexte, je veux dire littéralement - une clé que je souhaite garder privée. Je vais éditer pour éviter toute confusion. Merci encore!
0 votes
Re votre diatribe : la raison pour laquelle nous vous disons que cela ne peut pas être fait est que vous essayez de résoudre le mauvais problème. Maintenant que nous savons en fait ce que vous essayez de faire - "chiffrer des données à travers un réseau non sécurisé avec une clé de chiffrement préalablement connue" - nous pouvons vous dire la bonne manière de le résoudre : négocier une clé unique. Parce que votre clé est la même pour tous les utilisateurs et facilement accessible, ce que vous faites n'est pas "chiffrer" les données, vous les "obscurcissez" simplement ; dans ce cas, vous pourriez aussi bien les XORer avec un certain nombre.
0 votes
+1 pour la modification. Je suis, en ce moment même, frustré au même niveau que vous le seriez, apparemment, en modifiant votre question.
0 votes
Copie de : Comment cacher une chaîne dans un code binaire ? (même après 12 ans de travail actif).