Chaves e certificados A criptografia assimétrica usa um par de chaves pública/privada. Os dados criptografados com a chave privada podem ser descriptografados apenas com a chave pública correspondente e vice-versa. As chaves públicas (como o nome sugere) são amplamente disponibilizadas. De modo inverso, uma chave privada permanece privada para um indivíduo específico. O mecanismo de distribuição pelo qual as chaves públicas são transportadas aos usuários é um certificado. Normalmente, os certificados são assinados por uma CA (autoridade de certificação) para confirmar que a chave pública é do indivíduo que afirma tê-la enviado. A autoridade de certificação é uma entidade mutuamente confiável. A implementação típica do certificado digital envolve um processo de assinatura do certificado. O processo é demonstrado na Figura 1.
Figura 1 Processo de certificação digital A seqüência de eventos mostrada na Figura 1 é a seguinte: 1.
Alice envia uma solicitação de certificado assinado contendo seu nome, sua chave pública e,
2.
talvez, algumas informações adicionais a uma autoridade de certificação. A autoridade de certificação cria uma mensagem a partir da solicitação de Alice. A autoridade de certificação assina a mensagem com sua chave privada, criando uma assinatura separada. A autoridade de certificação retorna a mensagem e a assinatura à Alice. Juntas, a mensagem e a
3. 4.
assinatura formam o certificado de Alice. Alice envia seu certificado para Bob para conceder a ele acesso à sua chave pública. Bob verifica a assinatura do certificado, usando a chave pública da autoridade de certificação. Se a assinatura for realmente válida, ele aceita a chave pública no certificado como a chave pública da
Alice. Como com qualquer assinatura digital, qualquer receptor com acesso à chave pública da autoridade de certificação pode determinar se uma autoridade de certificação específica assinou o certificado. Esse processo não requer acesso a nenhuma informação secreta. O cenário anterior considera que Bob tem acesso à chave pública da autoridade de certificação. Bob pode ter acesso a essa chave se tiver uma cópia do certificado da autoridade de certificação que contém essa chave pública. Início da página
Certificados digitais X.509 Os certificados digitais X.509 incluem não apenas o nome e a chave pública de um usuário, mas também outras informações sobre o usuário. Esses certificados são mais que um ponto de partida em uma hierarquia digital de confiança. Eles permitem que a autoridade de certificação ofereça ao receptor de um certificado um meio de confiar não apenas na chave pública do indivíduo do certificado, mas também em outras informações sobre o indivíduo do certificado. Essas outras informações podem incluir, entre outras coisas, um endereço de e-mail, uma autorização para assinar documentos de um determinado valor ou a autorização para se tornar uma autoridade de certificação e assinar outros certificados.
Os certificados X.509 e muitos outros certificados têm um prazo de validade. Um certificado pode expirar e não ser mais válido. Uma autoridade de certificação pode revogar um certificado por vários motivos. Para processar as revogações, uma autoridade de certificação mantém e distribui uma lista de certificados revogados chamada CRL (lista de certificados revogados). Os usuários da rede acessam a CRL para determinar a validade de um certificado. Início da página
Armazenamentos de certificados Os certificados são armazenados em locais seguros chamados de armazenamentos de certificados. Um armazenamento de certificado pode conter certificados, CRLs e CTLs (lista de certificados confiáveis). Cada usuário tem um armazenamento pessoal (chamado "MEU armazenamento") onde os certificados desse usuário são armazenados. O MEU armazenamento pode ser fisicamente implementado em vários locais, incluindo o Registro, um computador local ou remoto, um arquivo de disco, uma banco de dados, um serviço de diretórios, um dispositivo inteligente ou outro local. Embora qualquer certificado possa ser armazenado em MEU armazenamento, esse armazenamento deve ser reservado para os certificados pessoais de um usuário, isto é, os certificados usados para assinar e descriptografar as mensagens desse usuário específico. Além de MEU armazenamento, o Windows também mantém os armazenamentos de certificados a seguir:
•
CA e ROOT. Esse armazenamento contém os certificados de autoridades de certificação em que o usuário confia para emitir certificados para outros indivíduos. Um conjunto de certificados autoridade de certificação confiáveis é fornecido com o sistema operacional e outros podem ser
•
adicionados pelos administradores. Outros. Esse armazenamento contém os certificados de outras pessoas com quem o usuário troca
mensagens assinadas. A CryptoAPI fornece funções para gerenciar certificados. Essas APIs podem ser acessadas apenas por meio de um código não gerenciado. Além disso, o CAPICOM é uma API com base em COM para a CryptoAPI, que pode ser acessada por meio de COM Interop.
Mais informações
Para obter mais informações, consulte "Cryptography, CryptoAPI, and CAPICOM" no MSDN (http://msdn.microsoft.com/library/default.asp?url=/library/enus/security/Security/cryptography_cryptoapi_and_capicom.asp). Início da página
Criptografia A criptografia é usada para proporcionar o seguinte:
•
Confidencialidade. Para garantir que os dados permaneçam privados. Geralmente, a confidencialidade é obtida com a criptografia. Os algoritmos de criptografia (que usam chaves de criptografia) são usados para converter texto sem formatação em texto codificado e o algoritmo de descriptografia equivalente é usado para converter o texto codificado em texto sem formatação novamente. Os algoritmos de criptografia simétricos usam a mesma chave para a criptografia e a
•
descriptografia, enquanto que os algoritmos assimétricos usam um par de chaves pública/privada. Integridade de dados. Para garantir que os dados sejam protegidos contra modificação acidental ou deliberada (mal-intencionada). A integridade, geralmente, é fornecida por códigos de autenticação de mensagem ou hashes. Um valor de hash é um valor numérico de comprimento fixo derivado de uma seqüência de dados. Os valores de hash são usados para verificar a integridade dos dados enviados por canais não seguros. O valor do hash de dados recebidos é comparado ao
•
valor do hash dos dados, conforme eles foram enviados para determinar se foram alterados. Autenticação. Para garantir que os dados se originem de uma parte específica. Os certificados digitais são usados para fornecer autenticação. As assinaturas digitais geralmente são aplicadas a valores de hash, uma vez que eles são significativamente menores que os dados de origem que representam. Início da página
Opções técnicas
• • • • • • • •
Use um hash quando desejar uma maneira de verificar se os dados não foram alterados em trânsito. Use um hash com chave quando desejar provar que uma entidade conhece um segredo sem ter de transmiti-lo ou quando desejar defender-se de interceptações durante o trânsito com um hash simples. Use a criptografia se desejar ocultar os dados quando eles estiverem sendo enviados por uma mídia não segura ou quando desejar torná-los persistentes. Use um certificado quando desejar verificar a pessoa que está afirmando ser a proprietária da chave pública. Use a criptografia simétrica para fins de velocidade e quando ambas as partes compartilharem a chave antecipadamente. Use a criptografia assimétrica quando desejar trocar dados de maneira segura por uma mídia não segura. Use uma assinatura digital quando desejar autenticação e não-repúdio. Use um valor salt (um número aleatório gerado de maneira criptográfica) para se defender de ataques de dicionário. Início da página
Criptografia no .NET O espaço para nome System.Security.Cryptography fornece serviços criptográficos, inclusive a codificação e a decodificação seguras de dados, hash, geração de número aleatório e autenticação de mensagens. O .NET Framework fornece implementações de muitos algoritmos criptográficos padrão, que podem ser facilmente estendidos devido à hierarquia de herança bem definida, que consiste em classes abstratas que definem os tipos básicos de algoritmos – algoritmos simétricos, assimétricos e de hash, juntamente com as classes de algoritmos. Tabela 1: Mostra os algoritmos para os quais o .NET Framework fornece classes de implementação "preestabelecidas".
Algoritmos simétricos
Algoritmos assimétricos
Algoritmos de hash
DES (padrão de criptografia DSA (algoritmo de
HMAC SHA1 (código de autenticação de mensagens
de dados)
assinatura digital)
com base em hashs que usa o algoritmo de hash
TripleDES (padrão triplo de RSA
SHA1) MAC Triple DES (código de autenticação de
criptografia de dados) Rijndael RC2
mensagem que usa Triple DES) MD5 SHA1, SHA256, SHA384, SHA512 (algoritmo de hash seguro que usa vários tamanhos de hash)
Suporte a algoritmos simétricos O .NET oferece as classes de implementação a seguir que fornecem algoritmos de criptografia simétricos e de chave secreta:
• • • •
DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider
Observação: As classes que terminam com "CryptoServiceProvider" são wrappers que usam os serviços subjacentes do CSP (provedor de serviços de criptografia) e as classes que terminam com "Managed" são implementadas em código gerenciado. A Figura 2 mostra a hierarquia de herança adotada pelo .NET Framework. A classe base de tipo de algoritmo (por exemplo, SymmetricAlgorithm) é abstrata. Um conjunto de classes abstratas de algoritmo deriva da classe base de tipo abstrata. As classes de implementação de algoritmo fornecem implementações concretas do algoritmo selecionado. Por exemplo, DES, Triple-DES, Rijndael e RC2.
Figura 2 A hierarquia de herança de classe de criptografia simétrica
Suporte a algoritmos assimétricos O .NET fornece os algoritmos de criptografia assimétricos (chave pública/privada), a seguir, por meio da classe base abstrata (System.Security.Crytography.AsymmetricAlgorithm):
• •
DSACryptoServiceProvider RSACryptoServiceProvider
Eles são usados para assinar e criptografar dados digitalmente. A Figura 3 mostra a hierarquia de herança.
Figura 3 Hierarquia de herança da classe de criptografia assimétrica
Suporte a algoritmos de hash O .NET fornece os algoritmos de hash a seguir:
• • • •
SHA1, SHA256, SHA384, SHA512 MD5 HMACSHA (algoritmo de hash com chave) MACTripleDES (algoritmo de hash com chave)
A Figura 4 mostra a hierarquia de herança para as classes de algoritmo de hash.
Figura 4 Hierarquia de herança da classe de criptografia de hash Início da página
Resumo A criptografia é uma tecnologia importante para a criação de aplicativos da Web seguros. Este apêndice abrangeu alguns dos princípios fundamentais de certificados e criptografia e introduziu algumas das classes expostas pelo espaço para nome System.Security.Cryptography, que permitem incorporar mais facilmente as soluções de segurança criptográfica aos aplicativos .NET. Para obter mais informações sobre criptografia no.NET, pesquise no MSDN a página ".NET Framework Cryptography Model".