Zum Hauptinhalt springen
Gilt für:
PKCS#11 (Cryptoki) 2.40Oracle TDEOracle Key VaultDuoKey Cockpit

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​

EigenschaftWert
ArtefaktLinux libdke_pkcs11.so · Windows dke_pkcs11.dll
StandardPKCS#11 (Cryptoki) 2.40
Exportiertes SymbolC_GetFunctionList — das einzige Symbol, das ein PKCS#11-Provider exportieren muss; es gibt die vollständige Funktionstabelle zurück
Lokale KryptografieKeine — alle Operationen werden an das DuoKey Cockpit weitergeleitet
HerstellerkennungDuoKey

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:

KategorieImplementierte Funktionen
AllzweckC_GetFunctionList, C_Initialize, C_Finalize, C_GetInfo
Slot & TokenC_GetSlotList, C_GetSlotInfo, C_GetTokenInfo, C_GetMechanismList, C_GetMechanismInfo
SitzungC_OpenSession, C_CloseSession, C_CloseAllSessions, C_GetSessionInfo, C_Login, C_Logout
ObjekteC_FindObjectsInit / C_FindObjects / C_FindObjectsFinal, C_GetAttributeValue, C_DestroyObject
Verschlüsseln / EntschlüsselnC_EncryptInit / C_Encrypt, C_DecryptInit / C_Decrypt (einteilig)
Signieren / Verifizieren / DigestC_Sign, C_Verify, C_Digest (einteilig)
SchlüsselverwaltungC_GenerateKey, C_GenerateKeyPair, C_WrapKey, C_UnwrapKey
ZufallC_GenerateRandom (C_SeedRandom wird akzeptiert und ignoriert)
Nicht unterstützt (einteilig by design)

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.

FamilieMechanismenOperationen
AESCKM_AES_KEY_GEN, CKM_AES_ECB/CBC/CBC_PAD, CKM_AES_GCM, CKM_AES_KEY_WRAP(_PAD)generieren, ver-/entschlüsseln, wrap/unwrap
RSACKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_RSA_PKCS_PSS, CKM_SHAn_RSA_PKCSgenerieren, ver-/entschlüsseln, signieren/verifizieren, wrap/unwrap
ECCKM_EC_KEY_PAIR_GEN, CKM_ECDSA, CKM_ECDSA_SHA256/384generieren, signieren/verifizieren
DigestCKM_SHA_1, CKM_SHA256/384/512Digest (SHA-256/384/512 im Backend)
HMACCKM_SHA256/384/512_HMACsignieren/verifizieren
Verwendete Mechanismen hängen vom Consumer ab

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_LABEL und CKA_ID adressiert; C_GetAttributeValue antwortet aus einem zwischengespeicherten Deskriptor.
  • CKA_VALUE wird nie zurückgegeben — es meldet CKR_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.

pkcs11.tomlTOML
[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_CONFPfad zur TOML-Datei (falls nicht gesetzt, wird die Konfiguration aus den untenstehenden Variablen aufgebaut)
DKE_PKCS11_SERVER_URLhttp_config.server_url
DKE_PKCS11_ACCESS_TOKENhttp_config.access_token
DKE_PKCS11_VERIFY_TLShttp_config.verify_tls
DKE_PKCS11_SLOT_IDpkcs11.slot_id
DKE_PKCS11_LOGGING_LEVELpkcs11.logging_level
DKE_PKCS11_LOGGING_FOLDERpkcs11.logging_folder
Verifizierung aktiviert lassen

verify_tls ist standardmäßig true. Setzen Sie es nur zum Testen gegen selbstsignierte Zertifikate auf false — dadurch wird die TLS-Zertifikatsvalidierung deaktiviert.

Consumer​

Nicht diese Bibliothek

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.