Serviços criptográficosCryptographic Services

As redes públicas, como a Internet não fornecem um meio de uma comunicação segura entre entidades.Public networks such as the Internet do not provide a means of secure communication between entities. A comunicação por essas redes é suscetível a que está sendo lido ou modificado até mesmo por terceiros não autorizados.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. A criptografia ajuda a proteger os dados sejam exibidos, fornece maneiras de detectar se os dados foram modificados, e ajuda a fornecer um meio seguro de comunicação em canais de outra forma não seguras.Cryptography helps protect data from being viewed, provides ways to detect whether data has been modified, and helps provide a secure means of communication over otherwise nonsecure channels. Por exemplo, dados podem ser criptografados usando um algoritmo de criptografia, transmitidos em um estado criptografado e mais tarde descriptografados pelo parceiro pretendido.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Se um terceiro intercepta os dados criptografados, será difícil decifrar.If a third party intercepts the encrypted data, it will be difficult to decipher.

No .NET Framework, as classes de System.Security.Cryptography namespace gerenciar muitos detalhes de criptografia para você.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Algumas são invólucros para a API de criptografia da Microsoft não gerenciado (CryptoAPI), enquanto outras são implementações puramente gerenciadas.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. Você não precisa ser um especialista em criptografia para usar essas classes.You do not need to be an expert in cryptography to use these classes. Quando você cria uma nova instância de um da criptografia de classes do algoritmo, as chaves são geradas automaticamente para facilidade de uso e as propriedades padrão são tão seguros e protegidos possível.When you create a new instance of one of the encryption algorithm classes, keys are autogenerated for ease of use, and default properties are as safe and secure as possible.

Esta visão geral fornece um resumo dos métodos de criptografia e práticas recomendadas com suporte pelo .NET Framework, incluindo os manifestos do ClickOnce, Suite B e suporte de criptografia CNG (Next Generation) introduzido no .NET Framework 3.5.This overview provides a synopsis of the encryption methods and practices supported by the .NET Framework, including the ClickOnce manifests, Suite B, and Cryptography Next Generation (CNG) support introduced in the .NET Framework 3.5.

Esta visão geral contém as seguintes seções:This overview contains the following sections:

Para obter informações adicionais sobre a criptografia e sobre as ferramentas que permitem que você adicione segurança criptográfica aos seus aplicativos, componentes e serviços da Microsoft, consulte o desenvolvimento de Win32 e COM, a seção de segurança desta documentação.For additional information about cryptography and about Microsoft services, components, and tools that enable you to add cryptographic security to your applications, see the Win32 and COM Development, Security section of this documentation.

Primitivos criptográficosCryptographic Primitives

Em uma situação comum em que a criptografia é usada, duas partes (Alice e Bob) se comunicam por um canal não seguro.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Alice e Bob deseja garantir que sua comunicação permaneça incompreensível por qualquer pessoa que pode estar escutando.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Além disso, como Alice e Bob está em locais remotos, Alice deve ter certeza de que as informações que ela recebeu de Bob não foi modificadas por qualquer pessoa durante a transmissão.Furthermore, because Alice and Bob are in remote locations, Alice must make sure that the information she receives from Bob has not been modified by anyone during transmission. Além disso, ela deve garantir que as informações realmente se originam de Bob e não de alguém que está representando a Bob.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

Criptografia é usada para atingir as seguintes metas:Cryptography is used to achieve the following goals:

  • Confidencialidade: Para ajudar a proteger a identidade do usuário ou os dados sejam lidas.Confidentiality: To help protect a user's identity or data from being read.

  • Integridade de dados: Para ajudar a proteger os dados que está sendo alterada.Data integrity: To help protect data from being changed.

  • Autenticação: Para garantir que os dados originados de uma pessoa específica.Authentication: To ensure that data originates from a particular party.

  • Não-repúdio: Para impedir que uma pessoa específica negando o envio de uma mensagem.Non-repudiation: To prevent a particular party from denying that they sent a message.

Para atingir essas metas, você pode usar uma combinação de algoritmos e práticas recomendadas, conhecidas como primitivos criptográficos para criar um esquema de criptografia.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. A tabela a seguir lista os primitivos criptográficos e seus usos.The following table lists the cryptographic primitives and their uses.

Primitivos criptográficosCryptographic primitive UseUse
Criptografia de chave de segredo (criptografia simétrica)Secret-key encryption (symmetric cryptography) Executa uma transformação nos dados para mantê-lo de ser lido por terceiros.Performs a transformation on data to keep it from being read by third parties. Esse tipo de criptografia usa compartilhada, uma única chave secreta para criptografar e descriptografar dados.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Criptografia de chave pública (criptografia assimétrica)Public-key encryption (asymmetric cryptography) Executa uma transformação nos dados para mantê-lo de ser lido por terceiros.Performs a transformation on data to keep it from being read by third parties. Esse tipo de criptografia usa um par de chaves pública/privada para criptografar e descriptografar dados.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Uma assinatura criptográficaCryptographic signing Ajuda a verificar a origem dos dados de um terceiro, criando uma assinatura digital que é exclusiva para essa parte.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Esse processo também usa funções de hash.This process also uses hash functions.
Hashes criptográficosCryptographic hashes Mapeia dados de qualquer comprimento para uma sequência de bytes de comprimento fixo.Maps data from any length to a fixed-length byte sequence. Os hashes são estatisticamente exclusivos; uma sequência diferente de dois bytes não serão de hash para o mesmo valor.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Voltar ao inícioBack to top

Criptografia de chave secretaSecret-Key Encryption

Algoritmos de criptografia de chave secreta usam uma única chave secreta para criptografar e descriptografar dados.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Você deve proteger a chave de acesso por agentes não autorizados, pois qualquer parte que tem a chave pode usá-lo para descriptografar os dados ou criptografar seus próprios dados, afirmando que ela seja proveniente de você.You must secure the key from access by unauthorized agents, because any party that has the key can use it to decrypt your data or encrypt their own data, claiming it originated from you.

Chave secreta de criptografia também é conhecida como criptografia simétrica porque a mesma chave é usada para criptografia e descriptografia.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Algoritmos de criptografia de chave secreta são muito rápidos (em comparação com os algoritmos de chave pública) e são bem adequados para executar transformações de criptografia em grandes fluxos de dados.Secret-key encryption algorithms are very fast (compared with public-key algorithms) and are well suited for performing cryptographic transformations on large streams of data. Algoritmos de criptografia assimétrica, como RSA são limitados matematicamente na quantidade de dados, eles podem criptografar.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Algoritmos de criptografia simétrica geralmente não têm esses problemas.Symmetric encryption algorithms do not generally have those problems.

Um tipo de algoritmo de chave de segredo chamado uma codificação de bloco é usado para criptografar um bloco de dados por vez.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Codificações de bloco fortes, como criptografia de dados padrão (DES), TripleDES, e a criptografia AES (padrão avançado) criptograficamente transformar um bloco de entrada de n bytes em um bloco de saída de bytes criptografados.Block ciphers such as Data Encryption Standard (DES), TripleDES, and Advanced Encryption Standard (AES) cryptographically transform an input block of n bytes into an output block of encrypted bytes. Se você quiser criptografar ou descriptografar uma sequência de bytes, você precisa fazê-lo bloco por bloco.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Porque n é pequeno (8 bytes para DES e TripleDES; 16 bytes [padrão], em bytes de 24 ou 32 bytes para AES), valores de dados que são maiores do que n precisam ser criptografados um bloco por vez.Because n is small (8 bytes for DES and TripleDES; 16 bytes [the default], 24 bytes, or 32 bytes for AES), data values that are larger than n have to be encrypted one block at a time. Valores de dados que são menores do que n precisa ser expandido para n fim de ser processado.Data values that are smaller than n have to be expanded to n in order to be processed.

Uma forma simple de codificação de bloco é chamada de modo de livro de códigos eletrônico (ECB).One simple form of block cipher is called the electronic codebook (ECB) mode. Modo ECB não é considerado seguro, porque ele não usa um vetor de inicialização para inicializar o primeiro bloco de texto sem formatação.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Para uma determinada chave secreta k, uma codificação de bloco simples que não usa um vetor de inicialização criptografará o mesmo bloco de entrada de texto não criptografado no mesmo bloco de saída do texto cifrado.For a given secret key k, a simple block cipher that does not use an initialization vector will encrypt the same input block of plaintext into the same output block of ciphertext. Portanto, se você tiver blocos duplicados no seu fluxo de entrada de texto sem formatação, você terá de blocos duplicados no seu fluxo de texto cifrado de saída.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Esses blocos de saída duplicado alertar os usuários não autorizados para a criptografia fraca usaram os algoritmos que já foram empregados e os modos possíveis de ataque.These duplicate output blocks alert unauthorized users to the weak encryption used the algorithms that might have been employed, and the possible modes of attack. O modo de criptografia ECB, portanto, é bastante vulnerável a análise e, por fim, a descoberta de chave.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

As classes de codificação de bloco que são fornecidas na biblioteca de classes base usam um padrão de encadeamento de modo chamado blocos de criptografia encadeamento CBC (), embora você possa alterar esse padrão se desejar.The block cipher classes that are provided in the base class library use a default chaining mode called cipher-block chaining (CBC), although you can change this default if you want.

Codificações CBC superam os problemas associados com ECB codificações por meio de um vetor de inicialização (IV) para criptografar o primeiro bloco de texto sem formatação.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Cada bloco subsequente de texto sem formatação passa por um OR exclusivo bit a bit (XOR) operação com o bloco de texto cifrado anterior antes de ele é criptografado.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Cada bloco de texto cifrado, portanto, é dependente de todos os blocos anteriores.Each ciphertext block is therefore dependent on all previous blocks. Quando esse sistema é cabeçalhos de mensagem usado, comuns que podem ser conhecidos para um usuário não autorizado não pode ser usado para efetuar engenharia reversa de uma chave.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Uma maneira de comprometer os dados são criptografados com uma criptografia CBC é executar uma pesquisa detalhada de todas as chaves possíveis.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. Dependendo do tamanho da chave que é usado para executar a criptografia, esse tipo de pesquisa é muito demorado usando até mesmo os computadores mais rápidos e, portanto, é impraticável.Depending on the size of the key that is used to perform encryption, this kind of search is very time-consuming using even the fastest computers and is therefore infeasible. Chaves maiores são mais difíceis de decifrar.Larger key sizes are more difficult to decipher. Embora a criptografia não impossibilitam, teoricamente, um adversário recuperar os dados criptografados, ele gere o custo de fazer isso.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Se demorar três meses para executar uma pesquisa detalhada para recuperar dados que é significativos apenas para alguns dias, o método de pesquisa detalhada é impraticável.If it takes three months to perform an exhaustive search to retrieve data that is meaningful only for a few days, the exhaustive search method is impractical.

A desvantagem de criptografia de chave secreta é que ele supõe que duas partes têm concordaram com uma chave e o IV e comunicadas seus valores.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. O IV não é considerado um segredo e pode ser transmitido em texto não criptografado com a mensagem.The IV is not considered a secret and can be transmitted in plaintext with the message. No entanto, a chave deve ser mantida em segredo de usuários não autorizados.However, the key must be kept secret from unauthorized users. Devido a esses problemas, criptografia de chave secreta geralmente é usada junto com a criptografia de chave pública para privada comunicar-se os valores da chave e IV.Because of these problems, secret-key encryption is often used together with public-key encryption to privately communicate the values of the key and IV.

Supondo que Alice e Bob é duas partes que desejam se comunicar através de um canal não seguro, eles podem usar criptografia de chave secreta da seguinte maneira: Alice e Bob concorda em usar um algoritmo específico (por exemplo, AES) com uma chave particular e o IV.Assuming that Alice and Bob are two parties who want to communicate over a nonsecure channel, they might use secret-key encryption as follows: Alice and Bob agree to use one particular algorithm (AES, for example) with a particular key and IV. Alice compõe uma mensagem e cria um fluxo de rede (talvez uma nomeada pipe ou rede email) no qual enviar a mensagem.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. Em seguida, ela criptografa o texto usando a chave e o IV e envia a mensagem criptografada e o IV para Bob através da intranet.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Carlos recebe o texto criptografado e descriptografa-a usando o IV e acordados anteriormente a chave.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. Se a transmissão é interceptada, o interceptador não é possível recuperar a mensagem original, porque ele não sabe a chave.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. Nesse cenário, somente a chave deve permanecer secreta.In this scenario, only the key must remain secret. Em um cenário do mundo real, Alice ou Bob gera uma chave secreta e usa criptografia de chave pública (assimétrica) para transferir a chave (simétrica) secreta para a outra parte.In a real world scenario, either Alice or Bob generates a secret key and uses public-key (asymmetric) encryption to transfer the secret (symmetric) key to the other party. Para obter mais informações sobre a criptografia de chave pública, consulte a próxima seção.For more information about public-key encryption, see the next section.

O .NET Framework fornece as seguintes classes que implementam algoritmos de criptografia de chave secreta:The .NET Framework provides the following classes that implement secret-key encryption algorithms:

Voltar ao inícioBack to top

Criptografia de chave públicaPublic-Key Encryption

Criptografia de chave pública usa uma chave privada que deve ser mantida em segredo de usuários não autorizados e uma chave pública que pode se tornar pública para qualquer pessoa.Public-key encryption uses a private key that must be kept secret from unauthorized users and a public key that can be made public to anyone. A chave pública e a chave privada são matematicamente vinculados; dados criptografados com a chave pública podem ser descriptografados somente com a chave privada e os dados que estão assinados com a chave privada podem ser verificados somente com a chave pública.The public key and the private key are mathematically linked; data that is encrypted with the public key can be decrypted only with the private key, and data that is signed with the private key can be verified only with the public key. A chave pública pode ser disponibilizada para qualquer pessoa; ele é usado para criptografia de dados a serem enviados para o protetor da chave privada.The public key can be made available to anyone; it is used for encrypting data to be sent to the keeper of the private key. Algoritmos de criptografia de chave pública também são conhecidos como algoritmos assimétricos porque uma chave é necessária para criptografar os dados e outra chave é necessária para descriptografar os dados.Public-key cryptographic algorithms are also known as asymmetric algorithms because one key is required to encrypt data, and another key is required to decrypt data. Uma regra básica de criptografia impede a reutilização da chave, e as duas chaves devem ser exclusivas para cada sessão de comunicação.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. No entanto, na prática, chaves assimétricas são geralmente de longa duração.However, in practice, asymmetric keys are generally long-lived.

Duas partes (Alice e Bob) podem usar criptografia de chave pública da seguinte maneira: Primeiro, Alice gera um par de chaves pública/privada.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Se Bob deseja enviar uma mensagem criptografada de Alice, ele pede sua chave pública.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alice envia sua chave pública Bob em uma rede não segura e Bob usa essa chave para criptografar uma mensagem.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Bob envia a mensagem criptografada para Alice, e ela descriptografa usando sua chave privada.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Se Bob recebida a chave de Alice por um canal não seguro, como uma rede pública, Bob está aberto a um ataque man-in-the-middle.If Bob received Alice's key over a nonsecure channel, such as a public network, Bob is open to a man-in-the-middle attack. Portanto, Carlos devem verificar com Alice que ele tenha uma cópia correta de sua chave pública.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Durante a transmissão de chave pública de Alice, um agente não autorizado pode interceptar a chave.During the transmission of Alice's public key, an unauthorized agent might intercept the key. Além disso, o mesmo agente pode interceptar a mensagem criptografada de Bob.Furthermore, the same agent might intercept the encrypted message from Bob. No entanto, o agente não pode descriptografar a mensagem com a chave pública.However, the agent cannot decrypt the message with the public key. A mensagem pode ser descriptografada somente com a chave privada de Alice, que não foram transmitida.The message can be decrypted only with Alice's private key, which has not been transmitted. Alice não usa sua chave privada para criptografar uma mensagem de resposta para Bob, porque qualquer pessoa com a chave pública pode descriptografar a mensagem.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Se Alice quer enviar uma mensagem de volta para Bob, ela solicitará a sua chave pública de Bob e criptografa sua mensagem usando essa chave pública.If Alice wants to send a message back to Bob, she asks Bob for his public key and encrypts her message using that public key. Bob descriptografa a mensagem usando sua chave privada associada.Bob then decrypts the message using his associated private key.

Nesse cenário, Alice e Bob use criptografia de chave pública (assimétrica) para transferir uma chave de segredo (simétrica) e usar a criptografia de chave secreta para o restante de sua sessão.In this scenario, Alice and Bob use public-key (asymmetric) encryption to transfer a secret (symmetric) key and use secret-key encryption for the remainder of their session.

A lista a seguir oferece comparações entre os algoritmos de criptografia de chave pública e a chave secreta:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Algoritmos de criptografia de chave pública usam um tamanho de buffer fixo, ao passo que algoritmos de criptografia de chave secreta usam um buffer de comprimento variável.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Algoritmos de chave pública não podem ser usados os dados de cadeia juntos em fluxos a maneira como os algoritmos de chave secreta podem, porque apenas pequenas quantidades de dados podem ser criptografadas.Public-key algorithms cannot be used to chain data together into streams the way secret-key algorithms can, because only small amounts of data can be encrypted. Portanto, operações assimétricas não usam o mesmo modelo de streaming como operações simétricas.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • Criptografia de chave pública tem um keyspace muito maior (intervalo de valores possíveis para a chave) que a criptografia de chave secreta.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Portanto, a criptografia de chave pública é menos suscetível a ataques completa que tente todas as chaves possíveis.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • As chaves públicas são fáceis de distribuir porque eles não precisam ser protegidos, desde que alguma forma existe para verificar a identidade do remetente.Public keys are easy to distribute because they do not have to be secured, provided that some way exists to verify the identity of the sender.

  • Alguns algoritmos de chave pública (como RSA e DSA, mas não Diffie-Hellman) podem ser usados para criar assinaturas digitais para verificar a identidade do remetente de dados.Some public-key algorithms (such as RSA and DSA, but not Diffie-Hellman) can be used to create digital signatures to verify the identity of the sender of data.

  • Algoritmos de chave pública forem muito lentos em comparação com os algoritmos de chave secreta e não são projetados para criptografar uma grande quantidade de dados.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Algoritmos de chave pública são úteis apenas para transferir muito pequenas quantidades de dados.Public-key algorithms are useful only for transferring very small amounts of data. Normalmente, a criptografia de chave pública é usada para criptografar uma chave e IV a ser usado por um algoritmo de chave secreta.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Depois que a chave e IV são transferidas, criptografia de chave secreta é usada para o restante da sessão.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

O .NET Framework fornece as seguintes classes que implementam algoritmos de criptografia de chave pública:The .NET Framework provides the following classes that implement public-key encryption algorithms:

RSA permite criptografia e assinatura, mas DSA pode ser usada apenas para a assinatura e Diffie-Hellman pode ser usado apenas para geração de chave.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. Em geral, algoritmos de chave pública são mais limitados em seus usos que algoritmos de chave privada.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Voltar ao inícioBack to top

Assinaturas digitaisDigital Signatures

Algoritmos de chave pública também podem ser usados para assinaturas digitais de formulário.Public-key algorithms can also be used to form digital signatures. Assinaturas digitais para autenticar a identidade de um remetente (se você confiar a chave pública do remetente) e ajudar a proteger a integridade dos dados.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Usando uma chave pública gerada por Alice, o destinatário dos dados de Alice pode verificar que Alice enviou comparando a assinatura digital para os dados de Alice e a chave pública de Alice.Using a public key generated by Alice, the recipient of Alice's data can verify that Alice sent it by comparing the digital signature to Alice's data and Alice's public key.

Para usar a criptografia de chave pública para assinar digitalmente uma mensagem, Alice primeiro aplica um algoritmo de hash para a mensagem para criar um resumo da mensagem.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. O resumo da mensagem é uma representação compacta e exclusiva de dados.The message digest is a compact and unique representation of data. Alice, em seguida, criptografa o resumo da mensagem com sua chave privada para criar sua assinatura pessoal.Alice then encrypts the message digest with her private key to create her personal signature. Ao receber a mensagem e a assinatura, Bob descriptografa a assinatura usando a chave pública de Alice para recuperar o resumo da mensagem e os hashes de mensagem usando o mesmo algoritmo de hash que Alice é usada.Upon receiving the message and signature, Bob decrypts the signature using Alice's public key to recover the message digest and hashes the message using the same hash algorithm that Alice used. Se o resumo da mensagem que Bob computa exatamente corresponder o resumo da mensagem recebido de Alice, Bob é garantido que a mensagem veio o detentor da chave privada e que os dados não foi modificados.If the message digest that Bob computes exactly matches the message digest received from Alice, Bob is assured that the message came from the possessor of the private key and that the data has not been modified. Se Bob confia que Alice é o detentor da chave privada, ele sabe que a mensagem foi enviada por Alice.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Observação

Uma assinatura pode ser verificada por qualquer pessoa porque a chave pública do remetente é conhecimento comum e normalmente é incluído no formato de assinatura digital.A signature can be verified by anyone because the sender's public key is common knowledge and is typically included in the digital signature format. Esse método não manterá a confidencialidade da mensagem; para a mensagem a ser secreta, ele também deve ser criptografado.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

O .NET Framework fornece as seguintes classes que implementam algoritmos de assinatura digital:The .NET Framework provides the following classes that implement digital signature algorithms:

Voltar ao inícioBack to top

Valores de hashHash Values

Algoritmos de hash mapeiam valores binários de um comprimento arbitrário para menores valores binários de comprimento fixo, conhecido como valores de hash.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Um valor de hash é uma representação numérica de uma parte dos dados.A hash value is a numerical representation of a piece of data. Se um parágrafo de texto não criptografado de hash e alterar até mesmo uma letra do parágrafo, um hash subsequente produzirá um valor diferente.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Se o hash é criptograficamente forte, seu valor será alterado significativamente.If the hash is cryptographically strong, its value will change significantly. Por exemplo, se um único bit de uma mensagem for alterado, uma função de hash forte pode produzir uma saída diferente em 50%.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Muitos valores de entrada podem hash para o mesmo valor de saída.Many input values may hash to the same output value. No entanto, é impraticável para encontrar duas entradas distintas esse hash com o mesmo valor.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Duas partes (Alice e Bob) poderiam usar uma função de hash para garantir a integridade da mensagem.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Eles selecionaria um algoritmo de hash para assinar suas mensagens.They would select a hash algorithm to sign their messages. Alice gravar uma mensagem e, em seguida, criar um hash da mensagem usando o algoritmo selecionado.Alice would write a message, and then create a hash of that message by using the selected algorithm. Eles, em seguida, siga um dos seguintes métodos:They would then follow one of the following methods:

  • Alice envia a mensagem de texto sem formatação e a mensagem de hash (assinatura digital) para Bob.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Carlos recebem e hashes de mensagem e compara seu valor de hash para o valor de hash que ele recebeu de Alice.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Se os valores de hash forem idênticos, a mensagem não foi alterada.If the hash values are identical, the message was not altered. Se os valores não forem idênticos, a mensagem foi alterada depois que ele escreveu Alice.If the values are not identical, the message was altered after Alice wrote it.

    Infelizmente, esse método não estabelece a autenticidade do remetente.Unfortunately, this method does not establish the authenticity of the sender. Qualquer pessoa pode representar Alice e enviar uma mensagem para Bob.Anyone can impersonate Alice and send a message to Bob. Eles podem usar o mesmo algoritmo de hash para assinar sua mensagem e tudo o que Bob pode determinar se é que a mensagem corresponda à sua assinatura.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Isso é uma forma de um ataque man-in-the-middle.This is one form of a man-in-the-middle attack. Para obter mais informações, consulte geração CNG (Cryptography Next) exemplo de comunicação seguro.For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Alice envia a mensagem de texto sem formatação para Bob, por um canal público não seguro.Alice sends the plaintext message to Bob over a nonsecure public channel. Ela envia a mensagem de hash para Bob por um canal seguro de particular.She sends the hashed message to Bob over a secure private channel. Bob recebe a mensagem de texto sem formatação, coloca em hash e compara o hash para o hash em particular troca.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Se os hashes corresponderem, Bob sabe duas coisas:If the hashes match, Bob knows two things:

    • A mensagem não foi alterada.The message was not altered.

    • O remetente da mensagem (Alice) é autêntico.The sender of the message (Alice) is authentic.

    Para este sistema funcionar, Alice deve ocultar seu valor original de hash de todas as partes, exceto Carlos.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alice envia a mensagem de texto sem formatação para Bob, por um canal público não seguro e coloca a mensagem de hash em seu site podem ser exibido publicamente.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Esse método evita a violação de mensagem, impedindo que qualquer pessoa modificar o valor de hash.This method prevents message tampering by preventing anyone from modifying the hash value. Embora a mensagem e seu hash podem ser lidos por qualquer pessoa, o valor de hash pode ser alterado somente por Alice.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Um invasor que deseja representar Alice exigiria acesso ao site de Web de Alice.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Nenhum dos métodos anteriores impedirá alguém de ler as mensagens de Alice, porque elas são transmitidas em texto sem formatação.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Segurança completa normalmente requer assinaturas digitais (assinatura de mensagens) e criptografia.Full security typically requires digital signatures (message signing) and encryption.

O .NET Framework fornece as seguintes classes que implementam algoritmos de hash:The .NET Framework provides the following classes that implement hashing algorithms:

Observação

Falhas de design de MD5 foram descobertas em 1996, e SHA-1 foi recomendado em vez disso.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. Em 2004, falhas adicionais foram descobertas e o algoritmo MD5 não é mais considerado seguro.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. O algoritmo SHA-1 também foi encontrado para ser inseguro e SHA-2 agora é recomendado em vez disso.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Voltar ao inícioBack to top

Geração de números aleatóriosRandom Number Generation

Geração de números aleatórios é parte integrante de muitas operações criptográficas.Random number generation is integral to many cryptographic operations. Por exemplo, chaves de criptografia precisam ser tão aleatório possível para que ele seja impraticável para reproduzi-los.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Geradores de números aleatórios criptográficos devem gerar uma saída é impraticável para prever com uma probabilidade de que é melhor do que a metade.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Portanto, qualquer método de prever o próximo bit de saída não deve executar melhor do que a previsão aleatória.Therefore, any method of predicting the next output bit must not perform better than random guessing. As classes no .NET Framework usam os geradores de números aleatórios para gerar chaves de criptografia.The classes in the .NET Framework use random number generators to generate cryptographic keys.

O RNGCryptoServiceProvider classe é uma implementação de um algoritmo do gerador de números aleatórios.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Voltar ao inícioBack to top

Manifestos do ClickOnceClickOnce Manifests

No .NET Framework 3.5, as seguintes classes de criptografia permitem obter e verifique as informações sobre assinaturas de manifesto para aplicativos que são implantados usando a tecnologia ClickOnce:In the .NET Framework 3.5, the following cryptography classes let you obtain and verify information about manifest signatures for applications that are deployed using ClickOnce technology:

Além disso, as classes a seguir fornecem informações específicas de assinatura:In addition, the following classes provide specific signature information:

Voltar ao inícioBack to top

Suporte para Suite BSuite B Support

O .NET Framework 3.5 dá suporte ao conjunto de algoritmos criptográficos publicado pelo National Security Agency (NSA) Suite B.The .NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Para obter mais informações sobre o Suite B, consulte o NSA Suite B criptografia folheto informativo.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Os seguintes algoritmos estão incluídos:The following algorithms are included:

  • Avançadas de algoritmo de criptografia AES (padrão) com tamanhos de chave de 128, 192, e 256 bits para criptografia.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • Proteja os algoritmos de Hash SHA-1, SHA-256, SHA-384 e SHA-512 para hash.Secure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. (Os três últimos são geralmente agrupados juntos e conhecidos como SHA-2.)(The last three are generally grouped together and referred to as SHA-2.)

  • ECDSA Digital curva elíptica assinatura algoritmo (), usando curvas de módulos primos 521 bits, 384 bits e 256 bits para a assinatura.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. A documentação da NSA especificamente define esses curvas e os chama p-256, p-384 e p-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Esse algoritmo é fornecido pela ECDsaCng classe.This algorithm is provided by the ECDsaCng class. Ele permite que você se conectar com uma chave privada e verificar a assinatura com uma chave pública.It enables you to sign with a private key and verify the signature with a public key.

  • Elíptica Diffie-Hellman algoritmo ECDH (curva), usando curvas de módulos primos 521 bits, 384 bits e 256 bits para a troca de chaves e o acordo secreto.Elliptic Curve Diffie-Hellman (ECDH) algorithm, using curves of 256-bit, 384-bit, and 521-bit prime moduli for the key exchange and secret agreement. Esse algoritmo é fornecido pela ECDiffieHellmanCng classe.This algorithm is provided by the ECDiffieHellmanCng class.

Wrappers de código gerenciado para o FIPS Federal Information Processing Standard () certificada implementações das implementações AES, SHA-256, SHA-384 e SHA-512 estão disponíveis na nova AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, e SHA512CryptoServiceProvider classes.Managed code wrappers for the Federal Information Processing Standard (FIPS) certified implementations of the AES, SHA-256, SHA-384, and SHA-512 implementations are available in the new AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, and SHA512CryptoServiceProvider classes.

Voltar ao inícioBack to top

Classes de geração (CNG) próximo da criptografiaCryptography Next Generation (CNG) Classes

As classes de criptografia CNG (Next Generation) fornecem um wrapper gerenciado em torno das funções da CNG nativos.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (A CNG é a substituição de CryptoAPI.) Essas classes têm "Cng" como parte de seus nomes.(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. É fundamental para as classes de wrapper CNG o CngKey chave de classe de contêiner, que abstrai o armazenamento e o uso de chaves CNG.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Essa classe permite que você armazene um par de chaves ou uma chave pública com segurança e fazer referência a ele usando um nome de cadeia de caracteres simples.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. O elíptica com base em curva ECDsaCng classe de assinatura e o ECDiffieHellmanCng pode usar a classe de criptografia CngKey objetos.The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

O CngKey classe é usada para uma variedade de operações adicionais, incluindo abrir, criar, excluir e exportar chaves.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Ele também fornece acesso para o identificador de chave de base a ser usado ao chamar funções nativas diretamente.It also provides access to the underlying key handle to use when calling native functions directly.

O .NET Framework 3.5 também inclui uma variedade de classes CNG auxiliares, como o seguinte:The .NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Voltar ao inícioBack to top

TítuloTitle DescriçãoDescription
Modelo de criptografiaCryptography Model Descreve como a criptografia é implementada na biblioteca de classes base.Describes how cryptography is implemented in the base class library.
Passo a passo: Criando um aplicativo criptográficoWalkthrough: Creating a Cryptographic Application Demonstra as tarefas básicas de criptografia e descriptografia.Demonstrates basic encryption and decryption tasks.
Configurando classes de criptografiaConfiguring Cryptography Classes Descreve como mapear nomes de algoritmo para classes de criptografia e identificadores de objeto do mapa para um algoritmo de criptografia.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.