Laden...

ProtectedData - Wo der Klartext?

Erstellt von blackdynamic vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.543 Views
Thema geschlossen
B
blackdynamic Themenstarter:in
51 Beiträge seit 2010
vor 13 Jahren
ProtectedData - Wo der Klartext?

Hallo Community,

ich möchte mein E-Mail Passwort im Code so verschlüsseln, das es beim disassemblern nicht ausgelesen werden kann.

Beim verschlüsseln Hilft mir die Klasse ProtectedData mit der Methode Protect.

Beispiel:


byte[] s_aditionalEntropy = { 9, 8, 7, 6, 5 };
System.Text.ASCIIEncoding asc = new System.Text.ASCIIEncoding();

byte[] secure = ProtectedData.Protect(asc.GetBytes("ich bin ein passwort"), s_aditionalEntropy, DataProtectionScope.CurrentUser);
System.Net.NetworkCredential nc = new System.Net.NetworkCredential("blackdynamic", asc.GetString(ProtectedData.Unprotect(secure, s_aditionalEntropy, DataProtectionScope.CurrentUser)));

Meine Frage ist nun, muss ich die Zeile (asc.GetBytes("ich bin ein passwort")) noch irgendwie so verschlüsseln, dass ich "ich bin ein passwort" in den Application Settings ablege o.ä.?
Oder kann das Passwort so schon nicht mehr beim disassemblern ausgelesen werden?

F
240 Beiträge seit 2006
vor 13 Jahren

Wenn genau der code in deinem Sourcecode steht, bringt das genau garnichts. Die einzig wirkungsvolle Methode wäre es, das Passwort in unmanaged code unterzubringen, welcher dann über P/Invoke aufgerufen wird.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo blackdynamic,

der Code bingt in der Tat nichts, weil ja "ich bin ein passwort" im Klartext in der Assembly stehen muss, als Eingabe für den "Schutz"-Code, der ja erst zur Laufzeit ausgeführt wird. Also zu spät.

Eine Antwort auf deine Frage, wenn vielleicht auch nicht die erwartete, findest du in [FAQ] DB-Password/Kennwort/Connection-String sicher speichern.

BTW: ASCIIEncoding ist 7bit, kann also keine Umlaute und nur wenige Sonderzeichen darstellen und ist damit fast immer das false. Gängige Encodings sind Encoding.Default und Encoding.Utf8.

herbivore

B
blackdynamic Themenstarter:in
51 Beiträge seit 2010
vor 13 Jahren

Hallo Herbivore,

danke für deine Informationen.
Ich habe mir das FAQ und alle verlinkten Themen durchgelesen, konnte dort aber keine Antwort auf meine Frage finden.
Wenn ich das hier richtig verstanden habe:


// Pass a logRounds parameter to GenerateSalt to explicitly specify the
// amount of resources required to check the password. The work factor
// increases exponentially, so each increment is twice as much work. If
// omitted, a default of 10 is used.
string hashed = BCrypt.HashPassword(password, BCrypt.GenerateSalt(12));

// Check the password.
bool matches = BCrypt.CheckPassword(candidate, hashed);

Wird das Passwort hier ebenfalls in einer Variable "password" gespeichert?!

Meine Frage ist nun wo ich den Klartext, den die Passwortvariable enthält am besten bzw. sichersten zuweisen kann?

F
240 Beiträge seit 2006
vor 13 Jahren

Ja, wird es.

Die Passwortvariable darf nirgends im code sein (d.h. das passwort wird nur verschlüsselt hinterlegt) und der Code, der dieses entschlüsselt, darf auch nicht in der managed assembly sein, denn die kann man ja wieder disassemblen. Das ist leider das Problem bei Managed Code 😉

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo blackdynamic,

Ich habe mir das FAQ und alle verlinkten Themen durchgelesen, konnte dort aber keine Antwort auf meine Frage finden.

die Antwort der Frage steht direkt in der FAQ: Es gibt keinen Weg, das Passwort sicher abzulegen. Du kannst es allenfalls verschleiern. Das musst du aber natürlich vor dem Compilieren machen und nur das Ergebnis der Verschleierung darf in den Code oder die Ressourcen, nicht der Klartext.

Das bekommst du jetzt sicher auch ohne weitere Hilfe hin.

herbivore

Thema geschlossen