Jan 10, 2020 - updated

Conheça o Handshake: descentralizando DNS para melhorar a segurança da Internet

O handshake pode tornar a Internet mais segura, fornecendo uma alternativa distribuída às autoridades de certificação (CAs) e tornando os nomes de domínio resistentes à censura, à apreensão e à violação.

Rafael Castro Couto's profile picture
Rafael Castro Couto

Para entender como o Handshake pode melhorar a Internet, vamos primeiro ver como a segurança na Internet funciona hoje. Se você já sabe como TLS e CAs funcionam, pode pular para Problemas com CAs.

O Problema: HTTP

Quando você faz uma solicitação HTTP para google.com, seu navegador faz uma pesquisa de DNS (Domain Name System, ou Sistema de Nomes de Domínios) para encontrar o endereço IP dos servidores do Google. Seu navegador faz uma solicitação para esse endereço IP. A solicitação vai do seu computador para os servidores do Google, mas sua solicitação é roteada através de uma variedade de grandes redes interconectadas antes de chegar ao seu destino. Em alguns casos, pode até passar por outro país antes de retornar ao seu país. Por exemplo, a maior parte do tráfego da Internet na América do Sul percorre Miami. A qualquer momento dessa jornada, intermediários podem inspecionar ou até tentar modificar os dados que você envia ao Google para outro servidor que não seja o Google! Isso é conhecido como ataque MITM (Man In The Middle). De fato, os documentos de Edward Snowden revelaram que a NSA fez exatamente isso ao realizar ataques MITM no Google para coletar dados sobre pessoas.

Ataque MITM. Fonte: cloudflare.com
Ataque MITM. Fonte: cloudflare.com

A solução: HTTPS

Precisamos de autenticação, integridade e criptografia para evitar ataques MITM. A solução é usar HTTPS, que depende de TLS e CAs.

Seu navegador criptografa o tráfego para sites usando TLS (Transport Security Layer), que depende da criptografia de chave pública. A criptografia de chave pública é um método de criptografia assimétrica usando um par de chaves: uma chave pública e um par de chaves privadas (em oposição à criptografia simétrica com apenas uma chave). A chave pública é compartilhada publicamente e é usada para verificar assinaturas. A chave privada é usada para descriptografar as mensagens criptografadas pela chave pública. A chave privada nunca é compartilhada.

Quando o navegador faz uma solicitação HTTPS ao Google, ele inicia um TLS Handshake (aperto de mão) com o Google e recebe a chave pública do Google. O navegador usa a chave pública do Google para verificar se o restante das mensagens no handshake TLS é iniciado pelo Google, porque apenas o Google tem a chave privada para sua chave pública. Dessa forma, mesmo que as redes intermediárias interceptem a solicitação, elas não poderão descriptografar o conteúdo. Se um intermediário encaminhar a solicitação para outro servidor fingindo ser o Google, o navegador saberá porque esse servidor não poderá responder à solicitação.

Autoridade de Certificação

Como você sabe que a chave pública do Google é realmente a chave pública do Google? Quando você faz a primeira solicitação ao Google, uma rede intermediária pode ter interceptado sua solicitação e enviado uma chave pública falsa para o Google. As autoridades de certificação tentam resolver esse problema. As CAs (Certificate Authorities) são terceiros confiáveis que verificam a autenticidade de chaves públicas para sites. Seu sistema operacional é enviado com uma lista de CAs examinadas por padrão. Quando um site deseja oferecer suporte a solicitações HTTPS, ele registra sua chave pública em uma das CAs confiáveis. Você verifica se a chave pública que você recebe do Google é realmente a chave pública do Google, verificando-a com suas autoridades de certificação.

A chave do Google é conferida pela GlobalSign, que é a CA raiz no meu computador. Verifique você mesmo visitando Google.com e clicando no ícone de cadeado na barra de URL.
A chave do Google é conferida pela GlobalSign, que é a CA raiz no meu computador. Verifique você mesmo visitando Google.com e clicando no ícone de cadeado na barra de URL.

Problemas com CAs

Você deve ter percebido uma suposição fundamental: você deve confiar nas autoridades de certificação. Todos eles. Por padrão, existem centenas de CAs instaladas no computador - o Microsoft Windows vem com 390 certificados e o Mac OS X vem com 170 certificados. Essas autoridades de certificação podem delegar confiança a intermediários e esses intermediários podem delegar confiança a mais intermediários filhos. Você não sabe quem são todos esses intermediários da CA e, se um deles for hackeado, todo o tráfego HTTPS estará vulnerável a ataques MITM. No ataque do DigiNotar, o governo iraniano invadiu uma CA holandesa e a usou para fazer um ataque MITM em 300.000 cidadãos iranianos.

Apenas alguns dos certificados instalados em minha máquina. Não fiquei surpreso ao ver o GoDaddy, mas eu não esperava ver uma CA de Hong Kong instalada ...
Apenas alguns dos certificados instalados em minha máquina. Não fiquei surpreso ao ver o GoDaddy, mas eu não esperava ver uma CA de Hong Kong instalada ...

Consertando o problema das CAs 

Embora os protocolos baseados em blockchain possam ser lentos e limitados, eles se destacam ao abordar a questão de terceiros confiáveis. Os dados armazenados em blockchains são imutáveis e todas as partes podem verificar se os dados armazenados em um blockchain estão corretos. Tome o Bitcoin como exemplo. As carteiras no Bitcoin têm chaves públicas usadas para assinar transações. As carteiras também têm dados associados a elas, incluindo quantos bitcoins existem na carteira. Você pode até associar dados arbitrários à sua carteira, como a data de nascimento de um bebê armazenado na blockchain do Bitcoin.

Eric Meltzer comemora a data de nascimento de sua filha na blockchain Bitcoin.
Eric Meltzer comemora a data de nascimento de sua filha na blockchain Bitcoin.

Você pode imaginar um sistema em que, em vez de armazenar dados arbitrários no blockchain, sejam armazenados nomes e suas chaves públicas. Em vez de confiar em uma lista arbitrária de autoridades de certificação como sua raiz de confiança, usar uma lista raiz de confiança distribuída com criptografia. Os proprietários de nomes podem associar suas próprias chaves ao nome e todos poderão verificar se a chave pública de um nome é a correta. Isso resolveria a questão de confiar nas CAs, e o Handshake é precisamente esse sistema!

Handshake

O Handshake é um protocolo blockchain que visa resolver o problema de confiar em centenas de CAs. É um protocolo semelhante ao Bitcoin, exceto que, em vez de usar-lo como dinheiro, você usa moedas de Handshake para registrar nomes na blockchain do Handshake. Esses nomes são domínios de nível superior (TLDs) como .com, .org, .net. O Handshake descentraliza o arquivo da lista raiz, que é o arquivo controlado pela ICANN que determina quem é o proprietário de qual TLD. Qualquer pessoa pode registrar seu próprio TLD na blockchain do Handshake.

DNS hierarchy. Source cloudflare.com
DNS hierarchy. Source cloudflare.com

Um benefício dos TLDs no Handshake é que eles têm chaves públicas associadas a eles que podem ser verificadas como autênticas. Somente os proprietários do nome podem associar dados DNS e outros dados arbitrários ao nome que todos podem verificar na blockchain em vez de confiar em CAs.

Há outro benefício significativo dos nomes do Handshake - eles são resistentes à censura, apreensão e adulteração porque os nomes do Handshake são armazenados na blockchain. Como as carteiras Bitcoin, apenas os proprietários dos nomes podem atualizar seus nomes ou transferir seus nomes, desde que mantenham suas chaves privadas em segurança.

Uma conseqüência disso é que os nomes são sua própria raiz de confiança. Eles podem simplesmente tornar fixas as chaves TLS usadas em vez de depender da confiança externa das CAs. Isso torna os nomes do Handshake inacessíveis aos ataques contra autoridades de certificação existentes no sistema atual.

Como usar nomes do Handshake como proprietário?

Seu nome é um TLD para que você possa apontar para um servidor de nomes e emitir seus próprios domínios. Registradores de domínio como GoDaddy e Namecheap operam seus próprios servidores de nomes para domínios, mas para usar o Handshake, você precisa executar seu próprio servidor de nomes (ou usar o Namebase!). Se, por exemplo, você possui .piada, pode apontar para seu servidor de nomes e criar boa.piada ou grande.piada. Você pode até vender outra.piada.

Surpreendentemente, você pode apontar seu TLD para um endereço IP diretamente e usá-lo como um domínio! Na gravação abaixo, apontamos .namebase para o mesmo servidor que namebase.io e o visitamos digitando somente namebase/.

Seu nome também pode ter dados arbitrários associados a ele usando registros TXT, o que abre a porta para vários casos de uso. Por exemplo, você pode associar um endereço de carteira Bitcoin ao seu nome, além de usá-lo como domínio. Você pode visitar o site de seu amigo em satoshi/ e enviar bitcoin para satoshi/ com sua carteira de criptografia.

Como usar nomes de Handshake como usuário?

O handshake é compatível com os protocolos DNS existentes. Tudo o que você precisa fazer é apontar o DNS do seu computador ou do seu roteador para um servidor DNS do Handshake. É semelhante ao uso de servidores DNS existentes, como o 1.1.1.1 do Cloudflare e o 8.8.8.8 do Google. Foi assim que conseguimos fazer um iPhone acessar “namebase/” na imagem acima.

A comunidade executará resolvedores públicos assim que a rede principal for lançada. Você também pode executar o seu próprio - o Handshake é o único blockchain de nomes que está sendo lançado com um resolvedor DNS recursivo e leve. Um resolvedor de DNS recursivo é um software que pode resolver recursivamente nomes de domínio para endereços IP. Se você nunca ouviu falar em resolvedores recursivos, pense no DNS como uma árvore que se origina da raiz até o domínio individual (imagem acima). Os resolvedores recursivos percorrem a árvore inteira (recursivamente!) para encontrar as informações de um domínio, ou seja, pra onde ele aponta. O software pode resolver nomes do Handshake usando apenas 10 MB de memória e praticamente zero de CPU. É a maneira mais segura e leve de usar o Handshake, porque não requer confiança em nenhum resolvedor de terceiros que possa inspecionar seu tráfego DNS.

O software do cliente é fundamental para a adoção do Handshake, pois aumenta drasticamente as formas como as pessoas podem usar o Handshake com segurança. Você pode incorporar facilmente o cliente em navegadores, aplicativos e dispositivos incorporados. Sem ele, os consumidores precisariam executar softwares completos para resolver os nomes sem confiança e, empiricamente, nenhum consumidor deseja fazer isso (mesmo se você é um entusiasta de criptografia, quantas pessoas você conhece que executam os nós completos do Bitcoin?).

Como o handshake entra em conflito com a ICANN

Todos os 1500 dos TLDs da ICANN (Internet Corporation for Assigned Names and Numbers) existentes estão na lista do Handshake para compatibilidade com versões anteriores. Isso significa que os usuários finais que resolvem seu DNS por meio do Handshake ainda podem acessar domínios .com normalmente. Teoricamente, os novos TLDs da ICANN podem entrar em conflito com os TLDs Handshake, mas a ICANN não os emitirá por mais alguns anos. Quando a ICANN emite novos TLDs, eles permitem apenas no máximo 500 novos TLDs por ano. A probabilidade de conflito é baixa, embora os conflitos possam tecnicamente acontecer. No futuro, cabe à comunidade decidir quais nomes têm precedência. Acreditamos que os nomes do Handshake terão precedência porque as pessoas os acharão mais úteis, e eu falarei sobre por que acho que o Handshake pode ser adotado mesmo diante dos efeitos da rede da ICANN nos próximos artigos do blog.

TL;DR (too long; didn’t read - muito longo não li)

O handshake pode tornar sua Internet mais segura, substituindo as autoridades de certificação por uma raiz de confiança distribuída com criptografia. Desde que os proprietários do nome Handshake controlem suas chaves privadas, seus nomes são resistentes à censura, apreensão e adulteração. Se você estiver interessado em usar o Handshake, inscreva-se para atualizações em nosso site, participe de nossa comunidade (fórum, telegram) ou consulte o código-fonte!

Source (English)

picture of Rafael Castro Couto
Rafael Castro Couto
Community Contributor |
Rafael é um desenvolvedor do Rio de Janeiro, Brasil. Ele está empolgado com o Handshake porque é um sistema transparente e resistente à censura.
Subscribe for the latest