
−planer, Sicherheitsbeauftragte und Entscheider.
Mit dem IBM Informix Dynamic Server Release 9.4 wurde mit der Network Encryption die Möglichkeit geschaffen, Daten, die zwischen Client und Datenbankserver transferiert werden, zu verschlüsseln. Nun besteht mit der Column Level Encryption ebenfalls die Möglichkeit, die Daten innerhalb der Datenbank auf Spaltenebene zu verschlüsseln.
Hierbei unterstützt Informix - wie bereits bei der Network Encryption - die folgenden Verschlüsselungsalgorithmen:
Mittels der Verschlüsselung auf Spaltenebene können folgende Datentypen verschlüsselt werden:
Darüber hinaus können alle Unicode Datentypen (NCHAR, NVARCHAR) verschlüsselt werden.
Wie Abbildung 1 zeigt, können Daten z. B. mit einem einfachen Unix string-Kommando auf einen Informix Chunk, oder mit dem Informix Tool "oncheck" angezeigt werden. Um sicherheitsrelevante Daten nun auch innerhalb der Datenbank zu verschlüsseln, wurde die Column Level Encryption eingeführt.
informix $ oncheck -pP 3 832 |
IBM unterstreicht auch hiermit die Synergieeffekte der beiden Datenbanksysteme Informix und DB2. So wurde nun die Verschlüsselung auf Spaltenebene im Informix Datenbankserver implementiert.
Im Gegenzug wurden und werden in DB2 auch weitere Funktionen von Informix (z. B. HADR, siehe ORDIX News 2/2005 und 3/2005) aufgenommen.
Die Column Level Encryption wurde im IBM Informix Datenbankserver als eine "built in" Funktion implementiert.
Die folgenden SQL-Befehle und Funktionen sind hinzugekommen:
Wie bei der Netzwerk Encryption bildet auch hier der OpenSSL in der Version 0.9.7.c die Grundlage.
Das Encryption Passwort wird mittels des SQL-Befehls SET ENCRYPTION PASSWORD "..." gesetzt. Das Passwort muss vor jedem Aufruf einer Verschlüsselungs- bzw. Entschlüsselungsfunktion gesetzt werden.
Das Passwort, auch Passphrase genannt, muss mindestens 6 Byte, kann jedoch maximal 128 Byte betragen.
Damit sich die Passwörter besser merken lassen, besteht die Möglichkeit, einen Hinweis (Hint) für das Passwort zu vergeben. Dieser kann mit der Funktion GETHINT abgefragt werden.
SET ENCRYPTION PASSWORD "schwarz" with
Hint "Meine Lieblingsfarbe?";
....
SELECT GETHINT(kd_nname) from kunde;
Die maximale Länge für einen Hint beträgt 32 Byte. Achtung, auch die Verwendung eines Hints hat enorme Auswirkung auf den tatsächlich belegten Speicherplatz innerhalb der Datenbank.
Eine weitere Möglichkeit, das Encryption Passwort zu setzen, besteht in der Verschlüsselungsfunktion selbst.
ENCRYPT_AES(DATEN,PASSWORD,HINT)
Abbildung 1 zeigt ebenfalls die Ausgabe des oncheck-Kommandos, wenn ein Datensatz mittels der Verschlüsselungsfunktion eingefügt wurde (siehe 3. Datensatz-Eintrag in der Page).
Mittels der Funktionen ENCRYPT_AES/ENCRYPT_TDES können die Daten mit dem jeweils verwendeten Passwort verschlüsselt werden. Die Funktionen lassen sich, wie andere auch, einfach im SQL-Statement verwenden (siehe Abbildung 2).
set encryption password "ordix123"; |
In Abbildung 3 ist die Ausgabe einer "encrypted Character Column" zu sehen. Die Funktion DECRYPT_CHAR/DECRYPT_BINARY dechiffriert unter Verwendung des "richtigen" Passwortes die Spaltenwerte. Abbildung 4 zeigt die Verwendung der DECRYPT_CHAR-Funktion.
SQL: New Run Modify Use-editor |
SQL: New Run Modify Use-editor Run the current SQL statements. |
Dargestellt werden chiffrierte Character Spalten im 64er Zahlensystem (alle Klein- und Großbuchstaben, die Ziffern 0 - 9 und 2 Sonderzeichen). Binary Spalten, also BLOB und CLOB Columns, werden "unencoded" dargestellt.
Die Verwendung der Column Level Encryption bietet die Möglichkeit, unternehmenskritische Daten zu schützen. Jedoch hat dies auch negative Einflüsse auf die Performance und die Speicherplatzbelegung. Die Verwendung der Encrypt-/Decrypt-Funktion geht enorm zu Lasten der Performance. Daher gilt es, die Column Level Encryption nur gezielt bei besonders "wichtigen" Unternehmensdaten einzusetzen.
Weiterhin zu beachten ist:
| N = Länge/String (bytes) | Encrypt_TDES (no hint) | Encrypt_AES (no hint) | Encrypt_TDES (with hint) | Encrypt_AES (with hint) |
| 1 to 7 | 35 | 43 | 87 | 99 |
| 8 to 15 | 43 | 43 | 99 | 99 |
| 16 to 23 | 55 | 67 | 107 | 119 |
| 24 to 31 | 67 | 67 | 119 | 119 |
| 32 to 39 | 75 | 87 | 131 | 139 |
| 40 to 47 | 87 | 87 | 139 | 139 |
| 100 | 163 | 171 | 215 | 227 |
| 200 | 299 | 299 | 355 | 355 |
| 500 | 695 | 707 | 747 | 759 |
Weitere Auswirkungen hat die Column Level Encryption auf die Speicherplatzbelegung. Der belegte Speicherplatz innerhalb der Datenbank nimmt um ein Vielfaches zu (siehe Abbildung 5).
Die Funktion LENGTH gibt hierbei Einsicht auf die belegten Bytes innerhalb der Datenbank. Einen nicht unwesentlichen Faktor auf die Speicherplatzbelegung liefert die Verwendung eines "Hints".
Besondere Vorsicht ist bei zu klein dimensionierten Character Spalten gegeben. Auch der INSERT eines verschlüsselten Wertes wird am Ende einfach abgeschnitten, falls die Spalte nicht den gesamten Wert aufnehmen kann. Dieses hat jedoch zur Folge, dass dieser Wert nie mehr entschlüsselt werden kann, da wichtige Key-Teile abgeschnitten wurden.
Der Datenbankserver gibt bei einem INSERT auf eine zu klein dimensionierte Spalte keine Fehlermeldung zurück! Ob es sich hierbei um ein Feature oder einen BUG handelt, sollten Sie selbst entscheiden. :-)
Somit ist die Dimensionierung der entsprechenden Spalten besonders wichtig. Zur Berechnung kann die in Abbildung 6 gezeigte LENGTH Funktion verwendet werden.
SELECT LENGTH(ENCRYPT_AES("TEST","ordix123")) |
Die Einführung der Column Level Encryption ist ein weiterer, wichtiger Meilenstein für den Informix Dynamic Server. Die Implementierung wurde, wie immer, anwenderfreundlich gestaltet.
Nach unseren ersten Erfahrungen hinterlässt das neueste IBM Informix Dynamic Server Release 10.0 einen sehr stabilen Eindruck.
Weitere Neuerungen und auch Erfahrungsberichte des Informix Dynamic Servers lesen Sie in einer der nächsten ORDIX News Ausgaben.
Haben Sie bereits vorab weitere Fragen rund um Ihr Informix Datenbank System oder möchten Sie weitere Detailinformationen zu einem bestimmten Thema? Dann sprechen Sie uns einfach an!
Guido Saxler (info@ordix.de).