Zum Hauptinhalt springen
Gilt für:
PKCS#11 (Cryptoki) 2.40DuoKey-PKCS#11-Bibliothek

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​

FunktionVerhalten
C_GetFunctionListGibt die Funktionstabelle zurück (das einzige exportierte Symbol).
C_InitializeLädt die Konfiguration, erstellt den Proxy-Client, initialisiert den globalen Zustand.
C_FinalizeBaut den globalen Zustand ab.
C_GetInfoMeldet Cryptoki 2.40, Bibliothek 0.1, Hersteller „DuoKey".

Slot- & Tokenverwaltung​

FunktionVerhalten
C_GetSlotListPräsentiert genau einen virtuellen Slot (slot_id aus der Konfiguration).
C_GetSlotInfoStatisch „DKE Cockpit Virtual HSM Slot", Flags CKF_TOKEN_PRESENT | CKF_HW_SLOT.
C_GetTokenInfoToken-Flags und -Metadaten (bestmöglich vom Proxy, mit Offline-Fallback).
C_GetMechanismListGibt die bekanntgegebene Mechanismenliste zurück (siehe unten).
C_GetMechanismInfoSchlüsselgrößenbereich und Flags pro Mechanismus; verknüpft CKF_HW per OR in die Flags.

Sitzungsverwaltung​

FunktionVerhalten
C_OpenSessionNur serielle Sitzungen; parallele werden mit CKR_SESSION_PARALLEL_NOT_SUPPORTED abgelehnt.
C_CloseSessionSchließt eine Sitzung.
C_CloseAllSessionsSchließt alle Sitzungen für den Slot.
C_GetSessionInfoLeitet den RO/RW × öffentlich/Benutzer-Zustand ab.
C_LoginVersetzt die Sitzung in den Benutzerzustand. Es wird keine PIN übertragen; nur CKU_USER / CKU_CONTEXT_SPECIFIC werden akzeptiert.
C_LogoutSetzt das Anmeldeflag zurück.

Objektverwaltung​

FunktionVerhalten
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinalFragt das Cockpit mit dem Template-Filter ab, interniert und paginiert die Ergebnisse.
C_GetAttributeValueBeantwortet Attribute aus dem zwischengespeicherten Deskriptor (Puffer-Längenprotokoll unterstützt).
C_DestroyObjectLöscht das Objekt im Cockpit und vergisst den Handle.

Ver- und Entschlüsselung (einteilig)​

FunktionVerhalten
C_EncryptInit / C_EncryptEinteilige Verschlüsselung; bei AES-GCM wird das Tag an den Chiffretext angehängt.
C_DecryptInit / C_DecryptEinteilige Entschlüsselung.

Signieren, Verifizieren & Digest (einteilig)​

FunktionVerhalten
C_SignInit / C_SignEinteiliges Signieren.
C_VerifyInit / C_VerifyEinteiliges Verifizieren; CKR_SIGNATURE_INVALID, wenn das Backend Ungültigkeit meldet.
C_DigestInit / C_DigestSchlüsselloses, einteiliges Digest (im Cockpit berechnet).

Schlüsselverwaltung​

FunktionVerhalten
C_GenerateKeyGeneriert einen symmetrischen Schlüssel (erfordert Login).
C_GenerateKeyPairGeneriert ein asymmetrisches Schlüsselpaar (erfordert Login).
C_WrapKeyVerpackt einen Schlüssel unter einem Wrapping-Schlüssel.
C_UnwrapKeyEntpackt einen Blob zu einem neuen Schlüsselobjekt.

Zufall​

FunktionVerhalten
C_GenerateRandomFordert N Zufallsbytes vom Backend an.
C_SeedRandomWird akzeptiert und ignoriert — der Backend-RNG kann vom Client nicht geseedet werden.

Nicht unterstützt​

Geben CKR_FUNCTION_NOT_SUPPORTED zurück
  • 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
Geben CKR_FUNCTION_NOT_PARALLEL zurück

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.

MechanismusMinMaxOperationen
CKM_AES_KEY_GEN1632generieren
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD1632verschlüsseln, entschlüsseln, wrap, unwrap
CKM_AES_GCM1632verschlüsseln, entschlüsseln
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD1632wrap, unwrap
CKM_GENERIC_SECRET_KEY_GEN1512generieren
CKM_RSA_PKCS_KEY_PAIR_GEN20484096Schlüsselpaar generieren
CKM_RSA_PKCS20484096verschlüsseln, entschlüsseln, signieren, verifizieren, wrap, unwrap
CKM_RSA_PKCS_OAEP20484096verschlüsseln, entschlüsseln, wrap, unwrap
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS20484096signieren, verifizieren
CKM_EC_KEY_PAIR_GEN256521Schlüsselpaar generieren
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384256521signieren, verifizieren
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512——Digest
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC1512signieren, verifizieren
Digest-Mechanismen

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 ist sensibel

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.