Eine Operation ist eine Abfolge von mehreren Funktionen.
Die Hinweise in diesem Abschnitt beziehen sich auf Kapitel 11 „Functions“ der Spezifikation PKCS#11 V2.20.
Im BS2000 können die meisten Funktionen ab der Version 1.1 über die BS2000-spezifischen Assembler-Schnittstellen nicht nur synchron, sondern auch asynchron ausgeführt werden.
Detailliertere Information dazu entnehmen Sie dem Abschnitt „Asynchrone Ausführung“.
Folgende allgemeine Funktionen sind im BS2000 nicht erforderlich:
C_InitToken
C_Login
C_Logout
Die maximale Ausgabe-Datenlänge bei den Funktionen encryptFinal, decryptFinal, digestFinal, signFinal, verifyFinal, wrapKey und generateRandom beträgt 2048 byte.
Lassen Sie sich bei bestimmten Funktionen nicht zunächst die Größe des Ausgabebereichs ermitteln. Dies geht zu Lasten der Performance. Vergleichen Sie dazu den Abschnitt 11.2 „Conventions for functions returning output in a variable-length buffer“ in der Spezifikation PKCS#11 V2.20.
Alle mit ...Init eingeleiteten Operationen werden durch Folgeaufrufe, die den Returncode CKR_SESSION_HANDLE_INVALID oder CKR_ARGUMENTS_BAD liefern, nicht beendet. Auch die Returncodes CKR_KEY_HANDLE_INVALID, CKR_MECHANISM_INVALID, CKR_ATTRIBUTE_VALUE_INVALID beenden in der Regel nicht die aktive Operation. Vergleichen Sie dazu auch Abschnitt 11.4 „Generalpurpose functions“ in der Spezifikation PKCS#11 V2.20.
Die Anzahl der Sessions, die ein BS2000-Nutzer gleichzeitig eröffnen kann, ist auf 999 begrenzt. Diese Obergrenze lässt sich mit dem Kommando ADD-USER, bzw. MODIFY-USER-ATTRIBUTES durch den Operanden CRYPTO-SESSION-LIMIT auch auf einen niedrigeren Wert festlegen. Weitere Informationen zu diesen Kommandos finden Sie im Benutzerhandbuch „BS2000 OS DX Kommandos“ [2].
Das Überschreiten der Maximalzahl paralleler Sessions wird mit dem Returncode session_count angezeigt.
C_Initialize, C_Finalize:
C_Initialize:
Zusätzlich zu der in der PKCS#11-Spezifikation beschriebenen Funktionalität wird im BS2000 mit C_Initialize gesteuert, ob das Programm synchron oder asynchron mit CRYPT arbeiten will:Wenn Sie synchrone Funktionsausführung wählen, ist ein C_Initialize im BS2000 nicht erforderlich.
pInitArgs muss ein NULL_PTR sein.C_Finalize:
C_Finalize ist im BS2000 wirkungslos.
Vergleichen Sie hierzu Abschnitt 11.4 „General-purpose functions“ in der Spezifikation PKCS#11 V2.20.
C_GetMechanismInfo:
In den Mechanismus-Infodaten der Mechanismen CKM_RSA_PKCS und CKM_RSA_X_509 sind die Flags für die Operationen Sign und Verify nicht gesetzt. Die entsprechenden Operationen werden dennoch unterstützt.
Vergleichen Sie dazu Abschnitt 11.5 „Slot and token management functions“ in der Spezifikation PKCS#11 V2.20.
C_CopyObject:
Die Flags CKA_SENSITIVE und CKA_EXTRACTABLE, die die sicherheitsrelevanten Daten eines Schlüssels gegen Auslesen schützen bzw. das Einpacken verbieten, können in beide Richtungen geändert werden.
Vergleichen Sie dazu Abschnitt 11.7 „Object management functions“ in der Spezifikation PKCS#11 V2.20.
C_SetAttributeValue:
Keine vollständige Prüfung der übergebenen Werte. Möglicherweise treten inkonsistente Zustände auf, da es möglich ist, fehlerhafte Attribut-Werte zu setzen, und Attribute zu ändern, deren Modifikation laut Spezifikation verboten ist. Die aufrufende Applikation muss sicherstellen, dass solche Zustände nicht auftreten.
C_GenerateKeyPair:
Für die Generierung von RSA-Schlüsseln ist die Angabe des Attributs
CKA_PUBLIC_EXPONENT nicht erforderlich. Vergleichen Sie dazu den Abschnitt 11.14 „Key management functions“ in der Spezifikation PKCS#11 V2.20.
C_Encrypt, C_Decrypt, C_Digest, C_Sign, C_Verify
Die kryptographischen einteiligen Operationen (C_Encrypt, C_Decrypt, C_Digest, C_Sign, C_Verify) entsprechen einer Update-Operation gefolgt von einer Final-Operation.
Daher können Sie beispielsweise eine Folge von C_EncryptUpdate-Aufrufen wahlweise durch C_EncryptFinal oder durch C_Encrypt abschließen.
Einteilige Operation | entsprechende Update-Operation + Final-Operation |
C_Encrypt | C_EncryptUpdate + C_EncryptFinal |
C_Decrypt | C_DecryptUpdate + C_DecryptFinal |
C_Digest | C_DigestUpdate + C_DigestFinal |
C_Sign | C_SignUpdate + C_SignFinal |
C_Verify | C_VerifyUpdate + C_VerifyFinal |
Die Eingabe-Datenlänge einer Update-Operation muss nicht unbedingt den in der Spezifikation PKCS#11 V2.20 in Kapitel 12ff beschriebenen Kriterien genügen. Diese Kriterien beziehen sich nur auf die Gesamtlänge.
Vergleichen Sie dazu die Abschnitte 11.8 bis 11.12 „Encryption / Decryption / Message digesting / Signing and MACing functions and functions for verifying signatures and MACs“ in der Spezifikation PKCS#11 V2.20.