Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
0 de 2 pessoas classificaram isso como útil - Avalie este tópico

Serviços criptográficos

As redes públicas, como Internet, não fornecem um meio de comunicação seguro entre entidades. A comunicação por tais redes é suscetível de ser lida ou modificada, por terceiros não autorizados. A criptografia ajuda a proteger os dados de exibição, fornecem maneiras de detectar se os dados foram alterados e ajuda a fornecer um meio seguro de comunicação sobre os canais não seguros. Por exemplo, os dados podem ser criptografados usando um algoritmo criptográfico, transmitido em um estado criptografado e posteriormente ser descriptografado pela parte pretendida. Se um terceiro intercepta os dados criptografados, será difícil decifrar.

No .NET Framework, as classes no namespace System.Security.Cryptography gerencia muitos detalhes de criptografia para você. Alguns são wrappers da API de criptografia Microsoft (CryptoAPI) não gerenciada, enquanto outros são implementações puramente gerenciadas. Você não precisa ser um especialista em criptografia para usar essas classes. Quando você cria uma nova instância de classe do algorítmo de criptografia, são geradas chaves automaticamente para facilidade de uso, e as propriedades préviamente estabelecidas são tão seguras quanto possível.

Esta visão geral fornece um sumário dos métodos e práticas de criptografia suportados pelo .NET Framework, incluindo o suporte dos manifestos do ClickOnce, Suite B e Próxima Geração de Criptografia (CNG) introduzidos no .NET Framework 3.5.

Esta visão geral contém as seguintes seções:

Para obter informações adicionais sobre criptografia e sobre os serviços da Microsoft, os componentes e as ferramentas que permitem adicionar segurança criptográfica aos seus aplicativos, consulte a seção Segurança, Desenvolvimento COM e Win32 desta documentação.

Em uma situação típica onde a criptografia é usada, duas partes (Alice e Bob) se comunicam através de um canal não seguro. Alice e Bob desejam garantir que sua comunicação permaneça incompreensível por qualquer pessoa que possa ouvir. Além disso, como Alice e Bob estão em locais remotos, Alice deve certificar-se de que as informações recebidas de Bob não foram modificadas por qualquer pessoa durante a transmissão. Além disso, ela deve garantir que as informações realmente se originem de Bob e não de alguém que está se passando por Bob.

A criptografia é usada para obter as seguintes metas:

  • Confidencialidade: Para ajudar a proteger a identidade ou os dados de um usuário de serem lidos.

  • Integridade de dados: Para ajudar a proteger dados de serem alterados.

  • Autenticação: Para garantir que os dados se originam de uma parte específica.

  • Não-repúdio: Para impedir que alguém negue ter enviado uma mensagem.

Para obter essas metas, você pode usar uma combinação de e algoritmos de práticas conhecidas como primitivos criptográficos para criar um esquema de criptografia. A tabela a seguir lista os primitivos criptográficos e seus usos.

Primitivo criptográfico

Uso

Criptografia de chave secreta (criptografia simétrica)

Executa uma transformação nos dados para impedir que eles sejam lidos por terceiros. Esse tipo de criptografia usa uma única chave compartilhada e secreta para criptografar e descriptografar dados.

Criptografia de chave pública (criptografia assimétrica)

Executa uma transformação nos dados para impedir que eles sejam lidos por terceiros. Este tipo de criptografia usa um par de chaves publica/privada para criptografar e descriptografar os dados.

Assinatura criptográfica

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.

Hash criptográficos

Dados de mapas de qualquer comprimento como uma sequência de byte de comprimento fixo. O hash são estatisticamente exclusivos; uma sequência de dois bytes diferente não irá ser hash para o mesmo valor.

De volta ao topo

Os algoritmos de criptografia de chave-secreta usam uma única chave secreta para criptografar e descriptografar dados. Você precisa proteger a chave de acesso por meios dos agentes desautorizados, porque qualquer parte que possui a chave pode usar para descriptografar seus dados ou para criptografar seus próprios dados, reivindicando que isso originou de você.

A criptografia de chave secreta é também conhecida como criptografia simétrica, pois a mesma chave é usada para criptografar e descriptografar. Os algoritmos de criptografia de chave secreta são muito rápidos (comparados aos algoritmos de chave pública) e são bem adequados para realizar transformações criptográficas em grandes fluxos de dados. Os algoritmos de criptografia assimétricos como RSA são limitados matematicamente na quantidade de dados que podem criptografar. Os algoritmos de criptografia simétrica geralmente não têm esses problemas.

Um tipo de algoritmo de chave secreta chamado codificação de bloco é usado para criptografar um bloco de dados ao mesmo tempo. As codificações de bloco como criptografia de dados (DES) padrão, TripleDES, e criptografia avançada (AES) padrão de transformação criptograficamente um bloco de entrada de bytes de n em um bloco de saída de bytes criptografados. Se você quer criptografar ou descriptografar uma sequência de bytes, você precisa fazê-lo bloco por bloco. Porque n é pequeno (8 bytes para o DES e TripleDES; 16 bytes [a opção], 24 bytes, ou 32 bytes para AES), valores de dados que é maior do que n têm que ser criptografados um bloco de cada vez. Os valores de dados que são menores do que n têm que ser expandidos a n para ser processado.

Uma forma simples de codificação de bloco é chamada de modo ECB (livro de códigos eletrônico). O modo ECB não é considerado seguro, porque não usa um vetor de inicialização para inicializar o primeiro bloco de texto não criptografado. Para uma determinada chave kde confidencialidade, uma codificação de pacote 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 de mensagem cifrada. Portanto, se você tiver blocos duplicados no fluxo de texto não criptografado de entrada, você terá blocos duplicados no fluxo de mensagem cifrada de saída. Esses blocos de saída duplicados alertam os usuários não autorizados sobre a fraca criptografia que usou os algoritmos que devem ter sido empregados, e os possíveis modos de ataque. O modo de cálculo do BCE é portanto bastante vulnerável para análise, e por fim, para a descoberta principal.

As classes de codificação de bloco fornecidas na biblioteca de classe base usam um modo de encadeamento padrão chamado encadeamento de bloco cifrado (CBC), embora você possa alterar esta opção se desejar.

As cifras CBC superam os problemas associados com as cifras ECB usando um vetor de inicialização (IV) para criptografar o primeiro bloco de texto não criptografado. Cada bloco subsequente de texto não criptografado submete-se a uma operação de bit exclusiva OU (XOR) com o bloco de mensagem cifrada anterior antes que seja criptografado. Cada bloco de mensagem cifrada é portanto dependente de todos os blocos anteriores. Quando esse sistema é usado, os cabeçalhos das mensagens comuns que podem ser conhecidos como um usuário não autorizado não podem ser usados para fazer engenharia reversa na chave.

Uma maneira de comprometer dados criptografados com codificação CBC é executar uma pesquisa exaustiva de todas as possíveis chaves. Dependendo do tamanho da chave usada para executar a criptografia, esse tipo de pesquisa é muito demorado usando mesmo os computadores mais rápidos e, portanto, é inexequível. Tamanhos de chaves maiores são mais difíceis de decifrar. Embora a criptografia não torne teoricamente impossível para um adversário recuperar os dados criptografados, gera um aumento de custo. Se demorar três meses para realizar uma pesquisa detalhada para recuperar dados que são significativos somente por alguns dias, o método de pesquisa detalhada é impraticável.

A desvantagem da criptografia com chave secreta é que ela pressupõe que as duas partes concordaram em uma chave e IV, e comunicaram seus valores. O IV não é considerado confidencial, 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, a criptografia de chave secreta é geralmente usada junto com a criptografia de chave pública para comunicar particularmente os valores da chave e IV.

Supondo que Alice e Bob são duas partes que desejam se comunicar por um canal não seguro, eles pode usar criptografia de chave secreta como a seguir: Alice e Bob concordam em usar um algoritmo específico (AES, por exemplo) com uma chave privada e IV. Alice compôs uma mensagem e cria um fluxo de rede (talvez um email de rede ou canalização nomeada) na qual enviar a mensagem. Em seguida, ela criptografa o texto usando a chave e o IV e envia a mensagem criptografada e o IV para Bob pela intranet. Bob recebe o texto criptografado e descriptografa usando o IV e a chave concordada anteriormente. Se a transmissão é interceptada, o interceptador não pode recuperar a mensagem original, porque não sabe a chave. Neste cenário, somente a chave deve permanecer secreta. Em um cenário do mundo real, Alice ou Bob gera uma chave secreta e usa a criptografia de chave pública (assimétrica) para transferir a chave secreta (simétrica) para a outra parte. Para obter mais informações sobre criptografia de chave pública, consulte a próxima seção.

.NET Framework fornece as seguintes classes que implementam algoritmos de criptografia de chave secreta:

De volta ao topo

A criptografia de chave pública usa uma chave particular que deve ser mantida em segredo contra usuários não autorizados e uma chave pública que pode ser divulgada para qualquer pessoa. A chave pública e a chave privada são vinculadas matematicamente; os dados criptografados com a chave pública podem ser descriptografados somente com a chave privada, e os dados assinados com a chave privada podem ser verificadas somente com a chave pública. A chave pública pode ser disponibilizada para qualquer pessoa; ela é usada para criptografar os dados a ser enviados ao depositário da chave privada. Os algoritmos de criptografia de chave pública são conhecidos como algoritmos assimétricos, pois uma chave é necessária para criptografar dados e outra é necessária para descriptografar os dados. Uma regra básica de criptografia proíbe reutilização de chave e ambas as teclas devem ser exclusivas para cada sessão de comunicação. No entanto, na prática, as chaves assimétricas geralmente são de vida longa.

Duas partes (Alice e Bob) podem usar criptografia de chave pública conforme segue: Primeiro, Alice gera um par de chaves públicas/particulares. Se Bob quer enviar uma mensagem criptografada para Alice, ele pede a ela a sua chave pública. Alice envia para Bob sua chave pública por 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 privada. Se Bob recebeu a chave de Alice através de um canal não seguro, como uma rede pública, Bob está sujeito a um ataque de intermediários. Portanto, Bob deve verificar com Alice para que obtenha 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 a chave privada de Alice, que não foi transmitida. Alice não usa sua chave privada para criptografar uma mensagem da resposta à Bob, porque qualquer pessoa com a chave pública pode descriptografar a mensagem. Se Alice quer enviar uma mensagem de volta para Bob, ela pede para Bob sua chave pública e criptografa sua mensagem usando essa chave pública. Bob descriptografa a mensagem usando a chave privada associada.

Neste cenário, Alice e Bob usam criptografia de chave pública (assimétrica) para transferir uma chave secreta (simétrica) e usam criptografia de chave secreta para o restante da sessão.

A lista a seguir fornece comparações entre a chave pública e algoritmos criptográficos de chave secreta:

  • Os algoritmos de criptografia de chave pública usam um buffer de tamanho fixo, enquanto os algoritmos criptográficos de chave secreta usam um buffer de tamanho variável.

  • Os algoritmos de chave pública não podem ser usados para encadear dados juntos em fluxos da maneira que os algoritmos de chave secreta fazem, pois apenas pequenas quantidades de dados podem ser criptografadas. Portanto, operações assimétricas não usam o mesmo modelo de streaming de operações simétricas.

  • A criptografia de chave pública tem um keyspace muito maior (intervalo de valores possíveis para a chave) do que a criptografia de chave secreta. Portanto, a criptografia de chave pública é menos suscetível a ataques exaustivos que tentam todos as chaves possíveis.

  • As chaves públicas são fáceis de serem distribuídas porque não têm que ser protegidas, desde que exista alguma maneira de verificar a identidade do remetente.

  • 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.

  • Os algoritmos de chave pública são muito lentos se comparados com os algoritmos de chave secreta e não são projetados para criptografar grandes quantidades de dados. Os algoritmos de chave pública são úteis somente para transferir quantidades muito pequenas de dados. Normalmente, a criptografia de chave pública é usada para criptografar uma chave e a IV deve ser usada por um algoritmo de chave secreta. Após a chave e o IV serem transferidos, a criptografia de chave secreta é usada para o restante da sessão.

.NET Framework fornece as seguintes classes que implementam os algoritmos de criptografia de chave pública:

O RSA permite criptografia e assinatura, mas o DSA pode ser usado apenas para assinatura e o Diffie-Hellman pode ser usado somente para gerar chaves. Em geral, os algoritmos de chave pública são mais limitados em seus usos do que os algoritmos de chave privada.

De volta ao topo

Os algoritmos de chave pública também podem ser usados para formar assinaturas digitais. As assinaturas digitais autenticam a identidade de um remetente (se você confia na chave pública do remetente) e ajudam a proteger a integridade dos dados. Usando uma chave pública gerada por Alice, o receptor de dados de Alice pode verificar que Alice o enviou comparando a assinatura digital aos 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 para a mensagem para um resumo de mensagem. O resumo de mensagem é uma representação única e compacta de dados. Alice criptografa o resumo da mensagem com sua chave privada para criar sua assinatura pessoal. Após receber a mensagem e a assinatura, Bob descriptografa a assinatura usando a chave pública de Alice para recuperar o resumo de mensagem e fazer o hash da mensagem usando o mesmo algoritmo de hash que usou Alice. Se o resumo da mensagem que Bob calcula corresponde exatamente ao resumo da mensagem recebida de Alice, Bob está certo de que a mensagem é proveniente do possuidor da chave privada e que os dados não foram modificados. Se Bob confia que Alice é a possuidora da chave privada, ele sabe que a mensagem veio de Alice.

Observação Observação

Uma assinatura pode ser verificada por qualquer pessoa porque a chave pública do remetente é conhecida por todos e está geralmente incluída no formato de assinatura digital. Esse método não retém o sigilo de mensagem; para que a mensagem fique em sigilo, ela também deve ser criptografada.

O .NET Framework fornece as seguintes classes que implementam algoritmos de assinatura digital:

De volta ao topo

Os algoritmos de hash mapeiam valores binários de um comprimento arbitrário para valores binários menores de um comprimento fixo, conhecidos como valores de hash. Um valor de hash é uma representação numérica de um conjunto de dados. Se você faz hash de um parágrafo de texto não criptografado e ainda muda uma letra do parágrafo, um hash subsequente gerará um valor diferente. Se o hash é criptograficamente forte, seu valor mudará significativamente. Por exemplo, se um único bit de uma mensagem for alterado, uma função de hash forte pode gerar uma saída que difere em 50 por cento. Muitos valores de entrada podem fazer hash do mesmo valor de saída. No entanto, é computacionalmente inviável localizar duas entradas distintas que se endereçam para o mesmo valor.

Duas partes (Alice e Bob) poderiam usar uma função de hash para garantir a integridade de mensagens. Eles selecionariam um algoritmo de hash para assinar suas mensagens. Alice deve gravar uma mensagem e criar um hash para essa mensagem usando o algoritmo selecionado. Eles iriam seguir um dos seguintes métodos:

  • Alice envia a mensagem de texto não criptografado e a mensagem de hash (assinatura digital) para Bob. Bob recebe e confunde a mensagem e compara seu valor de hash com o valor de hash que recebeu de Alice. Se os valores de hash são idênticos, a mensagem não foi modificada. Se os valores não são idênticos, a mensagem foi alterada após Alice escrevê-la.

    Infelizmente, este método não estabelece a autenticidade do remetente retorno. Qualquer um pode representar Alice e enviar uma mensagem para Bob. Eles podem usar o mesmo algoritmo de hash para assinar sua mensagem, e tudo que Bob pode determinar é que a mensagem corresponda à sua assinatura. Esse é uma forma de ataque homem-no-meio. Consulte CNG Secure Communication Example para maiores informações.

  • Alice envia a mensagem de texto não criptografado para Bob por um canal público não seguro. Ela envia a mensagem com hash para Bob em um canal particular seguro. Bob recebe a mensagem de texto não criptografado, faz o hash e compara o hash com o hash trocado particularmente. Se os hashes corresponderem, Bob sabe de duas coisas:

    • A mensagem não foi modificada.

    • O remetente de mensagem (Alice) é autêntico.

    Para que este sistema funciona, Alice deve ocultar seu valor de hash original de todas as partes, exceto Bob.

  • Alice envia a mensagem de texto não criptografado para Bob por um canal público não seguro e coloca a mensagem codificada em seu site publicamente visível.

    Esse método evita a violação de mensagem impedindo que alguém modifique o valor de hash. Embora a mensagem e o hash possam ser lidos por qualquer pessoa, o valor de hash pode ser alterado apenas por Alice. Um invasor que deseja representar Alice exigiria o acesso ao site de Alice.

Nenhum dos métodos anteriores impedirá que alguém leia as mensagens de Alice, pois elas são transmitidas em texto não criptografado. A segurança completa típica geralmente requer assinaturas digitais (assinatura de mensagem) e criptografia.

.NET Framework fornece as seguintes classes que implementam algoritmos de hash:

Observação Observação

Falhas de design MD5 foram descobertas em 1996, e SHA-1 foi recomendado em vez disso. Em 2004, falhas adicionais foram descobertas, e o algoritmo MD5 não é mais considerado seguro. Descobriu-se que o algoritmo SHA-1 também não é seguro, e agora, em vez dele, recomenda-se o SHA-2.

De volta ao topo

A geração de número aleatório é parte integral de muitas operações de criptografia. Por exemplo, as chaves criptográficas precisam ser tão aleatórias quanto possível para que ele seja inexequível as reproduzir. Os geradores de número aleatório criptográficos devem produzir resultados que sejam computacionalmente inexequíveis para prever com uma probabilidade que é melhor de um meio. Portanto, nenhum método de prever o próximo bit de saída deve executar melhor do que a suposição aleatória. As classes no .NET Framework usam geradores de número aleatório para gerar chaves criptográficas.

A classe RNGCryptoServiceProvider é uma implementação de um algoritmo gerador de números aleatórios.

De volta ao topo

Em .NET Framework 3.5, as seguintes classes de criptografia permitem obter e verificar informações sobre assinaturas de manifesto para aplicativos que são implantados usando Tecnologia ClickOnce:

Além disso, as classes a seguir fornecem informações específicas de assinatura:

De volta ao topo

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, consulteFicha técnica de criptografia o conjunto B da NSA.

Os seguintes algoritmos estão incluídos:

  • Algoritmo padrão de criptografia avançada (AES) com tamanhos de chave 128, 192 e 256 bits para criptografia.

  • Algoritmos de hash seguro SHA-1, SHA-256, SHA-384 e SHA-512 para hash. (Os três últimos são geralmente agrupados e chamados de SHA-2.)

  • O algoritmo de assinatura digital da curva elíptica (ECDSA), usando curvas de 256 bits, 384 bits e 521 bits e módulos primos para assinar. A documentação da NSA define especificamente esses curvas, e as chama de P-256, P-384 e P-521. Esse algoritmo é fornecido pela classe ECDsaCng. Permite você assinar com uma chave privada e verificar a assinatura com uma chave pública.

  • O algoritmo elíptico da curva de Diffie-Hellman (ECDH), usando curvas do módulo primos de 256 bits, 384 bits e 521 bits para trocar as chaves e o contrato de segredo. Esse algoritmo é fornecido pela classe ECDiffieHellmanCng.

Wrappers de código gerenciado para as implementações FIPS (Federal Information Processing Standard) certificadas do AES, SHA-256, SHA-384 e SHA-512 estão disponíveis nas novas classes AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider e SHA512CryptoServiceProvider.

De volta ao topo

As classes de CNG (Próxima Geração de Criptografia) oferecem um wrapper gerenciado em torno de funções CNG nativas. (CNG é a substituição para CryptoAPI.) Essas classes têm “Cng” como parte de seus nomes. A central para classes de envoltório CNG é a classe do contêiner de chave de CngKey, que abstrai o armazenamento e o uso de chaves CNG. Esta classe permite armazenar um par de chaves ou uma chave pública com segurança e pode ser consultada usando um nome de cadeia de caracteres simples. A classe de assinatura elíptica com base na curva ECDsaCng e a ECDiffieHellmanCng classe de criptografia de podem usar objetos CngKey.

A classe CngKey é usada para uma variedade de operações adicionais, incluindo abrir, criar, excluir e exportar chaves. Também fornece acesso para o manipulador de chave subjacente para usar ao chamar funções nativas diretamente.

O .NET Framework 3.5 também inclui uma variedade de classes CNG auxiliares, como as seguintes:

De volta ao topo

Título

Descrição

Modelo de Criptografia do .NET Framework

Descreve como a criptografia é implementada na biblioteca de classe base.

Tarefas criptográficas

Descreve como executar tarefas criptográficas específicas usando a biblioteca de classe base.

Instruções passo a passo: criando um aplicativo criptográfico

Demonstra as tarefas básicas de criptografia e descriptografia.

Configurando classes de criptografia

Descreve como mapear nomes de algoritmo para classes criptográficas e mapear identificadores de objeto para um algoritmo criptográfico.

De volta ao topo

Isso foi útil para você?
(1500 caracteres restantes)
Agradecemos os seus comentários

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft. Todos os direitos reservados.