Hallo,
der
SecureString-Klasse wird gemeinhin nachgesagt, sie sei sicher und würde die Benutzerdaten gut schützen. Und Im groben und ganzen ist die Klasse auch gut implementiert. Dennoch gibt es einige Kritikpunkte, die ich hier einfach mal benennen wollte.
Fühlt euch frei eure eigene Meinung dazu hier zu schreiben. Ich würde mich freuen zu hören, wie ihr es seht.
1) Das einmal erstelle Objekt kann nicht direct gelöscht werden. Die genaue Aussage dazu lautet:
there is a risk the information could be revealed after it is used because your application cannot delete the data from computer memory.
[Quelle: MSDN]
2) Ferner wird der Text auch nicht die ganze Zeit Im Speicher verschlüsselt gehalten. Während der Änderung des Strings wird dieser komplett entschlüsselt um dann die Änderung auszuführen und anschließend wieder zu verschlüsseln.
Siehe dazu auch den
Quellecode der Klasse.
Es dürfte damit für einen Debugger eigentlich kein Problem sein, sich an dieser Stelle einzuhacken und damit den ungeschützen Datensatz einfach mitzulesen.
Währe es denn nicht Möglich nur den neuen Wert (neuer string, neues Zeichen) zu verschlüsseln und damit die Angriffsfläche zu verkleiner.
Allgemein würde ich auch behaupten, dass es eigentlich keine wirklich gute Schutzfunktion in c#/.NET geben kann, weil sich der Eingriff in den Speicher und Codelfuss gut Machen lässt, die Sprach sehr offen ist und man kaum wirklichen Zugriff auf den Speicher
hat (wie in c++ problemlos möglich).
Was haltet ihr davon?
Thomas
© 2015 Thomas Roskop
Germany // Deutschland