Criptografia e internet

Criptografia e correio eletrônico

O uso mais frequente da criptografia é no envio e recebimento de emails. Uma vez que os pacotes de informação são transmitidas de servidor em servidor pela internet até chegar no computador de destino, qualquer pessoa pode monitorar esses pacotes e obter seu conteúdo. Utilizando a criptografia assegura que apenas o destinatário comprenderá o conteúdo da mensagem.

No caso do correio eletrônico as coisas são ainda um pouco mais complicadas, pois não existe dificuldade nenhuma em enviar emails falsos. Isso não é uma vulnerabilidade, mas sim uma características do serviço de email. Qualquer pessoa pode acessar um servidor de email e redigir uma mensagem em nome do Presidente da República. Basta que você configure seu programa de email para que envie suas mensagens como presidente@brasil.govSTOPSPAM.br. Isso é possível devido à própria arquitetura do sistema de email existente na internet.

Além disso, um email passa por muitos servidores até chegar ao seu destino. Se a mensagem não estiver criptografada, ela pode ser facilmente interceptada por terceiros. Isso que estou falando não são falhas do sistema de email, mas sim características deles. Vejamos com um pouco mais de detalhe como tudo isso funciona.

Na internet existem três tipos de programas de email: os programas do tipo MTA (Mail Transport Agent), os MDA (Mail Delivery Agent) e ou MUA (Mail User Agent).

Os Mail Transport Agents (ou Agentes de Transporte de Emails) são aqueles programas que enviam a mesagem de email para o servidor de destino, que pode ser, por exemplo, o servidor de emails do provedor de internet usado pelo destinatário da mensagem. Por causa do protocolo que os MTAs utilizam, eles são mais conhecidos como servidores SMTP (Simple Mail Transfer Protocol).

Já os MDAs (Agentes de Entrega de Email) são os programas que enviam a mensagem até o usuário de destino, e para que este usuário possa receber a mensagem ele deve utilizar um programa do tipo MUA, que são os programas de email propriamente ditos. Os servidores de entrega de email também são conhecidos como servidores POP ou IMAP. Já os clientes de email (MUAs) podem ser tanto um site de Webmail como os programas do tipo Mail (MacOSX), Mozilla Mail, etc.

Parece complicado?

O caminho que uma mensagem de correio eletrônico percorre é o seguinte: o remetente da mensage utiliza seu respectivo cliente de email (MUA) para enviar a mensagem até o seu programa MTA, que pode ser o servidor SMTP do seu provedor ou até mesmo ser um programa rodando no computador do remetente. Esse MTA por sua vez envia essa mensagem até o MTA do usuário de destino. Quando o destinatário verificar suas novas mensagens, basta que ele utilize seu cliente de email (MUA) para se conectar até seu servidor POP ou IMAP (MDA) e receber suas mensagens.

Por exemplo, suponha que um usuário do provedor remetente.br deseja enviar uma mensagem para destinatario@destinatarioSTOPSPAM.br. O remetente envia o email para o servidor de SMTP do provedor remetente.br, que por sua vez manda a mensagem para o SMTP de destinatario.br. Agora é só o destinatário se conectar ao programa POP, IMAP ou Webmail do provedor destinatario.br para receber a mensagem.

remetente > smtp.remetente.br > smtp.destinatario.br > pop3.destinatario.br > destinatário
   (mua)         (mta)                 (mta)                  (mda)               (mua)

Em todo esse processo não existe verificação do email de origem da mensagem, isto é, uma vez que o remetente se conectou em smtp.remetente.br ele pode escolher qualquer email de origem. Ele pode escrever a mensagem como destinatario@destinatarioSTOPSPAM.br, ficticio@ficticio.comSTOPSPAM.br (não precisa nem ser um email válido). Isso acontece porque normalmente os servidores STMP só requerem usuário e senha para serem utilizados e eles não fazem nenhuma verificação de destinatário. Às vezes esses servidores estão desconfigurados e não precisam nem de senha para serem utilizados, sendo então muito usados para SPAM (mala direta). Um outro detalhe importante é que qualquer pessoa pode rodar seu próprio programa de SMTP e com isso enviar mensagens em nome de outras pessoas.

Já os servidores tipo MDA (pop3, imap, webmail) requerem usuário senha para fornecerem o acesso à uma conta de email, o que impede as pessoas de receberem o email de outras pessoas.

Se você quiser testar o quanto o sistema de correio eletrônico é frágil nesse aspecto da verificação de endereços, experimente utilizar uma ferramenta de email anônimo, como o http://anony.co.uk/ ou o http://email.bonloup.org/. Basta preencher o formulário, escolhendo inclusive o remetente da mensagem, para enviar um email anônimo.

Como na internet todas as informações passam de servidor em servidor até chegar no seu destino, as mensagens de email são naturalmente “interceptadas” por outros servidores. Se essa mensagem passar por algum servidor controlado por pessoas maliciosas, as mensagens de email podem ser lidas com muita facilidade.

Resumindo, qualquer pessoa pode escrever um email com o endereço de email de outra pessoa, mas dificilmente conseguirá receber o email de outras pessoas. No entanto, é possível que mensagens de email sejam interceptadas enquanto estiverem indo para o seu destino, e se ela não estiver corretamente criptografada qualquer pessoa pode interpretá-la.

Assim, além de criptografar suas as mensagens, é muito útil assinar com sua chave pública as mensagens de email que você envia. Assim as pessoas só confiarão nas mensagens enviadas com o seu endereço se elas estiverem assinadas com sua chave privada. Por isso, se você não usar criptografia, você não terá como provar que

  • As mensagens de email que você não enviou mas que alguém enviou em seu nome não são realmente suas
  • As mensagens que você enviou em seu nome são realmente suas

Se você adotar a assinatura de mensagens como padrão, você consegue facilmente provas os dois itens anteriores.

Conexão segura: criptografia na rede

Vou repetir o que escrevi numa seção anterior: Uma vez que os pacotes de informação são transmitidas de servidor em servidor pela internet até chegar no computador de destino, qualquer pessoa pode monitorar esses pacotes e obter seu conteúdo. Utilizando a criptografia assegura que apenas o destinatário comprenderá o conteúdo da mensagem.

Se você estiver visitando um site e em algum momento precisar entrar com uma senha ou qualquer outra informação a ser enviada via formulário, terceiros podem interceptar essa informação e se ela não estiver criptografada, pode ser interpretada por qualquer um.

Para contornar esse problema foram criados diversos protocolos que utilizam criptografia pela internet em tempo real. Por exemplo, quando navegamos na Web nosso navegador utiliza o protocolo HTTP (HiperText Transfer Protocol - Protocolo de Transferência de Hipertexto), que não suporta nenhum tipo de criptografia. Já o HTTPS (Secure HTTP - HTTP Seguro) foi feito para navegarmos na web de forma um pouco mais seguira. Vejamos como funciona:

Quando você usa um nagevador web (Mozilla, por exemplo) e se conecta num site utilizando o protocolo de conexão segura (HTTPS), seu navegador e o servidor do site trocam automaticamente suas respectivas chaves públicas e então é iniciada uma transmissão de informações criptografadas. ‘’‘ATENÇÃO:’‘’ seu navegador não vai enviar ao servidor a chave pública que você criou, mas sim uma chave própria criada automaticamente pelo seu navegador de tal forma que você não precisa de nenhum programa adicional de criptografia (nem mesmo o GPG). Tudo isso é feito de forma praticamente transparente ao usuário.

A pergunta natural é: como podemos confiar que o site que estamos acessando realmente é o site que ele diz ser; em outras palavras, existe um jeito de confiarmos na chave pública do site?

De uma forma parecida como quando trocamos a impressão digital de nossa chave pública com a de outras pessoas, o site com conexão segura enviará para o seu navegador um certificado de autenticidade, que é uma espécie de assinatura da chave pública do site emitida por uma autoridade certificadora. Uma autoridade certificadora é qualquer pessoa, organização ou empresa que “assine” certificado de autenticidade. A Autoridade Cerificadora (ou Certificate Authority) mais conhecida é a CAcert.org, uma organização sem fins lucrativos que valida tais certificados.

Tudo que o usuário precisa fazer é

  • Confiar na autoridade certificadora
  • Instalar o certificado da autoridade certificadora
  • Confiar que o certificado instalado é o certificado verdadeiro dessa autoridade, bastando para isso que você verifique a impressão digital desse certificado.

Por exemplo, você pode tentar baixar o arquivo http://www.cacert.org/cacert.crt, que contém o certificado principal da Cacert.org. Na maioria dos navegadores, abrirá uma janela perguntando se você aceita a Cacert como uma autoridade certificadora.

Inserir imagem: cacert.jpg

Se você tem dúvidas para aceitar, veja os detalhes do certificado, conferindo se fingerprints do certificado corresponde àqueles que a autoridade certificadora divulga em seu site.

Inserir imagem: cacert2.jpg

O processo da conexão segura via web é o seguinte: suponha que você esteja visitiando o site lists.indymedia.org. Se você quiser fazer isso via conexão segura, você digitará https://lists.indymedia.org ao invés de http://lists.indymedia.org (note a diferença de https ao invés de http).

Na primeira vez que você acessar um site via conexão segura, caso você não tenha instalado o certificado da autoridade certificadora que validou o certificado desse site, seu navegador lhe informará a respeito e perguntará se você quer mesmo assim aceitar o certificado desse site, conforme mostra a figura abaixo.

Inserir imagem: https.jpg

Agora você tem três opções:

  • Confiar nesse certificado e clicar em Ok ou
  • Ir até o site da Autoridade Certificadora que emitiu o certificado do site, instalar o certificado da autoridade e em seguida voltar para o site que você estava tentando acessar via conexão segura ou então
  • Desistir de acessar o site smile

Se clicarmos em ‘’Examine certificate...’’ (Examinar certificado...), aparecerá uma janela como mostra a figura abaixo. Nela, as impressões digitais do certificado do site http://lists.indymedia.org estão em SHA1 Fingerprint e MD5 Fingerprint. O campo Issued to (emitido para) informa para qual site e organização o certificado, enquanto que o campo Issued by (emitido por) diz qual foi a autoridade certificadora que emitiu esse certificado. O campo Validity (validade) mostra qual é o prazo de validade do certificado.

Inserir imagem: https2.jpg

Quando passa o prazo de validade, o certificado expira e o navegador não mais o reconhecerá como válido e ao acessar o site aparecerá uma janela mais ou menos como a abaixo, avisando que o certificado expirou e portando a conexão segura pode estar comprometida.

Inserir imagem: certificate.jpg

Da mesma forma como é possível navegar pela web com conexão segura, também é possível utilizar outros serviços na internet, como ‘’ftp’’ (transmissão de arquivos) e ‘’irc’’ (bate papo), de forma criptografada.