Partilhar via


A geração de chaves de criptografia e descriptografia

Criação e gerenciamento de chaves é uma parte importante do processo de criptografia. Algoritmos simétricos exigem a criação de uma chave e um vetor de inicialização (IV) deve ser mantido em segredo de qualquer pessoa que não deve descriptografar seus dados. Algoritmos assimétricos exigem a criação de uma chave pública e uma chave particular. A chave pública pode se tornar pública a qualquer pessoa, enquanto a chave privada deve conhecida somente pela parte que será descriptografar os dados criptografados com a chave pública. Esta seção descreve como gerar e gerenciar chaves de algoritmos simétricas e assimétricas.

Chaves simétricas

As classes de criptografia simétrica é fornecida pelo.NET Framework exigem uma chave e um novo vetor de inicialização (IV) para criptografar e descriptografar dados. Sempre que você cria uma nova instância de uma das classes de criptografia simétricas gerenciadas usando o construtor padrão, uma nova chave e IV são criados automaticamente. Qualquer pessoa que permitem descriptografar os dados deve ter a mesma chave e IV e usam o mesmo algoritmo. Geralmente, uma nova chave e IV devem ser criadas para cada sessão, e a chave nem IV deve ser armazenado para uso em uma sessão posterior.

Para se comunicar de uma chave simétrica e IV para a parte remota, você normalmente teria criptografar a chave simétrica e IV usando a criptografia assimétrica. É extremamente inseguro, enviar esses valores através de uma rede insegura, sem criptografá-los como qualquer pessoa que intercepta a esses valores pode descriptografar seus dados. Para obter mais informações sobre esse processo de criptografar e transferir a chave e o IV, consulte a criação de um esquema de criptografia.

O exemplo a seguir mostra a criação de uma nova instância de TripleDESCryptoServiceProvider classe que implementa o algoritmo triplo DES.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();

Quando o código anterior é executado, uma nova chave e IV são geradas e colocadas na chave e IV propriedades, respectivamente.

Às vezes, talvez você precise gerar várias chaves. Nessa situação, você pode criar uma nova instância de uma classe que implementa um algoritmo simétrico e, em seguida, criar uma nova chave e IV chamando o GenerateKey e GenerateIV métodos. O exemplo de código a seguir ilustra como criar novas chaves e IVs após ter sido feita uma nova instância da classe de criptografia assimétrica.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TDES.GenerateIV()
TDES.GenerateKey()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();

Quando o código anterior é executado, uma chave e IV são gerados quando a nova instância do TripleDESCryptoServiceProvider é feita. Outra chave e IV são criadas quando o GenerateKey e GenerateIV métodos são chamados.

Chaves assimétricas

A.NET Framework fornece a RSACryptoServiceProvider e DSACryptoServiceProvider classes para criptografia assimétrica. Essas classes de criar um par de chaves pública/privada ao usar o construtor padrão para criar uma nova instância. As chaves assimétricas podem ser armazenadas para uso em várias sessões ou geradas para uma sessão somente. Enquanto a chave pública pode ser disponibilizada, a chave particular deve ser bastante protegida.

Um par de chaves pública/particular é gerado sempre que uma nova instância de uma classe de algoritmo assimétrico é criada. Depois que uma nova instância da classe é criada, as informações de chave podem ser extraídas usando um dos dois métodos:

Os dois métodos aceitam um valor Boolean que indica se para retornar somente as informações de chave públicas ou para retornar a chave pública e das informações de chave particular. Um RSACryptoServiceProvider classe pode ser inicializado para o valor de um RSAParameters estrutura usando o ImportParameters método.

Chaves privadas assimétricas nunca devem ser armazenadas literalmente ou texto sem formatação no computador local. Se você precisar armazenar uma chave particular, você deve usar um contêiner de chave. Para obter mais informações sobre como armazenar uma chave particular em um recipiente de chave, consulte Como: Armazenar Chaves Asssimétricas em um Contêiner de Chaves.

O exemplo de código a seguir cria uma nova instância da RSACryptoServiceProvider de classe, criando um par de chaves pública/privada e salva as informações de chaves públicas para uma RSAParameters estrutura.

'Generate a public/private key pair.
Dim RSA as RSACryptoServiceProvider = new RSACryptoServiceProvider()
'Save the public key information to an RSAParameters structure.
Dim RSAKeyInfo As RSAParameters = RSA.ExportParameters(false)
//Generate a public/private key pair.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);

Consulte também

Tarefas

Como: Armazenar Chaves Asssimétricas em um Contêiner de Chaves

Conceitos

Criptografia de dados

Descriptografar dados

Serviços de criptografia

Outros recursos

Tarefas de criptografia