Operações criptográficas: API GREP11
IBM Cloud® Hyper Protect Crypto Services fornece um conjunto de funções de criptografia que são executadas em um Hardware Security Module(HSM)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. na nuvem. É possível executar operações criptográficas acessando remotamente essas funções com as chamadas da API do Enterprise PKCS #11 (EP11) sobre gRPC (também referidas como GREP11).
Para obter mais informações sobre como as funções do GREP11 estão relacionadas ao PKCS #11 e ao EP11, consulte Introdução ao GREP11.
A API GREP11 pode processar até 500 solicitações / segundo para uma única unidade criptográfica
Acessando a API
Um terminal de API GREP11, uma chave de API de ID de serviço e um terminal do IAM são necessários para a inicialização antes de você executar quaisquer chamadas de função da API GREP11 Para obter mais informações, consulte Gerando uma solicitação de API do GREP11.
Manipulação de erros
GREP11 conta com a especificação gRPC para manipulação de erro Quando ocorre um erro, os clientes do gRPC recebem um message Status buffer de protocolo
message Status {
int32 code = 1;
string message = 2;
repeated google.protobuf.Any details = 3;
}
Na mensagem de erro,
codeinclui o código de status, que precisa ser um valor do tipo enumerado (enumeração) do campogoogle.rpc.Code.messageinclui uma mensagem de erro voltada ao desenvolvedor em inglês. Qualquer mensagem de erro direcionada ao usuário precisa ser localizada e enviada no campogoogle.rpc.Status.detailsou localizada pelo usuário.detailslista mensagens que transportam os detalhes do erro. Um conjunto comum de tipos de mensagens está disponível para ser usado pela API.
O GREP11 usa o campo Detail para anexar informações de código de erro adicionais.
message Grep11Error {
uint64 Code = 1;
string Detail = 2;
bool Retry = 3;
}
O campo Code pode ser convertido para o valor CK_RV em PKCS #11. Esse campo contém os códigos de erros definidos pela especificação PKCS #11 ou as extensões do fornecedor definidas por EP11. O EP11 usa somente um subconjunto de valores de retorno que o PKCS #11 define. Para obter mais informações, consulte a seção 10.1.6 Valores de retorno na Estrutura de biblioteca do Enterprise PKCS n° 11.
Um exemplo em Golang que lida com erros está disponível..
Lista de funções do GREP11
As funções PKCS #11 que são marcadas com um asterisco (*) na tabela são implementadas por EP11 sobre o gRPC. Outras não são implementadas.
| PKCS nº 11 | Enterprise PKCS #11 | Enterprise PKCS #11 sobre gRPC | Descrição |
|---|---|---|---|
| C_Initialize | N/A | N/A | Inicializa Cryptoki. |
| C_Finalize | N/A | N/A | Limpa recursos variados associados do Cryptoki. |
| C_GetInfo | N/A | N/A | Obtém informações gerais sobre Cryptoki. |
| C_GetFunctionList | N/A | N/A | Obtém pontos de entrada de funções de biblioteca do Cryptoki. |
| C_GetSlotList | N/A | N/A | Obtém uma lista de intervalos no sistema. |
| C_GetSlotInfo | N/A | N/A | Obtém informações sobre um intervalo específico. |
| C_GetTokenInfo | N/A | N/A | Obtém informações sobre um token específico. |
| C_WaitForSlotEvent | N/A | N/A | Aguarda um evento de slot (inserção de token, remoção de token e assim por diante) ocorrer. |
| C_GetMechanismList* | m_GetMechanismList | GetMechanismList | Obtém uma lista de mecanismos suportados por um token. |
| C_GetMechanismInfo* | m_GetMechanismInfo | GetMechanismInfo | Obtém informações sobre um mecanismo específico. |
| C_InitToken | N/A | N/A | Inicializa um token. |
| C_InitPIN | N/A | N/A | Inicializa o PIN do usuário normal. |
| C_SetPIN | N/A | N/A | Modifica o PIN do usuário atual. |
| C_OpenSession | N/A | N/A | Abre uma conexão entre um aplicativo e um token específico ou configura um retorno de chamada de aplicativo para inserção de token. |
| C_CloseSession | N/A | N/A | Fecha uma sessão. |
| C_CloseAllSessions | N/A | N/A | Fecha todas as sessões com um token. |
| C_GetSessionInfo | N/A | N/A | Obtém informações sobre a sessão. |
| C_GetOperationState | N/A | N/A | Obtém o estado de operações criptográficas de uma sessão. |
| C_SetOperationState | N/A | N/A | Configura o estado de operações criptográficas de uma sessão. |
| C_Login | N/A | N/A | Efetua login em um token. |
| C_Logout | N/A | N/A | Efetua logout de um token. |
| C_CreateObject | N/A | N/A | Cria um objeto. |
| C_CopyObject | N/A | N/A | Cria uma cópia de um objeto. |
| C_DestroyObject | N/A | N/A | Destrói um objeto. |
| C_GetObjectSize | N/A | N/A | Obtém o tamanho de um objeto em bytes. |
| C_GetAttributeValue* | m_GetAttributeValue | GetAttributeValue | Obtém um valor de atributo de um objeto. |
| C_SetAttributeValue* | m_SetAttributeValue | SetAttributeValue | Modifica um valor de atributo de um objeto. Apenas atributos booleanos podem ser modificados. |
| C_FindObjectsInit | N/A | N/A | Inicializa uma operação de procura de objeto. |
| C_FindObjects | N/A | N/A | Continua uma operação de procura de objeto. |
| C_FindObjectsFinal | N/A | N/A | Conclui uma operação de procura de objeto. |
| C_EncryptInit* | m_EncryptInit | EncryptInit | Inicializa uma operação de criptografia. |
| C_Encrypt* | m_Encrypt | Encrypt | Criptografa dados de parte única. |
| C_EncryptUpdate* | m_EncryptUpdate | EncryptUpdate | Continua uma operação de criptografia de múltiplas partes. |
| C_EncryptFinal* | m_EncryptFinal | EncryptFinal | Conclui uma operação de criptografia de múltiplas partes. |
| N/A | m_EncryptSingle | EncryptSingle | Extensão do IBM, variante não padrão de Encrypt. Processa dados em uma passagem, com uma chamada. Não retorna nenhum estado para hospedar diferente dos dados criptografados. |
| N/A | m_ReencryptSingle | ReencryptSingle | Extensão do IBM, variante não padrão de Encrypt. Decriptografa dados com a chave original e criptografa os dados brutos com uma chave diferente em uma única chamada do HSM em nuvem. Não retorna nenhum estado a ser hospedado,
exceto os dados recriptografados. |
| C_DecryptInit* | m_DecryptInit | DecryptInit | Inicializa uma operação de decriptografia. |
| C_Decrypt* | m_Decrypt | Decrypt | Decriptografa dados criptografados de parte única. |
| C_DecryptUpdate* | m_DecryptUpdate | DecryptUpdate | Continua uma operação de decriptografia de múltiplas partes. |
| C_DecryptFinal* | m_DecryptFinal | DecryptFinal | Conclui uma operação de decriptografia de múltiplas partes. |
| N/A | m_DecryptSingle | DecryptSingle | Extensão do IBM, variante não padrão de Decrypt. Processa dados em uma passagem, com uma chamada. Não retorna nenhum estado para hospedar diferente de dados decriptografados. |
| C_DigestInit* | m_DigestInit | DigestInit | Inicializa uma operação de compilação de mensagem. |
| C_Digest* | m_Digest | Compilação | Compila dados de parte única. O comprimento dos dados de entrada não pode ser zero e o ponteiro que aponta para o local dos dados de entrada não pode ser NULL. |
| C_DigestUpdate* | m_DigestUpdate | DigestUpdate | Continua uma operação de compilação de múltiplas partes. O comprimento dos dados de entrada não pode ser zero e o ponteiro que aponta para o local dos dados de entrada não pode ser NULL. |
| C_DigestKey | N/A | N/A | Compila uma chave. |
| C_DigestFinal* | m_DigestFinal | DigestFinal | Conclui uma operação de compilação de múltiplas partes. |
| N/A | m_DigestSingle | DigestSingle | Extensão IBM, extensão não padrão, combinação de DigestInit e Digest. Compila dados em uma passagem, com uma chamada, sem construir um estado de compilação intermediário e roundtrips desnecessárias |
| C_SignInit* | m_SignInit | SignInit | Inicializa uma operação de assinatura. |
| C_Sign* | m_Sign | Assinar | Assina dados de parte única. |
| C_SignUpdate* | m_SignUpdate | SignUpdate | Continua uma operação de assinatura de múltiplas partes. |
| C_SignFinal* | m_SignFinal | SignFinal | Conclui uma operação de assinatura de múltiplas partes. |
| C_SignRecoverInit | N/A | N/A | Inicializa uma operação de assinatura na qual os dados são recuperados da assinatura. |
| C_SignRecover | N/A | N/A | Assina dados de parte única, nos quais os dados são recuperados da assinatura. |
| N/A | m_SignSingle | SignSingle | Extensão IBM, extensão não padrão, combinação de SignInit e Sign. Assinaturas ou dados de MACs em uma passagem, com uma chamada, sem construir o estado de compilação intermediária. Não retorna nenhum estado para hospedar diferente do resultado. |
| C_VerifyInit* | m_VerifyInit | VerifyInit | Inicializa uma operação de verificação. |
| C_Verify* | m_Verify | Verificar | Verifica uma assinatura em dados de parte única. |
| C_VerifyUpdate* | m_VerifyUpdate | VerifyUpdate | Continua uma operação de verificação de múltiplas partes. |
| C_VerifyFinal* | m_VerifyFinal | VerifyFinal | Conclui uma operação de verificação de múltiplas partes. |
| C_VerifyRecoverInit | N/A | N/A | Inicializa uma operação de verificação na qual os dados são recuperados da assinatura. |
| C_VerifyRecover | N/A | N/A | Verifica uma assinatura em dados de parte única, em que os dados são recuperados da assinatura. |
| N/A | m_VerifySingle | VerifySingle | Extensão IBM, extensão não padrão, combinação de VerifyInit e Verify. Assinaturas ou dados de MACs em uma passagem, com uma chamada, sem construir o estado de compilação intermediária. Não retorna nenhum estado para hospedar diferente do resultado de verificação. |
| C_DigestEncryptUpdate | N/A | N/A | Continua operações simultâneas de criptografia e de compilação de múltiplas partes. |
| C_DecryptDigestUpdate | N/A | N/A | Continua operações simultâneas de decriptografia e de compilação de múltiplas partes. |
| C_SignEncryptUpdate | N/A | N/A | Continua operações simultâneas de assinatura e de criptografia de múltiplas partes. |
| C_DecryptVerifyUpdate | N/A | N/A | Continua operações simultâneas de decriptografia e de verificação de múltiplas partes. |
| C_GenerateKey* | m_GenerateKey | GenerateKey | Gera uma chave secreta. |
| C_GenerateKeyPair* | m_GenerateKeyPair | GenerateKeyPair | Gera um par de chaves publicas e chaves privadas. |
| C_WrapKey* | m_WrapKey | WrapKey | Agrupa (criptografa) uma chave. |
| C_UnwrapKey* | m_UnwrapKey | UnwrapKey | Desagrupa (decriptografa) uma chave. |
| N/A | N/A | RewrapKeyBlob | Transfere a propriedade de um BLOB controlado pela chave mestra atual para a nova chave mestra quando ela é confirmada. Essa função é um comando de administração especial suportado apenas por GREP11. |
| C_DeriveKey* | m_DeriveKey | DeriveKey | Deriva uma chave de uma chave base. |
| C_SeedRandom | N/A | N/A | Inclui material de valor inicial no gerador de números aleatórios. |
| C_GenerateRandom* | m_GenerateRandom | GenerateRandom | Gera dados aleatórios. O comprimento dos dados aleatórios não pode ser zero e o ponteiro que aponta para o local dos dados aleatórios não pode ser NULL. O comprimento máximo dos dados aleatórios que podem ser solicitados é 1 milhão de bytes. |
| C_GetFunctionStatus | N/A | N/A | Função legada que sempre retorna CKR_FUNCTION_NOT_PARALLEL. |
| C_CancelFunction | N/A | N/A | Função legada que sempre retorna CKR_FUNCTION_NOT_PARALLEL. |
Mecanismos suportados
Um mecanismo é referido como um processo para implementar uma operação criptográfica. Ele pode variar dependendo do nível de firmware no cartão de criptografia. A tabela a seguir mostra os mecanismos que são suportados atualmente e como eles estão relacionados às categorias de funções comuns do GREP11.
| Grupo de funções | Mecanismos suportados |
|---|---|
| Criptografar e decriptografar | 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 |
| Assinar e verificar | CKM_RSA_PKCS1, 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 |
| Compilação | CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA512_224, CKM_SHA512_256 |
| Gerar chave ou gerar par de chaves | 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 |
| Agrupar e desagrupar | 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 |
| Derivar | 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: este mecanismo suporta apenas operações de parte única que não são capazes de utilizar qualquer uma das funções de atualização do GREP11, como EncryptUpdate, DecryptUpdate e DigestUpdate.
2: este mecanismo está disponível apenas para as operações SignSingle e VerifySingle do GREP11.
3: Esse mecanismo não é suportado pelo cartão de criptografia IBM 4768 e não está disponível para operações SignUpdate e VerifyUpdate.
4: esse mecanismo suporta operações de parte única (SignInit, Sign, VerifyInit, Verify), SignSingle e VerifySingle
Atributos suportados e tipos de chave
Os atributos GREP11 definem características de objeto que configuram como um objeto pode ser usado e acessado. A tabela a seguir mostra os atributos suportados e a sua relação com os vários tipos de chave suportados.
| Atributo | Descrição | Tipos de chave suportados |
|---|---|---|
| CKA_CHECK_VALUE | A soma de verificação da chave | Chaves do AES, chaves do DES |
| CKA_COPYABLE | Se configurado como CKA_TRUE, o objeto poderá ser copiado usando a função PKCS#11 C_CopyObject | Chaves privadas do EC, chaves públicas do EC, chaves privadas do RSA, chaves públicas do RSA, chaves privadas do DH, chaves públicas do DH, chaves privadas do DSA, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_DECRYPT | CK_TRUE se a chave suporta decriptografia. | Chaves privadas do EC, chaves privadas do RSA, chaves privadas do DH, chaves privadas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_DERIVE | CK_TRUE se a chave suporta derivação de chave (outras chaves podem ser derivadas dessa chave). O padrão é CK_FALSE. | Chaves privadas do EC, chaves públicas do EC, chaves privadas do RSA, chaves públicas do RSA, chaves privadas do DH, chaves públicas do DH, chaves privadas do DSA, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_EC_PARAMS (CKA_ECDSA_PARAMS) | Codificação de DER de um valor dos Parâmetros ANSI X9.62. | Chaves privadas do EC, chaves públicas do EC |
| CKA_ENCRYPT | CK_TRUE se a chave der suporte à criptografia. | Chaves públicas do EC, chaves públicas do RSA, chaves públicas do DH, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_EXTRACTABLE | CK_TRUE se a chave for extraível e puder ser agrupada. | Chaves privadas do EC, chaves privadas do RSA, chaves privadas do DH, chaves privadas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_IBM_PQC_PARAMS | Parâmetros de apoio para mecanismos de criptografia pós-quantum. No caso do mecanismo Dilithium CKM_IBM_DILITHIUM, ele fornece um identificador de objeto serializado (OID) que representa a intensidade do algoritmo Dilithium
a usar. Atualmente, apenas a força de Dilithium 4 round 2 é suportada. |
Chaves de Dilithium |
| CKA_KEY_TYPE | Tipo de chave. | Chaves privadas do EC, chaves públicas do EC, chaves privadas do RSA, chaves públicas do RSA, chaves privadas do DH, chaves públicas do DH, chaves privadas do DSA, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_LOCAL | CK_TRUE apenas se a chave foi gerada localmente (no token) com uma chamada de C_GenerateKey ou C_GenerateKeyPair ou criada com uma chamada de C_CopyObject como uma cópia de uma chave, que teve seu
atributo CKA_LOCAL configurado como CK_TRUE. |
Chaves privadas do EC, chaves públicas do EC, chaves privadas do RSA, chaves públicas do RSA, chaves privadas do DH, chaves públicas do DH, chaves privadas do DSA, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_MODIFICÁVEL | Configure como CK_TRUE se o objeto pode ser modificado. | Chaves privadas do EC, chaves públicas do EC, chaves privadas do RSA, chaves públicas do RSA, chaves privadas do DH, chaves públicas do DH, chaves privadas do DSA, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_MODULUS_BITS | Comprimento em bits do módulo n. | Chaves públicas do RSA |
| CKA_PUBLIC_EXPONENT | Expoente público e. | Chaves privadas do RSA |
| CKA_PUBLIC_KEY_INFO | Codificação DER do SubjectPublicKeyInfo para a chave pública O valor é derivado dos dados de chave pública subjacentes e está vazio por padrão. | Chaves públicas RSA, chaves públicas EC |
| CKA_SIGN | CK_TRUE se a chave suporta assinaturas em que a assinatura é um apêndice para os dados. | Chaves privadas do EC, chaves privadas do RSA, chaves privadas do DH, chaves privadas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_TRUSTED | O certificado ou chave pode ser confiável para o aplicativo que foi criado. | Chaves públicas do EC, chaves públicas do RSA, chaves públicas do DH, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_UNWRAP | CK_TRUE se a chave suporta desagrupamento (pode ser usado para desagrupar outras chaves). | Chaves privadas do EC, chaves privadas do RSA, chaves privadas do DH, chaves privadas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_VALUE_LEN | Comprimento em bytes de valor da chave. | Chaves do AES |
| CKA_VERIFY | CK_TRUE se a chave suporta verificação em que a assinatura é um apêndice para os dados. | Chaves públicas do EC, chaves públicas do RSA, chaves públicas do DH, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_WRAP | CK_TRUE se a chave suporta agrupamento (pode ser usado para agrupar outras chaves). | Chaves públicas do EC, chaves públicas do RSA, chaves públicas do DH, chaves públicas do DSA, chaves do AES, chaves do DES, chaves genéricas |
| CKA_WRAP_WITH_TRUSTED | CK_TRUE se a chave pode ser agrupada apenas com uma chave de agrupamento que tenha o CKA_TRUSTED configurado para CK_TRUE. O padrão é CK_FALSE. | Chaves privadas do EC, chaves privadas do RSA, chaves privadas do DH, chaves privadas do DSA, chaves do AES, chaves do DES, chaves genéricas |
Curvas suportadas
A biblioteca do EP11 suporta tipos limitados de curvas para determinados mecanismos. A tabela a seguir lista os nomes de curvas suportadas para diferentes mecanismos. O número no nome da curva significa a contagem principal de bits suportada.
Curvas suportadas para a geração de chaves de Curva Elíptica (CE)
O mecanismo CKM_EC_KEY_PAIR_GEN é suportado quando a função GenerateKeyPair é chamada para gerar chaves de Curva Elíptica (CE). Os parâmetros do nome da curva devem ser especificados como identificadores de objetos
(OIDs) usando CKA_EC_PARAMS. É possível obter o OID procurando o nome da curva no repositório OID.
| Mecanismo do GREP11 | Tipos de curva suportados | Nomes de curva suportados |
|---|---|---|
| CKM_EC_KEY_PAIR_GEN | Curvas do National Institute of Standards and Technology(NIST) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas regulares de pool cerebral(BP) |
|
| CKM_EC_KEY_PAIR_GEN | Twisted Brain pool(BP)curvas |
|
| CKM_EC_KEY_PAIR_GEN | Curvas de Cryptography Eficiente(SEC) |
|
| CKM_EC_KEY_PAIR_GEN | Curvas de Edwards |
|
Curvas suportadas para criptografar ativos digitais e gerar assinaturas
As curvas a seguir são suportadas para mecanismos relacionados ao ativo digital e à assinatura digital.
| Padrão e esquema | Mecanismo do GREP11 | Tipos de curva suportados | Nomes de curva suportados |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_DERIVE | Curvas de Cryptography Eficiente(SEC) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Curvas do National Institute of Standards and Technology(NIST) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Curvas de Cryptography Eficiente(SEC) |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Curvas de Edwards |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Curvas de Edwards |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas de Cryptography Eficiente(SEC) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas do National Institute of Standards and Technology(NIST) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Curvas regulares de pool cerebral(BP) |
|
| Schnorr | CKM_IBM_ECDSA_OTHER | Twisted Brain pool(BP)curvas |
|
| Schnorr | ECSG_IBM_ECSDSA_S256 |
|
|
| Schnorr-Zilliqa | ECSG_IBM_ECSDSA_COMPR_MULTI |
|
Executando operações criptográficas com funções do GREP11
É possível realizar operações criptográficas chamando funções do GREP11 que são definidas com base na implementação do EP11 da especificação PKCS n.º 11. As seguintes descrições de função são criadas com base na especificação PKCS #11, com notas específicas para EP11. Todas as definições de parâmetro estão no formulário original do EP11. Para obter mais informações sobre EP11, consulte Enterprise PKCS #11(EP11)Library structure.
Os parâmetros de função do EP11 são mapeados para os tipos de buffer de protocolo que podem ser localizados nas funções a seguir. É possível aprender mais sobre os tipos de buffer de protocolo no Google Developers
Como a biblioteca EP11 é um subconjunto da biblioteca de APIs do PKCS #11, e as funções do GREP11 são variantes das funções do EP11 correspondentes, as funções correspondentes de EP11 e PKCS #11 também são listadas nas tabelas de função do GREP11 para sua referência.
O GREP11 suporta qualquer linguagem de programação com uma biblioteca gRPC. No estágio atual, somente fragmentos de código ou exemplos para Golang e JavaScript estão incluídos na referência de API. O conteúdo é enriquecido em fases posteriores. Os fragmentos de código são baseados nos repositórios do GitHub externos a seguir que fornecem exemplos completos para o uso da API do GREP11. Alguns dos fragmentos de código fazem referência às funções de auxiliar dentro dos repositórios de exemplos.
Recuperando algoritmos criptográficos suportados
É possível usar as funções a seguir para recuperar algoritmos ou mecanismos criptográficos que são suportados pelo GREP11. Com essas informações, é possível entender os mecanismos específicos que podem ser configurados ao chamar uma função. Para a lista completa de mecanismos suportados, é também possível consultar os mecanismos categorizados por grupos de função.
GetMechanismList
A função GetMechanismList obtém uma lista de tipos de mecanismo que são suportados por um token.
| Descrição | Liga-se a EP11 m_GetMechanismList, que é uma implementação de C_GetMechanismList de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GetMechanismListRequest {
}
message GetMechanismListResponse {
repeated uint64 Mechs = 2;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição | Implementação de C_GetMechanismList de PKCS #11.
|
|---|---|
| Parâmetros |
CK_RV m_GetMechanismList (
Intervalo CK_SLOT_ID,
CK_MECHANISM_TYPE_PTR mechs, CK_ULONG_PTR mechslen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GetMechanismList. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Duas maneiras estão disponíveis para um aplicativo chamar
Uma vez que |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR pulCount
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
GetMechanismListRequest := &pb.GetMechanismListRequest { } GetMechanismListResponse, err := cryptoClient.GetMechanismList(context.Background(), GetMechanismListRequest) -
fragmento de código JavaScript
client.GetMechanismList({}, (err, data) => { if (err) throw err; console.log('MECHANISMS:', data.Mechs); });
GetMechanismInfo
A função GetMechanismInfo obtém informações sobre um mecanismo específico.
| Descrição | Liga-se a EP11 m_GetMechanismInfo, que é uma implementação de C_GetMechanismInfo de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GetMechanismInfoRequest {
uint64 Mech = 2;
}
message GetMechanismInfoResponse {
MechanismInfo MechInfo = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição | Implementação de C_GetMechanismInfo de PKCS #11.
|
|---|---|
| Parâmetros |
CK_RV m_GetMechanismInfo (
Intervalo CK_SLOT_ID,
CK_MECHANISM_TYPE mech,
CK_MECHANISM_INFO_PTR mechInfo,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GetMechanismInfo. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
|
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
GetMechanismInfoRequest := &pb.GetMechanismInfoRequest { Mech: ep11.CKM_RSA_PKCS, } GetMechanismInfoResponse, err := cryptoClient.GetMechanismInfo(context.Background(), GetMechanismInfoRequest) -
fragmento de código JavaScript
client.GetMechanismInfo({ Mech: ep11.CKM_AES_KEY_GEN }, (err, data) => { if (err) throw err; console.log('MECHANISM INFO:', data.MechInfo); });
Gerando e derivando chaves
O GREP11 fornece as funções a seguir para gerar chaves criptográficas simétricas e assimétricas. Com base no mecanismo e no comprimento de chave que você especificar, é possível gerar vários tipos de chaves para vários usos. Também é possível derivar uma chave de uma chave base para estender chaves para chaves mais longas ou para obter chaves de um formato necessário.
GenerateKey
A função GenerateKey gera uma chave secreta para a criptografia simétrica.
| Descrição | Liga-se a EP11 m_GenerateKey, que é uma implementação de C_GenerateKey de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GenerateKeyRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> Template = 6;
}
message GenerateKeyResponse {
bytes KeyBytes = 4;
bytes CheckSum = 5;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de As chaves do TDES são geradas com paridade adequada, o que não é observável pelo host. Mas é necessário para uma interoperabilidade adequada: outras implementações do PKCS n° 11 precisam rejeitar chaves do DES com problemas de paridade. Se um objeto estiver vinculado a uma sessão,
A geração de parâmetro DSA e DH ignora Parâmetros DSA, DH ( O blob O PKCS nº11 |
|---|---|
| Parâmetros |
CK_RV m_GenerateKey (
Mecanismo CK_MECHANISM_PTR,
Modelo CK_ATTRIBUTE_PTR, CK_ULONG templatelen,
const unsigned char *pin, size_t pinlen,
unsigned char * key, size_t * keylen,
caractere não assinado *checkSum, size_t *checkSumlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GenerateKey. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Se o mecanismo de geração destinar-se à geração de parâmetro de domínio, o atributo Como o tipo de parâmetros de chave ou de domínio a serem gerados é implícito no mecanismo de geração, o modelo não precisa fornecer um tipo de chave. Se ele fornecer um tipo de chave que é inconsistente com o mecanismo de geração, Se uma chamada para O objeto criado por uma chamada bem-sucedida para |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
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
A função GenerateKeyPair gera um par de chave pública e chave privada.
| Descrição | Liga-se a EP11 m_GenerateKeyPair, que é uma implementação de C_GenerateKeyPair de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GenerateKeyPairRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> PrivKeyTemplate = 7;
map<uint64,AttributeValue> PubKeyTemplate = 8;
}
message GenerateKeyPairResponse {
bytes PrivKeyBytes = 5;
bytes PubKeyBytes = 6;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Os parâmetros de par de chaves são recuperados dos parâmetros No modo FIPS, são suportados apenas os módulos RSA de 1024 + 256 A chave pública é formatada como uma SPKI padrão (informação de chave pública de assunto), legível pela maioria das bibliotecas. Ela é protegida com integridade por um MAC específico de chave de transporte, que não faz parte do SPKI em si. A geração de parâmetro DSA retorna uma estrutura não SPKI no campo de chave pública. Se um objeto for vinculado a uma sessão, Retorna a chave privada agrupada para As combinações de parâmetros suportados a seguir com notas especiais estão além do que são documentadas pelo PKCS n° 11: As chaves RSA rejeitam os expoentes públicos abaixo de 17 (0x11). Os pontos de controle podem restringir ainda mais o mínimo aceito. O expoente Fermat4, 0x10001, é controlado por um ponto de controle específico, combinando restrições de expoente público de FIPS 186-3 (seção B.3.1). Chaves EC ( Chaves DSA ( Chaves DH ( Uso do estado de sessão (Login) substitui o uso padrão das sessões. O mapeamento está fora do escopo da biblioteca. O blob O PKCS nº11
|
|---|---|
| Parâmetros |
CK_RV m_GenerateKeyPair (
Mecanismo CK_MECHANISM_PTR,
CK_ATTRIBUTE_PTR pubKeyTemplate, CK_ULONG pubKeyTemplatelen,
CK_ATTRIBUTE_PTR privKeyTemplate, CK_ULONG privKeyTemplatelen,
const unsigned char *pin, size_t pinlen,
caractere não assinado *privKey, size_t *privKeylen,
caractere não assinado *pubKey, size_t *pubKeylen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GenerateKeyPair. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Uma vez que os tipos de chaves a serem gerados são implícitos no mecanismo de geração de par de chaves, os modelos não precisam fornecer tipos de chaves. Se um dos modelos fornecer um tipo de chave que seja inconsistente com o mecanismo
de geração de chaves, Se uma chamada para Uma chamada para Os objetos chave criados por uma chamada bem-sucedida para Observe cuidadosamente a ordem dos argumentos para |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
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
A função DeriveKey deriva uma chave de uma chave base.
| Descrição | Liga-se a EP11 m_DeriveKey, que é uma implementação de C_DeriveKey de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DeriveKeyRequest {
Mechanism Mech = 1;
bytes BaseKey = 3;
bytes Data = 4;
map<uint64,AttributeValue> Template = 8;
}
message DeriveKeyResponse {
bytes NewKeyBytes = 6;
bytes CheckSum = 7;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de O blob O PKCS nº11 O PKCS nº11 |
|---|---|
| Parâmetros |
CK_RV m_DeriveKey (
Mecanismo CK_MECHANISM_PTR,
Modelo CK_ATTRIBUTE_PTR, CK_ULONG templatelen,
const unsigned char *baseKey, size_t baseKeylen,
const unsigned char *data, size_t datalen,
const unsigned char *pin, size_t pinlen,
caractere não assinado *newKey, size_t *newKeylen,
caractere não assinado *checkSum, size_t *checkSumlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DeriveKey. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Os valores dos atributos Se uma chamada para O objeto de chave criado por uma chamada bem-sucedida para |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
//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); }); }
Protegendo chaves
É possível proteger uma chave agrupando-a e, em seguida, decriptografar a chave chamando o recurso de desagrupamento.
WrapKey
A função WrapKey agrupa (criptografa) uma chave.
| Descrição | Liga-se a EP11 m_WrapKey, que é uma implementação de C_WrapKey de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message WrapKeyRequest {
bytes Key = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 4;
}
message WrapKeyResponse {
bytes Wrapped = 5;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição | Implementação de C_WrapKey de PKCS #11.
|
|---|---|
| Parâmetros |
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 mecanismo CK_MECHANISM_PTR,
CK_BYTE_PTR wrapped, CK_ULONG_PTR wrappedlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_WrapKey. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo Se a chave a ser agrupada não puder ser agrupada por algum motivo específico do token, apesar de ter seu atributo
Quais tipos de chaves podem ser agrupados com quais mecanismos variam nos tokens. Para particionar as chaves de agrupamento para que elas possam agrupar apenas um subconjunto de chaves extraíveis, o atributo |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
WrapKeyRequest := &pb.WrapKeyRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PubKeyBytes, Key: GenerateKeyResponse.KeyBytes, } WrapKeyResponse, err := cryptoClient.WrapKey(context.Background(), WrapKeyRequest) -
fragmento de código JavaScript
client.WrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PubKeyBytes, Key: aes.KeyBytes }, (err, data={}) => { cb(err, data.Wrapped); });
UnwrapKey
A função UnwrapKey desagrupa (decriptografa) uma chave.
| Descrição | Liga-se a EP11 m_UnwrapKey, que é uma implementação de C_UnwrapKey de PKCS #11. |
|
|---|---|---|
| Parâmetros |
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;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de
O objeto gerado é retornado em Quando uma SPKI está sendo transformada em uma SPKI com MAC, deve-se usar CKM_IBM_TRANSPORTKEY como o mecanismo de desagrupamento. Esse modo fornece o SPKI bruto como dados agrupados e ignora o KEK.
|
|---|---|
| Parâmetros |
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 mecanismo CK_MECHANISM_PTR,
const CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
unsigned char * unwrapped, size_t * unwrappedlen,
CK_BYTE_PTR checkSum, CK_ULONG *checkSumlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_UnwrapKey. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo A nova chave tem o atributo Alguns mecanismos podem ser modificados ou tentam ser modificados. o conteúdo da estrutura Se uma chamada para O objeto de chave criado por uma chamada bem-sucedida para Para particionar as chaves de desagrupamento para que elas possam desagrupar apenas um subconjunto de chaves, o atributo |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
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
A função RewrapKeyBlob recriptografa os objetos binários grandes (BLOBs) gerados com a nova chave mestra confirmada que está contida no HSM. As chaves recriptografadas poderão ser usadas somente depois que o HSM for finalizado
com a nova chave mestra confirmada.
Essa função é um comando de administração especial suportado apenas por GREP11. Não há uma função EP11 ou PKCS #11 correspondente para RewrapKeyBlob.
| Descrição | Transfere a propriedade de um BLOB controlado pela chave mestra atual para a nova chave mestra quando ela é confirmada. | |
|---|---|---|
| Parâmetros |
message RewrapKeyBlobRequest {
bytes WrappedKey = 1;
}
message RewrapKeyBlobResponse {
bytes RewrappedKey = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
client.RewrapKeyBlob({ WrappedKey: wrappedKey }, (err, response) => { callback(err, response); });
Recuperando e modificando atributos para chaves
Ao gerar chaves ou executar operações de chave, você define um modelo de atributo como um dos parâmetros. É possível recuperar os atributos para um objeto de chave específico e modificar alguns atributos após a criação da chave.
GetAttributeValue
A função GetAttributeValue obtém um valor de atributo de um objeto.
| Descrição | Liga-se a EP11 m_GetAttributeValue, que é uma implementação de C_GetAttributeValue de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message GetAttributeValueResponse {
map<uint64,AttributeValue> Attributes = 4;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não representa ou precisa de sessões (parte do blob), portanto, não usa o parâmetro O EP11 usa formas mais diretas para decodificação, como enumerar valores reais em vez de ser mais genérico. |
|---|---|
| Parâmetros |
CK_RV m_GetAttributeValue (
const unsigned char *object, size_t objectlen,
Atributos CK_ATTRIBUTE_PTR, CK_ULONG templatelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GetAttributeValue. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Para cada (
Se o caso 1 se aplica a qualquer um dos atributos solicitados, então a chamada precisa retornar o valor No caso especial de um atributo cujo valor é uma matriz de atributos, por exemplo Os códigos de erro |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
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
A função SetAttributeValue modifica um valor de atributo de um objeto.
| Descrição | Liga-se a EP11 m_SetAttributeValue, que é uma implementação de C_SetAttributeValue de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message SetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message SetAttributeValueResponse {
bytes Object = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Compactação de atributo: consulte _GetAttrValue Atualmente, o EP11 só envia atributos booleanos, e todos os outros atributos são manipulados pelo host (e o EP11 não modifica matrizes, como WRAP_TEMPLATE). Não representa ou precisa de sessões (parte do blob), portanto, não usa o parâmetro |
|---|---|
| Parâmetros |
CK_RV m_SetAttributeValue (
unsigned char *object, size_t objectlen,
Atributos CK_ATTRIBUTE_PTR, CK_ULONG templatelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_SetAttributeValue. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Determinados objetos podem não ser modificados. Chamar Somente objetos de sessão podem ser modificados durante uma sessão somente leitura. O modelo pode especificar novos valores para quaisquer atributos do objeto que podem ser modificados. Se o modelo especificar um valor de um atributo incompatível com outros atributos existentes do objeto, a chamada falhará com o código
de retorno Nem todos os atributos podem ser modificados, veja a Seção 4.1.2 da especificação de API PKCS #11 para obter mais informações. |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_SetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, true) ); client.SetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); });
Gerando dados aleatórios
É possível gerar dados aleatórios de alta qualidade, como valores de inicialização (IVs), PIN e senha, para uso em operações criptográficas.
GenerateRandom
A função GenerateRandom gera dados aleatórios. Ao usar essa função, certifique-se de não configurar o comprimento dos dados aleatórios para zero e o ponteiro que indica o local dos dados aleatórios como NULL.
| Descrição | Liga-se a EP11 m_GenerateRandom, que é uma implementação de C_GenerateRandom de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message GenerateRandomRequest {
uint64 Len = 1;
}
message GenerateRandomResponse {
bytes Rnd = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de
A biblioteca do host pode gerar números aleatórios sem despachar para o back-end, se a funcionalidade adequada estiver disponível no host. Isso não é feito na implementação atual. Essa função não suporta uma consulta de tamanho. |
|---|---|
| Parâmetros |
CK_RV m_GenerateRandom (
CK_BYTE_PTR rnd, CK_ULONG rndlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_GenerateRandom. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição | C_GenerateRandom gera dados aleatórios ou pseudo-aleatórios. hSession é o identificador de sessões, pRandomData aponta para o local que recebe os dados aleatórios e ulRandomLen é o comprimento
em bytes dos dados aleatórios ou pseudo-aleatórios a serem gerados. |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateRandom)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pRandomData,
CK_ULONG ulRandomLen
);
|
| Valores de retorno | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVIDOS, CKR_FUNCTION_CANCELADO, CKR_FUNCTION_FALHOU, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_ACTIVE, CKR_RANDOM_NO_RNG, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVÁLIDA, CKR_USER_NOT_LOGGED_IN. |
Snnipets de código
-
Fragmento de código de Golang
GenerateRandomRequest := &pb.GenerateRandomRequest { Len: 1024, } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) -
fragmento de código JavaScript
client.GenerateRandom({ Len: ep11.AES_BLOCK_SIZE }, (err, response) => { callback(err, response); });
Criptografando e decriptografando dados
Ao especificar o mecanismo criptográfico, é possível executar funções de criptografia e decriptografia simétrica ou assimétrica. Pode ser necessário chamar uma série de subfunções para criptografar ou descriptografar dados. Por exemplo, a operação
de criptografia de dados de múltiplas partes é composta pelas sub-operações EncryptInit, EncryptUpdate e EncryptFinal.
EncryptInit
A função EncryptInit inicializa uma operação de criptografia. É necessário chamar essa função primeiro para executar uma criptografia.
| Descrição | Liga-se a EP11 m_EncryptInit, que é uma implementação de C_EncryptInit de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message EncryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message EncryptInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de O blob Para mecanismos de chave pública, Para mecanismos de chave secreta, o estado Criptografar herda restrições de sessão de objeto de O blob
|
|---|---|
| Parâmetros |
CK_RV m_EncryptInit (
caractere não assinado * estado, size_t * statelen,
Mecanismo CK_MECHANISM_PTR,
const unsigned char *key, size_t keylen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_EncryptInit. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo Após o aplicativo chamar |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.EncryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Encrypt
A função Encrypt criptografa dados de parte única. Não é necessário executar as sub-operações EncryptUpdate e EncryptFinal para uma criptografia de parte única. Antes de chamar esta função, certifique-se
de executar EncryptInit primeiro.
| Descrição | Liga-se a EP11 m_Encrypt, que é uma implementação de C_Encrypt de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message EncryptRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptResponse {
bytes Ciphered = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_Encrypt (
const unsigned char *state, size_t statelen,
Simples CK_BYTE_PTR, CK_ULONG plainlen,
Cifrado CK_BYTE_PTR, CK_ULONG_PTR cipheredlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Encrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de criptografia deve ser inicializada com O Para alguns mecanismos de criptografia, os dados de texto sem formatação de entrada têm certas restrições de comprimento (porque o mecanismo pode criptografar apenas partes relativamente curtas de texto sem formatação ou porque os dados
de entrada do mecanismo devem consistir em um número integral de blocos). Se essas restrições não estiverem satisfeitas, então O texto simples e o texto cifrado podem estar no mesmo lugar, ou seja, será OK se Para a maioria dos mecanismos, |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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_MEMORY, CKR_REMOVIDA, CKR_FUNCTION_CANCELADA, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKRR_SESSION_CLOSED, |
Snnipets de código
-
Fragmento de código de Golang
plainText := "Encrypt this message" EncryptRequest := &pb.EncryptRequest { State: EncryptInitResponse.State, Plain: plainText, } EncryptResponse, err := cryptoClient.Encrypt(context.Background(), EncryptRequest) -
fragmento de código JavaScript
client.Encrypt({ State: state, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
EncryptUpdate
A função EncryptUpdate continua uma operação de criptografia de múltiplas partes. Antes de chamar esta função, certifique-se de executar EncryptInit primeiro.
| Descrição | Liga-se a EP11 m_EncryptUpdate, que é uma implementação de C_EncryptUpdate de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message EncryptUpdateRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptUpdateResponse {
bytes State = 1;
bytes Ciphered = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_EncryptUpdate (
unsigned char *state, size_t statelen,
Simples CK_BYTE_PTR, CK_ULONG plainlen,
Cifrado CK_BYTE_PTR, CK_ULONG_PTR cipheredlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_EncryptUpdate. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de criptografia deve ser inicializada com O |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
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...) -
fragmento de código JavaScript
client.EncryptUpdate({ State: state, Plain: Buffer.from(message.substr(20)) }, (err, data={}) => { cb(err, data.State, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptFinal
A função EncryptFinal finaliza uma operação de criptografia de múltiplas partes.
| Descrição | Liga-se a EP11 m_EncryptFinal, que é uma implementação de C_EncryptFinal de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message EncryptFinalRequest {
bytes State = 1;
}
message EncryptFinalResponse {
bytes Ciphered = 2;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_EncryptFinal (
const unsigned char *state, size_t statelen,
Cifrado CK_BYTE_PTR, CK_ULONG_PTR cipheredlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_EncryptFinal. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de criptografia deve ser inicializada com Para alguns mecanismos de criptografia de várias partes, os dados de texto simples de entrada têm certas restrições de comprimento porque os dados de entrada do mecanismo devem consistir em um número integral de blocos. Se essas restrições
não forem satisfeitas, então |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastEncryptedPart,
CK_ULONG_PTR pulLastEncryptedPartLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
EncryptFinalRequest := &pb.EncryptFinalRequest { State: EncryptUpdateResponse.State, } EncryptFinalResponse, err := cryptoClient.EncryptFinal(context.Background(), EncryptFinalRequest) -
fragmento de código JavaScript
client.EncryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptSingle
A função EncryptSingle processa dados em uma só passagem com uma chamada. Ela não retorna nenhum estado para hospedar e retorna apenas os dados criptografados. Essa função é uma extensão do IBM EP11 para a especificação PKCS n.º
11 padrão e é uma combinação das funções EncryptInit e Encrypt. Ela permite concluir uma operação de criptografia com uma única chamada, em vez de com uma série delas.
| Descrição | Liga-se a EP11 m_EncryptSingle |
|
|---|---|---|
| Parâmetros |
message EncryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Plain = 3;
}
message EncryptSingleResponse {
bytes Ciphered = 4;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Variante não padrão de Esse é o método preferencial de criptografia de dados em uma passagem para aplicativos de reconhecimento de XCP. Funcionalmente ele é equivalente a Se o back-end suportar chaves residentes, a chave também poderá ser um identificador de chave residente. Consulte também: O blob |
|---|---|
| Parâmetros |
CK_RV m_EncryptSingle (
const unsigned char *key, size_t keylen,
Mecanismo CK_MECHANISM_PTR,
Simples CK_BYTE_PTR, CK_ULONG plainlen,
Cifrado CK_BYTE_PTR, CK_ULONG_PTR cipheredlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Encrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.EncryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: aliceDerived.NewKey, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
ReencryptSingle
Com a função ReencryptSingle, é possível decriptografar dados com a chave original e, em seguida, criptografar os dados brutos com uma chave diferente em uma única chamada dentro do HSM de nuvem. Os tipos de chave que são usados
para esta operação podem ser iguais ou diferentes. Essa função é uma extensão de IBM EP11 para a especificação padrão PKCS #11. Essa única chamada é uma opção viável em que uma grande quantidade de dados precisa ser recriptografada com diferentes
chaves e ignora a necessidade de executar uma combinação de funções DecryptSingle e EncryptSingle para cada item de dados que precisa ser recriptografado. Ela não retorna nenhum estado para hospedar e retorna apenas
os dados recriptografados.
| Descrição | Liga ao EP11 m_ReencryptSingle. |
|
|---|---|---|
| Parâmetros |
message ReencryptSingleRequest {
bytes DecKey = 1;
bytes EncKey = 2;
Mechanism DecMech = 3;
Mechanism EncMech = 4;
bytes Ciphered = 5;
}
message ReencryptSingleResponse {
bytes Reciphered = 6;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Variante não padrão de Decriptografa dados com a chave original e, em seguida, criptografa os dados brutos com uma chave diferente dentro do HSM de nuvem. |
|---|---|
| Parâmetros |
CK_RV m_ReencryptSingle (
const unsigned char * dkey, size_t dkeylen,
const unsigned char * ekey, size_t ekeylen,
CK_MECHANISM_PTR decmech,
CK_MECHANISM_PTR encmech,
CK_BYTE_PTR in, CK_ULONG inlen,
Cifrado CK_BYTE_PTR, CK_ULONG_PTR cipheredlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Encrypt e C_Decrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
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
A função DecryptInit inicializa uma operação de decriptografia. É necessário chamar essa função primeiro para executar uma decriptografia.
| Descrição | Liga-se a EP11 m_DecryptInit, que é uma implementação de C_DecryptInit de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DecryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message DecryptInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição | Implementação de C_DecryptInit de PKCS #11.
|
|---|---|
| Parâmetros |
CK_RV m_DecryptInit (
caractere não assinado * estado, size_t * statelen,
Mecanismo CK_MECHANISM_PTR,
const unsigned char *key, size_t keylen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DecryptInit. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo Após o aplicativo chamar |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(
K_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.DecryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
Decrypt
A função Decrypt decriptografa dados em uma parte única. Não é necessário executar as sub-operações DecryptUpdate e DecryptFinal para uma criptografia de parte única. Antes de chamar esta função, certifique-se
de executar DecryptInit primeiro.
| Descrição | Liga-se a EP11 m_Decrypt, que é uma implementação de C_Decrypt de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DecryptRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptResponse {
bytes Plain = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação do PKCS #11 O estado, o objeto binário grande (BLOB) slen deve ser mapeado por meio do parâmetro |
|---|---|
| Parâmetros |
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,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Decrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de descriptografia deve ser inicializada com
O texto cifrado e o texto sem formatação podem estar no mesmo local, o que significa que é aceitável se pEncryptedData e pData apontarem para o mesmo local. Se os dados de texto cifrado de entrada não puderem ser decriptografados porque têm um comprimento inadequado, |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
DecryptRequest := &pb.DecryptRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext, // encrypted data from a previous encrypt operation } DecryptResponse, err := cryptoClient.Decrypt(context.Background(), DecryptRequest) -
fragmento de código JavaScript
client.Decrypt({ State: state, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
DecryptUpdate
A função DecryptUpdate continua uma operação de decriptografia de múltiplas partes. Antes de chamar esta função, certifique-se de executar DecryptInit primeiro.
| Descrição | Liga-se a EP11 m_DecryptUpdate, que é uma implementação de C_DecryptUpdate de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DecryptUpdateRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptUpdateResponse {
bytes State = 1;
bytes Plain = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_DecryptUpdate (
unsigned char *state, size_t statelen,
Cifrado CK_BYTE_PTR, CK_ULONG cipheredlen,
Simples CK_BYTE_PTR, CK_ULONG_PTR plainlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DecryptUpdate. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de descriptografia deve ser inicializada com O texto cifrado e o texto simples podem estar no mesmo local, ou seja, será OK se |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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...) -
fragmento de código JavaScript
client.DecryptUpdate({ State: state, Ciphered: ciphertext.slice(0, 16) }, (err, data={}) => { cb(err, data.State, data.Plain); });
DecryptFinal
A função DecryptFinal finaliza uma operação de decriptografia de múltiplas partes.
| Descrição | Liga-se a EP11 m_DecryptFinal, que é uma implementação de C_DecryptFinal de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DecryptFinalRequest {
bytes State = 1;
}
message DecryptFinalResponse {
bytes Plain = 2;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_DecryptFinal (
const unsigned char *state, size_t statelen,
Simples CK_BYTE_PTR, CK_ULONG_PTR plainlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DecryptFinal. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de descriptografia deve ser inicializada com Se os dados de texto cifrado de entrada não puderem ser decriptografados porque têm um comprimento inapropriado, então |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastPart,
CK_ULONG_PTR pulLastPartLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
DecryptFinalRequest := &pb.DecryptFinalRequest { State: DecrypUpdateResponse.State, } DecryptFinalResponse, err := cryptoClient.DecryptFinal(context.Background(), DecryptFinalRequest) -
fragmento de código JavaScript
client.DecryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([plaintext, data.Plain])); });
DecryptSingle
A função DecryptSingle processa dados em uma só passagem com uma chamada. Ela não retorna nenhum estado para hospedar e retorna apenas os dados descriptografados. Essa função é uma extensão do IBM EP11 para a especificação PKCS
n.º 11 padrão e é uma combinação das funções DecryptInit e Decrypt. Ela permite concluir uma operação de decriptografia com uma única chamada, em vez de com uma série delas.
| Descrição | Liga ao EP11 m_DecryptSingle. |
|
|---|---|---|
| Parâmetros |
message DecryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Ciphered = 3;
}
message DecryptSingleResponse {
bytes Plain = 4;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Variante não padrão de Esse é o método preferencial de criptografia de dados em uma passagem para aplicativos de reconhecimento de XCP. Funcionalmente ele é equivalente a Se o back-end suportar chaves residentes, a chave também poderá ser um identificador de chave residente. Consulte também: O blob |
|---|---|
| Parâmetros |
CK_RV m_DecryptSingle (
const unsigned char *key, size_t keylen,
Mecanismo CK_MECHANISM_PTR,
Cifrado CK_BYTE_PTR, CK_ULONG cipheredlen,
Simples CK_BYTE_PTR, CK_ULONG_PTR plainlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Decrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.DecryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: bobDerived.NewKey, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
Assinando e verificando dados
O GREP11 fornece um conjunto de funções para assinar dados e verificar assinaturas ou códigos de autenticação de mensagem (MACs). Pode ser necessário chamar uma série de subfunções para executar uma operação de assinatura. Por exemplo, a operação
de assinatura de dados de múltiplas partes é composta pelas sub-operações SignInit, SignUpdate e SignFinal.
SignInit
A função SignInit inicializa uma operação de assinatura. É necessário chamar essa função primeiro para executar uma operação de assinatura.
| Descrição | Liga ao EP11 m_SignInit, que é uma implementação do PKCS #11 C_SignInit. |
|
|---|---|---|
| Parâmetros |
message SignInitRequest {
Mechanism Mech = 2;
bytes PrivKey = 3;
}
message SignInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição | Implementação de C_SignInit de PKCS #11.
|
|---|---|
| Parâmetros |
CK_RV m_SignInit (
caractere não assinado * estado, size_t * statelen,
Mecanismo CK_MECHANISM_PTR,
const unsigned char *privKey, size_t privKeylen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Decrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo Após o aplicativo chamar |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
SignInitRequest := &pb.SignInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PrivKey: GenerateKeyPairResponse.PrivKeyBytes, } SignInitResponse, err := cryptoClient.SignInit(context.Background(), SignInitRequest) -
fragmento de código JavaScript
client.SignInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PrivKey: keys.PrivKeyBytes }, (err, data={}) => { cb(err, data.State); });
Assinar
A função Sign assina dados de parte única. Não é necessário executar as sub-operações SignUpdate e SignFinal para uma assinatura de parte única. Antes de chamar esta função, certifique-se de executar
SignInit primeiro.
| Descrição | Liga-se a EP11 m_Sign, que é uma implementação de C_Sign de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message SignRequest {
bytes State = 1;
bytes Data = 2;
}
message SignResponse {
bytes Signature = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_Sign (
const unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Assinatura CK_BYTE_PTR, CK_ULONG_PTR signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Sign. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de assinatura deve ser inicializada com
Para a maioria dos mecanismos, |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
client.Sign({ State: state, Data: dataToSign }, (err, data={}) => { cb(err, data.Signature); });
SignUpdate
A função SignUpdate continua uma operação de assinatura de múltiplas partes. Antes de chamar esta função, certifique-se de executar SignInit primeiro.
| Descrição | Liga-se a EP11 m_SignUpdate, que é uma implementação de C_SignUpdate de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message SignUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message SignUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de C_SignUpdate de PKCS #11.
O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_SignUpdate (
unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_SignUpdate. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de assinatura deve ser inicializada com |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.SignUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
SignFinal
A função SignFinal finaliza uma operação de assinatura de múltiplas partes.
| Descrição | Liga-se a EP11 m_SignFinal, que é uma implementação de C_SignFinal de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message SignFinalRequest {
bytes State = 1;
}
message SignFinalResponse {
bytes Signature = 2;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_SignFinal (
const unsigned char *state, size_t statelen,
Assinatura CK_BYTE_PTR, CK_ULONG_PTR signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_SignFinal. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de assinatura deve ser inicializada com |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
SignFinalRequest := &pb.SignFinalRequest { State: SignUpdateResponse.State, } SignFinalResponse, err := cryptoClient.SignFinal(context.Background(), SignFinalRequest) -
fragmento de código JavaScript
client.SignFinal({ State: state }, (err, response) => { callback(err, response); });
SignSingle
A função SignSingle assina os dados ou autentica-os por MACs em uma só passagem com uma chamada e sem construir um estado de compilação intermediário. Ela não retorna nenhum estado para hospedar e retorna apenas resultado. Essa
função é uma extensão do IBM EP11 para a especificação PKCS n.º 11 padrão e é uma combinação das funções SignInit e Sign. Ela permite concluir uma operação de assinatura com uma única chamada, em vez de com uma
série delas.
| Descrição | Liga ao EP11 m_SignSingle. |
|
|---|---|---|
| Parâmetros |
message SignSingleRequest {
bytes PrivKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
}
message SignSingleResponse {
bytes Signature = 4;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Extensão não padrão, combinação de Essa é a maneira preferencial de assinar, sem uma ida e volta, criptografia e descriptografia extra. Funcionalmente, O blob As solicitações de vários dados para assinaturas HMAC e CMAC são suportadas (subvariantes 2 e 3). Consulte também: |
|---|---|
| Parâmetros |
CK_RV m_SignSingle (
const unsigned char *privKey, size_t privKeylen,
Mecanismo CK_MECHANISM_PTR,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Assinatura CK_BYTE_PTR, CK_ULONG_PTR signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Decrypt. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
client.SignSingle({ Mech: { Mechanism: ep11.CKM_ECDSA }, PrivKey: key, Data: digest }, (err, response) => { callback(err, response); });
VerifyInit
A função VerifyInit inicializa uma operação de verificação. É necessário chamar essa função primeiro para verificar uma assinatura.
| Descrição | Liga-se a EP11 m_VerifyInit, que é uma implementação de C_VerifyInit de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message VerifyInitRequest {
Mechanism Mech = 2;
bytes PubKey = 3;
}
message VerifyInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Para mecanismos de chave pública, Se uma operação HMAC for inicializada, as restrições de sessão do objeto O blob Nota: |
|---|---|
| Parâmetros |
CK_RV m_VerifyInit (
caractere não assinado * estado, size_t * statelen,
Mecanismo CK_MECHANISM_PTR,
const unsigned char *pubKey, size_t pubKeylen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_VerifyInit. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
O atributo Após o aplicativo chamar |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
VerifyInitRequest := &pb.VerifyInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PubKey: GenerateKeyPairResponse.PubKeyBytes, } VerifyInitResponse, err := cryptoClient.VerifyInit(context.Background(), VerifyInitRequest) -
fragmento de código JavaScript
client.VerifyInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PubKey: keys.PubKeyBytes }, (err, data={}) => { cb(err, signature, data.State); });
Verificar
A função Verify verifica uma assinatura em dados de uma única parte. Não é necessário executar as sub-operações VerifyUpdate e VerifyFinal para uma criptografia de parte única. Antes de chamar esta função,
certifique-se de executar VerifyInit primeiro.
| Descrição | Liga-se a EP11 m_Verify, que é uma implementação de C_Verify de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message VerifyRequest {
bytes State = 1;
bytes Data = 2;
bytes Signature = 3;
}
message VerifyResponse {
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza A ordem relativa de dados e assinatura é revertida relativa para O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_Verify (
const unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Assinatura CK_BYTE_PTR, CK_ULONG signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Verify. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de verificação deve ser inicializada com Uma chamada bem-sucedida para
Para a maioria dos mecanismos, |
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
VerifyRequest := &pb.VerifyRequest { State: VerifyInitResponse.State, Data: msgHash[:], Signature: SignResponse.Signature, } VerifyResponse, err := cryptoClient.Verify(context.Background(), VerifyRequest) -
fragmento de código JavaScript
client.Verify({ State: state, Data: dataToSign, Signature: signature }, (err, data={}) => { cb(err, signature); });
VerifyUpdate
A função VerifyUpdate continua uma operação de verificação de múltiplas partes. Antes de chamar esta função, certifique-se de executar VerifyInit primeiro.
| Descrição | Liga-se a EP11 m_VerifyUpdate, que é uma implementação de C_VerifyUpdate de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message VerifyUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message VerifyUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_VerifyUpdate (
unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_VerifyUpdate. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de verificação deve ser inicializada com |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.VerifyUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
VerifyFinal
A função VerifyFinal finaliza uma operação de verificação de múltiplas partes.
| Descrição | Liga-se a EP11 m_VerifyFinal, que é uma implementação de C_VerifyFinal de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message VerifyFinalRequest {
bytes State = 1;
bytes Signature = 2;
}
message VerifyFinalResponse {
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_VerifyFinal (
const unsigned char *state, size_t statelen,
Assinatura CK_BYTE_PTR, CK_ULONG signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_VerifyFinal. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de verificação deve ser inicializada com Uma chamada bem-sucedida para |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
VerifyFinalRequest := &pb.VerifyFinalRequest { State: VerifyUpdateResponse.State, Signature: SignResponse.Signature, } VerifyFinalResponse, err := cryptoClient.VerifyFinal(context.Background(), VerifyFinalRequest) -
fragmento de código JavaScript
client.VerifyFinal({ State: state, Signature: signature }, (err, response) => { callback(err, response); });
VerifySingle
A função VerifySingle assina os dados ou autentica-os por MACs em uma só passagem com uma chamada e sem construir um estado de compilação intermediário. Ela não retorna nenhum estado para hospedar e retorna apenas o resultado
da verificação. Essa função é uma extensão do IBM EP11 para a especificação PKCS n.º 11 padrão e é uma combinação das funções VerifyInit e Verify. Ela permite concluir uma operação de verificação com uma única chamada,
em vez de com uma série delas.
| Descrição | Liga ao EP11 m_VerifySingle. |
|
|---|---|---|
| Parâmetros |
message VerifySingleRequest {
bytes PubKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
bytes Signature = 4;
}
message VerifySingleResponse {
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Extensão não padrão, combinação de Esta é a maneira preferencial de verificar uma assinatura, sem uma ida e volta, criptografia, descriptografia extra. Funcionalmente, O blob Para mecanismos de chave pública, Consulte também: |
|---|---|
| Parâmetros |
CK_RV m_VerifySingle (
const unsigned char *pubKey, size_t pubKeylen,
Mecanismo CK_MECHANISM_PTR,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Assinatura CK_BYTE_PTR, CK_ULONG signaturelen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_VerifySingle. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
client.VerifySingle({ Mech: { Mechanism: ep11.CKM_SHA256_RSA_PKCS }, PubKey: keys.PubKey, Data: digest, Signature: signature }, (err, response) => { callback(err, response); });
Protegendo a integridade de dados por meio de trechos de mensagem
O GREP11 fornece um conjunto de funções para criar trechos de mensagem que são projetados para proteger a integridade de um dado. Pode ser necessário chamar uma série de subfunções para executar uma operação de compilação. Por exemplo, a operação
de compilação de múltiplas partes é composta pelas sub-operações DigestInit, DigestUpdate e DigestFinal.
DigestInit
A função DigestInit inicializa uma operação de compilação de mensagem. É necessário executar essa função primeiro para executar uma operação de compilação.
| Descrição | Liga-se a EP11 m_DigestInit, que é uma implementação de C_DigestInit de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DigestInitRequest {
Mechanism Mech = 2;
}
message DigestInitResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Criar estado de compilação agrupado. Nota: as consultas de tamanho são suportadas, mas o estado agrupado é sempre retornado pelo back-end, diferentemente da maioria das consultas de tamanho (que retornam um tamanho de saída, em vez de saída real). Os estados
Durante as consultas de tamanho, o host apenas descarta o estado retornado e relata o tamanho de blob (em O blob |
|---|---|
| Parâmetros |
CK_RV m_DigestInit (
unsigned char * state, size_t * len,
const mecanismo CK_MECHANISM_PTR,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DigestInit. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
Após o aplicativo chamar |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
DigestInitRequest := &pb.DigestInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, } DigestInitResponse, err := cryptoClient.DigestInit(context.Background(), DigestInitRequest) -
fragmento de código JavaScript
client.DigestInit({ Mech: { Mechanism: ep11.CKM_SHA256 } }, (err, response) => { callback(err, response); });
Compilação
A função Digest compila dados de parte única. Não é necessário chamar as funções DigestUpdate e DigestFinal para compilar dados de parte única. Antes de chamar esta função, certifique-se de executar DigestInit primeiro. Ao configurar parâmetros, não especifique o comprimento dos dados de entrada como zero e o ponteiro que aponta para o local dos dados de entrada como NULL.
| Descrição | Liga-se a EP11 m_Digest, que é uma implementação de C_Digest de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DigestRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestResponse {
bytes Digest = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de Se um objeto de compilação tiver exatamente 0 (zero) bytes anexados a ele após a criação, em qualquer combinação de transferências de zero bytes, ele ainda pode executar uma Compilação de transmissão única, mesmo que ele precise ser rejeitado por uma implementação estrita. Não atualiza Implementações podem executar
O blob |
|---|---|
| Parâmetros |
CK_RV m_Digest (
const unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Compilação CK_BYTE_PTR, CK_ULONG_PTR digestlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_Digest. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de compilação deve ser inicializada com O Os dados de entrada e a saída de compilação podem estar no mesmo lugar, ou seja, não há problema de o pData e o pDigest apontarem para o mesmo local.
|
|---|---|
| Parâmetros |
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
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
digestData := []byte("Create a digest for this string") DigestRequest := &pb.DigestRequest { State: DigestInitResponse.State, Data: digestData, } DigestResponse, err := cryptoClient.Digest(context.Background(), DigestRequest) -
fragmento de código JavaScript
client.Digest({ State: state, Data: Buffer.from(digestData) }, (err, data={}) => { cb(err, data.Digest); }); }
DigestUpdate
A função DigestUpdate continua uma operação de compilação de múltiplas partes. Antes de chamar esta função, certifique-se de executar DigestInit primeiro. Ao configurar parâmetros, não especifique o comprimento dos
dados de entrada como zero e o ponteiro que aponta para o local dos dados de entrada como NULL.
| Descrição | Liga-se a EP11 m_DigestUpdate, que é uma implementação de C_DigestUpdate de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DigestUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestUpdateResponse {
bytes State = 1;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de
O blob O blob Consulte também: |
|---|---|
| Parâmetros |
CK_RV m_DigestUpdate (
unsigned char *state, size_t statelen,
Dados CK_BYTE_PTR, CK_ULONG datalen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DigestUpdate. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de compilação de mensagem deve ser inicializada com |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
// 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) -
fragmento de código JavaScript
client.DigestUpdate({ State: state, Data: Buffer.from(digestData.substr(0, 64)) }, (err, data={}) => { cb(err, data.State); });
DigestFinal
A função DigestFinal finaliza uma operação de compilação de múltiplas partes.
| Descrição | Liga-se a EP11 m_DigestFinal, que é uma implementação de C_DigestFinal de PKCS #11. |
|
|---|---|---|
| Parâmetros |
message DigestFinalRequest {
bytes State = 1;
}
message DigestFinalResponse {
bytes Digest = 2;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Implementação de
Não atualiza O blob O blob |
|---|---|
| Parâmetros |
CK_RV m_DigestFinal (
const unsigned char *state, size_t statelen,
Compilação CK_BYTE_PTR, CK_ULONG_PTR digestlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DigestFinal. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
| Descrição |
A operação de compilação deve ser inicializada com |
|---|---|
| Parâmetros |
CK_DEFINE_FUNCTION(CK_RV, C_DigestFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| Valores de retorno | 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. |
Snnipets de código
-
Fragmento de código de Golang
DigestFinalRequest := &pb.DigestFinalRequest { State: DigestUpdateResponse.State, } DigestFinalResponse, err := cryptoClient.DigestFinal(context.Background(), DigestFinalRequest) -
fragmento de código JavaScript
client.DigestFinal({ State: state }, (err, response) => { callback(err, response); });
DigestSingle
A função DigestSingle compila dados em uma só passagem com uma chamada e sem construir um estado de compilação intermediário e roundtrips desnecessários. Essa função é uma extensão do IBM EP11 para a especificação PKCS n.º 11
padrão e é uma combinação das funções DigestInit e Digest. Ela permite concluir uma operação de compilação com uma única chamada, em vez de com uma série delas.
| Descrição | Liga ao EP11 m_DigestSingle. |
|
|---|---|---|
| Parâmetros |
message DigestSingleRequest {
Mechanism Mech = 1;
bytes Data = 2;
}
message DigestSingleResponse {
bytes Digest = 3;
}
|
|
| Valores de retorno | Agrupa o erro EP11 na mensagem Grep11Error. |
| Descrição |
Extensão não padrão, combinação de Esse é o método preferencial de compilação de texto não criptografado para aplicativos direcionados a XCP. Funcionalmente, Se uma chave precisa ser compilada, deve-se usar Não retorna nenhum estado para o host, apenas o resultado da compilação. Não há parâmetros não PKCS #11, uma vez que tudo é usado diretamente da chamada de PKCS #11. |
|---|---|
| Parâmetros |
CK_RV m_DigestSingle (
Mecanismo CK_MECHANISM_PTR,
Dados CK_BYTE_PTR, CK_ULONG datalen,
Compilação CK_BYTE_PTR, CK_ULONG_PTR digestlen,
destino de target_t
);
|
| Valores de retorno | Um subconjunto de valores de retorno C_DigestSingle. Para obter mais informações, consulte o capítulo Valores de retorno do documento de estrutura da biblioteca Enterprise PKCS #11 (EP11). |
Snnipets de código
-
Fragmento de código de Golang
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) -
fragmento de código JavaScript
client.DigestSingle({ Mech: { Mechanism: ep11.CKM_SHA256 }, Data: Buffer.from(digestData) }, (err, response) => { callback(err, response); });
Exemplos de código
A API GREP11 suporta linguagens de programação com bibliotecas gRPC. Dois repositórios de amostra do GitHub são fornecidos para você testar a API do GREP11: