Hallo,
ich würde ganz grundsätzlich Passwörter ausschließlich als Hash speichern (vorher Salt!). Zu groß die Gefahr, dass User das selbe Passwort mehrfach nutzen und man über die Arbeitsmappe nicht nur an das Passwort für diese eine Anwendung kommt, sondern auch noch für weitere Nutzungen. Stellt euch vor, die Datei verschickt jemand noch unbedacht (ist demjenigen ja wahrscheinlich nicht bewusst, dass da extrem sensible Daten wie Passwörter in einem versteckten Tabellenblatt drin sind). Dann würde ich mich schon mitverantwortlich fühlen für die Öffenlegung der Daten!
Daher gilt grundsätzlich: Passwörter ausschließlich mit Salt gehashed speichern! (Salt: https://de.wikipedia.org/wiki/Salt_(Kryptologie)) Man könnte zum Beispiel dieses Modul für einen Md5-Hash benutzen: https://www.di-mgt.com.au/basMD5.bas.html Dann könnte der Code im Prinzip so aussehen:
Option Explicit
Const SALT As String = "ue2SyEkWfE6VlCcOr2DMn4hh" 'beliebige Zeichenfolge
Public Function check_passwort(Passwort As String, salted_hash As String) As Boolean
check_passwort = (MD5_string(SALT & Passwort) = salted_hash)
End Function
Public Function salted_hash(Passwort As String) As String
salted_hash = MD5_string(SALT & Passwort)
End Function
Sub Beispiel()
Dim zu_speichernder_hash As String
Dim gespeicherter_hash As String
'Jemand vergibt sein Passwort:
zu_speichernder_hash = salted_hash(InputBox("denk dir ein passwort aus"))
'jetzt den Hash speichern
'Worksheets(1).Cells(1, 1).value = zu_speichernder_hash
'Zu einem späteren Zeitpunkt Passworteingabe überprüfen
gespeicherter_hash = zu_speichernder_hash 'Worksheets(1).Cells(1, 1).value
If check_passwort(InputBox("Wie lautet das Passwort"), gespeicherter_hash) Then
MsgBox "Willkommen, Dein Passwort stimmt"
Else
MsgBox "Passwort stimmt nicht"
End If
End Sub
Sicherheit erhöhende Maßnahmen:
- andere Hash-Funktion als MD5 verwenden
- Für jeden User ein anderes Salt benutzen. Das bedeutet für jeden User werden Salt und Hash gespeichert!
- Die Hashes nicht in der Arbeitsmappe speichern
All das, was ich hier geschrieben habe, erhöht die Sicherheit, dass das Passwort eines Nutzers bekannt wird. Ob die Passwortabfrage umgangen werden kann, ist eine ganz andere Frage.
Ich halte es allerdings für grob fahrlässig, ein Passwort verschlüsselt in einem Tabellenblatt zu hinterlegen, direkt daneben noch den Schlüssel und im Code die Verschlüsselungsmethode. Da braucht nur eine PraktikantIn etwas Langeweile und persönliche, sensible Daten werden zum Vorschein gebracht :-)
Grüße, Ulrich
|