PKCS#11-Funktionsabdeckung
Jede Cryptoki-2.40-Funktion, jeder Mechanismus und jedes Attribut in der DuoKey-PKCS#11-Bibliothek sowie ihr genauer Status.
Die Bibliothek implementiert die einteilige Teilmenge von Cryptoki, die zum Verwalten und Verwenden von Schlüsseln über das DuoKey Cockpit benötigt wird. Jeder Eintrag in der Funktionstabelle ist ein gültiger Zeiger: implementierte Funktionen erledigen die Arbeit, der Rest gibt einen eindeutigen Fehler zurück (CKR_FUNCTION_NOT_SUPPORTED oder CKR_FUNCTION_NOT_PARALLEL).
Implementierte Funktionen
Allzweck
| Funktion | Verhalten |
|---|---|
C_GetFunctionList | Gibt die Funktionstabelle zurück (das einzige exportierte Symbol). |
C_Initialize | Lädt die Konfiguration, erstellt den Proxy-Client, initialisiert den globalen Zustand. |
C_Finalize | Baut den globalen Zustand ab. |
C_GetInfo | Meldet Cryptoki 2.40, Bibliothek 0.1, Hersteller „DuoKey". |
Slot- & Tokenverwaltung
| Funktion | Verhalten |
|---|---|
C_GetSlotList | Präsentiert genau einen virtuellen Slot (slot_id aus der Konfiguration). |
C_GetSlotInfo | Statisch „DKE Cockpit Virtual HSM Slot", Flags CKF_TOKEN_PRESENT | CKF_HW_SLOT. |
C_GetTokenInfo | Token-Flags und -Metadaten (bestmöglich vom Proxy, mit Offline-Fallback). |
C_GetMechanismList | Gibt die bekanntgegebene Mechanismenliste zurück (siehe unten). |
C_GetMechanismInfo | Schlüsselgrößenbereich und Flags pro Mechanismus; verknüpft CKF_HW per OR in die Flags. |
Sitzungsverwaltung
| Funktion | Verhalten |
|---|---|
C_OpenSession | Nur serielle Sitzungen; parallele werden mit CKR_SESSION_PARALLEL_NOT_SUPPORTED abgelehnt. |
C_CloseSession | Schließt eine Sitzung. |
C_CloseAllSessions | Schließt alle Sitzungen für den Slot. |
C_GetSessionInfo | Leitet den RO/RW × öffentlich/Benutzer-Zustand ab. |
C_Login | Versetzt die Sitzung in den Benutzerzustand. Es wird keine PIN übertragen; nur CKU_USER / CKU_CONTEXT_SPECIFIC werden akzeptiert. |
C_Logout | Setzt das Anmeldeflag zurück. |
Objektverwaltung
| Funktion | Verhalten |
|---|---|
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal | Fragt das Cockpit mit dem Template-Filter ab, interniert und paginiert die Ergebnisse. |
C_GetAttributeValue | Beantwortet Attribute aus dem zwischengespeicherten Deskriptor (Puffer-Längenprotokoll unterstützt). |
C_DestroyObject | Löscht das Objekt im Cockpit und vergisst den Handle. |
Ver- und Entschlüsselung (einteilig)
| Funktion | Verhalten |
|---|---|
C_EncryptInit / C_Encrypt | Einteilige Verschlüsselung; bei AES-GCM wird das Tag an den Chiffretext angehängt. |
C_DecryptInit / C_Decrypt | Einteilige Entschlüsselung. |
Signieren, Verifizieren & Digest (einteilig)
| Funktion | Verhalten |
|---|---|
C_SignInit / C_Sign | Einteiliges Signieren. |
C_VerifyInit / C_Verify | Einteiliges Verifizieren; CKR_SIGNATURE_INVALID, wenn das Backend Ungültigkeit meldet. |
C_DigestInit / C_Digest | Schlüsselloses, einteiliges Digest (im Cockpit berechnet). |
Schlüsselverwaltung
| Funktion | Verhalten |
|---|---|
C_GenerateKey | Generiert einen symmetrischen Schlüssel (erfordert Login). |
C_GenerateKeyPair | Generiert ein asymmetrisches Schlüsselpaar (erfordert Login). |
C_WrapKey | Verpackt einen Schlüssel unter einem Wrapping-Schlüssel. |
C_UnwrapKey | Entpackt einen Blob zu einem neuen Schlüsselobjekt. |
Zufall
| Funktion | Verhalten |
|---|---|
C_GenerateRandom | Fordert N Zufallsbytes vom Backend an. |
C_SeedRandom | Wird akzeptiert und ignoriert — der Backend-RNG kann vom Client nicht geseedet werden. |
Nicht unterstützt
- Token-/PIN-Administration —
C_InitToken,C_InitPIN,C_SetPIN - Operationszustand —
C_GetOperationState,C_SetOperationState - Objekt Erstellen / Kopieren / Größe / Set-Attribute —
C_CreateObject,C_CopyObject,C_GetObjectSize,C_SetAttributeValue - Mehrteiliges Ver-/Entschlüsseln —
C_EncryptUpdate,C_EncryptFinal,C_DecryptUpdate,C_DecryptFinal - Mehrteiliges Digest —
C_DigestUpdate,C_DigestKey,C_DigestFinal - Mehrteiliges / Recover-Signieren & Verifizieren —
C_SignUpdate,C_SignFinal,C_SignRecoverInit,C_SignRecover,C_VerifyUpdate,C_VerifyFinal,C_VerifyRecoverInit,C_VerifyRecover - Doppelzweck —
C_DigestEncryptUpdate,C_DecryptDigestUpdate,C_SignEncryptUpdate,C_DecryptVerifyUpdate - Schlüsselableitung —
C_DeriveKey - Slot-Ereignisse —
C_WaitForSlotEvent
C_GetFunctionStatus, C_CancelFunction (veraltete Parallelfunktionsverwaltung).
Diese Operationen werden von den unterstützten Schlüssel-Workflows nicht benötigt, die konstruktionsbedingt einteilig sind.
Mechanismen
C_GetMechanismList gibt die untenstehenden Mechanismen bekannt. C_GetMechanismInfo gibt den Schlüsselgrößenbereich und die Flags zurück und setzt zudem CKF_HW. Die Schlüsselgrößeneinheiten richten sich nach dem Mechanismus: AES in Bytes, RSA/EC in Bit.
| Mechanismus | Min | Max | Operationen |
|---|---|---|---|
CKM_AES_KEY_GEN | 16 | 32 | generieren |
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD | 16 | 32 | verschlüsseln, entschlüsseln, wrap, unwrap |
CKM_AES_GCM | 16 | 32 | verschlüsseln, entschlüsseln |
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD | 16 | 32 | wrap, unwrap |
CKM_GENERIC_SECRET_KEY_GEN | 1 | 512 | generieren |
CKM_RSA_PKCS_KEY_PAIR_GEN | 2048 | 4096 | Schlüsselpaar generieren |
CKM_RSA_PKCS | 2048 | 4096 | verschlüsseln, entschlüsseln, signieren, verifizieren, wrap, unwrap |
CKM_RSA_PKCS_OAEP | 2048 | 4096 | verschlüsseln, entschlüsseln, wrap, unwrap |
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS | 2048 | 4096 | signieren, verifizieren |
CKM_EC_KEY_PAIR_GEN | 256 | 521 | Schlüsselpaar generieren |
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384 | 256 | 521 | signieren, verifizieren |
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512 | — | — | Digest |
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC | 1 | 512 | signieren, verifizieren |
Digest wird im Cockpit berechnet und unterstützt derzeit SHA-256 / 384 / 512. CKM_SHA_1 wird bekanntgegeben, ein SHA-1-Digest wird jedoch vom Backend abgelehnt (CKR_MECHANISM_INVALID).
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_HMAC, CKK_SHA384_HMAC, CKK_SHA512_HMAC.
C_GetAttributeValue gibt aus dem zwischengespeicherten Deskriptor zurück: CKA_CLASS, CKA_KEY_TYPE, CKA_LABEL, CKA_ID, CKA_VALUE_LEN, CKA_MODULUS, CKA_PUBLIC_EXPONENT, CKA_MODULUS_BITS, CKA_EC_PARAMS, CKA_EC_POINT, sowie die booleschen Fähigkeits-Flags (CKA_TOKEN, CKA_PRIVATE, CKA_SENSITIVE, CKA_EXTRACTABLE, CKA_ENCRYPT, CKA_DECRYPT, CKA_WRAP, CKA_UNWRAP, CKA_SIGN, CKA_VERIFY, CKA_DERIVE, …).
CKA_VALUE gibt immer CKR_ATTRIBUTE_SENSITIVE zurück — rohes Schlüsselmaterial existiert ausschließlich im Backend und überschreitet nie die PKCS#11-Grenze. Schlüssel melden CKA_EXTRACTABLE = false, CKA_SENSITIVE = true, CKA_NEVER_EXTRACTABLE = true. Jeder nicht erkannte Attributtyp gibt CKR_ATTRIBUTE_TYPE_INVALID zurück.