quarta-feira, 20 de novembro de 2013

NSA e o monitoramento dos EUA: criptografia

Artigo interessante do José Luiz Berg explicando conceitualmente a criptografia.

No artigo da semana passada, falamos sobre como as agências de segurança podem facilmente ter acesso à maioria do tráfego de Internet, simplesmente capturando informações nas fibras óticas dos cabos submarinos que passam pelos EUA ou por países aliados. Porém, uma parte desse tráfego de dados é criptografado, o que dificulta essa captura. Nesse artigo, vamos então mostrar como funciona a criptografia, e o que eles podem fazer para conseguir ter acesso mesmo a esse tipo de tráfego.
Criptografia não é um assunto novo nem sequer limitado ao mundo da Internet. Na realidade, ela existe desde que o homem começou a usar a escrita, e teve a necessidade de registrar informações que queria que fossem entendidas somente por um grupo limitado de pessoas. No império Romano, por exemplo, era comum o envio de mensagens criptografadas tanto para as tropas em campo quanto entre os governantes de diferentes províncias.
Porém, incialmente as técnicas de criptografia eram baseadas em processos que utilizam rotinas de embaralhamento das letras ou tabelas de substituição para trocar as letras por outros símbolos. O que esses processos tinham em comum era que se você conhecesse o processo utilizado, poderia facilmente decodificar a mensagem, então o segredo estava no processo. Somente nas década de 40 e 50, é que as técnicas de criptografia começaram a ser estudadas mais à fundo pelos matemáticos, e o governo Americano começou a tratar a área como sendo de alta segurança, investindo em empresas como a NSA. Essa situação perdurou até a década de 70, quando foi publicado pelo governo americano o padrão DES (Data Encryption Standard), e posteriormente, com o trabalho de Whitfield Diffie e Martin Hellman, que iniciaram a pesquisa em sistemas de criptografia de chave pública, foi publicado o padrão RSA.
A principal diferença desse novo padrão é que o segredo não está mais no processo, e sim nas chaves criptográficas utilizadas. São baseados em matemática avançada, que vou abstrair completamente pois foge à capacidade dos reles mortais (incluindo a minha). O importante é sabermos que utilizam pares de chaves criptográficas complementares, calculadas utilizando números primos bem grandes, e garantem que o texto criptografado com uma das chaves pode ser lido somente utilizando a outra chave complementar. O processo de criptografia é público e conhecido por todos, mas sem a chave, não é possível decodificar o texto. Na realidade, é possível “adivinhar” a chave, gerando valores aleatórios sequenciais e tentando decodificar o texto utilizando cada um deles. Com muita sorte você pode acertar na primeira tentativa, ou levar milhares de anos tentando, de acordo com a quantidade de computadores disponíveis para essa tarefa e a capacidade de processamento deles. Esse processo de adivinhação da chave é chamado ataque de “força bruta”. Como a garantia da criptografia é baseada no tamanho das chaves, com o avanço das tecnologias ele foi sendo aumentado progressivamente, tendo começado com 64 bits, e hoje são recomendadas chaves de 2048 ou 4096 bits para serviços mais críticos.
Os algoritmos de criptografia também evoluíram desde então, pois foram encontradas falhas em sua matemática, que permitiria a identificação mais fácil das chaves. Sempre que isso ocorria, o problema era corrigido e novas versões de algoritmos eram desenvolvidas. O principal órgão responsável pelo desenvolvimento e publicação de novos algoritmos é o NIST (National Institute of Standards and Technology), que mantém inclusive concursos que premiam qualquer um que conseguir comprovar a quebra de um algoritmo de criptografia de forma mais rápida do que pela “força bruta”. Apesar de serem um órgão do governo americano, são muito abertos à comunidade civil de matemáticos especializados em criptografia, então seu trabalho pode ser considerado altamente confiável. Apesar disso, em 2007 o NIST foi acusado de publicar um novo padrão de criptografia que incorporava um componente “defeituoso” desenvolvido pela NSA, que poderia permitir a quebra das chaves criptográficas. Após muita pesquisa e discussão a respeito, e inclusive com revelações de Snowdeam reforçando essa hipótese, o novo padrão foi recolhido pelo NIST, e não está mais sendo utilizado hoje. Não se sabe ainda se houve má fé na elaboração do algoritmo, ou era realmente uma falha, o que seria uma feliz coincidência para eles. Mas o fato é que apesar disso, os algoritmos de criptografia existentes seguem relativamente confiáveis, pelo menos nas versões mais modernas e utilizando chaves criptográficas maiores do que 2048 bits.
Mas vamos entender então como funciona a criptografia: vimos que temos sempre um par de chaves similares e complementares. Para distingui-las, uma é chamada de chave pública, e a outra de chave privada. A ideia é guardar a sua chave privada a sete chaves, e divulgar a chave pública para todos. Então se alguém quer mandar uma mensagem criptografada para você, ele utiliza a chave pública que você disponibilizou para cifrar o texto, de forma que só você que possui a chave privada poderá decifrar o texto e ler a mensagem.
Alice envia a chave pública para Bob e guarda a chave privada
Bob cifra o texto com a chave pública de Alice e envia para ela.
Ela decifra o texto com a sua chave privada.
Esse tipo de criptografia é chamado de assimétrico, pois as chaves utilizadas para cifrar e decifrar o texto são diferentes. É a forma mais segura, mas também requer uma capacidade de processamento maior, por isso é utilizada para serviços de menor volume de dados como o envio de e-mails.
Quando você acessa um site com o protocolo HTTPS, como os dos bancos, existe uma outra forma de criptografia denominada TLS (Transport Layer Security), que funciona de uma forma um pouco diferente. Ao acessar o site pela primeira vez, é executado um processo chamado negociação TLS, que consiste em criar um canal criptografado utilizando criptografia assimétrica e depois gerar uma chave criptográfica temporária, que é transferida para o seu computador pelo canal seguro. Uma vez que você possua essa chave, a comunicação passa a ser feita utilizando criptografia simétrica, ou seja, a mesma chave é utilizada para cifrar e decifrar as mensagens. Como a criptografia simétrica utiliza cálculos mais simples e rápidos, os servidores ficam menos sobrecarregados. Claro que criptografia simétrica é mais fácil de ser quebrada, mas como ela é temporária e serve somente para aquele acesso, qualquer tipo de ataque precisa ser feito antes que você feche o seu browser, reduzindo a possibilidade e a sua utilidade para o atacante.
Agora que já sabemos como funciona a criptografia, podemos então entender o que são os certificados digitais. Além de conterem as chaves pública e privada, o certificado é um documento eletrônico que contém alguns dados sobre um sujeito, como o nome e CPF para um eCPF, ou a razão social e o CNPJ para um eCNPJ, ou ainda o endereço de um site para um certificado utilizado em servidores da Internet. O documento contém também uma assinatura digital, que é um código calculado utilizando os dados do certificado e a chave privada do emissor, e que como na criptografia, pode ser verificado utilizando a sua chave pública. A principal função dessa assinatura é garantir que os dados do certificado não serão alterados após a sua emissão. Com isso, um certificado configura uma cadeia de confiança, onde uma entidade raiz confiável garante a autenticidade dos dados de um outro certificado, que por sua vez pode garantir outros certificados que tenha emitido, e assim por diante.
Mas então, se a criptografia é relativamente confiável, como as agências de segurança podem ter acesso aos seus dados? Embora seja sempre possível um ataque do tipo “força bruta”, e existirem evidências de que diversos equipamentos especiais foram encomendados pela NSA especificamente para essa tarefa, existem algumas outras formas que podem ser utilizadas:
  • Muitos administradores de sistemas conhecem bem pouco sobre criptografia, e permitem que seus sistemas funcionem com erros de configuração, ou utilizando chaves pequenas e/ou algoritmos velhos e com vulnerabilidades conhecidas, que podem facilitar a quebra da chave privada. Uma vez que essa quebra seja alcançada para um site, a comunicação de todos os usuários com ele estará comprometida.
  • Quando você adquire um certificado digital, ele é gerado em uma entidade certificadora e entregue somente à você. Como vimos no primeiro artigo, se essa entidade certificadora for uma empresa americana, pode ter sido “convencida” pelo governo americano a manter e disponibilizar uma cópia do seu certificado. Não encontrei até agora nenhuma evidência de que isso tenha acontecido, mas depois de entendermos o que está sendo feito, não seria exatamente uma surpresa.
  • É evidente que qualquer tipo de criptografia feita pelas empresas americanas que já colaboram enviando informações para a NSA está naturalmente comprometida, pois provavelmente eles já forneceram previamente todas as chaves privadas. Então toda iniciativa de criptografia, como a anunciada recentemente pelo Yahoo!, é somente uma questão de marketing sem nenhum efeito real.
  • Outra forma de conseguir a chave privada de um site é através de ataques convencionais. Ao identificar um site como de interesse especial, podem ser lançados diversos ataques de hackers, para tentar invadir o sistema e descobrir a chave criptográfica. Como são comuns falhas na administração dos sistemas, esse ataque consegue obter sucesso em boa parte das vezes, e não é sequer percebido pois nada é alterado. Uma vez obtido o certificado, ele vai para o banco de dados da NSA, e passa a estar disponível para decifrar os dados de qualquer comunicação criptografada.
  • A forma de ataque mais eficiente para canais criptografados é o chamado “man in the middle”. Consiste basicamente em enganar o usuário, fingindo que ele está se comunicando com o site desejado, quando na realidade está se comunicando com o atacante, que por sua vez encaminha os dados para o site desejado e envia todas as respostas para o usuário. Então, do ponto de vista do usuário, parece que tudo está normal, mas o certificado que está sendo utilizado é o do atacante, que pode então decifrar e ter acesso a todos os dados. Essa é uma forma bastante complexa de ataque e possui implicações profundas na estrutura de resolução de nomes da Internet, e por isso vou deixar para falar dele com mais detalhes no próximo artigo.
Pelo que vimos até agora, apesar de existirem formas de quebrar a criptografia, essa é uma tarefa difícil, e que não pode ser feita em massa. Então pelas evidências que temos, isso é feito pela NSA somente para alvos ou sites de interesse especial, e não para todo o tráfego interceptado.
Proteger-se desse tipo de bisbilhotice não é muito fácil, mas partindo da premissa acima, utilizar um certificado digital eCPF ou eCNPJ, emitidos por uma certificador brasileira, com chaves de pelo menos 2048 bits já lhe dá um nível de proteção bastante razoável (a não ser que você seja um terrorista). Você pode utilizar esse certificado para trocar mensagens de e-mail ou arquivos com dados criptografados com outras pessoas, mas é claro que essas pessoas terão que possuir também certificados e utilizá-los, senão não adianta muito. Lembrando o processo de criptografia, para mandar uma mensagem cifrada para alguém você vai precisar da chave pública da pessoa, e para ela responder de forma cifrada ela vai precisar da sua chave pública. A obtenção das chaves públicas geralmente é feita de forma automática por seu programa de e-mail, mas normalmente para efetuar a criptografia precisamos lembrar de marcar essa opção na hora de enviar o e-mail, senão ele irá aberto. Então não adianta mandar criptografado se a pessoa responder de forma aberta (chamada de clear text) e com todo o histórico de encaminhamento da mensagem incluído.
Já quanto ao acesso a sites por HTTPS, não existe muita coisa a ser feita, pois dependemos da ação do administrador do sistema para termos alguma segurança. O que pode ser feito é avaliar os dados do certificado apresentado e verificar se são confiáveis, estão atualizados, dentro da validade e possuem padrões razoáveis de segurança. Ao verificar que um certificado possui algum problema, o browser nos avisa, mas a ação da maioria das pessoas é simplesmente ignorar o aviso e continuar acessando.
Se você possui ou administra um site, então é melhor perder algum tempo estudando mais à respeito, para garantir o mínimo de segurança. Procure utilizar sempre certificados com no mínimo 2048 bits, pelo menos com os algoritmos RSA, 3DES e SHA512, e principalmente, manter seus certificados seguros. Aliás, essa também é uma recomendação expressa para certificados pessoais: mantenha eles seguros, de preferência armazenados em dispositivos físicos (smart-cards), e protegidos com senhas fortes. Se você tem muita dificuldade em gravar senhas, uma forma relativamente segura e simples é anotá-las em um papel e guardá-lo. Como a grande maioria dos ataques vem pela Internet, isso lhe dá mais segurança do que utilizar um arquivo com as senhas.
Para aplicações ou atividades que exijam mais segurança, existe sempre o PGP (Pretty Good Privacy), um padrão aberto de criptografia criado por Phil Zimmermann em 1991, que é considerado como o calcanhar de Aquiles das agências de segurança, pois até hoje ninguém conseguiu quebrá-lo. Existem alguns programas de criptografia PGP que podem ser utilizados como clientes de e-mail, utilitários para a criptografia de arquivos ou mesmo de todo o seu disco, que podem lhe dar um nível de proteção próximo ao dos padrões de criptografia militares. O padrão PGP hoje é de propriedade da Symantec, que distribui o PGP Desktop. Porém, se você é paranoico com segurança, vai querer utilizar um programa comercial de uma empresa americana para a criptografia? Se a resposta for não, existe o projeto OpenPGP/GnuPG, baseado em código livre, e alguns aplicativos grátis que podem ser encontrados no site Cripto.info.
Por último, quero lembrar que uma das premissas da área de segurança é considerar sempre o custo/benefício. Se você vai mandar uma receita de bolo ou um convite para uma festa de aniversário por e-mail, não precisa mandar criptografado. Mas se você está discutindo detalhes do planejamento estratégico de sua empresa, trabalha como diplomata ou está efetuando transações financeiras, é uma boa prática e pode evitar muitos problemas. Além disso, lembre-se que uma das formas de virar um alvo preferencial da NSA é ser pego utilizando criptografia PGP constantemente, ou mesmo escrever artigos sobre ela. Ooops...
No próximo artigo vou abordar a estrutura de resolução de nomes da Internet, e como ela pode ser utilizada para interceptar tráfego criptografado, ou mesmo para controlar o que as pessoas estão fazendo na Internet.
Referências:
http://cartilha.cert.br/criptografia/
http://pt.wikipedia.org/wiki/Criptografia
http://pt.wikipedia.org/wiki/DES
http://en.wikipedia.org/wiki/Dual_EC_DRBG
http://pt.wikipedia.org/wiki/TLS
http://www.openpgp.org/
http://en.wikipedia.org/wiki/National_Institute_of_Standards_and_Technology

http://jornalggn.com.br/blog/jluizberg/nsa-e-o-monitoramento-dos-eua-parte-3-criptografia

Nenhum comentário:

Postar um comentário