Prover segurança em comunicação não é uma tarefa fácil e com o advento da Internet essa atividade tornou-se ainda mais desafiadora. Neste post vamos ver como algumas perguntas simples podem ser realmente complexas de serem respondidas, mas é fundamental que você possa entender.

Ao acessar serviços como o Internet Banking ou ao fazer compras via e-commerce, como é possível garantir o sigilo dos dados trafegados? Como garantir que os valores de uma transação não foram modificados durante o caminho entre o envio e o recebimento de uma requisição? Como garantir que a página acessada é legítima e não apenas uma cópia controlada por operadores maliciosos?

Criptografia, criptografia, criptografia...

Quando navegamos pela Internet, diversos fatores podem fazer com que um adversário possa se infiltrar na comunicação entre o nosso navegador e o servidor que desejamos acessar.

Na prática, esses ataques podem explorar vulnerabilidades de protocolos de rede, como o envenenamento de ARP ou de DNS, utilizar malware como DNSChanger ou ProxyChanger, visar redes sem fio com técnicas como Evil Twin, na qual o atacante duplica uma rede legítima para que as vítimas se conectem na rede maliciosa sem notar, ou Rougue Acess Point, na qual um ponto de acesso malicioso é integrado a uma rede sem fio. Essas são apenas algumas técnicas utilizadas...

Ou seja, há uma série de ataques que podem comprometer a segurança de uma comunicação na Internet. Portanto, a premissa básica para se pensar na segurança da comunicação entre o navegador e o servidor é de que há um adversário capaz de ler e modificar mensagens (i.e. requisições e respostas), interceptando toda comunicação – o que chamamos de ataque man-in-the-middle (ou MITM).

28-3-2017 3-58-05 p- m-

Imagem: sfletter.com

 

Papel da criptografia simétrica na segurança da comunicação

Contra esses adversários, podemos utilizar a criptografia. Se voltarmos às perguntas no início do texto, veremos como a encriptação de dados é importante, pois garante o sigilo das mensagens. Essa técnica, no padrão de segurança TLS, utiliza cifras simétricas como AES, Salsa20, dentre outras.

Tais cifras são designadas “simétricas” porque ambos lados da comunicação devem utilizar uma mesma chave para encriptar e decriptar as mensagens. A outra alternativa seriam os algoritmos de encriptação ditos assimétricos, que utilizam chaves diferentes para encriptar e decriptar as mensagens, no entanto, por questão de eficiência o padrão é utilizar algoritmos simétricos na comunicação entre os computadores e servidores.

Utilizando a chave (simétrica) estabelecida entre ambas partes da comunicação, outras funções criptográficas podem ser utilizadas para verificar a integridade da mensagem. Para isso utiliza-se funções de MAC (Message Authentication Code) ou AEAD (Authenticated Encryption with Associated Data), o que permite ao receptor verificar se a mensagem original não foi alterada (possivelmente por um ataque de MITM) em trânsito depois de enviada pelo emissário.

Portanto, através de diferentes algoritmos de criptografia simétrica é possível garantir a confidencialidade e integridade da comunicação, o que, de certa forma, responde às duas primeiras perguntas enunciadas, mas ainda deixa em aberto a possibilidade do usuário verificar a legitimidade de uma página.

Outro ponto que fica pendente é: como podem, navegador e servidor, estabelecer uma mesma chave simétrica que seja aleatória?

O uso da criptografia assimétrica

Para estabelecer uma chave simétrica que permita encriptar as mensagens, bem como verificar sua integridade, é necessário fazer uso da criptografia assimétrica, ou também chamada de criptografia de chave pública.

Ela recebe esse nome pois baseia-se em pares de chaves, na qual uma é secreta e outra é pública. Dessa forma, um participante de uma comunicação conhece as chaves públicas dos outros participantes, enquanto sua chave secreta é conhecida e acessada apenas por ele.

Para elucidar como a criptografia assimétrica é utilizada, vamos recorrer aos personagens mais famosos da criptografia: Alice e Bob.

Digamos que Alice deseja estabelecer uma comunicação segura com Bob e, para isso, deve concordar com Bob em uma chave simétrica (conhecida apenas por ela e Bob) para utilizar os algoritmos simétricos que vão garantir confidencialidade e integridade da comunicação.

Para tanto, Alice pode utilizar diferentes estratégias para troca de chaves (i.e.: estabelecimento da chave simétrica). Uma maneira bastante simples é gerar uma chave (simétrica) aleatoriamente e utilizar a chave pública de Bob em um sistema de encriptação assimétrico para encriptar essa chave recém gerada.

Dessa forma Alice pode enviar a mensagem encriptada a Bob e apenas ele será capaz de decriptar e recuperar a chave simétrica a ser utilizada doravante na comunicação – sem dar chances de que um adversário intercepte a comunicação e tenha acesso à chave simétrica ou ao conteúdo das demais mensagens encriptadas com essa chave.

Essa estratégia é chamada de envelopamento digital, em analogia ao conteúdo da mensagem (nesse caso, a chave simétrica) protegida por um “envelope digital”, que consiste na encriptação do conteúdo utilizando criptografia assimétrica.

Limitações do envelopamento digital

Um fator crítico para se estabelecer uma comunicação segura diz respeito a autenticidade das mensagens. Na estratégia de envelopamento digital presume-se que Alice conhece a chave pública de Bob, mas como garantir na prática de que essa chave é legítima e pertence de fato a Bob?

Se não é possível verificar a legitimidade de uma chave, permite-se ao adversário se passar pelo receptor (i.e.: Bob) e receber as mensagens do emissor (i.e.: Alice). Com isso, pode simplesmente repassá-las ao receptor legítimo, receber as respostas e repassá-las, por sua vez, ao emissor.

Para resolver esse problema precisamos conhecer mais sobre Infraestrutura de Chave Pública, mas isso será tema de um outro post... fique ligado!