Schützen Sie vertrauliche Daten im Arbeitsspeicher mit C#C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Schützen Sie vertrauliche Daten im Arbeitsspeicher mit C#

Post by Anonymous »

Ich habe eine C#-Anwendung, die einige Variablen mit vertraulichen Daten initialisiert. Es handelt sich nicht um Passwörter, wir halten sie jedoch für vertraulich. Die Variablenwerte, die ich schützen möchte, sind alle vom Typ String.
Was ich versuche, ist, einen Mechanismus zu finden (ich weiß, dass es keinen 100-prozentigen Mechanismus gibt), der mir den Schutz ermöglicht In-Memory-Variablenwerte zu speichern oder es den Angreifern zumindest etwas schwerer zu machen, sie zu lesen. So kann ich vertrauliche Daten im Speicher meiner Anwendung schützen und sie für jede andere Anwendung, die meine Anwendung zur Laufzeit verfolgen, sichern oder lesen kann, „unlesbarer“ machen.
Ich sehe, dass das existiert die Microsoft Data Protection API (DPAPI), die eine Klasse namens ProtectedMemory hat, die zwei Methoden zum Schützen und Aufheben des Schutzes bietet, hier ist ein Beispiel.
Jedenfalls sieht es so aus, als hätte MS aufgehört, ProtectedMemory als jemand zu verwenden sagt hier, da es nicht so ist nützlich.
Andere Leute hier schlagen stattdessen vor, sie mit einer guten Funktion (z. B. SHA1/2) zu hashen und den Digest zu speichern.
Das würde ich gerne private Eigenschaften zu verwenden (da sie nur in meiner Klasse verwendet werden) anstelle einer einfachen Variablen, deren Set-Eigenschaft sie in den Speicher verschlüsselt und die Get-Eigenschaft entschlüsselt. Wie unten:

Code: Select all

public static MyClass
{
private string MyVariable
{
get
{
return Encoding.UTF8.GetString(ProtectedMemory.Unprotect(_myVariable, MemoryProtectionScope.SameLogon));
}
set
{
_myVariable =  Encoding.UTF8.GetBytes(value);
ProtectedMemory.Protect(_myVariable, MemoryProtectionScope.SameLogon);
}
}

private byte[] _myVariable;
}
Und das Gleiche gilt für den Rest meiner String-Variablen.
Ich wollte das Gleiche tun wie dieser Typ in seinem Beitrag, aber einige Leute sagen dort Das Verschieben des geschützten Speichers von einem privaten Hintergrundfeld in eine Eigenschaft wird nicht helfen (ich bin mir nicht sicher, was er meint, wenn die Verwendung einer Eigenschaft nicht geschützt ist¿?). Können Sie mir auch bestätigen, ob die Verwendung einer privaten Eigenschaft für meine Variablen im Speicher geschützt ist oder nicht?
Wie kann ich das tun? Könnte jemand einen einfachen Codeausschnitt bereitstellen? Der Verschlüsselungs-/Entschlüsselungsprozess sollte relativ schnell sein.
Ich möchte keine Drittanbieter verwenden, sondern nur Betriebssystemhilfe und .NET Framework.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post