encrypt() und decrypt() (Funktionen)
Die Funktionen encrypt() und decrypt() verschlüsseln oder entschlüsseln einen varchar- oder nvarchar-Wert unter Verwendung eines bereitgestellten Schlüssels.
Verschlüsselung ist ein Prozess zur Umwandlung von Daten mit dem Ziel, deren Geheimhaltung zu wahren; die Daten können (unverschlüsselt) nur gelesen werden, wenn der Empfänger über den erforderlichen Schlüssel verfügt. Die Netezza Performance Server verwendet symmetrische Verschlüsselung. Dieser Verschlüsselungstyp wird auch als Verschlüsselung mit privatem oder geheimem Schlüssel bezeichnet, da zum Verschlüsseln und Entschlüsseln der Daten derselbe geheime Schlüssel verwendet wird. Dies bedeutet, dass dieser geheime Schlüssel auf allen Servern verfügbar gemacht werden muss, die zuvor verschlüsselte Daten entschlüsseln. Sie können auswählen, welchen Algorithmus für die symmetrische Verschlüsselung die Funktionen zum Verschlüsseln und Entschlüsseln der Daten verwenden: Advanced Encryption Standard (AES) oder RC4.
Die Verschlüsselung mit einem privaten Schlüssel ist sicherer als die Verschlüsselung mit einem öffentlichen Schlüssel, da alle
Verschlüsselungsschemas, die mit einem öffentlichen Schlüssel arbeiten, anfällig für Brute-Force-Attacken mithilfe von Schlüsselsuchen sind. Die Verschlüsselung mit privatem Schlüssel ist jedoch von der Geheimhaltung dieses Schlüssels abhängig. Ändern Sie
daher den privaten Schlüssel regelmäßig und unternehmen Sie bestimmte Schritte, um sicherzustellen, dass der Schlüssel im Gebrauch, im
Speicher oder
in der Verteilung nicht erkannt werden kann. Für Sicherheitsempfehlungen, die spezifisch für das Netezza Performance Server sind, siehe die Beschreibung des Arguments " key weiter unten im Thema.
Die Funktionen encrypt() und decrypt() führen die Verschlüsselung und Entschlüsselung auf Feldebene aus, es handelt sich nicht um eine Datenbankverschlüsselung und -entschlüsselung.
Syntax
varchar = encrypt(varchar text, varchar key [, int algorithm
[, varchar IV]]);
nvarchar = encrypt(nvarchar text, nvarchar key [, int algorithm
[, varchar IV]]);
varchar = decrypt(varchar text, varchar key [, int algorithm
[, varchar IV]]);
nvarchar = decrypt(nvarchar text, nvarchar key [, int algorithm
[, varchar IV]]);
Der Wert " text gibt den zu verschlüsselnden oder zu entschlüsselnden Wert an.
key gibt den Schlüssel an, mit dem der Wert ver- oder entschlüsselt werden soll. Stellen Sie sicher, dass der Schlüssel geschützt ist, andernfalls ist die Sicherheit beeinträchtigt. Berücksichtigen Sie beim Entwurf Ihres Sicherheitssystems die Architektur des Netezza Performance Server:- SQL-Funktionen werden in der Datei " pg.log auf dem Netezza Performance Server protokolliert, so dass die Ausführung einer " encrypt(secret_column, 'my_secret_key') -Funktion jedem, der die " pg.log -Datei lesen kann, Ihren Schlüssel offenbart.
- ODBC/JDBC-Dialoge sind mit einer beliebigen Anzahl von Diagnose- oder Hacker-Tools einfach zu erfassen. Wenn Sie Ihren Schlüssel als Bestandteil des SQL übergeben, kann der Schlüssel während dieses Prozesses beeinträchtigt werden.
SELECT decrypt(a.value, b.key) FROM my_table a, my_keys b WHERE
b.key_id = 1;
algorithm kann entweder RC4 oder eine der AES-Versionen sein, wie in der folgenden Liste aufgeführt:- 0
- RC4. Dies ist die Standardeinstellung.
- 1
- AES 128.
- 2.
- AES 192.
- 3
- AES 256.
Zwar ist RC4 der am häufigsten verwendete Verschlüsselungsalgorithmus (er wird beispielsweise von SSL und WEP verwendet), er ist jedoch kryptografisch nicht sicher und anfällig für Attacken.
Advanced Encryption Standard (AES) ist der von der Regierung der Vereinigten Staaten übernommene Verschlüsselungsstandard, der für alle geheimzuhaltenden (klassifizierten) Informationen erforderlich ist. Die drei AES-Versionen unterscheiden sich nur durch die Konstruktion und den Umfang der Schlüssellängen. Obwohl alle drei Schlüssellängen für den Schutz geheimzuhaltender Informationen bis zur Stufe SECRET ausreichend sind, ist für Informationen der Stufe TOP SECRET die Verwendung der Schlüssellängen 192 oder 256 erforderlich.
Der Wert IV gibt den Initialisierungsvektor (IV) an, der für die Verschlüsselung oder Entschlüsselung
des Werts verwendet wird. Sie können den Wert IV nur bei Verwendung des Algorithmus AES angeben. (Der Algorithmus RC4 verwendet den Wert IV nicht). Wenn Sie den Wert
IV nicht angeben, verwenden die Funktionen encrypt() und
decrypt() für IV einen konstanten Wert.
Für die Verschlüsselung mit dem Output-Feedback-Modus (OFB) müssen der Wert IV und der Schlüssel eine Länge von 128 Bit haben. Geben Sie als bewährtes Verfahren für den Schlüssel und den Wert IV (falls verwendet) Werte mit 128 Bit an, damit das System Ihre Eingabewerte verwendet. Wenn ein Wert kleiner oder größer als 128 Bit ist, verwendet das System einen Erweiterungs- oder Ableitungsmechanismus, um den Wert wie folgt anzupassen:
- Bei Schlüsseln oder IV-Werten, die kleiner als 128 Bit sind, dupliziert das System den Wert, bis der Schlüssel oder der Wert IV die ordnungsgemäße Länge erreicht.
- Bei Schlüsseln oder IV-Werten, die größer als 128 Bit sind, erstellt das System einen Wert mit 128 Bit, indem ein logisches OR (XOR) der ersten 128 Bit des Werts mit den verbleibenden Bit des Werts verwendet wird.
select encrypt(encrypt('abcde', 'k1', 1), 'k1', 1);
encrypt
---------
abcde
(1 row)Rückgabe
Die Funktionen geben einen verschlüsselten oder einen entschlüsselten Wert zurück. Das SQL Extensions-Toolkit verwendet den OFB-Modus von AES für die Verschlüsselung und Entschlüsselung, wodurch aus der Blockchiffrierung die synchrone Datenstromchiffrierung wird. Bei der Datenstromchiffrierung gibt es keine Auffüllungsanforderung für OFB und die Länge der Ausgabe des verschlüsselten Texts ist dieselbe wie die Länge der als Klartext vorgenommenen Eingabe.
Beispiel
select encrypt('123456',100,0);
ENCRYPT
---------
ÉôC¥Ñ
(1 row)
select encrypt('Netezza Systems','NPS001534',1,'MY_IV is IBM001');
ENCRYPT
-----------------
�Ná•▒7Þ¢bhñæ
(1 row)
Generierung von Schlüssel und IV
Sie können die Funktionen hash() und rawtohex() zum Generieren von Schlüsseln und IV-Werten verwenden. Die Funktion hash() gibt je nach dem für die Funktion eingegebenen Algorithmus einen Hashwert der Eingabedaten mit 128 Bit, 160 Bit oder 256 Bit zurück. Das folgende Beispiel zeigt, wie ein 256-Bit-Schlüssel für die AES-Verschlüsselung erstellt wird. Im Beispiel ist die Ausgabe von MYKEY unter Verwendung von Auslassungspunkten (...) absichtlich abgeschnitten, damit die Ausgabe innerhalb der Seitenbegrenzung angezeigt werden kann.
create table impData (cname varchar(35),cid varchar(20));
CREATE TABLE
insert into impData values('Netezza Systems','CNZ0001SYS');
INSERT 0 1
create table securedImpData as select cid, rawtohex(hash(cid,2))
as mykey, encrypt(cname, rawtohex(hash(cid,2)),2) as ENCRYPTED_CNAME from impData;
INSERT 0 1
select * from securedImpData;
CID | MYKEY | ENCRYPTED_CNAME
------------+-------------------------------------------------+-----------------
CNZ0001SYS | 8D812C9E8DB362FCB20E...6A00B564175B92762B1A3520 | Ã4W§
wÂÃð
ŸÃ
(1 row)
create table decryptedData as select CID, decrypt(ENCRYPTED_CNAME,
MYKEY,2) as DECRYPTED_CNAME from securedImpData;
INSERT 0 1
select * from decryptedData;
CID | DECRYPTED_CNAME
------------+-----------------
CNZ0001SYS | Netezza Systems
(1 row)