Você está na página 1de 5

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,
talvez, algumas informações adicionais a uma autoridade de certificação.
2. 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
assinatura formam o certificado de Alice.
3. Alice envia seu certificado para Bob para conceder a ele acesso à sua chave pública.
4. 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/en-
us/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 Algoritmos de hash


assimétricos
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
SHA1)
TripleDES (padrão triplo de RSA MAC Triple DES (código de autenticação de
criptografia de dados) mensagem que usa Triple DES)
Rijndael MD5
RC2 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".