DuoKey-PKCS#11-Bibliothek
Ein standardmäßiger Cryptoki-2.40-Provider, der PKCS#11-Anwendungen mit dem DuoKey Cockpit verbindet — keine Schlüssel und keine Kryptografie laufen jemals auf dem Client-Host.
Einführung
Die DuoKey-PKCS#11-Bibliothek ist eine native, gemeinsam genutzte Bibliothek, die den Standard PKCS#11 (Cryptoki) 2.40 implementiert. Anwendungen wie Oracle Database TDE und Oracle Key Vault laden sie wie jeden anderen HSM-Provider und rufen die standardmäßigen C_*-Funktionen auf. Die Bibliothek führt keine Kryptografie lokal aus — jede Operation wird per HTTPS an das DuoKey Cockpit gesendet, das sie gegen den Mandanten-Vault oder das zugrunde liegende HSM ausführt. Schlüsselmaterial liegt nie auf dem Anwendungs-Host.
Paketierung
| Eigenschaft | Wert |
|---|---|
| Artefakt | Linux libdke_pkcs11.so · Windows dke_pkcs11.dll |
| Standard | PKCS#11 (Cryptoki) 2.40 |
| Exportiertes Symbol | C_GetFunctionList — das einzige Symbol, das ein PKCS#11-Provider exportieren muss; es gibt die vollständige Funktionstabelle zurück |
| Lokale Kryptografie | Keine — alle Operationen werden an das DuoKey Cockpit weitergeleitet |
| Herstellerkennung | DuoKey |
Architektur
Eine Anwendung spricht niemals direkt mit dem Cockpit. Sie lädt die Bibliothek, die jeden Cryptoki-Aufruf in eine einzelne Anfrage an einen Cockpit-Proxy-Endpunkt umwandelt; das Cockpit führt die Operation aus und gibt das Ergebnis zurück.
Designpunkte
Keine lokale Kryptografie
Die Bibliothek hält keine Schlüssel und führt keine Kryptografie aus. Sie kodiert Payloads nur und leitet sie weiter; das Backend erledigt die eigentliche Arbeit.
Ein einziges exportiertes Symbol
Nur C_GetFunctionList wird exportiert; jede andere Funktion wird über die zurückgegebene Tabelle erreicht.
Serielle Sitzungen
Der gesamte Bibliothekszustand wird hinter einem einzigen Lock serialisiert, und nur serielle Sitzungen werden unterstützt; parallele Sitzungen werden mit CKR_SESSION_PARALLEL_NOT_SUPPORTED abgelehnt.
Zuordnung von Objekt-Handles
PKCS#11-Ganzzahl-Handles werden serverseitigen Objektkennungen zugeordnet; Deskriptoren werden zwischengespeichert und dedupliziert, sodass dasselbe Objekt stets denselben Handle zurückgibt.
Token-Authentifizierung, keine PIN
C_Login überträgt keine PIN — es versetzt die Sitzung lediglich in den Benutzerzustand. Die Authentifizierung erfolgt über ein Bearer-Token pro Anfrage aus der Konfiguration.
Funktionsabdeckung
Die Bibliothek implementiert die Teilmenge von Cryptoki, die zum Verwalten und Verwenden von Schlüsseln über das Cockpit erforderlich ist — nur einteilige Operationen. Die vollständige Funktionstabelle finden Sie auf der Seite Funktionsabdeckung; die Zusammenfassung:
| Kategorie | Implementierte Funktionen |
|---|---|
| Allzweck | C_GetFunctionList, C_Initialize, C_Finalize, C_GetInfo |
| Slot & Token | C_GetSlotList, C_GetSlotInfo, C_GetTokenInfo, C_GetMechanismList, C_GetMechanismInfo |
| Sitzung | C_OpenSession, C_CloseSession, C_CloseAllSessions, C_GetSessionInfo, C_Login, C_Logout |
| Objekte | C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal, C_GetAttributeValue, C_DestroyObject |
| Verschlüsseln / Entschlüsseln | C_EncryptInit / C_Encrypt, C_DecryptInit / C_Decrypt (einteilig) |
| Signieren / Verifizieren / Digest | C_Sign, C_Verify, C_Digest (einteilig) |
| Schlüsselverwaltung | C_GenerateKey, C_GenerateKeyPair, C_WrapKey, C_UnwrapKey |
| Zufall | C_GenerateRandom (C_SeedRandom wird akzeptiert und ignoriert) |
Mehrteilige / Streaming-Operationen (*_Update / *_Final), Doppelzweck-Kryptografie, C_DeriveKey, Objekt-Erstellen/-Kopieren/-Set-Attribute (C_CreateObject, C_CopyObject, C_SetAttributeValue) sowie Token-/PIN-Administration (C_InitToken, C_InitPIN, C_SetPIN) geben CKR_FUNCTION_NOT_SUPPORTED zurück. C_GetFunctionStatus und C_CancelFunction geben CKR_FUNCTION_NOT_PARALLEL zurück. Masterschlüssel-Operationen sind konstruktionsbedingt einteilig, daher sind diese absichtlich ausgelassen.
Mechanismen
C_GetMechanismList gibt die folgenden Familien bekannt (C_GetMechanismInfo setzt zudem CKF_HW). Die genaue Liste und die Schlüsselgrößenbereiche finden Sie unter Funktionsabdeckung.
| Familie | Mechanismen | Operationen |
|---|---|---|
| AES | CKM_AES_KEY_GEN, CKM_AES_ECB/CBC/CBC_PAD, CKM_AES_GCM, CKM_AES_KEY_WRAP(_PAD) | generieren, ver-/entschlüsseln, wrap/unwrap |
| RSA | CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_RSA_PKCS_PSS, CKM_SHAn_RSA_PKCS | generieren, ver-/entschlüsseln, signieren/verifizieren, wrap/unwrap |
| EC | CKM_EC_KEY_PAIR_GEN, CKM_ECDSA, CKM_ECDSA_SHA256/384 | generieren, signieren/verifizieren |
| Digest | CKM_SHA_1, CKM_SHA256/384/512 | Digest (SHA-256/384/512 im Backend) |
| HMAC | CKM_SHA256/384/512_HMAC | signieren/verifizieren |
Dies ist ein universeller Cryptoki-Provider, daher werden AES, RSA, EC, SHA und HMAC bekanntgegeben. Jede Anwendung verwendet nur, was sie benötigt. Zum Beispiel verwendet Oracle TDE ausschließlich AES — sein Masterschlüssel ist AES256, und es nutzt nie RSA oder EC (siehe Oracle TDE → Cockpit v2). Andere Integrationen verwenden möglicherweise RSA oder EC.
Objekte & Attribute
- Objektklassen:
CKO_DATA,CKO_CERTIFICATE,CKO_PUBLIC_KEY,CKO_PRIVATE_KEY,CKO_SECRET_KEY,CKO_DOMAIN_PARAMETERS. - Schlüsseltypen:
CKK_AES,CKK_RSA,CKK_EC,CKK_GENERIC_SECRET,CKK_DSA,CKK_DH,CKK_SHA256/384/512_HMAC. - Schlüssel werden über
CKA_LABELundCKA_IDadressiert;C_GetAttributeValueantwortet aus einem zwischengespeicherten Deskriptor. CKA_VALUEwird nie zurückgegeben — es meldetCKR_ATTRIBUTE_SENSITIVE, da rohes Schlüsselmaterial ausschließlich im Backend existiert. Zurückgegebene Schlüssel sind als nicht extrahierbar und sensibel markiert.
Konfiguration
Die Bibliothek liest eine TOML-Datei, deren Pfad über DKE_PKCS11_CONF angegeben wird (Oracle / OKV setzen diese in der Wallet-Umgebung). Umgebungsvariablen überschreiben die Datei.
[http_config]
server_url = "https://<cockpit-host>/api/apps/<app_id>/tde/pkcs11/<access_guid>"
access_token = "<access_guid>" # sent as the bearer token
timeout_secs = 30
verify_tls = true
[pkcs11]
slot_id = 0
logging_level = "info"
logging_folder = "/var/log/dke-pkcs11"| Umgebungsvariable | Überschreibt |
|---|---|
DKE_PKCS11_CONF | Pfad zur TOML-Datei (falls nicht gesetzt, wird die Konfiguration aus den untenstehenden Variablen aufgebaut) |
DKE_PKCS11_SERVER_URL | http_config.server_url |
DKE_PKCS11_ACCESS_TOKEN | http_config.access_token |
DKE_PKCS11_VERIFY_TLS | http_config.verify_tls |
DKE_PKCS11_SLOT_ID | pkcs11.slot_id |
DKE_PKCS11_LOGGING_LEVEL | pkcs11.logging_level |
DKE_PKCS11_LOGGING_FOLDER | pkcs11.logging_folder |
verify_tls ist standardmäßig true. Setzen Sie es nur zum Testen gegen selbstsignierte Zertifikate auf false — dadurch wird die TLS-Zertifikatsvalidierung deaktiviert.
Consumer
Oracle Database TDE
Lädt die Bibliothek von /opt/oracle/extapi/64/pkcs11/, um den TDE-Masterschlüssel in DuoKey zu speichern.
Oracle Key Vault (OKV)
HSM-Modus — die Bibliothek wird in okv_hsm.conf als generischer PKCS#11-Provider referenziert.
Microsoft SQL Server EKM verwendet einen separaten Provider (eine CNG-Key-Storage-Provider-DLL), nicht die DuoKey-PKCS#11-Bibliothek. Siehe die Anleitung SQL EKM.