Gibt es einen Grund, SecureZeroMemory () anstelle von memset () oder ZeroMemory () zu verwenden, wenn Sicherheit kein Problem ist?

8

Dieser MSND-Artikel sagt, SecureZeroMemory() ist gut für Fälle, in denen sensible Daten, die für eine Weile im Speicher gespeichert sind, sollten so schnell wie möglich überschrieben werden, wenn sie nicht mehr benötigt werden. Antworten auf diese SO Frage erklären Warum kann das einen Unterschied machen?

Nun ist es sinnvoll, SecureZeroMemory() nur für die Initialisierung jedes Speicherblocks zu verwenden? Zum Beispiel sehe ich in einem Projekt einen Code wie den folgenden:

%Vor%

Warum SecureZeroMemory() hier anstelle von ZeroMemory() , memset() oder Wert Initialisierung verwenden? Ich meine, wenn der Compiler entscheidet, dass die Initialisierung unnötig ist und sie optimieren will - warum würde ich das erzwingen? Gibt es einen Grund, SecureZeroMemory() hier zu verwenden?

    
sharptooth 06.01.2010, 11:38
quelle

2 Antworten

8

Es macht keinen Sinn, SecureZeroMemory zu verwenden, um eine Icon-Infostruktur zu initialisieren. Es kann nur Bytes im Stack-Frame überschreiben, die an anderer Stelle sicher gelöscht werden sollten. Dieses Pferd ist der Scheune bereits entkommen. Es ist nicht einmal sinnvoll, es überhaupt zu initialisieren, der Rückgabewert von GetIconInfo () sagt Ihnen, dass er initialisiert wurde.

SecureZeroMemory () macht nur Sinn nachdem Speicher mit sicheren Daten gefüllt wurde.

    
Hans Passant 06.01.2010, 13:28
quelle
11

SecureZeroMemory wird nie von einem Compiler optimiert. Das ist wichtig, wenn Sie sich Gedanken über den zu reinigenden Inhalt Ihres Speichers machen müssen, sagen Sie, wenn er sehr sensible Benutzerinformationen enthält, z. Banking-Software, Passwörter, etc. Offensichtlich, wenn Sie sich über solche Dinge keine Sorgen machen müssen, können Sie jede andere Art der Reinigung von Speicherpuffern verwenden oder gar nicht putzen, wenn es nicht notwendig ist.

    
Dmitry 06.01.2010 11:48
quelle