Visual Basic 2008 Verschlüsselung - Sicherheit?

AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Nein, du kannst aus einem Hashwert nicht den Ursprungstext ermitteln. Das hängt aber vom Hashverfahren ab. Reines MD5 gilt zwar nicht mehr als sicher, aber für dein Problem wird es reichen.

Um den Ablauf noch mal klar zu machen:
Passwort Hash einmalig(!) erzeugen. Diesen Hash kopierst du in in die Variable (fest codiert). Danach brauchst du kein Klartextpasswort mehr im Code! Du gibst dann dein PW ein, erzeugt mittels der Methode den Hash (der hängt ja von der Eingabe ab - kennt der Anwender das PW nicht, kommt auch nicht der richtige Hashwert raus!) und vergleichst diesen mit dem hinterlegten Hash.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Man kann also vom Hashcode nicht zurück auf den normalen Zeichencode kommen? Habe jetzt das ganze mit dem Password Feld geschafft, kann ja noch Benutzername einbauen.

Hier das ganze nochmal zur kontrolle.

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Passwort
        Dim password As String
        password = "HASHCODE"
        If MD5F(txtbox_pw.Text) = password Then
            schreiben.Write("Uhrzeit: " & lbl_Zeit.Text & vbCrLf & "IP: " & lbl_ip.Text & vbCrLf & "Login: Erfolgreich" & vbCrLf & "_____________________" & vbCrLf)
            schreiben.Close()
            Form2.Show()
        Else : MsgBox("Fehlerhafter Benutzername oder Passwort", MsgBoxStyle.Critical, "Achtung!")
            schreiben.Write("Uhrzeit: " & lbl_Zeit.Text & vbCrLf & "IP: " & lbl_ip.Text & vbCrLf & "Login: Fehlgeschlagen" & vbCrLf & "_____________________" & vbCrLf)
            schreiben.Close()
        End If
    End Sub
    Public Function MD5F(ByVal Inhalt As String) As String
        Dim MD5 As New System.Security.Cryptography.MD5CryptoServiceProvider
        Dim Bytecode() As Byte = System.Text.Encoding.ASCII.GetBytes(Inhalt)
        Bytecode = MD5.ComputeHash(Bytecode)
        Dim HASH As String = 0
        For Each bt As Byte In Bytecode
            HASH &= bt.ToString
        Next
        Return HASH
    End Function
End Class
Als erstes wird eine Variable password als String delklariert. Dann wird der vorher mit meinem Hascode-generator generierte HASHCODE in die Variable geladen. Der Hashcode wird nicht während des programms noch ausgerechnet.

Dann kommt eine If abfrage:
Wenn die Funktion MD5F mit der textbox des passwortes den gleichen Wert zurückgibt wie die Variable password ihn hat, dann ist der login erfolgreich. Wenn nicht, dann ist er nicht erfolgreich.

In der Funktion kann ein hashcode generiert werden. Die Funktion wird wie eben erklärt aufgerufen, wenn der button gedrückt wird. Der Hashcode wird dann vom Passwort (das ganz normal eingeben wurde) gemacht.


EDIT: Soll ich es beim Login Name auch so machen? Weil da werde ich meinen echten namen nehmen, da bringt es ja eigentlich nichts?
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Man kann also vom Hashcode nicht zurück auf den normalen Zeichencode kommen?
Das geht natürlich, die Frage ist nur, welchen Aufwand man dafür betreiben will (Rainbow-Tables, Salted, mehrere Runden etc ...), um es zu schaffen bzw. zu erschweren.

MD5 ist wie gesagt nicht mehr angesagt, SH256 mit Salt sollte aber locker ausreichen :),
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Ok, ich bleibe mal bei MD5 :D Das ganze funktioniert jetzt auch so weit ganz gut.

Mal was anderes, was aber auch zum Verschlüsseln dazu gehört :

Ich will einen string, der in eine Textbox eingegeben werde verschlüsselt speichern und dann in einem Label wieder ausgeben. Funktioniert so etwas? Mit MD5 wohl kaum, da man den Code ja nicht so einfach zurückverwandeln kann.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Dazu musst du eine richtige Verschlüsselung einsetzen, bspw. AES/Rijndael oder RSA. Natürlich benötigst du dafür ein Passwort, das du dann auch irgendwie eingeben müsstest.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Und so eine Verschlüssellung ist nicht auslesbar/ zurückverfolgbar?
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Ja. Momentan gelten diese verfahren als sicher. Wenn die implementierubg korrekt ist ;-)
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Ok, mache ich mich morgen oder am WE mal dran.

Noch mal was zur Passwordverschlüsselung mit HASH MD5 : Der Hashcode ist ja in ner Variable gespeichert. Kann man den Wert der Variable denn von außen auswechseln? Denn dann könnte man ja einfach nen anderen HASH Code einsetzen und dann hat man das Passwort ja sozusagen auch umgangen!?
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Kann man den Wert der Variable denn von außen auswechseln?
Ja, das ist möglich. Bei Onlineanwendungen soweit kein Problem, da man ja nur Zugriff aufs Frontend hat, nicht aufs Backend mit der Datenbank etc.

Mit einem Hexeditor sollte das bei einer Desktopanwendung machbar sein, falls ein Obfuscator nicht dagegen hilft?
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Ja, das kann man. Normalerweise schützt man ein System halt auch durch die Verschlüsselung, so dass man durch das Austauschen des Passworts trotzdem keinen Zugriff bekommt. Das Problem lässt sich halt nur umgehen, wenn es kein Zugriff auf den hash möglich ist. Bei einer Webanwendung (Forum etc) wird zum Beispiel der Hash-Wert in einer Datenbank hinterlegt (neben den anderen Daten) und normalerweise sollte keine andere Anwendung bzw. kein Anwender direkten Zugriff auf die DB haben.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Und wie kann ich jetzt den HASHWert sicher hinterlegen bzw. mich vor einer Veränderung schützen?
Bin mit dem Hauptprogramm schon um einiges weiter, aber das bringt ja alles nichts, wenn das Passwort nicht läuft :D
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Wie ich ganz zu Beginn schon gesagt habe: Benutzer legt ein PW fest, mit welchem der zu schützende Inhalt verschlüsselt wird. Lokal wirst du keine* sichere Zugangskontrolle hinbekommen.

* Man könnte das eventuell über Berechtigungen lösen. Beispielsweise wird das Passwort zu deinem Benutzeraccount ja auch als Hashwert gespeichert, du kannst diesen als Benutzer aber nicht direkt verändern (und somit ein neues PW setzen). Der Zugriff wird also eingeschränkt. Wie dem auch sei, für eine normale Anwendung ist das eigentlich der vollkommen falsche Ansatz.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Wie ich ganz zu Beginn schon gesagt habe: Benutzer legt ein PW fest, mit welchem der zu schützende Inhalt verschlüsselt wird
Aber dann wird das PW ja wieder als Hash gespeichert und der Hash kann wieder verändert werden? :ugly:

Gibt es also keine Variante einen Hashcode sicher zu speichern? Ich könnte einen USB-Stick als Schlüsselkarte verwenden, aber dann müsste ich den jedes mal rein- und rausstecken. Das nervt auch :D
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Nein, du verschlüsselst den Inhalt ja mit dem Klartextpasswort. Den Hash speicherst du nur, um schnell prüfen zu können, ob das PW stimmt ohne einen Entschlüsselungsversuch unternehmen zu müssen (wenn das PW nicht stimmt, kommt sowieso beim Entschlüsseln nur Müll raus). Wenn du nur kleine Datenmengen verarbeitest, kannst du dir das Hashen eigentlich auch ganz sparen, dann guckst du beim Entschlüsseln einfach, ob Müll rauskommt.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Beim Entschlüsseln? Es wird doch gar nichts entschlüsselt!?

Den Hash speicherst du nur, um schnell prüfen zu können, ob das PW stimmt
Aber wenn der gespeicherte Hash verändert wird, kommt man doch ganz leicht rein. Es müsste also eine Möglichkeit geben den Hash so zu verstauen, dass er nicht verändert werden kann.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Sag mir bitte mal ganz genau, was du vorhast. Soll das einfach nur ein Login sein und wenn ja, was soll damit geschützt werden? Eine auf Hashwerten basierende Zugangskontrolle, bei der die Werte manipuliert werden können, ist natürlich nutzlos, das stimmt.
 
Also: ich programmiere eine art persönliches programm. Alle funktionen, die ich gerne benutze angepasst in einem programm.

Das loginfenster soll den zugang zum eigentlichen fenster versperren. Dazu gebe ich ein klartext pw ein, das in den hashcode verwandelt wird und dann mit einem bestehenden hashcode verglichen wird. Das problem ist, dass man diesen hashcode von außen ja verändern kann.

Später möchte ich meine termine etc. Die ich in das programm eingebe auch noch verschlüsselt speichern, aber so, dass man sie wieder anzeigen lassen kann.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Später möchte ich meine termine etc. Die ich in das programm eingebe auch noch verschlüsselt speichern, aber so, dass man sie wieder anzeigen lassen kann.
Das solltest du sofort machen (hatte ja schon erwähnt, wie man das machen könnte). Ansonsten kannst du nämlich super-duper-mega Hashs bilden bis zum Ende aller Tage aber jeder kann die Datei mit einem externen Editor einfach öffnen und ansehen.
 
Meinst du das hier? Soll ich das dann auch fürs pw machen oder wie?

bingo88 schrieb:
Dazu musst du eine richtige Verschlüsselung einsetzen, bspw. AES/Rijndael oder RSA. Natürlich benötigst du dafür ein Passwort, das du dann auch irgendwie eingeben müsstest.
 
AW: Visual Basic 2008 Verschlüsselung - Sicherheit?

Ich würde das so machen: Du legst in deinem Programm eine neue Projektdatei an (da wird dann z. B. der Kalender drin gespeichert), z. B. über Datei->Neu. Dann muss der Anwender zuerst ein Passwort festlegen, welches zur Verschlüsselung dieser Datei verwendet wird. Das muss auch nirgendswo gespeichert werden, es soll ja geheim sein. Jedenfalls gibst du dann deine Daten ein und speicherst die Datei (-> verschlüsseln). Beim nächsten Öffnen der Datei musst du dann das zuvor festgelegte Passwort wieder eingeben um den Inhalt der Datei zu entschlüsseln. Dann kannst du die Daten angucken und ggf. ändern und wieder verschlüsselt speichern. Wenn jemand mit einem Editor in die Datei sieht, wird er nur den verschlüsselten Inhalt sehen und damit kann man in der Regel nichts anfangen ;)

Wenn man gegen Profis antritt, muss man natürlich noch ein wenig mehr machen. Man kann zum Beispiel unter Umständen den entschlüsselten Dateiinhalt bzw. Passwörter aus dem Arbeitspeicher auslesen und solche Späße :ugly:
 
Zurück