Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Verschlüsselung eines String via Prozedur

Begonnen von datekk, November 21, 2016, 19:33:46

⏪ vorheriges - nächstes ⏩

datekk

Hallo, meine DB ist in FE und BE aufgeteilt, wobei das BE ein SQL Server ist. Im Standard-Access hat man ja die Möglichkeit, Tabellenspalten als 'Kennwort' zu definieren. Damit kommen dann immerhin Punkte statt der Klartext. Mit dem via ODBC eingebundenen Tabellen funktioniert das nicht. Nun möchte ich gern via eines Verschlüsselungsmoduls die Passwörter verschlüsseln. Der User gibt also ein Passwort ein, dieses wird in einer Variable gespeichert und durch eine Prozedur geschickt, in der es verschlüsselt wird. Das verschlüsselte PW wird dann zum BE übertragen und dort in der Tabelle abgelegt. Gibt es irgendwo fertigen Verschlüsselungscode oder wie handhabt ihr das so?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps


PhilS

Zitat von: datekk am November 21, 2016, 19:33:46Damit kommen dann immerhin Punkte statt der Klartext. Mit dem via ODBC eingebundenen Tabellen funktioniert das nicht.
Du kannst das entsprechende Anzeigefeld mit Format "Kennwort" versehen. Das hat denselben Effekt. Dies wirkt sich aber nur auf die Anzeige in der Benutzeroberfläche aus. Eine Verschlüsselung erfolgt dadurch nicht, auch nicht bei Access-Tabellen.
Zitat von: datekk am November 21, 2016, 19:33:46Nun möchte ich gern via eines Verschlüsselungsmoduls die Passwörter verschlüsseln.
Bist du sicher? Ich glaube eher, du möchtest einen Hash des Passwortes berechnen lassen.
Zitat von: datekk am November 21, 2016, 19:33:46Gibt es irgendwo fertigen Verschlüsselungscode ...
Du solltest vielleicht erstmal zu dem Unterschied von Hashwerten und Verschlüsselung nachlesen, um zu wissen, was du genau willst.
Wenn ich bezgl. Hashwerte richtig liege, findest du mit einer Google Suche nach Hash +SHA1 +VBA ein paar Treffer. - Ich kann die Qualität der Ergebnisse nicht bewerten, daher nur der Link zur Suche.

Zitat von: datekk am November 21, 2016, 19:33:46... oder wie handhabt ihr das so?
Windows Authentifizierung! :-)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Wurliwurm

Zitat von: datekk am November 21, 2016, 19:33:46
Der User gibt also ein Passwort ein, dieses wird in einer Variable gespeichert und durch eine Prozedur geschickt, in der es verschlüsselt wird. Das verschlüsselte PW wird dann zum BE übertragen und dort in der Tabelle abgelegt.

Ohne jetzt genau zu wissen, worum es geht: Verschlüsselungen sollten auf dem Server stattfinden.

datekk

Danke Euch Allen für die vielen Hinweise. Eine Frage noch @Wurliwurm: Wie läuft das ab? Per Prozedur auf dem SQL Server? Dazu hatte ich schon mal gegoogelt aber nix passendes gefunden. Das was ich gefunden habe bezog sich meist auf MySQL. Bei mir läuft ein reiner SQL Server (Express). Wenn die Verschlüsselung auf dem Server läuft, werden Kennwörter immer noch in reinform über die Leitung geschickt. Also wäre es doch sicher besser, die Verschlüsselung oder den  Hash (ich muss mich da wirklich nochmal einlesen @PhilS) übers Netz zum Server zu senden.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

Wurliwurm

Im Idealfall ist die Verschlüsselung transparent, sprich passiert auf Netzwerkebene, ohne daß sich Server oder Client damit befassen müssen. Wenn Dein Anliegen ist, die Daten sicher vor Abhören in der Leitung zu machen, würde ich schauen, wie man das im Netzwerk macht. Die andere Sache ist Hash-Verschlüsselung in der Datenbank, damit also keiner mit einem SELECT auf dem Server die Passwörter im Klartext zu sehen bekommt. Die schlechteste Lösung ist m.E. sich die Verschlüsselungsalgorithmen im Client zusammenzufrickeln.

Leider habe ich hier auch nur Halbwissen. In meiner "persönlichen" Datenbank zuhause verwende ich Oracle 11g. Hier ist die sichere Passwortabfrage zur Anmeldung eingebaut, ich gehe davon aus, daß das bei SQL Server genauso ist.

Vielleicht interessant zum Thema
http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/netzwerkverschluesselung/index.html

PhilS

Zitat von: Wurliwurm am November 22, 2016, 08:57:05Ohne jetzt genau zu wissen, worum es geht: Verschlüsselungen sollten auf dem Server stattfinden.
In diesem Kontext ist es aber wichtig zu wissen, worum es geht.

Ein Hash ist eine "wiederholbare Einweg-Verschlüsselung", um z.B. aus einem Passwort einen neuen Wert zu errechnen, der es unmöglich macht, Rückschlüsse auf das Passwort selbst zu ziehen. Eine Entschlüsselung ist unmöglich (außer durch "Brute Force"). Sie ist auch nicht nötig, weil der Benutzer ja das Klartext-Passwort kennt. Wenn der gleiche Hash-Algorithmus auf das gleiche Klartext-Passwort angewendet wird, kommt wieder der gleiche Hashwert raus und kann mit dem gespeicherten Wert verglichen werden.

Ich bin kein Security-Experte, aber aus meiner Sicht ist es sinnvoll, den Hash eines Passwortes so früh wie möglich im Verarbeitungsprozess zu berechnen und dann nur noch diesen zu verwenden. Wenn das Klartext-Passwort nie über das Netzwerk übermittelt und in der DB verarbeitet wird, dann kann es dort auch niemals eingesehen/abgegriffen werden.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor