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.
A API CNG implementa um modelo de provedor extensível que permite carregar um provedor especificando o algoritmo criptográfico necessário em vez de um provedor específico. A vantagem é que um provedor de algoritmo pode ser substituído ou atualizado e você não terá que alterar seu código de forma alguma para usar o novo provedor. Além disso, se algum algoritmo for determinado como inseguro no futuro, uma versão mais segura desse algoritmo pode ser instalada sem afetar seu código. A maioria das APIs CNG requer um provedor ou um objeto criado por um provedor.
As etapas típicas envolvidas no uso da API CNG para operações primitivas criptográficas são as seguintes:
- Abrindo o provedor de algoritmos
- Obtendo ou definindo propriedades do algoritmo
- Criando ou importando uma chave
- Executando operações criptográficas
- Fechando o provedor de algoritmos
Para obter mais informações, consulte Exemplos de programação.
Abrindo o provedor de algoritmos
A função BCryptOpenAlgorithmProvider fornece um identificador de provedor de algoritmo que é usado em APIs CNG subsequentes, como BCryptCreateHash ou BCryptGenerateKeyPair.
Obtendo ou definindo propriedades do algoritmo
Você pode usar o identificador do provedor de algoritmo para obter detalhes de implementação para o algoritmo, como o tamanho da chave ou o modo de operação atual. Use a funçãoBCryptGetProperty para obter propriedades específicas.
Você também pode modificar as propriedades do algoritmo. Por exemplo, se pretender utilizar o encadeamento de cifras de blocos do BCE com AES, defina a propriedade BCRYPT_CHAINING_MODE de um algoritmo AES como BCRYPT_CHAIN_MODE_ECB; a propriedade é atribuída a todas as chaves AES criadas usando esse identificador de algoritmo, sem a necessidade de configurar cada chave AES. Use a função BCryptSetProperty para modificar essas propriedades.
Criando ou importando uma chave
Dependendo do tipo de algoritmo utilizado, poderá ter de criar ou carregar uma chave. Por exemplo, a função BCryptEncrypt usa um identificador de chave para o primeiro parâmetro. Se você quiser que essa função criptografe dados com um algoritmo de criptografia simétrica, como AES, você deve primeiro obter uma chave. A forma como obtém a chave depende do tipo de algoritmo que está a ser utilizado e da origem da chave.
Você pode criar chaves efêmeras com as funções BCryptGenerateSymmetricKey e BCryptGenerateKeyPair . Você também pode importar chaves efêmeras de um BLOB de memória com as funções BCryptImportKey e BCryptImportKeyPair .
Para chaves persistentes, use as funções de armazenamento de chaves para carregar um provedor de armazenamento de chaves e, em seguida, crie ou carregue as chaves. Você também pode usar essas funções para criar ou carregar chaves efêmeras passando NULL por nomes de contêineres. Para obter mais informações sobre as principais funções de armazenamento, consulte CNG Key Storage Functions.
Executando operações criptográficas
Agora você está pronto para executar a operação criptográfica, como criptografar ou descriptografar dados usando as funções BCryptEncrypt ou BCryptDecrypt , respectivamente.
Fechando o provedor de algoritmos
Quando o provedor não é mais necessário, você deve passar o identificador para a função BCryptCloseAlgorithmProvider para fechar o provedor. Isso faz com que o provedor libere todos os recursos que foram alocados para essa instância do provedor de algoritmo. Depois que um identificador de provedor é fechado, ele não pode ser reutilizado.
Carregar um provedor pode ser um processo relativamente demorado. Portanto, você deve armazenar em cache qualquer identificador de provedor que você referenciará várias vezes durante o tempo de vida do seu aplicativo.
Exemplos de programação
Os exemplos a seguir descrevem como executar operações criptográficas específicas usando CNG:
- Criando um Hash com CNG
- Assinatura de dados com CNG
- Criptografando dados com CNG
- Usando ML-DSA com GNC
- Usando ML-KEM com GNC