Datenverschlüsselung mit dem DBMS_OBFUSCATION_TOOLKIT Autor: Markus Fiegler, ORDIX AG DOAGNews Q2_2 Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, bei auch nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes.
Um sensible Daten vor unberechtigten Zugriffen zu schützen, werden unterschiedliche Techniken verwendet. Neben Authentifizierung und Zugriffskontrolle kommt auch Datenverschlüsselung zum Einsatz. Datenverschlüsselung bietet einen zusätzlichen Schutz vor den unberechtigten Zugriffen Dritter auf sensible Daten und deren Manipulation und Missbrauch. Denn sie erfolgt mit einem Verschlüsselungsalgorithmus und einem Schlüssel. Oracle stellt seit der Version 8i mit dem DBMS_OBFUSCATION_TOOLKIT Package ein Paket zur Verfügung, mit dem Daten innerhalb einer Oracle Datenbank verschlüsselt werden können, um so einen unberechtigten Zugriff darauf zu verhindern. Grundlagen Das DBMS_OBFUSCATION_TOOLKIT Package verwendet für die Verschlüsselung von Daten den Data Encryption Standard (DES) Algorithmus. Bei dem DES Algorithmus handelt es sich um einen symmetrischen Verschlüsselungsalgorithmus. Dieser zeichnet sich dadurch aus, dass ein betrachteter, geheimer Schlüssel sowohl für die Ver- als auch für die Entschlüsselung verwendet wird. Im Allgemeinen ist für die Verschlüsselung mit dem DES Algorithmus ein 56-Bit langer Schlüssel nötig. Abb. 1: Für die Verschlüsselung mit dem DES Algorithmus ist ein 56-Bit langer Schlüssel nötig. Neben dem DES Algorithmus stellt das DBMS_OBFUSCATION_TOOLKIT Package auch den Triple DES (3DES) Algorithmus zur Verfügung. Der 3DES Algorithmus basiert ebenfalls auf dem DES Algorithmus, bietet aber die Möglichkeit der Dreifach-Verschlüsselung der Daten und damit zusätzliche Sicherheit. Der 3DES Algorithmus kann im Gegensatz zum einfachen DES Algorithmus in einem Zwei- bzw. Drei- Schlüsselmodus ausgeführt werden. Für den Zwei-Schlüsselmodus wird ein Schlüssel mit der Länge von 128-Bit benötigt. Für den Drei-Schlüsselmodus ein Schlüssel mit der Länge von 192-Bit. Standard bei der Verschlüsselung mit dem 3DES Algorithmus ist der Zwei-Schlüsselmodus.
Einsatz der Verschlüsselung Das Beispiel in Abbildung 2 zeigt, wie man Daten mit dem DBMS_OBFUSCATION_TOOLKIT Package verschlüsseln bzw. entschlüsseln kann: DECLARE v_key VARCHAR2(50) := '1234567890123456'; v_chiffretext VARCHAR2(50); v_klartext VARCHAR2(50); BEGIN -- Verschluesseln... v_chiffretext := DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input_string => 'ORDIX AG', key_string => v_key ); DBMS_OUTPUT.PUT_LINE('Chiffretext: ' v_chiffretext); -- Entschluesseln... v_klartext := DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt( input_string => v_chiffretext, key_string => v_key ); DBMS_OUTPUT.PUT_LINE('Klartext: ' v_klartext); END; / Chiffretext: _k;32.å^ Klartext: ORDIX AG Abb. 2: Ver- und Entschlüsseln der 8 Zeichen langen Zeichenkette ORDIX AG mit dem 3DES Algorithmus. Für die Verschlüsselung deklariert der DECLARE-Block eine Variable v_key, in der der Schlüssel abgelegt wird (Initialisierung in Abbildung 2). Für dieses Beispiel muss der Schlüssel also aufgrund des verwendeten 3DES Algorithmus aus mindestens 128-Bit bestehen. Die DES3Encrypt Funktion verschlüsselt dann die Zeichenkette ORDIX AG mit dem v_key Schlüssel und entschlüsselt sie anschließend mit der DES3Decrypt Funktion. Einschränkungen bei der Verschlüsselung Mit dem DBMS_OBFUSCATION_TOOLKIT Package können die Datentypen STRING und RAW ver- bzw. entschlüsselt werden. Dafür stellt Oracle spezielle Funktionen bzw. Prozeduren wie DES3Encrypt oder DES3Decrypt zur Verfügung. Sie unterscheiden sich lediglich im Datentyp der Parameter. Das DBMS_OBFUSCATION_TOOLKIT Package kann eine Zeichenkette immer nur einfach verschlüsseln. Eine mehrfache Verschlüsselung einer bereits verschlüsselten Zeichenkette ist nicht erlaubt. Beim Versuch eine bereits verschlüsselte Zeichenkette noch einmal zu verschlüsseln, wird eine Fehlermeldung ORA- 28233 "Doppelte Verschlüsselung nicht unterstützt" ausgegeben. Die Länge einer Zeichenkette, die verschlüsselt werden soll, muss dabei ein Vielfaches der Länge von 8- Byte besitzen. Zeichenketten mit einer Länge, die ungleich des Vielfachen der Länge von 8-Byte ist, können nicht verschlüsselt werden. In einem solchen Fall muss die Zeichenkette auf eine entsprechende Länge erweitert werden. Das Beispiel in Abbildung 3 zeigt, wie man eine Zeichenkette erweitern kann, damit man sie mit dem DBMS_OBFUSCATION_TOOLKIT Package verschlüsseln kann.
i := 8 - MOD( LENGTH('HALLO'), 8 ); v_klartext := 'HALLO' RPAD(CHR(i), i, CHR(i)); DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(input_string=>v_klartext,... Abb. 3: Verschlüsseln: Eine Zeichenkette muss verlängert werden, bis die Länge einem Vielfachen der Länge von 8-Byte entspricht. Im Quellcode in Abbildung 3 wird zuerst die Anzahl der Stellen ermittelt, die der Zeichenkette HALLO fehlen, um auf eine Länge zu gelangen, die ein Vielfaches der Länge von 8-Byte darstellt. Anschließend wird die ermittelte Anzahl an aufzufüllenden Stellen als ASCII-Code interpretiert und der CHR Funktion übergeben. Die CHR Funktion liefert zu einem ASCII-Code das entsprechende Zeichen aus der ASCII- Tabelle zurück. Danach wird die HALLO Zeichenkette so oft um das Zeichen aus der ASCII-Tabelle erweitert, bis die Gesamtlänge der Zeichenkette ein Vielfaches der Länge von 8-Byte besitzt. Für die Entschlüsselung der Zeichenkette gilt das analoge Verfahren. Dabei muss der Klartext um die erweiterten Zeichen aus der ASCII-Tabelle gekürzt werden (s. Abbildung 4). DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(input_string=>v_chiffretext,... v_laenge := LENGTH(v_klartext); v_klartext := RPAD(v_klartext,v_laenge - ASCII(SUBSTR(v_klartext,v_laenge))); Abb. 4: Entschlüsselung: Die bei der Verschlüsselung verlängerte Zeichenkette wird auf die eigentliche Länge zurückgekürzt. Der Vorteil bei der oben beschriebenen Vorgehensweise ist, dass die Zeichenketten immer nur um Steuerzeichen wie z. B. ^E oder ^G erweitert werden. Derartige Steuerzeichen kommen in Zeichenketten nur selten vor. Schlüsselmanagement Eine zentrale Rolle bei der Verschlüsselung spielt das Erzeugen und Verwalten des Schlüssels. Besteht ein Schlüssel aus einfachen, zusammengesetzten Wörtern, so errät man diesen leicht. Für die Erzeugung von sicheren und zufälligen Schlüsseln stellt Oracle im DBMS_OBFUSCATION_TOOLKIT Package spezielle DESGetKey- bzw. DES3GetKey Funktionen zur Verfügung. Um einen Schlüssel mit Hilfe der DES3GetKey Funktion zu erzeugen, wird eine beliebige Zeichenkette benötigt, die der Funktion DESGetKey als Parameter übergeben wird. Diese (beliebige) Zeichenkette wird bei der Generierung von Schlüsseln benötigt. Sie muss mindestens 80 Zeichen lang sein. Nachdem ein Schlüssel erzeugt wurde, stellt sich die Frage, wo dieser abgelegt werden kann. Grundsätzlich besteht die Möglichkeit, einen Schlüssel in der Datenbank, in einer Datei im Betriebssystem oder in der Datenbankanwendung zu speichern. Darüber hinaus kann die Eingabe des Schlüssels durch den Anwender selbst erfolgen. Wird die Eingabe des Schlüssels dem Anwender selbst überlassen, so kann es vorkommen, dass dieser den Schlüssel vergisst bzw. verliert. In einem solchen Fall können die verschlüsselten Daten nicht wieder entschlüsselt werden.
Legt man den Schlüssel in einer Datei auf dem Dateisystem ab, so kann es bei häufigen Zugriffen auf den Schlüssel zu Performanceeinbußen kommen. Wird der Schlüssel in der Anwendung abgelegt, so kann sichergestellt werden, dass selbst ein Datenbankadministrator die verschlüsselten Daten nicht entschlüsseln kann. Voraussetzung dafür ist allerdings, dass die Anwendung sich auf einem anderen Rechner befindet als die Datenbank. Auswirkungen der Verschlüsselung auf die Performance Da die Daten vor der Darstellung entschlüsselt und vor dem Abspeichern verschlüsselt werden müssen, ist mit einer erhöhten Ausführungszeit solcher Datenbankanwendungen zu rechnen. Die erhöhte Ausführungszeit macht sich vor allem bei einer Jobverarbeitung mit sehr großen Datenmengen bemerkbar. Bei einem Programm mit einer Benutzerschnittstelle fällt allerdings die etwas höhere Ausführungszeit nahezu nicht ins Gewicht. Hier liegt die Ausführungszeit erfahrungsgemäß im Millisekundenbereich. Fazit Mit dem DBMS_OBFUSCATION_TOOLKIT Package bietet Oracle eine Möglichkeit, Daten in der Datenbank zu verschlüsseln. Ziel der Datenverschlüsselung ist, einen unberechtigten Zugriff von Dritten auf sensible Daten und deren Manipulation und Missbrauch zu verhindern. Es ist allerdings zu beachten, dass die hohe Sicherheit zu Performanceeinbußen bei der Ausführungszeit von Datenbankanwendungen führt. Die Verschlüsselung sollte demzufolge nur dann eingesetzt werden, wenn sensible Daten gespeichert werden sollen und eine hohe Sicherheit der Daten erforderlich ist. Das DBMS_OBFUSCATION_TOOLKIT Package ist sowohl in der Oracle Standard Edition als auch in der Oracle Enterprise Edition verfügbar. Im Gegensatz zu der Advanced Security Option (ASO), mit der unter anderem die Datenübertragung im Netz verschlüsselt werden kann, ist das DBMS_OBFUSCATION_- TOOLKIT Package nicht lizenzpflichtig und verursacht somit keine zusätzlichen Kosten. Kontakt: Markus Fiegler (info@ordix.de) ORDIX AG Westernmauer 12-16 D-33098 Paderborn