Verschlüsselungsoperationen: GREP11-API
IBM Cloud® Hyper Protect Crypto Services stellt eine Reihe von Verschlüsselungsfunktionen bereit, die in einem Hardwaresicherheitsmodul(HSM)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. in der Cloud ausgeführt werden. Sie können Verschlüsselungsoperationen über einen Fernzugriff auf diese Funktionen mit Enterprise PKCS #11 (EP11) über gRPC-API-Aufrufen (auch als GREP11 bezeichnet) durchführen.
Weitere Informationen zur Art der Beziehungen zwischen den GREP11-Funktionen und PKCS #11 und EP11 finden Sie in Einführung in GREP11.
Die API GREP11 kann bis zu 500 Anforderungen/Sekunde für eine einzelne Verschlüsselungseinheit verarbeiten.
Auf die API zugreifen
Ein GREP11-API-Endpunkt, ein Service-ID-API-Schlüssel, ein IAM-Endpunkt sind für die Initialisierung erforderlich, bevor GREP11-API-Funktionsaufrufe ausgeführt werden. Weitere Informationen dazu finden Sie in GREP11-API-Anforderung generieren.
Fehlerbehandlung
GREP11 basiert auf der Spezifikation gRPC für die Fehlerbehandlung. Wenn ein Fehler auftritt, empfangen gRPC-Clients einen message Status-Protokollpuffer.
message Status {
int32 code = 1;
string message = 2;
repeated google.protobuf.Any details = 3;
}
In der Fehlernachricht gilt Folgendes:
codeenthält den Statuscode, der ein Aufzählungswert (enum) des Feldsgoogle.rpc.Codesein muss.- Die
messageenthält eine Fehlernachricht für die Entwickler auf Englisch. Jede an den Benutzer gerichtete Fehlernachricht muss lokalisiert und im Feldgoogle.rpc.Status.detailsgesendet werden oder sie muss vom Benutzer lokalisiert werden. detailslistet Nachrichten auf, die die Fehlerdetails enthalten. Für die Verwendung durch die API steht eine Gruppe allgemeiner Nachrichtentypen zur Verfügung.
GREP11 hängt mithilfe des Felds Detail zusätzliche Fehlercodeinformationen an.
message Grep11Error {
uint64 Code = 1;
string Detail = 2;
bool Retry = 3;
}
Das Feld Code kann in den Wert CK_RV in PKCS #11umgesetzt werden. Dieses Feld enthält die Fehlercodes, die in der PKCS #11 -Spezifikation definiert sind, oder die Anbietererweiterungen, die in EP11definiert sind. EP11 verwendet nur eine Untergruppe der von PKCS #11 definierten Rückgabewerte. Weitere Informationen finden
Sie im Abschnitt 10.1.6 Rückgabewerte in der Enterprise PKCS #11-Bibliotheksstruktur.
Ein Beispiel in Golang, das Fehler behandelt, ist verfügbar.
GREP11-Funktionsliste
PKCS #11-Funktionen, die in der Tabelle mit einem Stern (*) markiert sind, werden von EP11 über gRPC implementiert. Andere Funktionen werden nicht implementiert.
| PKCS #11 | Enterprise PKCS #11 | Enterprise PKCS #11 über gRPC | Beschreibung |
|---|---|---|---|
| C_Initialize | Nicht zutreffend | Nicht zutreffend | Initialisiert Cryptoki. |
| C_Finalize | Nicht zutreffend | Nicht zutreffend | Bereinigt verschiedene zu Cryptoki gehörige Ressourcen. |
| C_GetInfo | Nicht zutreffend | Nicht zutreffend | Ruft allgemeine Informationen zu Cryptoki ab. |
| C_GetFunctionList | Nicht zutreffend | Nicht zutreffend | Ruft Eingangspunkte von Cryptoki-Bibliotheksfunktionen ab. |
| C_GetSlotList | Nicht zutreffend | Nicht zutreffend | Ruft eine Liste der Slots im System ab. |
| C_GetSlotInfo | Nicht zutreffend | Nicht zutreffend | Ruft Informationen zu einem bestimmten Slot ab. |
| C_GetTokenInfo | Nicht zutreffend | Nicht zutreffend | Ruft Informationen zu einem bestimmten Token ab. |
| C_WaitForSlotEvent | Nicht zutreffend | Nicht zutreffend | Wartet auf das Eintreten eines Slotereignisses (Tokeneinfügung, -entfernung usw.). |
| C_GetMechanismList* | m_GetMechanismList | GetMechanismList | Ruft eine Liste der Mechanismen ab, die von einem Token unterstützt werden. |
| C_GetMechanismInfo* | m_GetMechanismInfo | GetMechanismInfo | Ruft Informationen zu einem bestimmten Verfahren ab. |
| C_InitToken | Nicht zutreffend | Nicht zutreffend | Initialisiert ein Token. |
| C_InitPIN | Nicht zutreffend | Nicht zutreffend | Initialisiert die PIN des normalen Benutzers. |
| C_SetPIN | Nicht zutreffend | Nicht zutreffend | Ändert die PIN des aktuellen Benutzers. |
| C_OpenSession | Nicht zutreffend | Nicht zutreffend | Öffnet eine Verbindung zwischen einer Anwendung und einem bestimmten Token oder richtet einen Anwendungsrückruf für das Einfügen von Tokens ein. |
| C_CloseSession | Nicht zutreffend | Nicht zutreffend | Schließt eine Sitzung. |
| C_CloseAllSessions | Nicht zutreffend | Nicht zutreffend | Schließt alle Sitzungen mit einem Token. |
| C_GetSessionInfo | Nicht zutreffend | Nicht zutreffend | Ruft Informationen zu der Sitzung ab. |
| C_GetOperationState | Nicht zutreffend | Nicht zutreffend | Ruft den Status der Verschlüsselungsoperationen einer Sitzung ab. |
| C_SetOperationState | Nicht zutreffend | Nicht zutreffend | Legt den Status der Verschlüsselungsoperationen einer Sitzung fest. |
| C_Login | Nicht zutreffend | Nicht zutreffend | Meldet sich bei einem Token an. |
| C_Logout | Nicht zutreffend | Nicht zutreffend | Meldet sich von einem Token ab. |
| C_CreateObject | Nicht zutreffend | Nicht zutreffend | Erstellt ein Objekt. |
| C_CopyObject | Nicht zutreffend | Nicht zutreffend | Erstellt eine Kopie eines Objekts. |
| C_DestroyObject | Nicht zutreffend | Nicht zutreffend | Löscht ein Objekt. |
| C_GetObjectSize | Nicht zutreffend | Nicht zutreffend | Ruft die Größe eines Objekts in Byte ab. |
| C_GetAttributeValue* | m_GetAttributeValue | GetAttributeValue | Ruft einen Attributwert eines Objekts ab. |
| C_SetAttributeValue* | m_SetAttributeValue | SetAttributeValue | Ändert einen Attributwert eines Objekts. Es können nur boolesche Attribute geändert werden. |
| C_FindObjectsInit | Nicht zutreffend | Nicht zutreffend | Initialisiert eine Objektsuchoperation. |
| C_FindObjects | Nicht zutreffend | Nicht zutreffend | Setzt eine Objektsuchoperation fort. |
| C_FindObjectsFinal | Nicht zutreffend | Nicht zutreffend | Beendet eine Objektsuchoperation. |
| C_EncryptInit* | m_EncryptInit | EncryptInit | Initialisiert eine Verschlüsselungsoperation. |
| C_Encrypt* | m_Encrypt | Verschlüsseln | Verschlüsselt einteilige Daten. |
| C_EncryptUpdate* | m_EncryptUpdate | EncryptUpdate | Setzt eine mehrteilige Verschlüsselungsoperation fort. |
| C_EncryptFinal* | m_EncryptFinal | EncryptFinal | Beendet eine mehrteilige Verschlüsselungsoperation. |
| Nicht zutreffend | m_EncryptSingle | EncryptSingle | IBM-Erweiterung, vom Standard abweichende Variante von Encrypt. Verarbeitet Daten in einem Durchgang, mit einem einzigen Aufruf. Gibt keinen Status an den Host zurück, nur die verschlüsselten Daten. |
| Nicht zutreffend | m_ReencryptSingle | ReencryptSingle | IBM-Erweiterung, vom Standard abweichende Variante von Encrypt. Entschlüsselt Daten mit dem Originalschlüssel und verschlüsselt die Rohdaten mit einem anderen Schlüssel in einem einzigen Aufruf innerhalb des Cloud-HSM. Gibt
keinen Status an den Host zurück, nur die erneut verschlüsselten Daten. |
| C_DecryptInit* | m_DecryptInit | DecryptInit | Initialisiert eine Entschlüsselungsoperation. |
| C_Decrypt* | m_Decrypt | Entschlüsseln | Entschlüsselt einteilige verschlüsselte Daten. |
| C_DecryptUpdate* | m_DecryptUpdate | DecryptUpdate | Setzt eine mehrteilige Entschlüsselungsoperation fort. |
| C_DecryptFinal* | m_DecryptFinal | DecryptFinal | Beendet eine mehrteilige Entschlüsselungsoperation. |
| Nicht zutreffend | m_DecryptSingle | DecryptSingle | IBM-Erweiterung, vom Standard abweichende Variante von Decrypt. Verarbeitet Daten in einem Durchgang, mit einem einzigen Aufruf. Gibt keinen Status an den Host zurück, nur die entschlüsselten Daten. |
| C_DigestInit* | m_DigestInit | DigestInit | Initialisiert eine Operation für den Message-Digest. |
| C_Digest* | m_Digest | Digest | Verarbeitet einteilige Daten. Die Länge der Eingabedaten darf nicht null sein und der Zeiger, der auf die Eingabedatenposition verweist, darf nicht NULL sein. |
| C_DigestUpdate* | m_DigestUpdate | DigestUpdate | Setzt eine mehrteilige Digest-Operation fort. Die Länge der Eingabedaten darf nicht null sein und der Zeiger, der auf die Eingabedatenposition verweist, darf nicht NULL sein. |
| C_DigestKey | Nicht zutreffend | Nicht zutreffend | Verarbeitet einen Schlüssel. |
| C_DigestFinal* | m_DigestFinal | DigestFinal | Beendet eine mehrteilige Digest-Operation. |
| Nicht zutreffend | m_DigestSingle | DigestSingle | IBM-Erweiterung, vom Standard abweichende Erweiterung, Kombination von 'DigestInit' und 'Digest'. Verarbeitet Daten in einem Durchgang, mit einem einzigen Aufruf, ohne einen temporären Digest-Status und unnötige Umläufe aufzubauen. |
| C_SignInit* | m_SignInit | SignInit | Initialisiert eine Signaturoperation. |
| C_Sign* | m_Sign | Unterzeichnen | Signiert einteilige Daten. |
| C_SignUpdate* | m_SignUpdate | SignUpdate | Setzt eine mehrteilige Signaturoperation fort. |
| C_SignFinal* | m_SignFinal | SignFinal | Beendet eine mehrteilige Signaturoperation. |
| C_SignRecoverInit | Nicht zutreffend | Nicht zutreffend | Initialisiert eine Signaturoperation, wobei die Daten anhand der Signatur wiederhergestellt werden. |
| C_SignRecover | Nicht zutreffend | Nicht zutreffend | Signiert einteilige Daten, wobei die Daten anhand der Signatur wiederhergestellt werden. |
| Nicht zutreffend | m_SignSingle | SignSingle | IBM-Erweiterung, vom Standard abweichende Erweiterung, Kombination von 'SignInit' und 'Sign'. Signiert Daten oder verarbeitet sie mit MAC in einem Durchgang, mit einem einzigen Aufruf, ohne einen temporären Digest-Status aufzubauen. Gibt keinen Status an den Host zurück, nur das Ergebnis. |
| C_VerifyInit* | m_VerifyInit | VerifyInit | Initialisiert eine Verifizierungsoperation. |
| C_Verify* | m_Verify | Verify | Verifiziert eine Signatur für einteilige Daten. |
| C_VerifyUpdate* | m_VerifyUpdate | VerifyUpdate | Setzt eine mehrteilige Verifizierungsoperation fort. |
| C_VerifyFinal* | m_VerifyFinal | VerifyFinal | Beendet eine mehrteilige Verifizierungsoperation. |
| C_VerifyRecoverInit | Nicht zutreffend | Nicht zutreffend | Initialisiert eine Verifizierungsoperation, wobei die Daten von der Signatur wiederhergestellt werden. |
| C_VerifyRecover | Nicht zutreffend | Nicht zutreffend | Verifiziert eine Signatur für einteilige Daten, wobei die Daten von der Signatur wiederhergestellt werden. |
| Nicht zutreffend | m_VerifySingle | VerifySingle | IBM-Erweiterung, vom Standard abweichende Erweiterung, Kombination von 'VerifyInit' und 'Verify'. Signiert Daten oder verarbeitet sie mit MAC in einem Durchgang, mit einem einzigen Aufruf, ohne einen temporären Digest-Status aufzubauen. Gibt keinen Status an den Host zurück, nur das Verifizierungsergebnis. |
| C_DigestEncryptUpdate | Nicht zutreffend | Nicht zutreffend | Setzt simultane mehrteilige Digest- und Verschlüsselungsoperationen fort. |
| C_DecryptDigestUpdate | Nicht zutreffend | Nicht zutreffend | Setzt simultane mehrteilige Entschlüsselungs- und Digest-Operationen fort. |
| C_SignEncryptUpdate | Nicht zutreffend | Nicht zutreffend | Setzt simultane mehrteilige Signatur- und Verschlüsselungsoperationen fort. |
| C_DecryptVerifyUpdate | Nicht zutreffend | Nicht zutreffend | Setzt simultane mehrteilige Entschlüsselungs- und Verifizierungsoperationen fort. |
| C_GenerateKey* | m_GenerateKey | GenerateKey | Generiert einen geheimen Schlüssel. |
| C_GenerateKeyPair* | m_GenerateKeyPair | GenerateKeyPair | Generiert ein Paar aus öffentlichem Schlüssel und privatem Schlüssel. |
| C_WrapKey* | m_WrapKey | WrapKey | Führt Wrapping für einen Schlüssel aus (verschlüsselt einen Schlüssel). |
| C_UnwrapKey* | m_UnwrapKey | UnwrapKey | Führt Unwrapping für einen Schlüssel aus (entschlüsselt einen Schlüssel). |
| Nicht zutreffend | Nicht zutreffend | RewrapKeyBlob | Überträgt die Eigentümerschaft an einem BLOB, das durch den aktuellen Masterschlüssel gesteuert wird, auf den neuen Masterschlüssel, wenn der neue Masterschlüssel festgeschrieben ist. Diese Funktion ist ein spezieller Verwaltungsbefehl, der nur von GREP11 unterstützt wird. |
| C_DeriveKey* | m_DeriveKey | DeriveKey | Leitet einen Schlüssel aus einem Basisschlüssel ab. |
| C_SeedRandom | Nicht zutreffend | Nicht zutreffend | Fügt Seedmaterial zum Zufallsgenerator hinzu. |
| C_GenerateRandom* | m_GenerateRandom | GenerateRandom | Generiert Zufallsdaten. Die Länge der Zufallsdaten darf nicht null sein und der Zeiger, der auf die Zufallsdatenposition verweist, darf nicht NULL sein. Die maximale Länge der Zufallsdaten, die angefordert werden können, beträgt 1 Million Byte. |
| C_GetFunctionStatus | Nicht zutreffend | Nicht zutreffend | Traditionelle Funktion, die immer CKR_FUNCTION_NOT_PARALLEL zurückgibt. |
| C_CancelFunction | Nicht zutreffend | Nicht zutreffend | Traditionelle Funktion, die immer CKR_FUNCTION_NOT_PARALLEL zurückgibt. |
Unterstützte Mechanismen
Als Mechanismus wird ein Prozess zur Implementierung einer Verschlüsselungsoperation bezeichnet. Dies kann je nach Firmware-Version auf der Verschlüsselungskarte variieren. In der folgenden Tabelle werden die Mechanismen, die gegenwärtig unterstützt werden, und ihre Beziehung zu allgemeinen GREP11-Funktionskategorie gezeigt.
| Funktionsgruppe | Unterstützte Mechanismen |
|---|---|
| Verschlüsseln und entschlüsseln | CKM_RSA_PKCS1, CKM_RSA_PKCS_OAEP1, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Signieren und prüfen | CKM_RSA_PKCSCS1, CKM_RSA_PKCS_PSS1, CKM_RSA_X9_311, CKM_SHA1_RSA_PKCS, CKM_SHA256_RSA_PKCS, CKM_SHA224_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS, CKM_SHA1_RSA_PKCS_PSS, CKM_SHA224_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA512_RSA_PKCS_PSS, CKM_SHA1_RSA_X9_31, CKM-DSA1, CKM_DSA_SHA1, CKM_ECDSA1, CKM_ECDSA_SHA1, CKM_ECDSA_SHA224, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384, CKM_ECDSA_SHA512, CKM_SHA1_HMAC, CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC CKM_SHA512_224_HMAC, CKM_SHA512_256_HMAC, CKM_IBM_ED25519_SHA5124, CKM_IBM_ECDSA_OTHER2, CKM_IBM_DILITHIUM3 |
| Digest | CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA512_224, CKM_SHA512_256 |
| Schlüssel oder Schlüsselpaar generieren | CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_DSA_KEY_PAIR_GEN, CKM_DSA_PARAMETER_GEN, CKM_EC_KEY_PAIR_GEN (CKM_ECDSA_KEY_PAIR_GEN), CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_PARAMETER_GEN, CKM_GENERIC_SECRET_KEY_GEN, CKM_AES_KEY_GEN, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_IBM_DILITHIUM |
| Key-Wrapping durchführen und aufheben | CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| Ableiten | CKM_ECDH1_DERIVE, CKM_DH_PKCS_DERIVE, CKM_DES3_ECB_ENCRYPT_DATA, CKM_SHA1_KEY_DERIVATION, CKM_SHA224_KEY_DERIVATION, CKM_SHA256_KEY_DERIVATION, CKM_SHA384_KEY_DERIVATION, CKM_SHA512_KEY_DERIVATION, CKM_IBM_BTC_DERIVE |
1: Dieser Mechanismus unterstützt nur einteilige Operationen, die keine der GREP11-Update-Funktionen wie EncryptUpdate, DecryptUpdate und DigestUpdate verwenden können.
2: Dieser Mechanismus ist nur bei GREP11 SignSingle- und VerifySingle-Operationen verfügbar.
3: Dieser Mechanismus wird von der Verschlüsselungskarte IBM 4768 nicht unterstützt und ist nicht für SignUpdate- und VerifyUpdate-Operationen verfügbar.
4: Dieser Mechanismus unterstützt einteilige Operationen (SignInit, Sign, VerifyInit, Verify), SignSingle und VerifySingle.
Unterstützte Attribute und Schlüsseltypen
GREP11-Attribute definieren Objektmerkmale, die festlegen, wie ein Objekt verwendet werden kann und wie auf das Objekt zugegriffen werden kann. In der folgenden Tabelle werden die unterstützten Attribute und ihre Beziehungen zu den verschiedenen unterstützten Schlüsseltypen gezeigt.
| Attribut | Beschreibung | Unterstützte Schlüsseltypen |
|---|---|---|
| CKA_CHECK_VALUE | Die Kontrollsumme des Schlüssels | AES-Schlüssel, DES-Schlüssel |
| CKA_COPYABLAGE | Wenn CKA_TRUE festgelegt ist, kann das Objekt mit der Funktion PKCS#11 C_CopyObject kopiert werden. | Private EC-Schlüssel, öffentliche EC-Schlüssel, private RSA-Schlüssel, öffentliche RSA-Schlüssel, private DH-Schlüssel, öffentliche DH-Schlüssel, private DSA-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_DECRYPT | CK_TRUE, wenn der Schlüssel eine Entschlüsselung unterstützt. | Private EC-Schlüssel, private RSA-Schlüssel, private DH-Schlüssel, private DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_DERIVE | CK_TRUE, wenn der Schlüssel die Schlüsselableitung unterstützt (d. h., andere Schlüssel können aus diesem Schlüssel abgeleitet werden). Der Standardwert lautet CK_FALSE. | Private EC-Schlüssel, öffentliche EC-Schlüssel, private RSA-Schlüssel, öffentliche RSA-Schlüssel, private DH-Schlüssel, öffentliche DH-Schlüssel, private DSA-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_EC_PARAMS (CKA_ECDSA_PARAMS) | DER-Codierung eines ANSI X9.62-Parameterwerts. | Private EC-Schlüssel, öffentliche EC-Schlüssel |
| CKA_ENCRYPT | CK_TRUE, wenn der Schlüssel eine Verschlüsselung unterstützt. | Öffentliche EC-Schlüssel, öffentliche RSA-Schlüssel, öffentliche DH-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_EXTRACTABLE | CK_TRUE, wenn der Schlüssel extrahierbar ist und gewrappt werden kann. | Private EC-Schlüssel, private RSA-Schlüssel, private DH-Schlüssel, private DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_IBM_PQC_PARAMS | Unterstützung von Parametern für Post-Quantum-Verschlüsselungsmechanismen. Im Fall des Dilithium-Mechanismus CKM_IBM_DILITHIUM wird eine Marshaling-Objekt-ID (OID) bereitgestellt, welche die Stärke des zu verwendenden Dilithium-Algorithmus
darstellt. Derzeit wird nur die Stärke von Dilithium 4 round 2 unterstützt. |
Dilithium-Schlüssel |
| CKA_KEY_TYPE | Typ des Schlüssels. | Private EC-Schlüssel, öffentliche EC-Schlüssel, private RSA-Schlüssel, öffentliche RSA-Schlüssel, private DH-Schlüssel, öffentliche DH-Schlüssel, private DSA-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_LOCAL | CK_TRUE nur, wenn der Schlüssel lokal (im Token) mit einem C_GenerateKey- oder C_GenerateKeyPair-Aufruf generiert oder mit einem C_CopyObject-Aufruf als Kopie eines Schlüssels erstellt wurde, dessen
CKA_LOCAL-Attribut auf CK_TRUE gesetzt ist. |
Private EC-Schlüssel, öffentliche EC-Schlüssel, private RSA-Schlüssel, öffentliche RSA-Schlüssel, private DH-Schlüssel, öffentliche DH-Schlüssel, private DSA-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_MODIFIABLE | Wird auf CK_TRUE gesetzt, wenn das Objekt geändert werden kann | Private EC-Schlüssel, öffentliche EC-Schlüssel, private RSA-Schlüssel, öffentliche RSA-Schlüssel, private DH-Schlüssel, öffentliche DH-Schlüssel, private DSA-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_MODULUS_BITS | Länge in Bits des Modulus n. | Öffentliche RSA-Schlüssel |
| CKA_PUBLIC_EXPONENT | Öffentlicher Exponent e. | Private RSA-Schlüssel |
| CKA_PUBLIC_KEY_INFO | DER-Codierung von SubjectPublicKeyInfo für den öffentlichen Schlüssel. Der Wert wird aus den zugrunde liegenden Daten des öffentlichen Schlüssels abgeleitet und ist standardmäßig leer. | Öffentliche RSA-Schlüssel, öffentliche EC-Schlüssel |
| CKA_SIGN | CK_TRUE, wenn der Schlüssel Signaturen unterstützt, wobei die Signatur ein Anhang an die Daten ist. | Private EC-Schlüssel, private RSA-Schlüssel, private DH-Schlüssel, private DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_TRUSTED | Das Zertifikat oder der Schlüssel kann für die Anwendung, die erstellt wurde, als vertrauenswürdig eingestuft werden. | Öffentliche EC-Schlüssel, öffentliche RSA-Schlüssel, öffentliche DH-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_UNWRAP | CK_TRUE, wenn der Schlüssel das Aufheben des Wrappings unterstützt (d. h., er kann verwendet werden, um das Wrapping anderer Schlüssel aufzuheben). | Private EC-Schlüssel, private RSA-Schlüssel, private DH-Schlüssel, private DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_VALUE_LEN | Länge in Byte des Schlüsselwerts. | AES-Schlüssel |
| CKA_VERIFY | CK_TRUE, wenn der Schlüssel Verifizierung unterstützt, wobei die Signatur ein Anhang an die Daten ist. | Öffentliche EC-Schlüssel, öffentliche RSA-Schlüssel, öffentliche DH-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_WRAP | CK_TRUE, wenn der Schlüssel Wrapping unterstützt (d. h., er kann zum Wrappen anderer Schlüssel verwendet werden). | Öffentliche EC-Schlüssel, öffentliche RSA-Schlüssel, öffentliche DH-Schlüssel, öffentliche DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
| CKA_WRAP_WITH_TRUSTED | CK_TRUE, wenn das Wrapping des Schlüssels nur mit einem Wrapping-Schlüssel durchgeführt werden kann, für den CKA_TRUSTED auf CK_TRUE gesetzt ist. Der Standardwert lautet CK_FALSE. | Private EC-Schlüssel, private RSA-Schlüssel, private DH-Schlüssel, private DSA-Schlüssel, AES-Schlüssel, DES-Schlüssel, generische Schlüssel |
Unterstützte Kurven
Die EP11-Bibliothek unterstützt eine begrenzte Zahl von Kurventypen für bestimmte Mechanismen. In der folgenden Tabelle werden die Namen der unterstützten Kurven für verschiedene Mechanismen aufgelistet. Die Zahl im Kurvennamen bezeichnet die unterstützte vorbereitete Bitanzahl.
Unterstützte Kurven für die Generierung von EC-Schlüsseln (Elliptic Curve)
Der Mechanismus CKM_EC_KEY_PAIR_GEN wird unterstützt, wenn Sie die Funktion GenerateKeyPair aufrufen, um EC-Schlüssel (Elliptic Curve) zu generieren. Die Parameter für Kurvennamen müssen als Objekt-IDs (OIDs) mit
CKA_EC_PARAMS angegeben werden. Sie können die OID abrufen, indem Sie den Kurvennamen im OID-Repositorysuchen.
| GREP11-Mechanismus | Unterstützte Kurventypen | Unterstützte Kurvennamen |
|---|---|---|
| CKM_EC_KEY_PAIR_GEN | NIST-Kurven(National Institute of Standards and Technology) |
|
| CKM_EC_KEY_PAIR_GEN | Kurven des regulären Hirnpools(BP) |
|
| CKM_EC_KEY_PAIR_GEN | Twisted Brain-Poolkurven(BP-Kurven) |
|
| CKM_EC_KEY_PAIR_GEN | SEC-Kurven(Standards for Efficient Cryptography) |
|
| CKM_EC_KEY_PAIR_GEN | Kantenkurven |
|
Unterstützte Kurven für die Verschlüsselung digitaler Assets und die Generierung von Signaturen
Die folgenden Kurven werden für Mechanismen unterstützt, die sich auf digitale Assets und digitale Signaturen beziehen.
| Standard und Schema | GREP11-Mechanismus | Unterstützte Kurventypen | Unterstützte Kurvennamen |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_ABLEITEN | SEC-Kurven(Standards for Efficient Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_ABLEITEN | NIST-Kurven(National Institute of Standards and Technology) |
|
| SLIP10 | CKM_IBM_BTC_ABLEITEN | SEC-Kurven(Standards for Efficient Cryptography) |
|
| SLIP10 | CKM_IBM_BTC_ABLEITEN | Kantenkurven |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Kantenkurven |
|
| Schnorr | CKM_IBM_ECDSA_ANDERE | SEC-Kurven(Standards for Efficient Cryptography) |
|
| Schnorr | CKM_IBM_ECDSA_ANDERE | NIST-Kurven(National Institute of Standards and Technology) |
|
| Schnorr | CKM_IBM_ECDSA_ANDERE | Kurven des regulären Hirnpools(BP) |
|
| Schnorr | CKM_IBM_ECDSA_ANDERE | Twisted Brain-Poolkurven(BP-Kurven) |
|
| Schnorr | ECSG_IBM_ECSDSA_S256 |
|
|
| Schnorr-Zilliqa | ECSG_IBM_ECSDSA_COMPR_MULTI |
|
Verschlüsselungsoperationen mit GREP11-Funktionen durchführen
Sie können Verschlüsselungsoperationen durch Aufrufen von GREP11-Funktionen durchführen, die auf Grundlage der EP11-Implementierung der PKCS #11-Spezifikation definiert sind. Die folgenden Funktionsbeschreibungen werden basierend auf der PKCS #11 -Spezifikationerstellt, mit Hinweisen speziell für EP11. Alle Parameterdefinitionen liegen im Originalformat von EP11 vor. Weitere Informationen zu EP11finden Sie unter Enterprise PKCS #11(EP11)Library structure.
EP11-Funktionsparameter werden den Protokollpuffertypen zugeordnet, die in den folgenden Funktionen zu finden sind. Weitere Informationen zu Protokollpuffertypen finden Sie in Google Developers.
Da es sich bei der EP11-Bibliothek um eine Untergruppe der PKCS #11-API-Bibliothek handelt und GREP11-Funktionen Varianten der entsprechenden EP11-Funktionen sind, werden die entsprechenden Funktionen von EP11 und PKCS #11 zu Ihrer Referenz auch in den GREP11-Funktionstabellen aufgelistet.
GREP11 unterstützt jede Programmiersprache mit einer gRPC-Bibliothek. In der aktuellen Phase sind in der API-Referenz nur Code-Snippets oder Beispiele für Golang und JavaScript enthalten. Der Inhalt wird in späteren Phasen erweitert. Die Code-Snippets basieren auf den folgenden externen GitHub-Repositorys, die vollständige Beispiele für die Verwendung der GREP11-API zur Verfügung stellen. Einige der Code-Snippets verweisen auf Helper-Funktionen in den Beispielrepositorys.
Unterstützte Verschlüsselungsalgorithmen
Sie können die folgenden Funktionen verwenden, um Verschlüsselungsalgorithmen oder Mechanismen abzurufen, die von GREP11 unterstützt werden. Durch diese Informationen werden die jeweiligen Mechanismen erläutert, die beim Aufrufen einer Funktion festgelegt werden können. Die vollständige Liste der unterstützten Mechanismen finden Sie außerdem unter Nach Funktionsgruppen kategorisierte Mechanismen.
GetMechanismList
Die Funktion GetMechanismList ruft eine Liste von Mechanismustypen ab, die von einem Token unterstützt werden.
| Beschreibung | Bindet an die EP11-Funktion m_GetMechanismList, die eine Implementierung der PKCS #11-Funktion C_GetMechanismList ist. |
|
|---|---|---|
| Parameter |
message GetMechanismListRequest {
}
message GetMechanismListResponse {
repeated uint64 Mechs = 2;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung | Implementierung der PKCS #11-Funktion C_GetMechanismList.
|
|---|---|
| Parameter |
CK_RV m_GetMechanismList (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechs, CK_ULONG_PTR mechslen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GetMechanismList. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Es gibt zwei Möglichkeiten für eine Anwendung,
Da |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR pulCount
);
|
| Rückgabewerte | CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
Code-Snippets
-
Golang-Code-Snippet
GetMechanismListRequest := &pb.GetMechanismListRequest { } GetMechanismListResponse, err := cryptoClient.GetMechanismList(context.Background(), GetMechanismListRequest) -
JavaScript-Code-Snippet
client.GetMechanismList({}, (err, data) => { if (err) throw err; console.log('MECHANISMS:', data.Mechs); });
GetMechanismInfo
Die Funktion GetMechanismInfo ruft Informationen zu einem bestimmten Verfahren ab.
| Beschreibung | Bindet an die EP11-Funktion m_GetMechanismInfo, die eine Implementierung der PKCS #11-Funktion C_GetMechanismInfo ist. |
|
|---|---|---|
| Parameter |
message GetMechanismInfoRequest {
uint64 Mech = 2;
}
message GetMechanismInfoResponse {
MechanismInfo MechInfo = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung | Implementierung der PKCS #11-Funktion C_GetMechanismInfo.
|
|---|---|
| Parameter |
CK_RV m_GetMechanismInfo (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE mech,
CK_MECHANISM_INFO_PTR mechInfo,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GetMechanismInfo. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Informationen zu |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo
);
|
| Rückgabewerte | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
Code-Snippets
-
Golang-Code-Snippet
GetMechanismInfoRequest := &pb.GetMechanismInfoRequest { Mech: ep11.CKM_RSA_PKCS, } GetMechanismInfoResponse, err := cryptoClient.GetMechanismInfo(context.Background(), GetMechanismInfoRequest) -
JavaScript-Code-Snippet
client.GetMechanismInfo({ Mech: ep11.CKM_AES_KEY_GEN }, (err, data) => { if (err) throw err; console.log('MECHANISM INFO:', data.MechInfo); });
Schlüssel generieren und ableiten
GREP11 stellt die folgenden Funktionen zum Generieren von symmetrischen und asymmetrischen Verschlüsselungsschlüsseln bereit. Basierend auf dem Mechanismus und der angegebenen Schlüssellänge können Sie verschiedene Schlüsseltypen für verschiedene Verwendungszwecke generieren. Sie können darüber hinaus einen Schlüssel aus einem Basisschlüssel ableiten, um Schlüssel in längere Schlüssel zu strecken oder Schlüssel eines erforderlichen Formats zu erhalten.
GenerateKey
Die Funktion GenerateKey generiert einen geheimen Schlüssel für symmetrische Verschlüsselung.
| Beschreibung | Bindet an die EP11-Funktion m_GenerateKey, die eine Implementierung der PKCS #11-Funktion C_GenerateKey ist. |
|
|---|---|---|
| Parameter |
message GenerateKeyRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> Template = 6;
}
message GenerateKeyResponse {
bytes KeyBytes = 4;
bytes CheckSum = 5;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion TDES-Schlüssel werden mit der richtigen Parität generiert, die vom Host nicht beobachtet werden kann. Dies ist jedoch für die ordnungsgemäße Interoperabilität erforderlich: andere PKCS #11-Implementierungen müssen die DES-Schlüssel mit Paritätsproblemen zurückweisen. Wird ein Objekt an eine Sitzung gebunden, muss
Beim Generieren von DSA-und DH-Parametern wird DSA, DH-Parameter ( Das BLOB Der PKCS #11-Schlüssel |
|---|---|
| Parameter |
CK_RV m_GenerateKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *pin, size_t pinlen,
Zeichen ohne Vorzeichen * key, size_t * keylen,
Zeichen ohne Vorzeichen *checkSum, size_t *checkSumlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GenerateKey. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Wenn der Generierungsmechanismus für die Generierung von Domänenparametern vorgesehen ist, hat das Attribut Da der Typ des Schlüssels oder der Domänenparameter, die generiert werden sollen, implizit im Generierungsmechanismus vorhanden ist, muss die Vorlage keinen Schlüsseltyp bereitstellen. Wenn ein Schlüsseltyp angegeben wird, der mit dem
Generierungsmechanismus nicht konsistent ist, schlägt Wenn ein Aufruf von Das Objekt, das durch einen erfolgreichen Aufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKey)(
CK_SESSION_HANDLE hSession
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Setup the AES key's attributes keyTemplate := ep11.EP11Attributes{ ep11.CKA_VALUE_LEN: keyLen / 8, ep11.CKA_WRAP: false, ep11.CKA_UNWRAP: false, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeyRequest := &pb.GenerateKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_KEY_GEN}, Template: util.AttributeMap(keyTemplate), } GenerateKeyResponse, err := cryptoClient.GenerateKey(context.Background(), GenerateKeyRequest) -
JavaScript-Code-Snippet
let keyLen = 128; let keyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_VALUE_LEN, keyLen / 8), new util.Attribute(ep11.CKA_WRAP, false), new util.Attribute(ep11.CKA_UNWRAP, false), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), new util.Attribute(ep11.CKA_TOKEN, true) ); client.GenerateKey({ Mech: { Mechanism: ep11.CKM_AES_KEY_GEN }, Template: keyTemplate, KeyId: uuidv4() }, (err, data={}) => { cb(err, data.KeyBytes, data.CheckSum); });
GenerateKeyPair
Die Funktion GenerateKeyPair generiert einen öffentlichen Schlüssel und ein privates Schlüsselpaar.
| Beschreibung | Bindet an die EP11-Funktion m_GenerateKeyPair, die eine Implementierung der PKCS #11-Funktion C_GenerateKeyPair ist. |
|
|---|---|---|
| Parameter |
message GenerateKeyPairRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> PrivKeyTemplate = 7;
map<uint64,AttributeValue> PubKeyTemplate = 8;
}
message GenerateKeyPairResponse {
bytes PrivKeyBytes = 5;
bytes PubKeyBytes = 6;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion KeyPair-Parameter werden aus den Parametern Im FIPS-Modus werden nur RSA-Modulverwendungen von 1024 + 256 Der öffentliche Schlüssel ist als Standard-SPKI (Subject Public Key Information) formatiert, die von den meisten Bibliotheken gelesen werden kann. Seine Integrität wird durch eine transportschlüsselspezifische MAC-Operation geschützt, die nicht zur eigentlichen SPKI gehört. Die Generierung von DSA-Parametern gibt eine Nicht-SPKI-Struktur im Feld für den öffentlichen Schlüssel zurück. Wird ein Objekt an eine Sitzung gebunden, muss Gibt einen privatem Schlüssel mit Wrapping an Die folgenden unterstützten Parameterkombinationen mit speziellen Hinweisen gehen über die PKCS #11-Dokumentation hinaus: RSA-Schlüssel weisen öffentliche Exponenten unter 17 (0x11) zurück. Kontrollpunkte können das akzeptierte Minimum weiter einschränken. Der Fermat4-Exponent, 0x10001, wird von einem speziellen Kontrollpunkt gesteuert, der die Einschränkungen für öffentliche Exponenten von FIPS 186-3 erfüllt (Abschnitt B.3.1). EC-Schlüssel ( DSA-Schlüssel ( DH-Schlüssel ( Die Verwendung des Sitzungsstatus (Anmeldestatus) ersetzt die Standardverwendung von Sitzungen. Die Zuordnung erfolgt außerhalb des Bibliotheksbereichs. Das BLOB Der PKCS #11-Schlüssel Der PKCS #11-Schlüssel Der PKCS #11-Schlüssel |
|---|---|
| Parameter |
CK_RV m_GenerateKeyPair (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR pubKeyTemplate, CK_ULONG pubKeyTemplatelen,
CK_ATTRIBUTE_PTR privKeyTemplate, CK_ULONG privKeyTemplatelen,
const unsigned char *pin, size_t pinlen,
Zeichen ohne Vorzeichen *privKey, size_t *privKeylen
unsigned char *pubKey, size_t *pubKeylen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GenerateKeyPair. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Da die Typen der zu generierenden Schlüssel implizit im Mechanismus für die Schlüsselpaargenerierung enthalten sind, müssen die Vorlagen keine Schlüsseltypen bereitstellen. Wenn eine der Vorlagen einen Schlüsseltyp angibt, der nicht
mit dem Schlüsselgenerierungsmechanismus konsistent ist, schlägt Wenn ein Aufruf von Ein Aufruf von Für die Schlüsselobjekte, die durch einen erfolgreichen Aufruf von Beachten Sie die Reihenfolge der Argumente für |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKeyPair)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pPublicKeyTemplate,
CK_ULONG ulPublicKeyAttributeCount,
CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
CK_ULONG ulPrivateKeyAttributeCount,
CK_OBJECT_HANDLE_PTR phPublicKey,
CK_OBJECT_HANDLE_PTR phPrivateKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Generate RSA key pair publicExponent := []byte{0x11} publicKeyTemplate := ep11.EP11Attributes{ ep11.CKA_ENCRYPT: true, ep11.CKA_VERIFY: true, ep11.CKA_MODULUS_BITS: 2048, ep11.CKA_PUBLIC_EXPONENT: publicExponent, ep11.CKA_EXTRACTABLE: false, } privateKeyTemplate := ep11.EP11Attributes{ ep11.CKA_PRIVATE: true, ep11.CKA_SENSITIVE: true, ep11.CKA_DECRYPT: true, ep11.CKA_SIGN: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeypairRequest := &pb.GenerateKeyPairRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN}, PubKeyTemplate: util.AttributeMap(publicKeyTemplate), PrivKeyTemplate: util.AttributeMap(privateKeyTemplate), } GenerateKeyPairResponse, err := cryptoClient.GenerateKeyPair(context.Background(), GenerateKeypairRequest) -
JavaScript-Code-Snippet
const publicKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_VERIFY, true), new util.Attribute(ep11.CKA_MODULUS_BITS, 2048), new util.Attribute(ep11.CKA_PUBLIC_EXPONENT, publicExponent), new util.Attribute(ep11.CKA_EXTRACTABLE, false) ); const privateKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_PRIVATE, true), new util.Attribute(ep11.CKA_SENSITIVE, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_SIGN, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), ); client.GenerateKeyPair({ Mech: { Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN }, PubKeyTemplate: publicKeyTemplate, PrivKeyTemplate: privateKeyTemplate, PubKeyId: uuidv4(), PrivKeyId: uuidv4() }, (err, response) => { callback(err, response); });
DeriveKey
Die Funktion DeriveKey leitet einen Schlüssel aus einem Basisschlüssel ab.
| Beschreibung | Bindet an die EP11-Funktion m_DeriveKey, die eine Implementierung der PKCS #11-Funktion C_DeriveKey ist. |
|
|---|---|---|
| Parameter |
message DeriveKeyRequest {
Mechanism Mech = 1;
bytes BaseKey = 3;
bytes Data = 4;
map<uint64,AttributeValue> Template = 8;
}
message DeriveKeyResponse {
bytes NewKeyBytes = 6;
bytes CheckSum = 7;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Das BLOB Der PKCS #11-Schlüssel Der PKCS #11-Schlüssel |
|---|---|
| Parameter |
CK_RV m_DeriveKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *baseKey, size_t baseKeylen,
const unsigned char *data, size_t datalen,
const unsigned char *pin, size_t pinlen,
unsigned char *newKey, size_t *newKeylen,
Zeichen ohne Vorzeichen *checkSum, size_t *checkSumlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DeriveKey. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Werte der Attribute Wenn ein Aufruf von Das Attribut |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DeriveKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hBaseKey,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Derive AES key for Alice deriveKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, } // Extract Bob's EC coordinates combinedCoordinates, err := util.GetPubkeyBytesFromSPKI(bobECKeypairResponse.PubKeyBytes) if err != nil { return nil, fmt.Errorf("Bob's EC public key cannot obtain coordinates: %s", err) } aliceDeriveKeyRequest := &pb.DeriveKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_ECDH1_DERIVE, Parameter: util.SetMechParm(combinedCoordinates)}, Template: util.AttributeMap(deriveKeyTemplate), BaseKey: aliceECKeypairResponse.PrivKeyBytes, } // Derive AES key for Alice aliceDeriveKeyResponse, err := cryptoClient.DeriveKey(context.Background(), aliceDeriveKeyRequest) -
JavaScript-Code-Snippet
//results are created through GenerateKeyPair const [alice, bob] = results; const deriveKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), ); const derived = []; async.eachSeries([ { PubKey: bob.PubKeyBytes, PrivKey: alice.PrivKeyBytes }, { PubKey: alice.PubKeyBytes, PrivKey: bob.PrivKeyBytes } ], (data, cb) => { const combinedCoordinates = util.getPubKeyBytesFromSPKI(data.PubKey); client.DeriveKey({ Mech: { Mechanism: ep11.CKM_ECDH1_DERIVE, ParameterB: combinedCoordinates }, Template: deriveKeyTemplate, BaseKey: data.PrivKey }, (err, data={}) => { if (!err) { derived.push(data); } cb(err); }); }
Schlüssel schützen
Sie können einen Schlüssel schützen, indem Sie ein Wrapping des Schlüssels durchführen und den Schlüssel anschließend entschlüsseln, indem Sie die Funktion zum Aufheben des Wrappings (Unwrapping) aufrufen.
WrapKey
Die Funktion WrapKey führt ein Wrapping eines Schlüssels aus (verschlüsselt einen Schlüssel).
| Beschreibung | Bindet an die EP11-Funktion m_WrapKey, die eine Implementierung der PKCS #11-Funktion C_WrapKey ist. |
|
|---|---|---|
| Parameter |
message WrapKeyRequest {
bytes Key = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 4;
}
message WrapKeyResponse {
bytes Wrapped = 5;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung | Implementierung der PKCS #11-Funktion C_WrapKey.
|
|---|---|
| Parameter |
CK_RV m_WrapKey (
const unsigned char *key, size_t keylen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const CK_MECHANISM_PTR mech,
CK_BYTE_PTR wrapped, CK_ULONG_PTR wrappedlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_WrapKey. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Wenn das Wrapping für den entsprechenden Schlüssel aufgrund einer tokenspezifischen Ursache nicht ausgeführt werden kann, obwohl sein Attribut
Token variieren in Bezug darauf, für welche Schlüsseltypen das Wrapping mit welchen Mechanismen durchgeführt werden kann. Um die Wrapping-Schlüssel zu partitionieren, sodass sie nur eine Teilmenge der extrahierbaren Schlüssel einschließen können, kann das Attribut |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_WrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hWrappingKey,
CK_OBJECT_HANDLE hKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG_PTR pulWrappedKeyLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_NOT_WRAPPABLE, CKR_KEY_SIZE_RANGE, CKR_KEY_UNEXTRACTABLE, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPING_KEY_HANDLE_INVALID, CKR_WRAPPING_KEY_SIZE_RANGE, CKR_WRAPPING_KEY_TYPE_INCONSISTENT. |
Code-Snippets
-
Golang-Code-Snippet
WrapKeyRequest := &pb.WrapKeyRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PubKeyBytes, Key: GenerateKeyResponse.KeyBytes, } WrapKeyResponse, err := cryptoClient.WrapKey(context.Background(), WrapKeyRequest) -
JavaScript-Code-Snippet
client.WrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PubKeyBytes, Key: aes.KeyBytes }, (err, data={}) => { cb(err, data.Wrapped); });
UnwrapKey
Die Funktion UnwrapKey hebt das Wrapping (die Verschlüsselung) eines Schlüssels auf.
| Beschreibung | Bindet an die EP11-Funktion m_UnwrapKey, die eine Implementierung der PKCS #11-Funktion C_UnwrapKey ist. |
|
|---|---|---|
| Parameter |
message UnwrapKeyRequest {
bytes Wrapped = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 5;
map<uint64,AttributeValue> Template = 9;
}
message UnwrapKeyResponse {
bytes UnwrappedBytes = 7;
bytes CheckSum = 8;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion
Das generierte Objekt wird unter Wenn eine SPKI in eine MACed SPKI umgesetzt wird, muss CKM_IBM_TRANSPORTKEY als Unwrapping-Mechanismus verwendet werden. Dieser Modus stellt die unformatierte SPKI als Daten mit Wrapping bereit und ignoriert den KEK.
|
|---|---|
| Parameter |
CK_RV m_UnwrapKey (
const CK_BYTE_PTR wrapped, CK_ULONG wrappedlen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const unsigned char *pin, size_t pinlen,
const CK_MECHANISM_PTR mech,
const CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
unsigned char * unwrapped, size_t * unwrappedlen,
CK_BYTE_PTR checkSum, CK_ULONG *checkSumlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_UnwrapKey. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Das Attribut Einige Mechanismen können Änderungen vornehmen oder dies versuchen. Der Inhalt der Wenn ein Aufruf von Das Attribut Um die Unwrapping-Schlüssel zu partitionieren, sodass sie das Wrapping nur für eine Untergruppe von Schlüsseln aufheben können, kann das Attribut |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_UnwrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hUnwrappingKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG ulWrappedKeyLen,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_UNWRAPPING_KEY_HANDLE_INVALID, CKR_UNWRAPPING_KEY_SIZE_RANGE, CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPED_KEY_INVALID, CKR_WRAPPED_KEY_LEN_RANGE. |
Code-Snippets
-
Golang-Code-Snippet
aesUnwrapKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: true, // must be true to be wrapped } UnwrapKeyRequest := &pb.UnwrapKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PrivKeyBytes, Wrapped: WrapKeyResponse.Wrapped, Template: util.AttributeMap(aesUnwrapKeyTemplate), } // Unwrap the AES key UnwrapKeyResponse, err := cryptoClient.UnwrapKey(context.Background(), UnwrapKeyRequest) -
JavaScript-Code-Snippet
const aesUnwrapKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, true) ); client.UnwrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PrivKeyBytes, Wrapped: wrapped, Template: aesUnwrapKeyTemplate }, (err, data={}) => { cb(err, wrapped, data.UnwrappedBytes, data.CheckSum); });
RewrapKeyBlob
Die Funktion RewrapKeyBlob führt eine erneute Verschlüsselung von großen Binärobjekten (BLOBs) mit dem neuen festgeschriebenen Masterschlüssel aus, der in dem HSM enthalten ist. Schlüssel, die erneut verschlüsselt werden, können
erst verwendet werden, nachdem das HSM die Verarbeitung des neuen festgeschriebenen Masterschlüssels abgeschlossen ('Finalize') hat.
Diese Funktion ist ein spezieller Verwaltungsbefehl, der nur von GREP11 unterstützt wird. Für RewrapKeyBlob gibt es keine entsprechende EP11-Funktion oder PKCS #11-Funktion.
| Beschreibung | Überträgt die Eigentümerschaft an einem BLOB, das durch den aktuellen Masterschlüssel gesteuert wird, auf den neuen Masterschlüssel, wenn der neue Masterschlüssel festgeschrieben ist. | |
|---|---|---|
| Parameter |
message RewrapKeyBlobRequest {
bytes WrappedKey = 1;
}
message RewrapKeyBlobResponse {
bytes RewrappedKey = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
Code-Snippets
-
Golang-Code-Snippet
RewrapKeyBlobRequest := &pb.RewrapKeyBlobRequest { WrappedKey: GenerateKeyResponse.KeyBytes, } // Rewrap an existing key blob using the HSM's new wrapping key RewrapKeyBlobResponse, err := cryptoClient.RewrapKeyBlob(context.Background(), RewrapKeyBlobRequest) -
JavaScript-Code-Snippet
client.RewrapKeyBlob({ WrappedKey: wrappedKey }, (err, response) => { callback(err, response); });
Attribute für Schlüssel abrufen und ändern
Wenn Sie Schlüssel generieren oder Operationen an Schlüsseln durchführen, definieren Sie eine Attributvorlage als einen der Parameter. Sie können die Attribute für ein bestimmtes Schlüsselobjekt abrufen und einige der Attribute ändern, nachdem der Schlüssel erstellt wurde.
GetAttributeValue
Die Funktion GetAttributeValue ruft einen Attributwert eines Objekts ab.
| Beschreibung | Bindet an die EP11-Funktion m_GetAttributeValue, die eine Implementierung der PKCS #11-Funktion C_GetAttributeValue ist. |
|
|---|---|---|
| Parameter |
message GetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message GetAttributeValueResponse {
map<uint64,AttributeValue> Attributes = 4;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Benötigt keine Sitzungen (Teil eines BLOB) und stellt keine Sitzungen dar, verwendet daher nicht den Parameter EP11 verwendet unkompliziertere Entschlüsselungsmethoden wie z. B. das Nummerieren tatsächlicher Werte anstelle generischerer Verfahren. |
|---|---|
| Parameter |
CK_RV m_GetAttributeValue (
const unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GetAttributeValue. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut
Für jedes Tripel (
Wenn Fall 1 auf eines der angeforderten Attribute zutrifft, muss der Aufruf den Wert Im besonderen Fall eines Attributs, dessen Wert ein Array aus Attributen darstellt, wie zum Beispiel Die Fehlercodes |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_SENSITIVE, CKR_ATTRIBUTE_TYPE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
// Only retrieve supported EP11 attributes attributeList := ep11.EP11Attributes{ ep11.CKA_DECRYPT: false, // attribute where you would like to retrieve its current value } GetAttributeValueRequest := &pb.GetAttributeValueRequest{ Object: GenerateKeyPairResponse.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } GetAttributeValueResponse, err := cryptoClient.GetAttributeValue(context.Background(), GetAttributeValueRequest) -
JavaScript-Code-Snippet
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, 0) ); client.GetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); console.log('ATTRIBUTE:', response.Attributes); });
SetAttributeValue
Die Funktion SetAttributeValue ändert einen Attributwert eines Objekts.
| Beschreibung | Bindet an die EP11-Funktion m_SetAttributeValue, die eine Implementierung der PKCS #11-Funktion C_SetAttributeValue ist. |
|
|---|---|---|
| Parameter |
message SetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message SetAttributeValueResponse {
bytes Object = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Attributliste: siehe _GetAttrValue Derzeit sendet Ep11 nur boolesche Attribute. Alle anderen Attribute werden vom Host verarbeitet (und Ep11 modifiziert keine Arrays wie WRAP_TEMPLATE). Benötigt keine Sitzungen (Teil eines BLOB) und stellt keine Sitzungen dar, verwendet daher nicht den PKCS #11-Parameter |
|---|---|
| Parameter |
CK_RV m_SetAttributeValue (
unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_SetAttributeValue. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Bestimmte Objekte können nicht geändert werden. Wenn Sie Nur Sitzungsobjekte können während einer schreibgeschützten Sitzung geändert werden. Die Vorlage kann neue Werte für alle Attribute des Objekts angeben, die geändert werden können. Wenn die Schablone einen Wert für ein Attribut angibt, das mit anderen vorhandenen Attributen des Objekts nicht kompatibel ist, schlägt der
Aufruf mit dem Rückkehrcode Nicht alle Attribute können geändert werden. Weitere Informationen hierzu finden Sie im Abschnitt 4.1.2 der PKCS #11-API-Spezifikation. |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_SetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Rückgabewerte | CKR_ACTION_PROHIBITED, CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Only set supported R/W EP11 attributes attributeList := ep11.EP11AttributeP{ CKA_DECRYPT: true, } SetAttributeValueRequest := &pb.SetAttributeValueRequest{ Object: GenerateKeyPair.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } SetAttributeValueResponse, err := cryptoClient.SetAttributeValue(context.Background(), SetAttributeValueRequest) -
JavaScript-Code-Snippet
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, true) ); client.SetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); });
Zufallsdaten generieren
Sie können Zufallsdaten hoher Qualität, wie zum Beispiel Initialisierungswerte (IV), PINs und Kennwörter zur Verwendung in Verschlüsselungsoperationen generieren.
GenerateRandom
Die Funktion GenerateRandom generiert Zufallsdaten. Stellen Sie bei Verwendung dieser Funktion sicher, dass Sie die Länge der Zufallsdaten nicht auf null setzen und den Zeiger, der auf die Postion der Zufallsdaten verweist, nicht
auf NULL setzen.
| Beschreibung | Bindet an die EP11-Funktion m_GenerateRandom, die eine Implementierung der PKCS #11-Funktion C_GenerateRandom ist. |
|
|---|---|---|
| Parameter |
message GenerateRandomRequest {
uint64 Len = 1;
}
message GenerateRandomResponse {
bytes Rnd = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion
Die Hostbibliothek könnte Zufallszahlen generieren, ohne sie an das Back-End zu senden, wenn die entsprechende Funktionalität auf dem Host verfügbar wäre. Dies wird in der aktuellen Implementierung nicht gemacht. Diese Funktion unterstützt keine Größenabfrage. |
|---|---|
| Parameter |
CK_RV m_GenerateRandom (
CK_BYTE_PTR rnd, CK_ULONG rndlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_GenerateRandom. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung | C_GenerateRandom generiert Zufallsdaten oder Pseudozufallsdaten. hSession ist die Sitzungskennung, pRandomData verweist auf die Position, an der die Zufallsdaten empfangen werden, und ulRandomLen ist die Länge der zu generierenden Zufallsdaten oder Pseudozufallsdaten in Byte. |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateRandom)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pRandomData,
CK_ULONG ulRandomLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_SCHLECHT, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_ACTIVE, CKR_RANDOM_NO_RNG, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
GenerateRandomRequest := &pb.GenerateRandomRequest { Len: 1024, } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) -
JavaScript-Code-Snippet
client.GenerateRandom({ Len: ep11.AES_BLOCK_SIZE }, (err, response) => { callback(err, response); });
Daten verschlüsseln und entschlüsseln
Durch Angabe des Verschlüsselungsmechanismus können Sie Funktionen zur symmetrischen oder asymmetrische Ver- und Entschlüsselung ausführen. Möglicherweise müssen Sie eine Reihe von Unterfunktionen aufrufen, um Daten zu verschlüsseln oder zu
entschlüsseln. Zum Beispiel setzt sich die mehrteilige Datenverschlüsselungsoperation aus den Teiloperationen EncryptInit, EncryptUpdate und EncryptFinal zusammen.
EncryptInit
Die Funktion EncryptInit initialisiert eine Verschlüsselungsoperation. Sie müssen als Erstes diese Funktion aufrufen, um eine Verschlüsselung durchzuführen.
| Beschreibung | Bindet an die EP11-Funktion m_EncryptInit, die eine Implementierung der PKCS #11-Funktion C_EncryptInit ist. |
|
|---|---|---|
| Parameter |
message EncryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message EncryptInitResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Das BLOB Bei Mechanismen mit öffentlichem Schlüssel muss Bei Mechanismen für geheime Schlüssel übernimmt der Verschlüsselungsstatus die Einschränkungen für die Objektsitzung aus Das BLOB
|
|---|---|
| Parameter |
CK_RV m_EncryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_EncryptInit. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Nach dem Anwendungsaufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Rückgabewerte | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") EncryptInitRequest := &pb.EncryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } EncryptInitResponse, err := cryptoClient.EncryptInit(context.Background(), EncryptInitRequest) -
JavaScript-Code-Snippet
client.EncryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Verschlüsseln
Die Funktion Encrypt verschlüsselt einteilige Daten. Für eine einteilige Verschlüsselung brauchen die Teiloperationen EncryptUpdate und EncryptFinal nicht ausgeführt zu werden. Bevor Sie diese Funktion
aufrufen, stellen Sie sicher, dass zuerst EncryptInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_Encrypt, die eine Implementierung der PKCS #11-Funktion C_Encrypt ist. |
|
|---|---|---|
| Parameter |
message EncryptRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptResponse {
bytes Ciphered = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_Encrypt (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Encrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verschlüsselungsoperation muss mit
Bei einigen Verschlüsselungsmechanismen haben die eingegebenen Klartextdaten bestimmte Längenbeschränkungen (entweder weil der Mechanismus nur relativ kurze Klartextteile verschlüsseln kann oder weil die Eingabedaten des Mechanismus
aus einer ganzzahligen Anzahl von Blöcken bestehen müssen). Wenn diese Bedingungen nicht erfüllt sind, schlägt Der Klartext und der verschlüsselte Text können sich an derselben Position befinden, d. h., es ist OK, wenn Bei den meisten Mechanismen ist |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_Encrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pEncryptedData,
CK_ULONG_PTR pulEncryptedDataLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID |
Code-Snippets
-
Golang-Code-Snippet
plainText := "Encrypt this message" EncryptRequest := &pb.EncryptRequest { State: EncryptInitResponse.State, Plain: plainText, } EncryptResponse, err := cryptoClient.Encrypt(context.Background(), EncryptRequest) -
JavaScript-Code-Snippet
client.Encrypt({ State: state, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
EncryptUpdate
Die Funktion EncryptUpdate setzt eine mehrteilige Verschlüsselungsoperation fort. Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass zuerst EncryptInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_EncryptUpdate, die eine Implementierung der PKCS #11-Funktion C_EncryptUpdate ist. |
|
|---|---|---|
| Parameter |
message EncryptUpdateRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptUpdateResponse {
bytes State = 1;
bytes Ciphered = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_EncryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_EncryptUpdate. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verschlüsselungsoperation muss mit
|
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG_PTR pulEncryptedPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
plainText := ` This is a very long message that needs to be encrypted by performing multiple EncrypytUpdate functions` // Use EncryptUpdate if you would like to breakup // the encrypt operation into multiple suboperations EncryptUpdateRequest1 := &pb.EncryptUpdateRequest { State: EncryptInitResponse.State, Plain: plainText[:20], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest1) ciphertext := EncryptUpdateResponse.Ciphered[:] EncryptUpdateRequest2 := &pb.EncryptUpdateRequest { State: EncryptUpdateResponse.State, Plain: plainText[20:], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest2) ciphertext = append(ciphertext, EncryptUpdateResponse.Ciphered...) -
JavaScript-Code-Snippet
client.EncryptUpdate({ State: state, Plain: Buffer.from(message.substr(20)) }, (err, data={}) => { cb(err, data.State, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptFinal
Die Funktion EncryptFinal beendet eine mehrteilige Verschlüsselungsoperation.
| Beschreibung | Bindet an die EP11-Funktion m_EncryptFinal, die eine Implementierung der PKCS #11-Funktion C_EncryptFinal ist. |
|
|---|---|---|
| Parameter |
message EncryptFinalRequest {
bytes State = 1;
}
message EncryptFinalResponse {
bytes Ciphered = 2;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_EncryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_EncryptFinal. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verschlüsselungsoperation muss mit Bei einigen mehrteiligen Verschlüsselungsmechanismen gelten für die Klartexteingabedaten bestimmte Längenbeschränkungen, da die Eingabedaten des Mechanismus aus einer ganzzahligen Anzahl von Blöcken bestehen müssen. Wenn diese Bedingungen
nicht beachtet werden, schlägt |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastEncryptedPart,
CK_ULONG_PTR pulLastEncryptedPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
EncryptFinalRequest := &pb.EncryptFinalRequest { State: EncryptUpdateResponse.State, } EncryptFinalResponse, err := cryptoClient.EncryptFinal(context.Background(), EncryptFinalRequest) -
JavaScript-Code-Snippet
client.EncryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptSingle
Die Funktion EncryptSingle verarbeitet Daten in einem Durchgang mit einem Aufruf. Es gibt keinen Status an den Host zurück, nur die verschlüsselten Daten. Diese Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation
und stellt eine Kombination aus den Funktionen EncryptInit und Encrypt dar. Sie ermöglicht Ihnen die Durchführung einer Verschlüsselungsoperation durch nur einen Aufruf anstatt durch eine Reihe von Aufrufen.
| Beschreibung | Bindet an die EP11-Funktion m_EncryptSingle. |
|
|---|---|---|
| Parameter |
message EncryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Plain = 3;
}
message EncryptSingleResponse {
bytes Ciphered = 4;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Variante von Das ist die bevorzugte Methode zur Verschlüsselung von Daten in einem Durchgang für XCP-sensitive Anwendungen. Sie ist funktional äquivalent zu Wenn das Back-End residente Schlüssel unterstützt, kann es sich bei dem Schlüssel auch um eine Kennung mit residenten Schlüsseln handeln. Siehe auch: Das BLOB |
|---|---|
| Parameter |
CK_RV m_EncryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Encrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") plainText := "Encrypt this message" EncryptSingleRequest := &pb.EncryptSingleRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, Plain: plainText, } EncryptSingleResponse, err := cryptoClient.EncryptSingle(context.Background(), EncryptSingleRequest) -
JavaScript-Code-Snippet
client.EncryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: aliceDerived.NewKey, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
ReencryptSingle
Mit der Funktion ReencryptSingle können Sie Daten mit dem ursprünglichen Schlüssel entschlüsseln und anschließend die Rohdaten mit einem anderen Schlüssel in einem einzigen Aufruf innerhalb des Cloud-HSM verschlüsseln. Die für
diese Operation verwendeten Schlüsseltypen können identisch oder unterschiedlich sein. Diese Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation. Dieser einzelne Aufruf ist eine praktikable Option, wenn eine große Datenmenge
mit verschiedenen Schlüsseln erneut verschlüsselt werden muss. So lässt sich vermeiden, eine Kombination aus den Funktionen DecryptSingle und EncryptSingle für jedes Datenelement auszuführen, das erneut verschlüsselt
werden muss. Es gibt keinen Status an den Host zurück, nur die erneut verschlüsselten Daten.
| Beschreibung | Bindet an EP11 m_ReencryptSingle. |
|
|---|---|---|
| Parameter |
message ReencryptSingleRequest {
bytes DecKey = 1;
bytes EncKey = 2;
Mechanism DecMech = 3;
Mechanism EncMech = 4;
bytes Ciphered = 5;
}
message ReencryptSingleResponse {
bytes Reciphered = 6;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Variante von Entschlüsselt Daten mit dem Originalschlüssel und verschlüsselt dann die Rohdaten mit einem anderen Schlüssel innerhalb des Cloud-HSM. |
|---|---|
| Parameter |
CK_RV m_ReencryptSingle (
const unsigned char * dkey, size_t dkeylen,
const ohne Vorzeichen char * ekey, size_t ekeylen,
CK_MECHANISM_PTR decmech,
CK_MECHANISM_PTR encmech,
CK_BYTE_PTR in, CK_ULONG inlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Encrypt und C_Decrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
var msg = []byte("Data to encrypt") EncryptKey1Request := &pb.EncryptSingleRequest{ Key: GenerateKey1Response.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Plain: msg, } EncryptKey1Response, err := cryptoClient.EncryptSingle(context.Background(), EncryptKey1Request) if err != nil { return nil, fmt.Errorf("Encrypt error: %s", err) } ReencryptSingleRequest := &pb.ReencryptSingleRequest{ DecKey: GenerateKey1Response.KeyBytes, // original key EncKey: GenerateKey2Response.KeyBytes, // new key DecMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, EncMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: RencryptKey1Response.Ciphered, } ReencryptSingleResponse, err := cryptoClient.ReencryptSingle(context.Background(), ReencryptSingleRequest) -
JavaScript-Code-Snippet
client.ReencryptSingle({ Decmech: { Mechanism: mech1, ParameterB: iv }, Encmech: { Mechanism: mech2, ParameterB: iv }, In: encipherState.Ciphered, DKey: keyBlob1, Ekey: keyBlob2, }, (err, response) => { callback(err, response); });
DecryptInit
Die Funktion DecryptInit initialisiert eine Entschlüsselungsoperation. Sie müssen als Erstes diese Funktion aufrufen, um eine Entschlüsselung durchzuführen.
| Beschreibung | Bindet an die EP11-Funktion m_DecryptInit, die eine Implementierung der PKCS #11-Funktion C_DecryptInit ist. |
|
|---|---|---|
| Parameter |
message DecryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message DecryptInitResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung | Implementierung der PKCS #11-Funktion C_DecryptInit.
|
|---|---|
| Parameter |
CK_RV m_DecryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DecryptInit. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Nachdem die Anwendung |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(
K_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptInitRequest := &pb.DecryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } DecryptInitResponse, err := cryptoClient.DecryptInit(context.Background(), DecryptInitRequest) -
JavaScript-Code-Snippet
client.DecryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Entschlüsseln
Die Funktion Decrypt entschlüsselt Daten in einem einzelnen Teil. Für eine einteilige Verschlüsselung brauchen die Teiloperationen DecryptUpdate und DecryptFinal nicht ausgeführt zu werden. Bevor Sie
diese Funktion aufrufen, stellen Sie sicher, dass zuerst DecryptInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_Decrypt, die eine Implementierung der PKCS #11-Funktion C_Decrypt ist. |
|
|---|---|---|
| Parameter |
message DecryptRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptResponse {
bytes Plain = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung von PKCS #11 Das große Binärobjekt (BLOB) "state, slen" muss aus dem PKCS #11-Parameter |
|---|---|
| Parameter |
CK_RV m_Decrypt (const unsigned char *state, size_t slen,
CK_BYTE_PTR cipher, CK_ULONG clen,
CK_BYTE_PTR plain, CK_ULONG_PTR plen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Decrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Entschlüsselungsoperation muss mit
Der verschlüsselte Text und der einfache Text können sich an derselben Stelle befinden. Dies bedeutet, dass es zulässig ist, wenn pEncryptedData und pData auf dieselbe Position verweisen. Wenn die eingegebenen verschlüsselten Textdaten nicht entschlüsselt werden können, weil sie eine unzulässige Länge aufweisen, kann |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_Decrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedData,
CK_ULONG ulEncryptedDataLen,
CK_BYTE_PTR pData,
CK_ULONG_PTR pulDataLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
DecryptRequest := &pb.DecryptRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext, // encrypted data from a previous encrypt operation } DecryptResponse, err := cryptoClient.Decrypt(context.Background(), DecryptRequest) -
JavaScript-Code-Snippet
client.Decrypt({ State: state, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
DecryptUpdate
Die Funktion DecryptUpdate setzt eine mehrteilige Entschlüsselungsoperation fort. Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass zuerst DecryptInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_DecryptUpdate, die eine Implementierung der PKCS #11-Funktion C_DecryptUpdate ist. |
|
|---|---|---|
| Parameter |
message DecryptUpdateRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptUpdateResponse {
bytes State = 1;
bytes Plain = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_DecryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DecryptUpdate. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verschlüsselungsoperation muss mit Der verschlüsselte Text und der einfache Text können sich an derselben Stelle befinden, d. h., es ist OK, wenn |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG ulEncryptedPartLen,
CK_BYTE_PTR pPart,
CK_ULONG_PTR pulPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Use DecryptUpdate if you would like to breakup // the decrypt operation into multiple suboperations DecryptUpdateRequest1 := &pb.DecryptUpdateRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext[:16], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest1) plaintext := DecryptUpdateResponse.Plain[:] DecryptUpdateRequest2 := &pb.DecryptUpdateRequest{ State: DecryptUpdateResponse.State, Ciphered: ciphertext[16:], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest2) plaintext = append(plaintext, DecryptUpdateResponse.Plain...) -
JavaScript-Code-Snippet
client.DecryptUpdate({ State: state, Ciphered: ciphertext.slice(0, 16) }, (err, data={}) => { cb(err, data.State, data.Plain); });
DecryptFinal
Die Funktion DecryptFinal beendet eine mehrteilige Entschlüsselungsoperation.
| Beschreibung | Bindet an die EP11-Funktion m_DecryptFinal, die eine Implementierung der PKCS #11-Funktion C_DecryptFinal ist. |
|
|---|---|---|
| Parameter |
message DecryptFinalRequest {
bytes State = 1;
}
message DecryptFinalResponse {
bytes Plain = 2;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_DecryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DecryptFinal. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verschlüsselungsoperation muss mit Wenn die eingegebenen verschlüsselten Textdaten nicht entschlüsselt werden können, weil sie eine unzulässige Länge aufweisen, kann |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastPart,
CK_ULONG_PTR pulLastPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
DecryptFinalRequest := &pb.DecryptFinalRequest { State: DecrypUpdateResponse.State, } DecryptFinalResponse, err := cryptoClient.DecryptFinal(context.Background(), DecryptFinalRequest) -
JavaScript-Code-Snippet
client.DecryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([plaintext, data.Plain])); });
DecryptSingle
Die Funktion DecryptSingle verarbeitet Daten in einem Durchgang mit einem Aufruf. Es gibt keinen Status an den Host zurück, nur die entschlüsselten Daten. Diese Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation
und stellt eine Kombination aus den Funktionen DecryptInit und Decrypt dar. Sie ermöglicht Ihnen die Durchführung einer Entschlüsselungsoperation durch nur einen Aufruf anstatt durch eine Reihe von Aufrufen.
| Beschreibung | Bindet an EP11 m_DecryptSingle. |
|
|---|---|---|
| Parameter |
message DecryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Ciphered = 3;
}
message DecryptSingleResponse {
bytes Plain = 4;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Variante von Das ist die bevorzugte Methode zur Verschlüsselung von Daten in einem Durchgang für XCP-sensitive Anwendungen. Sie ist funktional äquivalent zu Wenn das Back-End residente Schlüssel unterstützt, kann es sich bei dem Schlüssel auch um eine Kennung mit residenten Schlüsseln handeln. Siehe auch: Das BLOB |
|---|---|
| Parameter |
CK_RV m_DecryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Decrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptSingleRequest := &pb.DecryptSingleRequest { Key: GenerateKeyResponse.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: EncryptSingleResponse.Ciphered, // encrypted data from a previous encrypt operation } DecryptSingleResponse, err := cryptoClient.DecryptSingle(context.Background(), DecryptSingleRequest) -
JavaScript-Code-Snippet
client.DecryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: bobDerived.NewKey, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
Daten signieren und prüfen
GREP11 stellt eine Gruppe von Funktionen bereit, mit denen Daten signiert sowie Signaturen oder Nachrichtenauthentifizierungscodes (MACs - Message Authentication Codes) geprüft werden können. Möglicherweise müssen Sie eine Reihe von Unterfunktionen
aufrufen, um eine Signieroperation auszuführen. Zum Beispiel setzt sich die mehrteilige Datensignaturoperation aus den Teiloperationen SignInit, SignUpdate und SignFinal zusammen.
SignInit
Die Funktion SignInit initialisiert eine Signaturoperation. Sie müssen als Erstes diese Funktion aufrufen, um eine Signaturoperation durchzuführen.
| Beschreibung | Stellt eine Bindung zu EP11 m_SignInit her, einer Implementierung von PKCS #11 C_SignInit. |
|
|---|---|---|
| Parameter |
message SignInitRequest {
Mechanism Mech = 2;
bytes PrivKey = 3;
}
message SignInitResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung | Implementierung der PKCS #11-Funktion C_SignInit.
|
|---|---|
| Parameter |
CK_RV m_SignInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *privKey, size_t privKeylen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Decrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Nach dem Anwendungsaufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
SignInitRequest := &pb.SignInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PrivKey: GenerateKeyPairResponse.PrivKeyBytes, } SignInitResponse, err := cryptoClient.SignInit(context.Background(), SignInitRequest) -
JavaScript-Code-Snippet
client.SignInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PrivKey: keys.PrivKeyBytes }, (err, data={}) => { cb(err, data.State); });
Unterzeichnen
Die Funktion Sign signiert einteilige Daten. Für eine einteilige Signatur Verifizierung brauchen die Teiloperationen SignUpdate und SignFinal nicht ausgeführt zu werden. Bevor Sie diese Funktion aufrufen,
stellen Sie sicher, dass zuerst SignInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_Sign, die eine Implementierung der PKCS #11-Funktion C_Sign ist. |
|
|---|---|---|
| Parameter |
message SignRequest {
bytes State = 1;
bytes Data = 2;
}
message SignResponse {
bytes Signature = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_Sign (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Sign. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Signieroperation muss mit
Bei den meisten Mechanismen ist |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_Sign)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
Code-Snippets
-
Golang-Code-Snippet
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignRequest := &pb.SignRequest{ State: SignInitResponse.State, Data: msgHash[:], } // Sign the data SignResponse, err := cryptoClient.Sign(context.Background(), SignRequest) -
JavaScript-Code-Snippet
client.Sign({ State: state, Data: dataToSign }, (err, data={}) => { cb(err, data.Signature); });
SignUpdate
Die Funktion SignUpdate setzt eine mehrteilige Signaturoperation fort. Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass zuerst SignInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_SignUpdate, die eine Implementierung der PKCS #11-Funktion C_SignUpdate ist. |
|
|---|---|---|
| Parameter |
message SignUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message SignUpdateResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion C_SignUpdate.
Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_SignUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_SignUpdate. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Signaturoperation muss mit |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
// Use SignUpdate if you would like to breakup // the sign operation into multiple suboperations SignUpdateRequest1 := &pb.SignUpdateRequest { State: SignInitResponse.State, Data: msgHash[:16], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest1) SignUpdateRequest2 := &pb.SignUpdateRequest { State: SignUpdateResponse.State, Data: msgHash[16:], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest2) -
JavaScript-Code-Snippet
client.SignUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
SignFinal
Die Funktion SignFinal beendet eine mehrteilige Signaturoperation.
| Beschreibung | Bindet an die EP11-Funktion m_SignFinal, die eine Implementierung der PKCS #11-Funktion C_SignFinal ist. |
|
|---|---|---|
| Parameter |
message SignFinalRequest {
bytes State = 1;
}
message SignFinalResponse {
bytes Signature = 2;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_SignFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_SignFinal. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Signieroperation muss mit |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
Code-Snippets
-
Golang-Code-Snippet
SignFinalRequest := &pb.SignFinalRequest { State: SignUpdateResponse.State, } SignFinalResponse, err := cryptoClient.SignFinal(context.Background(), SignFinalRequest) -
JavaScript-Code-Snippet
client.SignFinal({ State: state }, (err, response) => { callback(err, response); });
SignSingle
Die Funktion SignSingle signiert Daten oder verarbeitet sie mit MAC in einem Durchgang mit einem Aufruf, ohne einen temporären Digest-Status aufzubauen. Es gibt keinen Status für den Host zurück, sondern nur das Ergebnis. Diese
Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation und stellt eine Kombination aus den Funktionen SignInit und Sign dar. Sie ermöglicht Ihnen die Durchführung einer Signaturoperation durch
nur einen Aufruf anstatt durch eine Reihe von Aufrufen.
| Beschreibung | Bindet an EP11 m_SignSingle. |
|
|---|---|---|
| Parameter |
message SignSingleRequest {
bytes PrivKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
}
message SignSingleResponse {
bytes Signature = 4;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Erweiterung, Kombination von Dies ist die bevorzugte Art der Signierung, ohne einen zusätzlichen Umlauf und ohne zusätzliche Verschlüsselung und Entschlüsselung. Funktional ist Das BLOB Mehrdatenanforderungen für HMAC- und CMAC-Signaturen werden unterstützt (Untervarianten 2 und 3). Siehe auch: |
|---|---|
| Parameter |
CK_RV m_SignSingle (
const unsigned char *privKey, size_t privKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Decrypt. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignSingleRequest := &pb.SignSingleRequest { PrivKey: GenerateKeyPairResponse.PrivKeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], } SignSingleResponse, err := cryptoClient.SignSingle(context.Background(), SignSingleRequest) -
JavaScript-Code-Snippet
client.SignSingle({ Mech: { Mechanism: ep11.CKM_ECDSA }, PrivKey: key, Data: digest }, (err, response) => { callback(err, response); });
VerifyInit
Die Funktion VerifyInit initialisiert eine Verifizierungsoperation. Sie müssen als Erstes diese Funktion aufrufen, um eine Signatur zu verifizieren.
| Beschreibung | Bindet an die EP11-Funktion m_VerifyInit, die eine Implementierung der PKCS #11-Funktion C_VerifyInit ist. |
|
|---|---|---|
| Parameter |
message VerifyInitRequest {
Mechanism Mech = 2;
bytes PubKey = 3;
}
message VerifyInitResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Bei Mechanismen mit öffentlichem Schlüssel muss Bei der Initialisierung einer HMAC-Operation werden Sitzungseinschränkungen des Objekts Das BLOB Hinweis: |
|---|---|
| Parameter |
CK_RV m_VerifyInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *pubKey, size_t pubKeylen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_VerifyInit. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Das Attribut Nach dem Anwendungsaufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
VerifyInitRequest := &pb.VerifyInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PubKey: GenerateKeyPairResponse.PubKeyBytes, } VerifyInitResponse, err := cryptoClient.VerifyInit(context.Background(), VerifyInitRequest) -
JavaScript-Code-Snippet
client.VerifyInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PubKey: keys.PubKeyBytes }, (err, data={}) => { cb(err, signature, data.State); });
Verify
Die Funktion Verify verifiziert eine Signatur für einteilige Daten. Für eine einteilige Verifizierung brauchen die Teiloperationen VerifyUpdate und VerifyFinal nicht ausgeführt zu werden. Bevor Sie diese
Funktion aufrufen, stellen Sie sicher, dass zuerst VerifyInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_Verify, die eine Implementierung der PKCS #11-Funktion C_Verify ist. |
|
|---|---|---|
| Parameter |
message VerifyRequest {
bytes State = 1;
bytes Data = 2;
bytes Signature = 3;
}
message VerifyResponse {
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Die relative Reihenfolge von Daten und Signatur ist umgekehrt. in Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_Verify (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Verify. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verifizierungsoperation muss mit Ein erfolgreicher Aufruf von
Bei den meisten Mechanismen ist |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_Verify)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
Code-Snippets
-
Golang-Code-Snippet
VerifyRequest := &pb.VerifyRequest { State: VerifyInitResponse.State, Data: msgHash[:], Signature: SignResponse.Signature, } VerifyResponse, err := cryptoClient.Verify(context.Background(), VerifyRequest) -
JavaScript-Code-Snippet
client.Verify({ State: state, Data: dataToSign, Signature: signature }, (err, data={}) => { cb(err, signature); });
VerifyUpdate
Die Funktion VerifyUpdate setzt eine mehrteilige Verifizierungsoperation fort. Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass zuerst VerifyInit ausgeführt wird.
| Beschreibung | Bindet an die EP11-Funktion m_VerifyUpdate, die eine Implementierung der PKCS #11-Funktion C_VerifyUpdate ist. |
|
|---|---|---|
| Parameter |
message VerifyUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message VerifyUpdateResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_VerifyUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_VerifyUpdate. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verifizierungsoperation muss mit |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
// Use VerifyUpdate if you would like to breakup // the verify operation into multiple suboperations VerifyUpdateRequest1 := &pb.VerifyUpdateRequest { State: VerifyInitResponse.State, Data: msgHash[:16], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest1) VerifyUpdateRequest2 := &pb.VerifyUpdateRequest { State: VerifyUpdateResponse.State, Data: msgHash[16:], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest2) -
JavaScript-Code-Snippet
client.VerifyUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
VerifyFinal
Die Funktion VerifyFinal beendet eine mehrteilige Verifizierungsoperation.
| Beschreibung | Bindet an die EP11-Funktion m_VerifyFinal, die eine Implementierung der PKCS #11-Funktion C_VerifyFinal ist. |
|
|---|---|---|
| Parameter |
message VerifyFinalRequest {
bytes State = 1;
bytes Signature = 2;
}
message VerifyFinalResponse {
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_VerifyFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_VerifyFinal. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Verifizierungsoperation muss mit Ein erfolgreicher Aufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
Code-Snippets
-
Golang-Code-Snippet
VerifyFinalRequest := &pb.VerifyFinalRequest { State: VerifyUpdateResponse.State, Signature: SignResponse.Signature, } VerifyFinalResponse, err := cryptoClient.VerifyFinal(context.Background(), VerifyFinalRequest) -
JavaScript-Code-Snippet
client.VerifyFinal({ State: state, Signature: signature }, (err, response) => { callback(err, response); });
VerifySingle
Die Funktion VerifySingle signiert Daten oder verarbeitet sie mit MAC in einem Durchgang mit einem Aufruf, ohne einen temporären Digest-Status aufzubauen. Es gibt keinen Status für den Host zurück, sondern nur das Verifizierungsergebnis.
Diese Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation und stellt eine Kombination aus den Funktionen VerifyInit und Verify dar. Sie ermöglicht Ihnen die Durchführung einer Verifizierungsoperation
durch nur einen Aufruf anstatt durch eine Reihe von Aufrufen.
| Beschreibung | Bindet an EP11 m_VerifySingle. |
|
|---|---|---|
| Parameter |
message VerifySingleRequest {
bytes PubKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
bytes Signature = 4;
}
message VerifySingleResponse {
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Erweiterung, Kombination von Dies ist die bevorzugte Art der Signaturprüfung, ohne einen zusätzlichen Umlauf und ohne zusätzliche Verschlüsselung und Entschlüsselung. Funktional ist Das BLOB Bei Mechanismen mit öffentlichem Schlüssel muss Siehe auch: |
|---|---|
| Parameter |
CK_RV m_VerifySingle (
const unsigned char *pubKey, size_t pubKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_VerifySingle. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
VerifySingleRequest := &pb.VerifySingleRequest { PubKey: GenerateKeyPairResponse.PubKeyByytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], Signature: SignSingleResponse.Signature, } VerifySingleResponse, err := cryptoClient.VerifySingle(context.Background(), VerifySingleRequest) -
JavaScript-Code-Snippet
client.VerifySingle({ Mech: { Mechanism: ep11.CKM_SHA256_RSA_PKCS }, PubKey: keys.PubKey, Data: digest, Signature: signature }, (err, response) => { callback(err, response); });
Datenintegrität durch Message-Digests schützen
GREP11 stellt eine Gruppe von Funktionen bereit, mit denen Message-Digests erstellt werden können, die dazu konzipiert sind, die Integrität einer Dateninformation zu schützen. Möglicherweise müssen Sie eine Reihe von Unterfunktionen aufrufen,
um eine Digest-Operation auszuführen. Zum Beispiel setzt sich die mehrteilige Digest-Operation aus den Teiloperationen DigestInit, DigestUpdate und DigestFinal zusammen.
DigestInit
Die Funktion DigestInit initialisiert eine Message-Digest-Operation. Sie müssen als Erstes diese Funktion ausführen, um eine Digest-Operation durchzuführen.
| Beschreibung | Bindet an die EP11-Funktion m_DigestInit, die eine Implementierung der PKCS #11-Funktion C_DigestInit ist. |
|
|---|---|---|
| Parameter |
message DigestInitRequest {
Mechanism Mech = 2;
}
message DigestInitResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Erstellt einen Digest-Status mit Wrapping. Hinweis: Größenabfragen werden unterstützt, aber im Gegensatz zu den meisten Größenabfragen (die anstelle der tatsächlichen Ausgabe eine Ausgabegröße zurückgeben) wird der Wrappingstatus immer vom Back-End zurückgegeben.
Bei Größenabfragen verwirft der Host nur den zurückgegebenen Status und meldet die BLOB-Größe (in Das BLOB |
|---|---|
| Parameter |
CK_RV m_DigestInit (
unsigned char * state, size_t * len,
const CK_MECHANISM_PTR mech,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DigestInit. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Nach dem Anwendungsaufruf von |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DigestInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
Code-Snippets
-
Golang-Code-Snippet
DigestInitRequest := &pb.DigestInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, } DigestInitResponse, err := cryptoClient.DigestInit(context.Background(), DigestInitRequest) -
JavaScript-Code-Snippet
client.DigestInit({ Mech: { Mechanism: ep11.CKM_SHA256 } }, (err, response) => { callback(err, response); });
Digest
Die Funktion Digest verarbeitet einteilige Daten. Für eine Digest-Operation für einteilige Daten brauchen Sie die Funktionen DigestUpdate und DigestFinal nicht aufzurufen. Bevor Sie diese Funktion aufrufen,
stellen Sie sicher, dass zuerst DigestInit ausgeführt wird. Achten Sie beim Festlegen von Parametern darauf, die Länge der Eingabedaten nicht auf null zu setzen und den Zeiger, der auf die Position der Eingabedaten verweist,
nicht auf NULL zu setzen.
| Beschreibung | Bindet an die EP11-Funktion m_Digest, die eine Implementierung der PKCS #11-Funktion C_Digest ist. |
|
|---|---|---|
| Parameter |
message DigestRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestResponse {
bytes Digest = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion Wenn ein Digest-Objekt genau 0 (null) Bytes hat, die nach der Erstellung in einer beliebigen Kombination von Null-Byte-Übertragungen angehängt werden, kann es trotzdem einen One-Pass-Digest durchführen, auch wenn es von einer strikten Implementierung zurückgewiesen werden muss. Aktualisiert Implementierungen können
Das BLOB |
|---|---|
| Parameter |
CK_RV m_Digest (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_Digest. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Digest-Operation muss mit
Die Eingabedaten und die Digest-Ausgabe können sich an derselben Position befinden, d. h., es ist zulässig, wenn pData und pDigest auf dieselbe Position verweisen.
|
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_Digest)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
digestData := []byte("Create a digest for this string") DigestRequest := &pb.DigestRequest { State: DigestInitResponse.State, Data: digestData, } DigestResponse, err := cryptoClient.Digest(context.Background(), DigestRequest) -
JavaScript-Code-Snippet
client.Digest({ State: state, Data: Buffer.from(digestData) }, (err, data={}) => { cb(err, data.Digest); }); }
DigestUpdate
Die Funktion DigestUpdate setzt eine mehrteilige Digest-Operation fort. Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass zuerst DigestInit ausgeführt wird. Achten Sie beim Festlegen von Parametern darauf,
die Länge der Eingabedaten nicht auf null zu setzen und den Zeiger, der auf die Position der Eingabedaten verweist, nicht auf NULL zu setzen.
| Beschreibung | Bindet an die EP11-Funktion m_DigestUpdate, die eine Implementierung der PKCS #11-Funktion C_DigestUpdate ist. |
|
|---|---|---|
| Parameter |
message DigestUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestUpdateResponse {
bytes State = 1;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion
Das BLOB Das BLOB Siehe auch: |
|---|---|
| Parameter |
CK_RV m_DigestUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DigestUpdate. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Message-Digest-Operation muss mit |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DigestUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
// Use DigestUpdate if you would like to breakup // the digest operation into multiple suboperations DigestUpdateRequest1 := &pb.DigestUpdateRequest { State: DigestInitResponse.State, Data: digestData[:16], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest1) DigestUpdateRequest2 := &pb.DigestUpdateRequest { State: DigestUpdateResponse.State, Data: digestData[16:], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest2) -
JavaScript-Code-Snippet
client.DigestUpdate({ State: state, Data: Buffer.from(digestData.substr(0, 64)) }, (err, data={}) => { cb(err, data.State); });
DigestFinal
Die Funktion DigestFinal beendet eine mehrteilige Digest-Operation.
| Beschreibung | Bindet an die EP11-Funktion m_DigestFinal, die eine Implementierung der PKCS #11-Funktion C_DigestFinal ist. |
|
|---|---|---|
| Parameter |
message DigestFinalRequest {
bytes State = 1;
}
message DigestFinalResponse {
bytes Digest = 2;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Implementierung der PKCS #11-Funktion
Aktualisiert Das BLOB Das BLOB |
|---|---|
| Parameter |
CK_RV m_DigestFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DigestFinal. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
| Beschreibung |
Die Digest-Operation muss mit |
|---|---|
| Parameter |
CK_DEFINE_FUNCTION(CK_RV, C_DigestFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Rückgabewerte | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
Code-Snippets
-
Golang-Code-Snippet
DigestFinalRequest := &pb.DigestFinalRequest { State: DigestUpdateResponse.State, } DigestFinalResponse, err := cryptoClient.DigestFinal(context.Background(), DigestFinalRequest) -
JavaScript-Code-Snippet
client.DigestFinal({ State: state }, (err, response) => { callback(err, response); });
DigestSingle
Die Funktion DigestSingle verarbeitet Daten in einem Durchgang mit einem Aufruf, ohne einen temporären Digest-Status und unnötige Umläufe aufzubauen. Diese Funktion ist eine IBM EP11-Erweiterung zur PKCS #11-Standardspezifikation
und stellt eine Kombination aus den Funktionen DigestInit und Digest dar. Sie ermöglicht Ihnen die Durchführung einer Digest-Operation durch nur einen Aufruf anstatt durch eine Reihe von Aufrufen.
| Beschreibung | Bindet an EP11 m_DigestSingle. |
|
|---|---|---|
| Parameter |
message DigestSingleRequest {
Mechanism Mech = 1;
bytes Data = 2;
}
message DigestSingleResponse {
bytes Digest = 3;
}
|
|
| Rückgabewerte | Führt ein Wrapping des EP11-Fehlers in die Nachricht Grep11Error durch. |
| Beschreibung |
Vom Standard abweichende Erweiterung, Kombination von Das ist die bevorzugte Methode für Digest-Operationen mit Klartext für XCP-sensitive Anwendungen. Funktional ist Wenn ein Schlüssel verarbeitet werden muss, müssen Gibt keinen Status an den Host zurück, nur das Ergebnis der Digest-Operation. Es gibt keine anderen Parameter als PKCS #11-Parameter, da alles direkt aus dem PKCS #11-Aufruf verwendet wird. |
|---|---|
| Parameter |
CK_RV m_DigestSingle (
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
Ziel 'target_t'
);
|
| Rückgabewerte | Eine Untergruppe der Rückgabewerte von C_DigestSingle. Weitere Informationen finden Sie im Kapitel Rückgabewerte im Dokument zur Enterprise PKCS #11 (EP11)-Bibliotheksstruktur. |
Code-Snippets
-
Golang-Code-Snippet
digestData := []byte("Create a digest for this string") DigestSingleRequest := &pb.DigestSingleRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, Data: digestData, } DigestSingleResponse, err := cryptoClient.DigestSingle(context.Background(), DigestSingleRequest) -
JavaScript-Code-Snippet
client.DigestSingle({ Mech: { Mechanism: ep11.CKM_SHA256 }, Data: Buffer.from(digestData) }, (err, response) => { callback(err, response); });
Codebeispiele
GREP11-API unterstützt Programmiersprachen mit gRPC-Bibliotheken. Zum Testen der GREP11-API stehen zwei GitHub-Beispielrepositorys zur Verfügung: