Data Protection APIIn der vorherigen Folge haben Sie verschiedene Kryptographie-Verfahren kennen gelernt. Sowohl symmetrische als auch asymmetrische Konzelationssysteme können Sie verwenden, um in Desktop-Anwendungen Daten vor unbefugter Kenntnisnahme zu schützen. Microsoft stellt aber auch eine komfortablere Lösung zur Verfügung: das Data Protection API (DPAPI). DPAPI stellt verschiedene Funktionen zur Ver- und Entschlüsselung von Daten bereit. Besonders interessant ist DPAPI, weil es die Schlüsselverwaltung übernimmt. Die öffentlichen DPAPI-Interfaces sind Bestandteil der Crypt32.dll, das selbst wiederum Bestandteil des CryptoAPI ist, und für alle Benutzerprozesse, die die Bibliothek geladen haben, verfügbar. Die Schlüsselerzeugung und -verwaltungDPAPI erzeugt aus den Zugangsdaten (i.d.R. dem Passwort) des jeweiligen Benutzers einen Schlüssel, mit dem ein danach erzeugter Master Key verschlüsselt wird. Bei jedem Aufruf einer Verschlüsselungsfunktion wird aus dem Master Key, Zufallsdaten und optional einem vom Benutzer gelieferten Entropie-Wert ein Sitzungsschlüssel berechnet und für die symmetrische Verschlüsselung der Daten verwendet. Die für die Schlüsselerzeugung verwendeten Zufallsdaten werden zusammen mit den verschlüsselten Daten gespeichert, um daraus bei der späteren Entschlüsselung den temporären Schlüssel erneut berechnen zu können. Wurde ein Entropie-Wert verwendet, muss dieser vom Programm separat gespeichert werden. Der Entropie-Wert sorgt bei Bedarf dafür, dass keine anderen Programme auf die verschlüsselten Daten eines Programms zugreifen können. Prinzipiell können alle vom aktuellen Benutzer gestarteten Programme alle mit DPAPI geschützten Daten entschlüsseln, da alle Sitzungsschlüssel aus dessen Zugangsdaten abgeleitet werden. Master-Key mit VerfallsdatumDer Master Key verfällt aus Sicherheitsgründen nach einigen Monaten und wird durch einen neuen ersetzt, der danach für die Verschlüsselung verwendet wird. Der alte Master Key wird aufbewahrt, um damit verschlüsselte Daten weiter entschlüsseln zu können. Bei einer Änderung der Zugangsdaten wird der Master Key entsprechend angepasst, sodass weiter auf die durch DPAPI geschützten Daten zugegriffen werden kann. Bei einer Neuinstallation des Systems geht der Schlüssel jedoch verloren, sodass die Daten danach nicht mehr entschlüsselt werden können. Ist ein Computer Bestandteil einer Domain, wird auf dem Domain Controller ein verschlüsseltes Backup des Master Key gespeichert, für Standalone-Rechner kann eine Password Reset Disk (PRD) erzeugt werden, mit der bei Bedarf das Passwort zurückgesetzt und die Master-Keys mit dem neuen Passwort verschlüsselt werden können. Unter Windows 7 können Sie ggf. auch den DPAPI Key Migration Wizard (dpapimig.exe) nutzen, um die Schlüssel wiederherzustellen. Die DPAPI-FunktionenDPAPI stellt vier Funktionen bereit:
Der Unterschied zwischen ProtectedData und ProtectedMemory besteht darin, das bei einem Reboot zwischen Protect- und Unprotect-Aufruf bei ProtectedMemory keine Entschlüsselung mehr möglich ist. ProtectedMemory ist z.B. gut dafür geeignet, während der Laufzeit des Programms im Speicher abgelegte Zugangsdaten zu schützen, während ProtectedData z.B. zum Schutz vertraulicher Informationen in Konfigurationsdateien verwendet werden kann. DPAPI im EinsatzIn .NET erfolgt der Zugriff auf die Funktionen CryptProtectData() und CryptUnprotectData() über die Klasse ProtectedData mit den Methoden Protect und Unprotect, die z.B. in C# folgende Syntax haben:
Auf die Funktionen CryptProtectMemory() und CryptUnprotectMemory() kann in .NET über die Klasse ProtectedMemory zugegriffen werden, die ebenfalls die Methoden Protect und Unprotect zur Verfügung stellt. Beide Methoden ver- bzw. entschlüsseln direkt den übergebenen Speicher. Ihre Syntax in C#:
MemoryProtectionScope kann drei Werte annehmen:
Ein Beispiel für die Anwendung von ProtectedData:
Der Quelltext ist selbsterklärend. Vor dem Kompilieren muss ein Verweis auf die System.Security.dll eingeschlossen werden.
Die mit ProtectedData verschlüsselten Daten können dann z.B. in Konfigurationsdateien gespeichert werden. Eine Übertragung auf andere Rechner ist nicht möglich, da die Daten dort nicht entschlüsselt werden können. Für diesen Zweck ist DPAPI nicht geeignet, stattdessen müssen Sie die entsprechenden allgemeinen Kryptographie-Funktionen zur symmetrischen oder asymmetrischen Verschlüsselung verwenden. Die Anwendung von ProtectedMemory verläuft analog. Welche Methoden für welchen Zweck geeignet sind, zeigt die folgende Tabelle:
|
Autor des Artikels
|