Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
- gerando e recuperando chaves DSS
- gerando assinaturas DSS
- verificando um de 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 sejam passados no argumento Argel. Essa chamada gerará os valores P (módulo principal), Q (prime), G (gerador), X (expoente secreto) e Y (chave pública) do zero e os manterá em um blob de chave para o armazenamento local.
Para gerar um par de chaves de assinatura DSS
- Chame a função CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
- Chame CryptGenKey para gerar as chaves. AT_SIGNATURE ou CALG_DSS_SIGN devem ser passados para o argumento Argel e os 16 bits superiores do argumento dwFlags devem ser definidos como o tamanho da chave desejado. Se os 16 bits superiores forem zero, o tamanho da chave padrão de 1.024 bits será usado. Um identificador deHCRYPTKEYé retornado no argumento hKey.
Para recuperar um ponteiro para as chaves de assinatura geradas anteriormente
- Chame CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
- Chame a funçãoCryptGetUserKey com o argumento dwKeySpec definido como AT_SIGNATURE ou CALG_DSS_SIGN.
Recuperar os valores P, Q e G
- Chame CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
- 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 hash usando o algoritmoSHA. Depois que esses dados são hashed, uma assinatura de DSS é gerada chamando a função CryptSignHash.
Para gerar uma assinatura DSS
- Chame CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
- Chame CryptCreateHash com o argumento Argel definido como CALG_SHA para obter um identificador para um objeto hash SHA.
- Chame CryptHashData com o argumento hHash definido como 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ção CryptCreateHash.
- Chame CryptSignHash com o argumento hHash definido como o identificador recuperado na etapa anterior. AT_SIGNATURE ou CALG_DSS_SIGN podem ser passados no parâmetro dwKeySpec. A assinatura é retornada para o endereço fornecido no argumento pbSignature e o comprimento da assinatura é retornado para o 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, o dados assinados deve ser hash e, em seguida, a assinatura pode ser verificada.
Para verificar uma assinatura DSS
Chame CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
Chame CryptImportKey para importar a chave pública DSS do signatário.
Chame CryptCreateHash com o argumento Argel definido como CALG_SHA para obter um identificador para um objeto hash SHA.
Chame CryptHashData com o argumento hHash definido como 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ção CryptCreateHash.
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 como 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 em que 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 poder exportar as chaves dedeDSS em um formatoblob de chave de.
Exportar a chave pública do DSS
- Chame CryptAcquireContext para obter um identificador para o Provedor Criptográfico do Microsoft DSS.
- Chame CryptGetUserKey com o argumento dwKeySpec definido como AT_SIGNATURE ou CALG_DSS_SIGN.
- Chame CryptExportKey com hKey definido como 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 dode BLOB de chaveé retornado em pdwDataLen. Um ponteiro NULL pode ser passado em pbData e, nesse caso, apenas o comprimento do BLOB de chave DSS será retornado. O BLOB retornado ao fazer a chamada para CryptExportKey está no formato descrito em blobs de chave do provedor DSS.
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 está definido como PRIVATEKEYBLOB. O BLOB retornado ao fazer a chamada para CryptExportKey está no formato descrito em blobs de chave do provedor DSS.