Skip to main content

Oracle XE DB: DBMS_CRYPTO

Um Passwörter sicher in eigenen Tabellen zu speichern, sollte stets eine sichere HASH-Funktion verwendet werden. Oracle bietet eine solche im Package SYS.DBMS_CRYPTO an.

Das Package einem User nutzbar machen

Der Zugriff auf das Package für "normale" User kann erst nach einem GRANT EXECUTE erfolgen. Hierzu ist wie folgt vorzugehen:

  • als User SYS auf dem Arbeitsmarkt-Container XEPDB1 anmelden
  • den Befehl grant EXECUTE on sys.dbms_crypto to <user>; ausführen
Password-Hash

Kennwörter sollten immer als nicht rückrechenbare Hash-Werte gespeichert werden. Sie müssen nicht entschlüsselt werden, um sie auf Gleichheit zu überprüfen. Stattdessen überprüft man den Hash-Wert auf Gleichheit. Hier bietet das Package eine sinnvolle Unterstützung, da es Strings in einen nach derzeitigem Stand sicheren Hash-Wert umwandelt. Allerdings ist darauf zu achten, dass nur sichere Algorithmen verwendet werden, denn das Package bietet aus Gründen der Kompatibilität auch unsichere Algorithmen wie MD5 an. Um dieses Problem zu umgehen und als eine für eine Datenbankunabhängige Nutzung sinnvolle Erleichterung sollte eine Funktion installiert werden, die den Aufruf des Package abstrahiert. Für Oracle sieht diese Funktion wie folgt aus:

//
// Funktion zum Erzeugen eines sicheren HASH aus dem übergenen String
// Es wird der SHA-512 Algorythmus verwendet (gekennzeichnet durch den
// 2. Parameter im dbms-Aufruf). Er ist der derzeit sicherste angebotene
// Algorythmus.
//
CREATE OR REPLACE 
FUNCTION CRYPTO_HASH (v_input VARCHAR2) 
RETURN RAW DETERMINISTIC
AS
   PRAGMA UDF;
BEGIN
   RETURN dbms_crypto.hash(utl_raw.cast_to_raw(v_input), 6);
END CRYPTO_HASH ;
/

Durch den Aufruf select crypto_hash('Das wäre mal ein Kennwörtlein') as password from dual; erhält man als HASH-Wert etwa folgenden 128 Zeichen langen String: 343D52872991F63A64191971501B5515703A34357E2A54956D3AFF79C225AC45BF9DF4CC7EC497211CE75FCE51A2F0A1E621DEA3E656480C5E55ABFF61D8BA6F.

Decrypt / Encrypt

Die Funktionen zum Verkauf- und Entschlüsseln eines Textes sollten nur mit äußerster Vorsicht verwendet werden. Wenn sich ein Angreifer Zugriff auf die Datenbank verschaffen konnte, kann er auch mit Hilfe der Standardfunktionen derart verschlüsselte Texte entschlüsseln. Sie eignen sich daher nicht für Kennwörter, die wieder entschlüsselt werden müssen (z. B. für Geschütze API-Zugriffe). Hier bietet Vault eine deutlich sicherere Lösung.