Disons que j'ai récupéré une clé secrète cryptée sur le serveur. Je le déchiffre pour obtenir la clé secrète réelle, attribue la clé déchiffrée à une variable dans mon application. Quelque chose le long de cela:
const encryptedKey = fetchKeyFromServer();
const secretKey = decrypt(encryptedKey);
//Now, the variable secretKey has the actual secret key in memory
Maintenant, est-ce une chose vulnérable à faire en termes de sécurité? Étant donné que j'ai stocké la clé déchiffrée dans la mémoire, y a-t-il une chance que quelqu'un puisse révéler la clé secrète en lisant dans la mémoire de l'application?
Cependant, si je n'attribue pas la clé déchiffrée à une variable, comment dois-je utiliser la clé? J'ai pensé à affecter la clé cryptée à la variable et à la décrypter chaque fois que je dois l'utiliser. Mais je ne sais toujours pas si c'est la meilleure façon de faire les choses.
Oui, cela signifie que la clé sera stockée dans la mémoire de l'application. Oui, il existe un risque que des logiciels malveillants (avec des privilèges suffisants) puissent les lire à partir de là. Ce risque est difficile à éviter - si vous souhaitez utiliser la clé, vous devez la mettre en mémoire, tout comme vous devez mettre votre clé de maison dans votre poche après avoir verrouillé la porte.
Cela n'est généralement pas considéré comme un gros problème pour une raison: s'il y a un malware avec des privilèges root sur un ordinateur, il est déjà de toute façon en cours de jeu. Il n'y a aucun moyen de protéger quoi que ce soit à ce stade. Même si vous ne déchiffrez pas la clé, le logiciel malveillant pourrait simplement lire la clé utilisée pour ce déchiffrement où qu'elle soit stockée.
Voici trois choses que vous pouvez faire pour atténuer le risque: