O que é criptografia e como ela funciona?

Atualmente, a criptografia é empregada até mesmo nos apps mais simples. Como é muito simples hackear suas informações online, a criptografia e outros tipos de encriptação são as melhores ferramentas disponíveis para proteger suas informações.

A maioria dos aplicativos e programas usa algum tipo de criptografia. As melhores VPNs usam criptografia AES com chaves de 256 bits, um dos motivos pelos quais as VPNs são a melhor maneira de proteger sua atividade online.

Outros apps populares, como WhatsApp e Gmail, também usam algum tipo de criptografia.

Porém, embora façamos uso da criptografia em nosso dia a dia, a maioria de nós não sabe como ela funciona.

Para ajudar a entendermos como a criptografia funciona, vamos conferir um exemplo prático.

O problema dos canais abertos

Imagine uma tradicional sala de chat online onde os usuários podem se comunicar via mensagens de texto. Como poderíamos fazer para proteger uma sala de chat por meio de mensagens criptografadas?

A primeira implementação seria um canal de comunicação simples baseado em TCP. Como não há segurança, todas as mensagens enviadas pelos usuários estão abertas a ataques.

Portanto, quando a Aline e o Bruno trocam mensagens, os invasores podem simplesmente interceptá-los. Isso é conhecido como ataqueMan in the Middle”. Os hackers também podem alterar as mensagens e redirecioná-las.

Isso é possível porque o canal de comunicação padrão transmite as mensagens em texto simples. Ele faz o mesmo com todas as comunicações HTTP em redes Wi-Fi abertas. É óbvio que nós precisamos de um sistema melhor.

Criptografia simétrica

A criptografia simétrica usa um algoritmo que converte a mensagem original com texto simples em uma mensagem criptografada com texto cifrado usando uma chave de encriptação. A mesma chave é usada pelo destinatário para converter o texto cifrado em texto simples. Vamos analisar isso em nosso exemplo.

Quando a Aline quer enviar uma mensagem para o Bruno, ela a criptografa com uma chave simétrica. Quando Bruno a recebe, ele usa a mesma chave para decodificar a mensagem. Sem a chave, os invasores não conseguem acessar a comunicação criptografada entre os dois usuários, preservando sua confidencialidade.

Normalmente, uma chave simétrica é gerada a cada sessão e é inválida para a comunicação subsequente. Chamamos isso de “chave de sessão”.

Entretanto, existem algumas deficiências nessa abordagem:

  1. Escalabilidade: nossa solução não é escalável. Se 1.000 usuários quiserem se comunicar entre si, cada um deles precisaria de 999 chaves diferentes para estabelecer um canal seguro.
  2. Distribuição de chaves: nós presumimos que ambas as partes obteriam acesso à chave simétrica, mas como eles obtêm acesso a essa chave? Se a Aline gerar uma chave simétrica (chave de sessão) e a enviar para o Bruno, o invasor poderia interceptá-la e decodificar qualquer comunicação adicional.

Portanto, qual é o próximo passo?

Criptografia assimétrica

A criptografia assimétrica usa duas chaves – uma chave privada e uma chave pública. Quando o texto simples é criptografado com uma chave pública, ele apenas pode ser decodificado com a chave privada correspondente, e vice-versa.

Isso nos ajuda a resolver o problema das duas chaves simétricas. A criptografia assimétrica é mais lenta que a criptografia simétrica; portanto, ambas são comumente usadas em conjunto. Vamos ver como isso é feito:

Cada usuário possui um par de chaves públicas-privadas. A chave pública está disponível e pode ser identificada por todos, mas a chave privada é confidencial e protegida pelo proprietário.

Quando a Aline quer enviar uma mensagem para o Bruno, ela primeiramente cria uma chave de sessão simétrica. Então, ela a criptografa com a chave pública do Bruno. Como o Bruno é proprietário da chave privada correspondente, somente ele pode decodificar a mensagem e obter a chave de sessão.

A partir daí, essa chave de sessão pode ser usada para criptografar e decodificar mensagens entre os dois interlocutores. Isso resolve o problema da distribuição de chaves sem comprometer a velocidade, pois a criptografia simétrica e mais lenta é usada apenas na fase inicial.

Nós também solucionamos o problema de escalabilidade, pois todos precisam de apenas um par de chaves públicas-privadas para se comunicar entre si.

Agora, o sistema melhorou significativamente, mas ainda não está completamente seguro. Ainda existem problemas de:

  1. Autenticação: estamos usando a chave pública do Bruno como ponto de partida, mas como a obtivemos? A chave pública que recebemos inicialmente pode ter vindo do Bruno ou de algum impostor, um invasor. Então, embora estejamos nos comunicando com segurança, talvez estejamos fazendo isso com a pessoa errada.
  2. Integridade dos dados: a mensagem poderia ser alterada durante a transferência de dados. Devemos garantir que os dados não tenham sido adulterados.

Certificados e assinaturas digitais

A autenticação requer um sistema de confiança. Uma autoridade de certificação confiável garante que a chave pública pertença a uma pessoa específica. Cada um dos usuários do sistema registra um certificado digital junto à autoridade de certificação (CA). Ele contém as informações de identidade do proprietário e uma chave pública.

Portanto, quando a Aline quer se comunicar com o Bruno, ela pode verificar com a autoridade se a chave pública recebida realmente pertence ao Bruno. É dessa mesma forma que o HTTPS funciona na internet. Um certificado raiz é associado a diversos certificados filhos com assinaturas digitais (descrito abaixo).

Então, como sabemos que o certificado recebido seja originário da autoridade de certificação, e não do invasor? Normalmente, os certificados raiz originários de uma autoridade confiável são programados (hardcoded) no navegador, o que nos oferece um parâmetro confiável.

O problema da integridade dos dados pode ser resolvido com o uso de assinaturas digitais (não confundir com certificado digitais).

Quando a Aline quer enviar uma mensagem para o Bruno, ela primeiramente cria uma chave de sessão e a criptografa com a chave pública do Bruno. Vamos chamar esse pacote de dados de “PARTE1”. Em seguida, ela cria o hash da mensagem usando um dos diversos algoritmos de hashing disponíveis (MD5/SHA256). Um hash de mensagem consiste em uma conversão unidirecional de um byte de comprimento variável para um byte de comprimento fixo.

Não é possível obter a mensagem original a partir do valor do hash, e é estatisticamente improvável que duas mensagens contenham o mesmo valor de hash.

Após criar o hash, a Aline o criptografa com sua chave privada. Isso é chamado de assinatura digital, pois pode ser usado para verificar que a mensagem foi originada a partir da Aline, e não adulterada.

Então, a assinatura digital e a mensagem original são criptografadas com a chave de sessão. Vamos chamar isso de “PARTE2”. Confira o que nós temos agora:

PARTE1 = CHAVE_PÚBLICA_BRUNO-> (CHAVE_SESSÃO)

PARTE2 = CHAVE_SESSÃO-> (MENSAGEM + ASSINATURA_DIGITAL)

A Aline envia tanto a PARTE1 quanto a PARTE2 para o Bruno. Como ele é o proprietário da chave privada, somente o Bruno pode decodificar a PARTE1 e acessar a CHAVE_SESSÃO.

Em seguida, ele usa essa chave de sessão para decodificar a PARTE2 e obter a mensagem e a assinatura digital. Então, ele usa a chave pública da Aline para decodificar a assinatura digital e obter o hash da mensagem. Bruno calcula o hash da MENSAGEM e o compara com aquele da etapa anterior.

Se ambos os hashes forem correspondentes, isso significa que a integridade dos dados foi preservada, e que não houve adulteração.

Como você pode ver, nós agora construímos um ecossistema totalmente seguro.

Com o uso de certificados e assinaturas digitais, nós podemos criar um sistema de autenticação criptografado que seja rápido, seguro, confidencial e escalável.

Agora que você sabe como a criptografia funciona, confira nossas VPNs favoritas para observá-la em ação.

Isto foi útil? Compartilhe.