Datenverschlüsselung

Hält Ihre Access-Datenbank Datenschutzrichtlinien stand Eine gute Frage, die Sie beim Entwickeln von Anwendungen für Unternehmen oder Behörden zu hören bekommen werden. Sie werden dann etwa mit dem Access-Sicherheitssystem argumentieren, also der Geschichte mit den Arbeitsgruppen. Das wird den Datenschutzbeauftragten bei sensiblen Daten aber höchstwahrscheinlich nicht zufrieden stellen, denn Zugriff auf die Tabellen erhält man über den einen oder anderen Trick dennoch. Es gibt aber Techniken, die selbst den Einblick in die Tabellen wertlos machen können…

Unsichere Datenbanken

Die Absicherung einer Access-Datenbank über eine Arbeitsgruppendatei (MDW) beschränkt zwar den Kreis der Zugriffsberechtigten auf Nutzer, die sich mit Benutzername und Kennwort einloggen müssen. Mit einigen zusätzlichen Vorkehrungen wie dem Ausblenden des Datenbankfensters, Erstellen einer MDE-Datenbank, Deaktivieren der Umschalttaste beim Start der Anwendung und dem Einsatz einer Access-Runtime statt der Vollversion scheint der Datenzugriff zwar auf die Präsentationsschicht, also Formulare und Berichte, begrenzt zu sein. Was aber sollte einen neugierigen Nutzer davon abhalten, sich eine Kopie des Backends und der MDW, auf die nun mal systembedingt alle User Vollzugriff haben müssen, zu erstellen und dann in Ruhe seine Access-Vollversion an die MDW anzuschließen und sich nach Eingabe seiner Anmeldedaten in aller Ruhe die Tabellen anzusehen

Sicher, es gibt noch ausgefeiltere Methoden, die Tabellen vor dem User zu schützen, etwa der Einsatz von WITH-OWNERACCESS-OPTION-Abfragen, die nur dem Entwickler (Owner) oder dem VBA-Code den Zugriff erlauben. Das nutzt aber alles nichts, wenn er ein Datenrettungs-Tool wie AccessRecovery über das Backend laufen lässt, das im Stande ist, unter Umgehung der MDW-Absicherung die Tabellen binär auszulesen und ungeschützt wiederherzustellen.

Das ist auch der Grund dafür, dass viele Organisationen Access-Datenbanken prinzipbedingt als unsicher ablehnen. Es gibt aber auch Datenschutzbeauftragte, die eine Access-Datenbank akzeptieren, wenn sichergestellt ist und plausibel gemacht werden kann, dass die Daten verschlüsselt sind. Ohne einen speziellen Zugriffsschlüssel sind die Tabellen dann unbrauchbar. Das zu realisieren ist gar nicht so schwer.

Sicherere Datenbanken

Tabellenfelder, die etwa Namen und Adressen von Klienten enthalten, die nicht öffentlich einsehbar sein sollen, können Sie mit verschiedenen Algorithmen verschlüsseln. Die Tabelle enthält dann nur sinnlose Zeichenfolgen, mit denen keiner etwas anfangen kann. Schwieriger ist es, Felder anderer Datentypen wie Date oder Long zu verschlüsseln, denn das Ergebnis der Verschlüsselung muss ja dann den gleichen Datentyp aufweisen, damit es im Feld gespeichert werden kann. Oder man muss andere Felder wie Binärtypen einsetzen, um das Verschlüsselungsergebnis aufnehmen zu können. Da es jedoch für Zahlenwerte höchst selten einen Grund zur Verschlüsselung geben dürfte, beschäftigen sich die folgenden Techniken fast ausschließlich mit Strings und Textfeldern.

Texte verschlüsseln

Es gibt zahllose Methoden, um einen String zu verschlüsseln. Das Ziel ist zunächst, aus einem Text einen anderen zu machen, der keine Rückschlüsse auf den ursprünglichen Inhalt mehr zulässt. Umgekehrt muss aus dem verschlüsselten Text genauso wieder der Ursprungstext zu errechnen sein. Ein Beispiel für eine sehr simple Routine zeigt Listing 1.

Listing 1: Textzeichen durcheinanderbringen

Function ScrambleString(sIn As String) As String
     Dim i As Long, lLen As Long, 
     Dim sChr As String, iChr As Integer
     lLen = Len(sIn)
     ScrambleString = String(lLen, 0)
     For i = 1 To lLen
         sChr = Mid(sIn, i, 1)
         iChr = Asc(sChr)
         sChr = Chr$(iChr Xor 255)
         Mid(ScrambleString, i, 1) = sChr
     Next i
     ScrambleString = StrReverse(ScrambleString)
End Function

Dabei wird jedes Zeichen des Strings in sChr zwischengespeichert, daraus die Ordinalzahl ermittelt (iChr) und diese mit der boolschen Operation Xor 255 bearbeitet. Hieraus wird ein neuer String mit den Zeichen der neuen Ordinalzahlen iChr erstellt, der anschließend noch mit der Funktion StrReverse umgedreht wird. Heraus kommt, wenn Sie der Funktion beispielsweise den Text "Unternehmen” übergeben, die Zeichenkette ” ‘š”-š’š<‘ª”. An diesem String lässt sich wohl nichts mehr erkennen, was auf die Ausgangszeichenkette “Unternehmen” schließen ließe.

Der Clou an der Funktion ist, dass Sie ihr umgekehrt genauso den verschlüsselten String übergeben können, um wieder an den korrekten Text zu kommen: Aus ” ‘š”-š’š<‘ª” wird dann wieder “Unternehmen”.

Dennoch ist die Methode zu einfach, um einem gewieften Hacker die Arbeit wirklich schwer zu machen. Beispielsweise wird jedes Zeichen im Quelltext in jeweils genau das gleiche Zielzeichen im verschlüsselten Text umgewandelt. Im Beispiel wird ein “n” immer zu “š”. über stochastische Analyseverfahren etwa lässt sich für einen Krypto-Experten hieraus leicht das Verschlüsselungsverfahren ermitteln.

Deshalb haben sich verschiedene standardisierte Verfahren etabliert, nach denen Texte sicherer verschlüsselt werden können, wobei zur Verschlüsselung meist noch ein eindeutiger Key zum Einsatz kommt, ohne den man den Text nicht mehr zurückverwandeln kann. Diese Algorithmen tragen Namen wie RC2, RC4, DES, Blowfish, TEA, Serpent oder Gost und kennen jeweils mehrere Derivate. Sie unterscheiden sich im Grad der Verschlüsselung – quasi dem “Sicherheitsgrad” – und auch im Berechnungsaufwand. Der Aufruf sieht in Pseudo-Code meist so aus:

Verschlüsselter Text = KryptoFunktion (UrsprungsText, Schlüssel)

Tabellenfelder verschlüsseln

In Datenbanken, wo etwa über Abfragen große Datenmengen auszuwerten sind, ist man auf einen Kompromiss zwischen Verschlüsselungsstärke und Verarbeitungsgeschwindigkeit angewiesen. Deshalb sollten hier Algorithmen zum Einsatz kommen, die relativ schnell arbeiten, aber ausreichend sicher sind. Das wohl am häufigsten eingesetzte Verfahren ist die RC4-Verschlüsselung. Ein Vorteil der Methode ist, dass Windows entsprechende API-Funktionen mitbringt, die flott zu Werke gehen. Man kann zweifellos jedes Verschlüsselungsverfahren auch in VBA-Code nachbauen; weil aber Stringverarbeitung unter VB eine etwas lahme Angelegenheit ist, kommt man mit Aufrufen auf Funktionen in separaten DLLs erheblich besser weg.

Die Beispieldatenbank zu diesem Beitrag enthält ein Modul mdlEncrypt, in dem Sie die Prozeduren TestDeEncrypt und TestDeEncryptVBA ausführen können. Beide verschlüsseln und entschlüsseln nach dem RC4-Verfahren in einer Schleife 20.000 Strings. TestDeEncryptVBA macht das aber über reinen VBA-Code, die andere bemüht dazu API-Funktionen der Windows-Bibliothek advapi32.dll. Sie werden feststellen, dass die Crypto-Routinen der advapi32.dll etwa dreimal so schnell sind wie die von VBA. Pro Sekunde lassen sich auf einem aktuellen Rechner damit etwa 100.000 Strings verschlüsseln.

Die RC4-Crypto-Methoden von advapi32 kommen übrigens an vielen Stellen von Windows selbst zum Einsatz – und auch in Access: Die Verschlüsselung von Passwörtern im Sicherheitssystem von JET über die PIDs benutzt sie ebenfalls.

Der Code für die Verschlüsselungsmethoden ist in den zwei Klassenmodulen clsRC4 (VBA pur) und clsCypto (Verwendung der advapi32) untergebracht. Die Ergebnisse sind nicht ganz kompatibel: Ein verschlüsselter Text der einen Klasse kann nicht mit den Routinen der anderen wiederhergestellt werden.

RC4 hat noch einen weiteren Vorteil: Die Ergebnis-Strings sind genauso lang, wie die Eingabe-Strings. Damit ist sichergestellt, dass die für Textfelder in den Eigenschaften eingestellte Feldgröße nicht überschritten wird, wenn ein Textinhalt darin verschlüsselt wird.

Die genaue Funktionsweise der beiden Klassen soll hier nicht weiter erläutert werden. Verschlüsselungsverfahren sind ein Thema für Vorlesungen eines ganzen Semesters.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar