J'ai besoin de stocker des informations sensibles (une clé de chiffrement symétrique que je souhaite garder privée) dans mon application C ++. L'approche simple est de faire ceci:
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
Cependant, l'exécution de l'application à travers le strings
processus (ou tout autre qui extrait des chaînes d'une application binaire) révélera la chaîne ci-dessus.
Quelles techniques devraient être utilisées pour masquer ces données sensibles?
Éditer:
OK, à peu près vous avez tous dit "votre exécutable peut être rétro-ingénierie" - bien sûr! Ceci est une bête noire de la mienne, alors je vais déclamer un peu ici:
Pourquoi est-ce que 99% (OK, alors peut-être que j'exagère un peu) de toutes les questions liées à la sécurité sur ce site reçoivent une réponse avec un torrent de "il n'y a aucun moyen possible de créer un programme parfaitement sécurisé" - ce n'est pas utile répondre! La sécurité est une échelle mobile entre une utilisabilité parfaite et aucune sécurité à une extrémité, et une sécurité parfaite mais aucune convivialité à l'autre.
Le fait est que vous choisissez votre position sur cette échelle mobile en fonction de ce que vous essayez de faire et de l'environnement dans lequel votre logiciel fonctionnera. Je n'écris pas d'application pour une installation militaire, j'écris une application pour un PC domestique . J'ai besoin de crypter des données sur un réseau non approuvé avec une clé de cryptage pré-connue. 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 effectuer une rétro-ingénierie du binaire et trouver le mot de passe, mais devinez quoi? Je m'en fous:
Le temps qu'il me faut pour implémenter un système sécurisé de premier ordre coûte plus cher que la perte de ventes due aux versions fissurées (non pas que je vends réellement cela, mais vous comprenez mon point). Cette tendance du ciel bleu «faisons-le de la meilleure façon possible» dans la programmation chez les nouveaux programmeurs est pour le moins insensée.
Merci d'avoir pris le temps de répondre à cette question - ils ont été très utiles. Malheureusement, je ne peux accepter qu'une seule réponse, mais j'ai voté toutes les réponses utiles.