Je dois écrire un service Windows qui gère à un certain point, les données confidentielles (telles que les codes PIN, mots de passe, et ainsi de suite). Ces informations sont nécessaires pour un très court laps de temps: généralement, elles sont envoyées presque immédiatement à un lecteur de carte à puce.
Permet de considérer ce morceau de code:
{
std::string password = getPassword(); // Get the password from the user
writePasswordToSmartCard(password);
// Okay, here we don't need password anymore.
// We set it all to '\0' so it doesn't stay in memory.
std::fill(password.begin(), password.end(), '\0');
}
Maintenant mon souci c'est que sur les optimisations du compilateur. Ici, le compilateur peut détecter que le mot de passe est sur le point d'être supprimé et qu'une modification de sa valeur à ce point, est inutile, il suffit de supprimer l'appel.
Je n'attends pas mon compilateur pour se soucier de la valeur de l'avenir-non référencé la mémoire.
Sont mes préoccupations légitimes ? Comment puis-je être sûr que ce morceau de code ne sera pas optimisé-out ?