Semana de Criptografia – #2 Chaves matemáticas

Seu celular e seu computador usam criptografia. Governos do mundo todo também, assim como hackers e terroristas. A criptografia é uma ferramenta, e para falar dela, é indispensável saber como ela funciona. No post de hoje, vamos dar especial atenção ao mecanismo de criptografia ponta-a-ponta e criptografia de chave pública.

Essencialmente, criptografia é um conjunto de técnicas, envolvendo principalmente matemática e ciência da computação, voltadas à proteção de dados de forma geral.1 Isso inclui, por exemplo, verificar a integridade dos dados (como se certificar de que um arquivo não está corrompido?), autenticação (como saber se um usuário ou site é quem diz ser?) e sigilo em comunicações. Proteger informações transmitidas contra o acesso de terceiros é um dos principais usos de técnicas criptográficas, e é algo que existe ao menos desde Roma: um dos algoritmos mais simples para proteger uma mensagem é a chamada Cifra de César, usada pelo imperador romano para proteger mensagens importantes.

Algoritmos2 mais seguros foram desenvolvidos ao longo do tempo, e atualmente funcionam de forma muito mais complexa, sendo efetivamente inquebráveis: fazer com que um computador teste cada combinação de senha possível levaria mais tempo que a idade do universo. Contudo, a ideia básica continua a mesma até hoje: com o uso de algum tipo de chave, a mensagem a ser enviada é transformada (por meio de uma série de operações matemáticas) em uma sequência de letras e números aparentemente sem sentido. Outra chave, que pode ser igual ou diferente da primeira (a depender do sistema de criptografia) é necessária para que se possa descriptografar a mensagem e torná-la novamente legível: basicamente, realizando as operações matemáticas em sentido contrário – algo impossível sem a chave correta. O que uma chave “fecha,” apenas a outra “abre.” Além disso, todo par de chaves é gerado conjuntamente, através do mesmo processo e a partir de algum elemento comum – por exemplo, a senha de acesso do usuário, no caso de um iPhone. O ataque WannaCry da semana passada funcionou exatamente assim: após infectar um computador, o malware criptografava grande parte dos arquivos armazenados com uma chave acessível apenas aos hackers.

Há várias formas de se implementar criptografia, a depender de seu uso. A que se denomina “criptografia ponta-a-ponta” (ou end-to-end cryptography), por exemplo, ativada por padrão em apps como o WhatsApp ou Signal, funciona permitindo que apenas o remetente e o destinatário de uma mensagem consigam acessar seu conteúdo – e ninguém mais. Isso é possível através do que se chama de “criptografia de chave pública” (ou public-key cryptography). Em um sistema do tipo, cada participante em uma conversa possui duas chaves: uma pública e uma secreta. Tudo o que uma chave criptografar, apenas a outra consegue decifrar: uma chave é o “cadeado” da outra, e vice-versa. Além disso, como o nome sugere, uma das chaves é pública e acessível a qualquer um, enquanto a outra deve permanecer fora de alcance a qualquer um que não seja o próprio usuário.

Para dar um exemplo, imagine que uma pessoa, Alice (A), possua uma chave pública (ou pA) e uma chave secreta (sA). Se Alice quiser enviar uma mensagem para sua amiga Bia (B) (que tem suas próprias chaves pública pB e secreta sB), ela deve seguir alguns passos. Primeiro, Alice criptografa a mensagem usando sua chave secreta (sA). Após isso, a mensagem só pode ser transformada de volta em texto legível com o uso da chave pública de Alice (pA).3

O fato de que só a chave pública de Alice (pA) e nenhuma outra seja capaz de abrir a mensagem garante que a autora da mensagem é, de fato, Alice: trata-se de um mecanismo básico de autenticação. Uma mensagem criptografada produzida com uma chave que não a secreta (sA) não poderia ser aberta com sua chave pública (pA): o que uma chave “abre” só pode ter sido “fechado” pela outra.

Mas, como vimos, a chave pública é… pública. Isso significa que todos que quiserem ter acesso a mensagens autenticadas por ela precisam também conhecer tal chave. Até então, nada impede qualquer um de ler a mensagem de Alice.

É por isso que, antes de enviar sua mensagem, Alice deve criptografá-la mais uma vez, desta vez, com a chave pública de Bia (pB). O resultado dessa última transformação é uma sequência de letras e números tão incompreensível quanto a anterior, mas com uma diferença importante: agora, apenas Bia conseguirá acessar o conteúdo da mensagem.

Para tanto, Bia, ao receber a estranha e ilegível sequência de caracteres enviada por Alice, deve abri-la sucessivamente com duas chaves: primeiro, com sua própria chave secreta (sB), e depois com a chave pública de Alice (pA). Ao final disso, Bia – e só Bia – poderá ler a mensagem original de Alice.

No caso específico do WhatsApp, esse processo é mais seguro e complexo, mas conceitualmente equivalente ao descrito aqui – assim como na proteção de arquivos em celulares ou em serviços de armazenamento de arquivos em nuvem.4

Para manter o caráter “ponta-a-ponta” do mecanismo, a empresa deve garantir que as chaves secretas jamais saiam de seu celular (onde são geradas). Apenas suas chaves públicas são enviadas para os servidores para que todo o processo acima descrito seja realizado automaticamente – tudo isso sem que o WhatsApp, a NSA ou seu vizinho jamais consigam ler suas mensagens. Afinal, só você tem acesso a suas chaves secretas.

Como é possível ver, o resultado final do processo não é simplesmente que a comunicação é “trancada em uma caixa” à cuja chave só os participantes têm acesso. Uma analogia mais condizente com a matemática envolvida seria dizer que uma conversa criptografada é transmitida em um idioma que só os participantes podem decifrar. Os algoritmos de criptografia servem para fornecer as ferramentas para que esse “idioma” seja criado sem esforço por parte dos usuários.

Implementação e confiança

Evidentemente, isso tudo depende de confiança. Empresas como a Apple e Dropbox afirmam fazer uso de criptografia inquebrável. Entretanto, por se tratarem de softwares de código fechado,  não é possível a especialistas externos analisarem o código que de fato é utilizado por usuários para ter certeza de que não há qualquer tipo de backdoor ou erro na implementação do sistema. Contudo, de forma geral, há boas razões para confiar nas alegações da Apple ou WhatsApp: no caso deste último, a implementação da criptografia se deu com a ajuda técnica de Moxie Marlinspike, co-autor do protocolo Signal (o mesmo usado no app), cujo código aberto já foi analisado e considerado seguro por especialistas. Além disso, a constante recusa de ambas as empresas em obedecer ordens judiciais exigindo acesso ao conteúdo de dados de usuários sugere que, de fato, elas não são capazes de entregar seus dados a qualquer governo.

Por outro lado, nada disso significa que é impossível para autoridades ou hackers mal-intencionados ganharem acesso aos seus dados ou mensagens. O acesso físico ao dispositivo desbloqueado contendo as informações, obviamente, permite que qualquer criptografia seja ignorada: seja “espiando” seu usuário seja apreendendo-o durante ações policiais, nenhuma criptografia é capaz de proteger um dispositivo (desbloqueado) quando ele é comprometido fisicamente.5

Mais preocupante, contudo, são as notícias recentes (e periódicas) sobre a descoberta de vulnerabilidades em apps6 e sobre as ferramentas de vigilância da CIA, que levantam dúvidas sobre a segurança da criptografia usada no Whatsapp e outros aplicativos e dispositivos. Tais falhas ou ameaças, no geral, baseiam-se em variações do que se costuma chamar de “ataque man-in-the-middle” (ou “homem no meio”). Simplificadamente, tal tipo de ataque envolve a atuação de um terceiro (digamos, a CIA, ou um hacker) que, de alguma forma, consegue colocar-se entre duas pessoas que pretendem se comunicar. Através da manipulação das chaves públicas explicadas acima, é possível interceptar as mensagens trocadas sem que os participantes saibam o que está acontecendo.

Em geral, tal tipo de ataque só é possível graças a problemas na implementação de algoritmos em dispositivos e aplicativos, ou seja, na forma em que a criptografia é de fato integrada no hardware ou software de um dispositivo. Tal distinção é relevante. O processo descrito na seção anterior, de forma simplificada, descreve o funcionamento de algoritmos de criptografia: isto é, o processo conceitual ou matemático ao qual são submetidos dados que se deseja criptografar. Dispositivos como celulares, TVs, e computadores, e aplicativos, como o WhatsApp, o GMail e outros, implementam tais algoritmos em seu desenvolvimento. Para que um e-mail que você deseja enviar chegue com segurança e privacidade ao seu destinatário, seu serviço de e-mail deve criptografar o conteúdo da mensagem em algum ponto do caminho que ela percorre: a partir de seu aparelho, para a rede local, e dela para a Internet, até chegar nos servidores do seu provedor de e-mail (digamos, da Google ou da Yahoo!). Para ler suas informações, um “man-in-the-middle” deve conseguir desviar o tráfego de seus dados não criptografados em algum ponto desse percurso, trocando as chaves públicas dos participantes por suas próprias chaves “falsas.”

Para evitar este e outros tipos de ataque, e garantir a segurança de comunicações, a implementação adequada de algoritmos de criptografia é essencial: foi por meio de ataques desse tipo que a NSA conseguiu, como revelado em 2013, acessar dados de usuários da Google. Foram também diferenças em implementação que deram origem às controvérsias7 em relação à possibilidade de o WhatsApp agir como um man-in-the-middle.

No próximo post, falaremos de como o governo brasileiro tem lidado com a criptografia e seu impacto na segurança pública. Fique de olho!

Fonte das figuras de chaves: Taeliac Stock

  1. Rivest, Ronald L. (1990). “Cryptography”. In J. Van Leeuwen. Handbook of Theoretical Computer Science. 1. Elsevier.
  2. Um algoritmo é qualquer conjunto de instruções lógicas que um computador executa para realizar qualquer tarefa, desde publicar um post no Facebook a calcular trajetórias de satélites espaciais.
  3. Fonte das figuras de chaves: Taeliac Stock!
  4. Nesse tipo de caso, apenas uma chave é usada para ‘abrir’ e ‘fechar’ os dados protegidos. O usuário, por sua vez, utiliza uma senha própria que é usada para acessar essa mesma chave. Para mais informações, leia o artigo de Matthew Green: https://blog.cryptographyengineering.com/2014/10/04/why-cant-apple-decrypt-your-iphone/

  5. Além disso, a criptografia pode ficar comprometida caso acessada por outros canais que não o dispositivo móvel, conforme a empresa Check Point demonstrou ao comprometer as versões desktop do WhatsaApp e Telegram. Desde então, tal vulnerabilidade foi corrigida em ambos os apps.
  6. Ver a discussão sobre a “vulnerabilidade” do Whatsapp descoberta em 2016: https://www.theguardian.com/technology/2017/jan/16/whatsapp-vulnerability-facebook
  7. No caso, relacionadas à decisão de exigir, ou não, que usuários re-confirmem, manualmente, a segurança de suas chaves toda vez que elas forem trocadas – o que ocorre normalmente ao trocar de aparelho ou de cartão SIM. Durante esta troca de chaves, em qualquer sistema do tipo, é tecnicamente possível que os servidores (que automatizam o processo), trocando as chaves como descrito acima, interceptem as comunicações dos usuários. Contudo, isto implicaria em correr o risco de ser descoberto: usuários diligentes poderiam confirmar suas chaves manualmente e descobrir a farsa: em um app cuja popularidade se baseia, também, na confiança em sua segurança, isto seria desastroso. O Signal (app que usa a mesma tecnologia de criptografia que o WhatsApp) exige confirmação: do ponto de vista da experiência de usuário, isto exige maior esforço e dificulta o uso por leigos. Por este motivo o WhatsApp optou por não exigir tal confirmação. Uma explicação mais completa dessa questão específica pode ser encontrada aqui: https://whispersystems.org/blog/there-is-no-whatsapp-backdoor/