Il est parfois utile de cacher une chaîne de caractères dans un fichier binaire (exécutable). Par exemple, il est judicieux de cacher les clés de chiffrement des fichiers binaires.
Quand je dis "cacher", je veux dire rendre les chaînes plus difficiles à trouver dans le binaire compilé.
Par exemple, ce code :
const char* encryptionKey = "My strong encryption key";
// Using the key
après la compilation, produit un fichier exécutable avec ce qui suit dans sa section de données :
4D 79 20 73 74 72 6F 6E-67 20 65 6E 63 72 79 70 |My strong encryp|
74 69 6F 6E 20 6B 65 79 |tion key |
Vous pouvez voir que notre chaîne secrète peut être facilement trouvée et/ou modifiée.
Je pourrais cacher la ficelle
char encryptionKey[30];
int n = 0;
encryptionKey[n++] = 'M';
encryptionKey[n++] = 'y';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 's';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'g';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'c';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'y';
encryptionKey[n++] = 'p';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'i';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'k';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'y';
mais ce n'est pas une méthode agréable. Vous avez une meilleure idée ?
PS : Je sais que le simple fait de cacher des secrets ne fonctionne pas contre un attaquant déterminé, mais c'est bien mieux que rien
De plus, je connais le cryptage asymétrique, mais il n'est pas acceptable dans ce cas. Je suis en train de remanier une application existante qui utilise le cryptage Blowfish et transmet des données cryptées au serveur (le serveur décrypte les données avec la même clé).
I ne peut pas changer l'algorithme de cryptage parce que je dois assurer une compatibilité descendante. I ne peut pas même changer la clé de cryptage.
13 votes
Il existe des systèmes de cryptage à clé publique pour lesquels il n'est pas nécessaire de cacher la clé.
5 votes
Je connais les paires de clés, mais ce n'est pas acceptable dans ce cas. Je remanie une application existante qui utilise le cryptage Blowfish. Les données cryptées sont transmises au serveur et le serveur décrypte les données. Je ne peux pas changer l'algorithme de cryptage car je dois assurer une compatibilité ascendante.
7 votes
Cacher une clé dans l'exécutable n'est presque jamais une bonne idée.
0 votes
Duplicata de : Techniques d'occultation des chaînes de caractères sensibles en C++ (pas de fermeture cependant, après 12 ans de travail actif et de réponses significatives).