Visão geral sobre criptografia
Criptografia ajuda a proteger os dados sejam visualizados, fornece maneiras de detectar se os dados foram modificados e ajuda a fornecer um meio seguro de comunicação por canais de outra forma não seguras.Por exemplo, os dados podem ser criptografados usando um algoritmo de criptografia, transmitidos em um estado criptografado e mais tarde descriptografados pela parte pretendida.Se outra pessoa interceptar os dados criptografados, será difícil decifrar.
Esta visão geral fornece um resumo dos métodos de criptografia e práticas recomendadas com suporte a .NET Framework, incluindo os manifestos ClickOnce, Suite B e suporte a CNG (Cryptography Next Generation) fornecido pela .NET Framework versão 3.5. A visão geral contém as seções a seguir:
Primitivos criptográficos
Criptografia de chave secreta
Criptografia de chave pública
Assinaturas digital
Valores de hash
Geração de números aleatórios
Manifestos do ClickOnce
Suporte ao Conjunto B
Cryptography Next Generation (CNG) classes
Para obter informações adicionais sobre criptografia e ferramentas que permitem que você adicione segurança criptográfica para seus aplicativos, componentes e serviços da Microsoft, consulte o Win32 e COM desenvolvimento, seção de segurança desta documentação.
Primitivos criptográficos
Em uma situação típica em que a criptografia é usada, duas partes (Alice e Bob) se comunicar através de um canal não seguro.Alice e Bob deseja garantir que sua comunicação permaneça incompreensível por qualquer pessoa que pode estar escutando.Além disso, como Alice e Bob está em locais remoto, Alice deve certificar-se de que as informações que ele recebe de Bob não foi modificadas por qualquer pessoa durante a transmissão.Além disso, ela deve certificar-se de que as informações realmente provenientes de Bob e não de uma pessoa que está representando Bob.
Criptografia é usada para atingir as seguintes metas:
Confidencialidade: Para ajudar a proteger identidade ou os dados do usuário de que está sendo lido.
integridade dos dados: Para ajudar a proteger os dados sejam alterados.
Autenticação: Para garantir que os dados se originam de uma pessoa específica.
Não-repúdio: Para impedir que uma pessoa específica negar enviou uma mensagem.
Para atingir esses objetivos, você pode usar uma combinação de práticas recomendadas conhecidas sistema autônomo primitivos criptográficos e algoritmos para criar um esquema de criptografia.A tabela a seguir lista os primitivos criptográficos e seus usos.
Primitivos criptográficos |
Uso |
---|---|
Criptografia de chave secreta (criptografia simétrica) |
Executa uma transformação nos dados para mantê-lo contra leitura por terceiros.Esse tipo de criptografia usa compartilhada, uma única chave secreta para criptografar e descriptografar dados. |
Criptografia de chave pública (criptografia assimétrica) |
Executa uma transformação nos dados para mantê-lo contra leitura por terceiros.Esse tipo de criptografia usa um emparelhar de chaves pública/particular para criptografar e descriptografar dados. |
Assinatura de criptografia |
Ajuda a verificar que os dados se originam de uma parte específica, criando uma assinatura digital exclusiva para essa parte.Esse processo também usa funções de hash. |
Hashes criptográficos |
Mapas de dados de qualquer tamanho em uma sequência de byte de comprimento fixo.Hashes são estatisticamente exclusivos; uma sequência de dois byte diferente não será de hash para o mesmo valor. |
Criptografia de chave secreta
Algoritmos de criptografia de chave secreta usam uma única chave secreta para criptografar e descriptografar dados.Você deve proteger a chave de acesso não autorizados agentes, porque qualquer pessoa que tenha a chave pode usar para descriptografar os dados ou criptografar seus próprios dados, alegando que foi originado por você.
Criptografia de chave secreta também é conhecida sistema autônomo a criptografia simétrica sistema autônomo a mesma chave é usada para criptografia e descriptografia.Algoritmos de criptografia de chave secreta são muito rápidos (em comparação com algoritmos de chave pública) e são adequados para executar transformações de criptografia em grandes fluxos de dados.Algoritmos de criptografia assimétrica sistema autônomo RSA são limitados matematicamente a quantidade de dados que eles podem criptografar.Algoritmos de criptografia simétrica geralmente não têm esses problemas.
Um tipo de algoritmo de chave secreta chamado uma codificação de bloco é usado para criptografar um bloco de dados ao mesmo time.Bloquear ciphers sistema autônomo padrão de criptografia de dados (DES), triplo DES, e AES (criptografia AES) criptograficamente transformar um bloco de entrada de n bytes em um bloco de saída de bytes criptografados.Se você desejar criptografar ou descriptografar uma sequência de bytes, você precisará fazê-lo bloco por bloco.Porque n é pequeno (8 bytes para DES e o TripleDES; 16 bytes [padrão], 24 bytes ou 32 bytes de AES), valores de dados maiores que n precisa ser um bloco criptografado em um time.Valores de dados menores que n precisa ser expandido para n para serem processados.
Uma forma simples de codificação de bloco é chamada de modo a codebook Eletrônica (ECB).Modo ECB não é considerado seguro, porque ele não usa um vetor de inicialização para inicializar o primeiro bloco de texto não criptografado.Para um determinado segredo chave k, uma codificação de bloco simples que não usa um vetor de inicialização criptografará mesmo bloco de entrada de texto não criptografado no mesmo bloco de saída de texto codificado.Portanto, se você tiver blocos duplicados no fluxo de entrada de texto não criptografado, você terá blocos duplicados no fluxo de texto cifrado sua saída.Esses blocos de saída duplicados alertas usuários não autorizados criptografia fraca usado os algoritmos que podem ter sido empregados e os modos possíveis de ataque.O modo de criptografia ECB, portanto, está muito vulnerável a análise e, por fim, detecção de chave.
As classes de codificação de bloco fornecidos na biblioteca de classes base usam um padrão encadeamento modo chamado encadeamento blocos de codificação (CBC), embora você possa alterar esse padrão se desejar.
Codificações CBC superar os problemas associados a codificações ECB utilizando um vetor de inicialização (IV) para criptografar o primeiro bloco de texto não criptografado.Cada bloco de texto não criptografado subseqüente passa por um OR exclusivo (XOR) a operação com o bloco de texto cifrado anterior antes que ele está criptografado. Cada bloco de texto cifrado, portanto, é dependente de todos os blocos anteriores.Quando este sistema é cabeçalhos de mensagens usado, é comum que podem ser conhecidos por um usuário não autorizado não pode ser usado para efetuar engenharia reversa de uma chave.
Uma maneira comprometer dados criptografados com um CBC cipher é realizar uma Pesquisar completa de todas as possíveis chave.Dependendo do dimensionar da chave usada para executar a criptografia, esse tipo de Pesquisar é muito demorado usando até os computadores mais rápidos e, portanto, é inviável.Chaves maiores são mais difíceis de decifrar.Embora criptografia não impossibilitar, teoricamente, um adversário recuperar dados criptografados, ele aumentar o custo de fazer isso.Se ele demorar três meses para executar uma Pesquisar completa para recuperar dados que seja significativos apenas para alguns dias, o método de Pesquisar completa é impraticável.
A desvantagem de criptografia de chave secreta é partem do princípio de que ele duas partes tenham concordaram com uma chave e IV, além de estar com comunicadas seus valores.O IV não é considerado um segredo e pode ser transmitido em texto não criptografado com a mensagem.No entanto, a chave deve ser mantida em segredo de usuários não autorizados.Devido a esses problemas de criptografia de chave secreta costuma ser usada em conjunto com a criptografia de chave pública para se comunicar em particular os valores de chave e IV.
Supondo que Alice e Bob está duas partes que desejam se comunicar por um canal não seguro, eles podem usar criptografia de chave secreta da seguinte forma: Alice e Bob concorda em usar um algoritmo específico (por exemplo, AES) com uma chave particular e IV.Alice compõe uma mensagem e cria um fluxo de rede (talvez um nomeado pipe ou rede email) na qual deseja enviar a mensagem.Em seguida, ela criptografa o texto usando a chave e IV e envia a mensagem criptografada e IV para Roberto através da intranet.Bob recebe o texto criptografado e descriptografa usando o IV e acordado anteriormente a chave.Se a transmissão é interceptada, o interceptador não é possível recuperar a mensagem original, porque ele não sabe a chave.Nesse cenário, somente a chave deve permanecer secreta.Em um cenário de mundo real, Alice ou Bob gera uma chave secreta e usa criptografia de chave pública (assimétrica) transferência a chave secreta (simétrica) para a Outros parte.Para obter mais informações sobre criptografia de chave pública, consulte a próxima seção.
The .NET Framework Fornece as seguintes classes que implementam os algoritmos de criptografia de chave secreta:
AesManaged (introduzido no .NET Framework versão 3.5).
HMACSHA1 (Isso é tecnicamente um algoritmo de chave secreta porque representa o código de autenticação de mensagem que é calculado usando uma função hash criptográfico combinada com uma chave secreta. See Valores de hash, neste tópico.)
Criptografia de chave pública
Criptografia de chave pública usa uma chave particular 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.A chave pública e a chave particular matematicamente estão vinculados; dados criptografados com a chave pública podem ser descriptografados somente com a chave particular e dados que estão assinados com a chave particular podem ser verificados apenas com a chave pública.A chave pública pode ser disponibilizada para qualquer pessoa; ele é usado para criptografar os dados sejam enviados ao keeper da chave particular.Algoritmos de criptografia de chave pública são também conhecidos sistema autônomo algoritmos assimétrica porque uma chave é necessária para criptografar dados e outra chave é necessária para descriptografar sistema autônomo dados.Uma regra de criptografia básica proíbe a reutilização de chave e ambas as chaves devem ser exclusivas para cada sessão de comunicação.No entanto, na prática, as chaves assimétricas são geralmente vida longa.
Duas partes (Alice e Bob) podem usar criptografia de chave pública da seguinte forma: Primeiro, Alice gera um emparelhar de chaves pública/particular.Se Paulo desejar enviar uma mensagem criptografada de Alice, ele pede a sua chave pública.Alice envia Bob sua chave pública em uma rede não segura e Bob usa essa chave para criptografar uma mensagem.Bob envia a mensagem criptografada para Alice e ela descriptografa usando sua chave particular.Se Bob recebido chave de Alice através de um canal não seguro, sistema autônomo uma rede pública, Bob está em aberto a um ataque man-in-the-middle.Portanto, Paulo deve verificar com Ana Maria que ele tem uma cópia correta de sua chave pública.
Durante a transmissão de chave pública de Alice, um agente não autorizado pode interceptar a chave.Além disso, o mesmo agente pode interceptar a mensagem criptografada de Bob.No entanto, o agente não pode descriptografar a mensagem com a chave pública.A mensagem pode ser descriptografada somente com chave particular de Alice, que não foi transmitida.Alice não usa sua chave particular para criptografar uma mensagem de resposta para Bob, porque qualquer pessoa com a chave pública pode descriptografar a mensagem.Se Ana Maria desejar enviar uma mensagem de volta para Bob, ela pede Bob sua chave pública e sua mensagem usando a chave pública criptografa.Bob descriptografa a mensagem usando sua chave particular associada.
Nesse cenário, Alice e Bob use criptografia de chave pública (assimétrica) transferência uma chave secreta (simétrica) e usar a criptografia de chave secreta para o restante da sua sessão.
A lista a seguir oferece comparações entre os algoritmos de criptografia de chave pública e a chave de segredo:
Algoritmos de criptografia de chave pública usam um dimensionar de buffer fixo, enquanto um buffer de dimensionar variável de usar algoritmos de criptografia de chave secreta.
Não algoritmos de chave pública pode ser usado para dados de cadeia juntos em fluxos da mesma forma algoritmos de chave secreta, porque apenas pequenas quantidades de dados podem ser criptografadas.Portanto, operações assimétricas não usam o mesmo modelo de streaming sistema autônomo operações simétricas.
Criptografia de chave pública possui um keyspace (intervalo de valores possíveis para a chave) muito maior do que a chave secreta.Portanto, a criptografia de chave pública é menos suscetível a ataques completos que tenta todas as chaves possíveis.
As chaves públicas são fáceis de distribuir porque eles não tem ser protegido, desde que existe alguma maneira para verificar a identidade do remetente.
Alguns algoritmos de chave pública (sistema autônomo RSA e DSA mas Diffie-Hellman) podem ser usados para criar assinaturas digital para verificar a identidade do remetente de dados.
Algoritmos de chave pública são muito lentos em comparação com algoritmos de chave secreta e não foi designados para criptografar grandes quantidades de dados.Algoritmos de chave pública são útil somente para transferir pequenas quantidades de dados.Normalmente, a criptografia de chave pública é usada para criptografar uma chave e IV para ser usado por um algoritmo de chave secreta.Após a chave e IV são transferidas, criptografia de chave secreta é usada para o restante da sessão.
The .NET Framework Fornece as seguintes classes implementam algoritmos de criptografia de chave pública:
ECDiffieHellman (classe base)
ECDiffieHellmanCngPublicKey (classe base)
ECDiffieHellmanKeyDerivationFunction (classe base)
RSA permite criptografia e assinatura, mas DSA pode ser usada somente para assinatura e Diffie-Hellman pode ser usado somente para geração de chave.Em geral, algoritmos de chave pública são mais limitados em seus usos de algoritmos de chave particular.
Assinaturas digital
Algoritmos de chave pública também podem ser usados para formar as assinaturas digital.Assinaturas digital autenticar a identidade de um remetente (se você confiar em chave pública do remetente) e ajudar a proteger a integridade dos dados.Usando uma chave pública gerada pela Alice, o destinatário dos dados de Alice possa verificar que Alice enviado ele comparando a assinatura digital para dados de Alice e chave pública de Alice.
Para usar criptografia de chave pública para assinar digitalmente uma mensagem, Alice primeiro aplica um algoritmo de hash à mensagem para criar um resumo da mensagem.O resumo da mensagem é uma representação compacta e exclusiva de dados.Alice criptografa o resumo da mensagem com sua chave particular para criar sua assinatura pessoal.Ao receber a mensagem e assinatura, Bob descriptografa a assinatura usando a chave pública de Alice para recuperar o resumo da mensagem e hashes a mensagem usando o mesmo algoritmo de hash usada Alice.Se o resumo da mensagem que Bob computa exatamente igual a resumo da mensagem recebida de Alice, Bob é garantido que a mensagem veio de detentor da chave particular e que os dados não foi modificados.Se Bob confia Alice é o detentor da chave particular, ele sabe que a mensagem veio de Alice.
Observação: |
---|
A assinatura pode ser verificada por qualquer pessoa porque a chave pública do remetente é conhecimento comuns e normalmente está incluído no formato de assinatura digital.Esse método não mantém o sigilo de mensagem; para a mensagem seja secreta, ele também deve ser criptografado. |
The .NET Framework Fornece as seguintes classes implementam algoritmos de assinatura digital:
ECDsa (classe base)
Valores de hash
Algoritmos de hash mapeiam valores binário de um comprimento arbitrário menores valores binário de um comprimento fixo, conhecido sistema autônomo valores de hash.Um valor de hash é uma representação numérica de uma folha de dados.Se o hash de um parágrafo de texto não criptografado e alterar mesmo uma letra do parágrafo, um hash subseqüente produzirá um valor diferente.Se o hash é criptograficamente forte, seu valor irá alterar significativamente.Por exemplo, se um único bit de uma mensagem for alterado, uma função hash forte pode produzir uma saída diferente em 50 %.Muitos valores de entrada podem hash para o mesmo valor de saída.No entanto, é impraticável, em termos computacionais, para localizar esse hash com o mesmo valor de duas entradas diferentes.
Duas partes (Alice e Bob) poderiam usar uma função de hash para garantir a integridade de mensagem.Eles selecionaria um algoritmo de hash para assinar suas mensagens.Alice seria escrever uma mensagem e, em seguida, crie um hash da mensagem usando o algoritmo selecionado.Eles, em seguida, siga um dos seguintes métodos:
Ana Maria envia a mensagem de texto não criptografado e a mensagem com hash (assinatura digital) para Roberto.Bob recebe e realiza hash a mensagem e compara o valor de hash com o valor de hash que ele recebeu do Alice.Se os valores de hash forem idênticos, a mensagem não foi alterada.Se os valores não forem idênticos, a mensagem foi alterada depois de Alice escreveu.
Infelizmente, esse método não estabelecer a autenticidade do remetente.Qualquer pessoa pode representar Alice e enviar uma mensagem para Roberto.Eles podem usar o mesmo algoritmo de hash para assinar a mensagem e tudo Bob pode determinar é a mensagem corresponde a sua assinatura.Isso é uma forma de um ataque man-in-the-middle.Consulte Exemplo da Secure Communication Cryptography Next Generation (CNG) para obter mais informações.
Alice envia a mensagem de texto não criptografado para Roberto através de um canal público não seguro.Ela envia a mensagem com hash para Roberto através de um canal seguro particular.Bob recebe a mensagem de texto não criptografado, hashes-lo e compara o hash ao hash trocado em particular.Se os hashes corresponderem, Bob saiba duas coisas:
A mensagem não foi alterada.
O remetente da mensagem (Alice) é autêntico.
Para o sistema funcionar, Alice deve ocultar seu valor de hash original a partir de todas as partes, exceto Bob.
Alice envia a mensagem de texto não criptografado para Roberto através de um canal público não seguro e coloca a mensagem com hash nela publicamente visível Web site.
Esse método impede que a mensagem de violação, impedindo que qualquer pessoa modificando o valor de hash.Embora a mensagem e seu hash podem ser lido por qualquer pessoa, o valor de hash pode ser alterado apenas pelos Alice.Um invasor que deseja representar Alice precisaria ter acesso ao site de Alice.
Nenhum dos métodos anteriores irá impedir que alguém ler mensagens de Alice, porque elas são transmitidas em texto não criptografado.Geralmente a segurança total requer a criptografia e assinaturas digital (assinatura de mensagens).
The .NET Framework Fornece as seguintes classes implementam algoritmos de assinatura digital:
Variantes do HMAC de todos os algoritmos Secure algoritmo de hash (SHA), mensagem Digest 5 (MD5) e 160 RIPEMD.
Implementações de CryptoServiceProvider (invólucros de código gerenciado) de todos os algoritmos SHA.
Criptografia implementações de próxima geração (CNG) de todos os algoritmos MD5 e SHA.
Observação: |
---|
Falhas de design MD5 foram descobertas na 1996 e SHA-1 foi recomendado em vez disso .Em 2004, foram descobertas falhas adicionais e o algoritmo MD5 não é considerado seguro.O algoritmo SHA-1 também foi encontrado para ser inseguro e SHA-2 é Agora recomendado em vez disso. |
Geração de números aleatórios
Geração de números aleatórios é parte integrante muitas operações criptográficas.Por exemplo, chaves criptográficas precisará ser tão aleatório possível para que ele seja inviável para reproduzi-los.Criptografia geradores de números aleatórios devem gerar saída é impraticável, em termos computacionais, prever com uma probabilidade é melhor do que metade.Portanto, qualquer método de prever o próximo bit de saída não deve executar melhor do que adivinhar aleatório.As classes a .NET Framework Use geradores de números aleatórios para gerar chaves criptográficas.
The RNGCryptoServiceProvider classe é uma implementação de um algoritmo gerador de números aleatórios.
Manifestos do ClickOnce
No .NET Framework 3,5, as seguintes classes de criptografia permitem que você obtenha e verifique informações sobre assinaturas de manifesto para aplicativos que são implantados usando A tecnologia ClickOnce:
A classe ManifestSignatureInformation obtém informações sobre uma assinatura de manifesto quando você suas sobrecargas de método VerifySignature.
Você pode usar a enumeração ManifestKinds para especificar quais manifestos verificar.O resultado da verificação é um dos valores de enumeração SignatureVerificationResult.
The ManifestSignatureInformationCollection classe fornece uma coleção de somente leitura ManifestSignatureInformation objetos de assinaturas verificados.
Além disso, as classes a seguir fornecem informações específicas de assinatura:
StrongNameSignatureInformation contém as informações de assinatura de nome forte para um manifesto.
AuthenticodeSignatureInformation representa as informações de assinatura Authenticode para um manifesto.
TimestampInformation contém informações sobre o carimbo de data / time em uma assinatura Authenticode.
TrustStatus Fornece uma maneira simples de verificar se uma assinatura Authenticode é confiável.
Suporte ao Conjunto B
O .NET Framework 3,5 oferece suporte ao conjunto de algoritmos criptográficos do Conjunto B publicado pela National Security Agency (NSA).Para obter mais informações sobre o conjunto B, consulte o NSA Suite B criptografia fato folha.
Os seguintes algoritmos estão incluídos:
Avançado algoritmo padrão de criptografia (AES) com tamanhos de chave de 128, 192, e 256 bits para criptografia.
Proteja os algoritmos de hash SHA-1, SHA-256, SHA-384 e SHA-512 para o hash.(sistema autônomo três últimos são geralmente agrupados e chamados de SHA-2).
Elíptica curva assinatura digital algoritmo (ECDSA), usando curvas de 256 bit, 384 bit e 521 bit moduli principal para entrar.A documentação do NSA especificamente define essas curvas e chama P-256, P-384 e P-521.Esse algoritmo é fornecido pela classe ECDsaCng.Ele permite que você entrar com uma chave particular e verificar a assinatura com uma chave pública.
Elíptica algoritmo de curva Diffie-Hellman (ECDH), usando curvas de 256 bit, 384 bit e 521 bit moduli principal para o chave contrato secreto e troca.Esse algoritmo é fornecido pela classe ECDiffieHellmanCng.
Invólucros de código gerenciado para o Federal Information Processing Standard (FIPS) certificados implementações das implementações AES, SHA-256, SHA-384 e SHA-512 estão disponível na nova AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, e SHA512CryptoServiceProvider classes.
Cryptography Next Generation (CNG) classes
As classes CNG (Cryptography Next Generation) fornecem um invólucro gerenciado em torno de funções CNG nativo.(A CNG é o substituto do CryptoAPI.) Essas classes têm "Cng" sistema autônomo parte de seus nomes.É fundamental para as classes de wrapper CNG o CngKey classe de contêiner de chave, que abstrai o armazenamento e o uso de chaves CNG. Essa classe permite que você armazene um emparelhar de chaves ou um público com segurança de chave e consultá-lo usando um nome de seqüência de caracteres simples.De baseados em curva elíptica ECDsaCng classe de assinatura e o ECDiffieHellmanCng classe de criptografia pode usar CngKey objetos.
A classe CngKey é usada para uma variedade de operações adicionais, incluindo abrir, criar, excluir e exportar chaves.Ele também fornece acesso ao identificador de chave base a ser usada ao chamar diretamente funções nativas.
The .NET Framework 3,5 também inclui uma variedade de suporte a CNG classes, sistema autônomo o seguinte:
CngProvider mantém um provedor de armazenamento de chaves.
CngAlgorithm mantém um algoritmo CNG.
CngProperty mantém as propriedades de chave usadas com freqüência.
Consulte também
Conceitos
.NET estrutura criptografia Model
Exemplo da Secure Communication Cryptography Next Generation (CNG)