Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
- Geração e recuperação de chaves DSS
- Gerando assinaturas DSS
- Verificando uma assinatura DSS
- Exportando chaves DSS
Gerando e recuperando chaves DSS
As chaves DSS podem ser geradas por uma chamada para a funçãoCryptGenKey. A chamada para CryptGenKey requer que AT_SIGNATURE ou CALG_DSS_SIGN ser passada no argumento Algid. Essa chamada gerará os valores P (módulo primo), Q (primo), G (gerador), X (expoente secreto) e Y (chave pública) do zero e os persistirá em um BLOB de chave para o armazenamento local.
Para gerar um par de chaves de assinatura DSS
- Chame a funçãoCryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
- Chame CryptGenKey para gerar as chaves. O AT_SIGNATURE ou CALG_DSS_SIGN deve ser passado para o argumento Algid e os 16 bits superiores do argumento dwFlags devem ser definidos para o tamanho de chave desejado. Se os 16 bits superiores forem zero, o tamanho de chave padrão de 1.024 bits será usado. Um identificador deHCRYPTKEYé retornado no argumento hKey.
Para recuperar um ponteiro para chaves de assinatura geradas anteriormente
- Chame CryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
- Chame a funçãoCryptGetUserKey com o argumento dwKeySpec definido como AT_SIGNATURE ou CALG_DSS_SIGN.
Para recuperar os valores P, Q e G
- Chame CryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
- Chame CryptGetUserKey com o argumento dwKeySpec definido como AT_SIGNATURE ou CALG_DSS_SIGN.
- Chame CryptGetKeyParam com o argumento hKey definido como o ponteiro recuperado na etapa anterior. O argumento dwParam deve ser definido como o sinalizador desejado; KP_P, KP_Q ou KP_G. O valor é retornado no argumento pbData e o comprimento dos dados é retornado no argumento pdwDataLen. O valor é retornado sem informações de cabeçalho e em formato de little-endian.
Gerando assinaturas DSS
Os dados a serem assinados devem primeiro ser em hash usando o algoritmo SHA. Depois que esses dados são colocados em hash, uma assinatura deDSSé gerada chamando a funçãoCryptSignHash.
Para gerar uma assinatura DSS
- Chame CryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
- Chame CryptCreateHash com o argumento Algid definido como CALG_SHA para obter um identificador para um objeto hash SHA.
- Chame CryptHashData com o argumento hHash definido para o identificador recuperado na etapa anterior. Isso cria um hash dos dados e retorna um identificador para o hash no argumento phHash da chamada de funçãoCryptCreateHash.
- Chame CryptSignHash com o argumento hHash definido para o identificador recuperado na etapa anterior. Tanto AT_SIGNATURE quanto CALG_DSS_SIGN podem ser passados no parâmetro dwKeySpec. A assinatura é devolvida ao endereço fornecido no argumento pbSignature e o comprimento da assinatura é devolvido ao endereço fornecido no argumento pdwSigLen. Um ponteiro de NULL pode ser passado no argumento pbSignature e, nesse caso, a assinatura não é gerada, mas o comprimento da assinatura é retornado para o endereço fornecido no parâmetro pdwSigLen.
Verificando uma assinatura DSS
Para verificar uma assinatura DSS, a chave pública DSS do signatário deve ser importada, os dados assinados devem ser colocados em hash e, em seguida, a assinatura pode ser verificada.
Para verificar uma assinatura DSS
Chame CryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
Chame CryptImportKey para importar a chave pública DSS do signatário.
Chame CryptCreateHash com o argumento Algid definido como CALG_SHA para obter um identificador para um objeto hash SHA.
Chame CryptHashData com o argumento hHash definido para o identificador recuperado na etapa anterior e com pbData apontando para os dados assinados. Isso cria um hash dos dados e retorna um identificador para o hash no argumento phHash da chamada de funçãoCryptCreateHash.
Chame CryptVerifySignature com as seguintes configurações:
hHash é definido como o identificador para o hash executado na etapa anterior.
pbSignature aponta para a assinatura a ser verificada.
dwSigLen é definido para o comprimento da assinatura.
hPubKey é definido como o identificador da chave pública importada na etapa 2.
dwFlags está definido como zero.
Exportando chaves DSS
Quando você envia dados assinados para alguém onde a assinatura precisará ser verificada pelo destinatário, a chave pública do signatário deve ser fornecida ao destinatário e geralmente é enviada junto com os dados assinados. Portanto, é necessário ser capaz de exportar as chaves deDSSem um formato BLOBde chave.
Para exportar a chave pública DSS
- Chame CryptAcquireContext para obter um identificador para o Microsoft DSS Cryptographic Provider.
- Chame CryptGetUserKey com o argumento dwKeySpec definido como AT_SIGNATURE ou CALG_DSS_SIGN.
- Chame CryptExportKey com hKey definido para o identificador recuperado na etapa anterior, dwBlobType definido como PUBLICKEYBLOB e dwFlags definido como zero. OBLOB de chave públicaDSS é retornado em pbData e o comprimento doBLOB de chaveé retornado em pdwDataLen. Um ponteiro NULL pode ser passado em pbDatae, neste caso, apenas o comprimento do BLOB da chave DSS será retornado. O BLOB retornado ao fazer a chamada para CryptExportKey está no formato descrito em BLOBs de chave de provedor DSS.
Para exportar a chave privada DSS
- Siga o mesmo procedimento para exportar uma chave pública DSS, exceto que, ao fazer a chamada para CryptExportKey, dwBlobType é definido como PRIVATEKEYBLOB. O BLOB retornado ao fazer a chamada para CryptExportKey está no formato descrito em BLOBs de chave de provedor DSS.