Como funciona?

Esta seção explicará as operaçãos do CENO e da Ouinet percorrendo uma série de cenários. Terminologias e conceitos importantes para a Ouinet serão introduzidos (destacados com letras em negrito) e usados posteriormente para garantir eficiência e para evitar confusões.

Acessando conteúdo diretamente

O Navegador CENO é um exemplo de uma aplicação que usa a tecnologia Ouinet para recuperar e compartilhar conteúdo Web. Chamamos tal tipo de aplicação um cliente da Ouinet. Quando você usa seu cliente (isto é, CENO) para tentar acessar algum conteúdo X, hospedado em um servidor Web (o qual chamaremos de servidor de origem de X), seu cliente tenta contatar o servidor de origem através da Internet, seja diretamente ou via alguma outra máquina configurada para contatar servidores Web em nome de outros (o chamado servidor proxy) e então solicita o conteúdo desejado. Isso não é diferente da forma como qualquer navegador Web comum funciona.

Nota técnica: Há, de fato, uma pequena pegadinha. Já que o cliente age como um proxy HTTP sendo executado em seu dispositivo, para o cliente ser capaz de decodificar e atuar sobre solicitações de conteúdo HTTPS, a aplicação usando o cliente (isto é, a parte do navegador Web - como Firefox no CENO), precisa aceitar um certificado especial emitido pelo próprio cliente (e apenas usado no seu dispositivo). O Navegador CENO já se responsabiliza por estruturar esse certificado para seu uso privado de maneira que você não precisa de preocupar.

No entanto, estes caminhos diretos podem não estar disponíveis. Por exemplo, seu provedor de serviço de Internet (ISP) pode estar bloqueando o acesso à origem de X ou ao proxy por causa de uma determinação do Estado (mesmo se outros tipos de tráfego continuarem permitidos). Assim como para o usuário do cliente do canto superior esquerdo ilustrado abaixo, ambas as tentativas de alcançar o conteúdo X (o pequeno documento perto do servidor de origem dele) iriam falhar para você. Observe, também, o nó "injetor" no diagrama. Explicaremos esse em um instante.

Figura: Cliente não consegue alcançar o conteúdo diretamente

Com um navegador comum, você não teria sorte. Contudo, com Ouinet você pode pedir a outros clientes as suas cópias do conteúdo X, caso eles já possuam uma cópia. Vejamos como a Ouinet realiza essa solicitação.

Procurando conteúdo compartilhado

O conjunto de todo o conteúdo armazenado por clientes Ouinet é chamado cache distribuído, isto é, um armazenamento que não reside em um único lugar. Mas como o seu cliente pode encontrar quais outros clientes que compõe o cache possuem o conteúdo desejado?

Em qualquer navegador Web, para acessar o conteúdo X ele precisa saber o Localizador Uniforme de Recursos(URL) de tal conteúdo, que é o endereço na barra de localização do navegador - por exemplo, https://example.com/foo/x. A partir dessa URL, um navegador comum deduziria que precisa entrar em contato com o servidor Web chamado example.com, usando o protocolo HTTP (a linguagem usada para intercambiar recursos Web) em cima do SSL/TLS (uma camada de segurança em cima do TCP, as regras da Internet para que programas conversem uns com os outros) e solicitar o recurso /foo/x.

Ouinet procura o conteúdo de uma forma diferente. Ela usa um índex não muito diferente do de um livro: no índex de cache distribuído você procura o URL completo do conteúdo e obtém uma lista de clientes mantendo uma cópia dele. O índex em si é distribuído, com clientes encarregados de anunciar quais conteúdos eles possuem para outros. Na verdade, somente uma dica de cada URL é anunciada, de modo que alguém espionando o tráfego de seu dispositivo não é capaz de identificar qual conteúdo você possui, mas alguém procurando por um conteúdo específico pode seguir as dicas em direção ao seu cliente.

Nota técnica: Uma forma pela qual o índex é implementado é com uso da Tabela Hash Distribuída do BitTorrent (DHT) para obter o endereço (IP e porta) dos clientes com o conteúdo. O DHT usa uma Função criptográfica hash para computar a chave da tabela a partir do conteúdo da URL e alguns outros parâmetros tais como a chave do injetor (veja abaixo), de modo que diversos índexes podem coexistir.

O Navegadro CENO, por sua vez, não anuncia a URL de cada recurso que detém: como qualquer página moderna tem dezenas de milhares de componentes (imagens, fichas de estilo, scripts...), essa ação criaria uma grande quantidade de tráfego. Em vez disso, os recursos são agrupados sob a URL da página que faz referência a eles, e somente aquela URL é anunciada. Isso é feito com a ajuda de uma extensão ad hoc do navegador (descrito mais à frente).

Diz-se que os clientes oferecendo algum conteúdo específico sobre o cache distribuído o estão semeando, ou que são semeadores dele (esses termos advém do universo de compartilhamento P2P de arquivos). Retornando ao nosso cenário de exemplo, há dois clientes semeando algum conteúdo. Infelizmente, um está semeando o conteúdo Y e outro o conteúdo Z, de forma que o seu cliente não encontraria entradas para o conteúdo X no índex do cache distribuído, como ilustrado abaixo:

Figura: Conteúdo não encontrado no cache distribuído

Felizmente, a Ouinet oferece uma maneira de recuperar tal conteúdo e posteriormente o disponibiliza para outros clientes no cache distribuído. Por favor, continue lendo para aprender como.

Compartilhando conteúdo novo

Proxies em esteroides

Na Ouinet, existem alguns tipos especiais de servidores proxy chamados injetores, os quais ocupam (espera-se) a parte livre da Internet e tentam fortemente continuar alcançáveis apesar de medidas de bloqueio:

  • Em primeiro lugar, as conexões entre clientes e injetores são criptografadas (usando padrões SSL/TLS como no HTTPS) para evitar que atacantes identifiquem injetores ao espionarem o tráfego web.A propósito, os certificados do injetor são entregues no Navegador CENO, permitindo a este detectar atacantes que tentam se passar por injetores.

  • Se a criptografia não foi o suficiente, as conexões com os injetores podem usar técnicas especiais de ofuscamento (como I2P e os Transportes Plugáveis do Tor) para tornar a identificação ainda mais difícil.

  • Ainda que um injetor tenha sido identificado e tido seu acesso bloqueado por seu ISP, há diversos deles e não importa qual o seu cliente contate pela Internet.

    • Alguns ou todos os injetores podem ser bloqueados mas, nesse caso, o conjunto de injetores pode variar ao longo do tempo (com adição de novos).Seu cliente não precisa saber seus endereços de Internet com antecedência; ao invés disso, ele realiza uma busca no enxame de injetores (outro termo de compartilhamento de arquivos P2P), um índex distribuído de entrada única similar ao índex do cache distribuído que fornece os endereços dos injetores disponíveis no momento.

    • Por fim, mesmo que seu cliente possa não ser capaz de alcançar qualquer injetor, alguns outros clientes podem. Quando um cliente é capaz de alcançar um injetor e acredita ser ele mesmo alcançável por outros clientes, ele se torna um cliente ponte e adiciona seu próprio endereço de Internet ao enxame de pontes, outro índex distribuído de entrada única.Assim, seu cliente pode procurar por tal endereço, conectar-se à ponte por trás e dizer a ela para estabelecer outra conexão com um injetor em seu nome, criando um túnel entre o seu cliente e o injetor. Uma conexão pode, então, ser estabelecida entre eles dentro do túnel.

    Por favor, observe que devido às conexões entre cliente e injetor serem criptografadas, pontes não são capazes de ver a informação circulando entre eles.

Um injetor pode se comportar como um servidor proxy normal (apesar de extra-disponível), e esse comportamento é de fato o que clientes Ouinet (incluindo o Navegador CENO) fazem corriqueiramente ao tentar acessar conteúdo através de um proxy. Nesse caso, o injetor não verá a informação verdadeira circulando entre o seu cliente e o servidor de origem (a menos que seja ela mesma uma consexão HTTP simples, não criptografada).

Porém existem outras ferramentas permitindo que você alcance proxies em condições de severa interferência na rede. Então, o que é tão especial nos injetores da Ouinet?

Confiando no conteúdo compartilhado

Bem, o ponto é que um injetor não apenas recupera conteúdo em nome do seu cliente, ele também permite a você compartilhar aquele conteúdo com outros posteriormente, mesmo quando não há mais acesso ao injetor ou à maior parte da Internet.

Você com certeza poderia baixar uma página a partir do seu navegador e copiar os arquivos resultantes para outras pessoas, o que não tem problema se vocês se conhecem. Mas e se você recebesse tais arquivos de uma pessoa desconhecida? Como poderia ter certeza de que aquele conteúdo de fato veio do website do qual diz ter vindo, de que foi recuperado em uma determinada data ou de que a informação contida nele não foi manipulada?

Queremos que o uso do CENO e da Ouinet escale e ofereça o máximo de conteúdo para o máximo de pessoas possível. Portanto, queremos que você consiga receber conteúdo de pessoas desconhecidas. Para possibilitar que você aceite tal conteúdo, a Ouinet utiliza a assinatura de conteúdo: seu cliente é configurado para confiar em conteúdo assinado usando uma chave especial pertencente aos injetores. A qualquer momento que um cliente diga a um injetor para recuperar algum conteúdo Web para compartilhamento, o injetor o obtém do servidor de origem, usa a chave para assiná-lo e retorna o conteúdo assinado para o cliente.

Nota técnica: Na verdade, o injetor assina blocos individuais de dados conforme eles chegam, então mesmo que a conexão seja cortada no meio da recuperação de um arquivo grande, os dados baixados ainda podem ser compartilhados pelo cliente que os recebeu.

Injetores diferentes podem ter diferentes chaves, então você pode escolher em quais injetores confiar. Imagine desta forma: você pode confiar em um documento assinado por um notário público do seu país, independentemente de quem lhe deu (nacional ou estrangeiro), ao mesmo tempo, não seria exigido que aceitasse um documento assinado por um notário de outro país. O Navegador CENO já está configurado para confiar em um conjunto de injetores gerenciados pela eQualitie.

Nota técnica: Injetores usam um par de chaves pública/privada para criar assinaturas Ed25519. Chaves públicas são pequenas o suficiente para permitir seu envio junto com as assinaturas e codificadas como 64 caracteres hexadecimais ou 52 caracteres de Base32. Elas podem até ser intercambiadas no telefone ou escritas em um pedaço de papel.

Injeção de conteúdo

Lembre-se de que em nosso cenário de exemplo seu cliente já havia tentado recuperar o conteúdo X diretamente do servidor de origem e a partir de outros clientes sem sucesso. O cliente joga a sua última carta Ouinet e tenta contatar um injector confiável para obter uma cópia assinada do conteúdo que ele pode compartilhar com outros clientes.

Na figura abaixo, você pode ver um possível resultado dessa operação: o cliente primeiro tenta contatar o injetor diretamente (exemplo, usando o endereço de Internet que ele obteve do enxame de injetores), mas infelizmente ele está bloqueado pelo seu ISP. Por sorte, o enxame de pontes exibe os endereços de Internet para dois outros clientes que ainda conseguem alcançar um injetor. Seu cliente abre um túnel para o injetor através de um desses clientes, de modo que o injetor obtém a solicitação para o conteúdo X advinda do seu cliente e pede tal conteúdo ao servidor de origem.

Figura: Cliente alcança o injector

Conforme o conteúdo X é recebido pelo injetor, este o assina com sua chave, adiciona a assinatura ao conteúdo e o devolve ao seu cliente pelo túnel de onde ele veio (digamos, através do cliente localizado além do bloqueio). Uma vez que o conteúdo alcança o seu cliente, ele realiza três ações:

  1. Entrega o conteúdo para você (no caso do CENO, o conteúdo é exibido no navegador).
  2. Salva o conteúdo no seu dispositivo a fim de semear para outros clientes no futuro. Ele ficará lá por um intervalo de tempo configurável, ou até que você decida limpar todo o conteúdo armazenado.
  3. Anuncia no índex do cache distribuído que possui uma cópia daquele conteúdo, assim outros clientes podem encontrá-lo.

Toda a operação combinada de recuperação, assinatura, armazenamento e anúncio é o que chamamos injeção de conteúdo, como mostrado na figura abaixo.

Figura: Cliente recebe conteúdo assinado do injetor

Por favor, observe que o mecanismo descrito acima ainda demanda que exista algum caminho que atravesse o bloqueio em direção ao resto da Internet. Mas algumas vezes este caminho também estará em falta: pense em desconexões internacionais totais, desastres naturais ou simplesmente congestionamento excessivo dos poucos caminhos existentes (devido a todas as pessoas tentarem passar por eles). É neste momento que o poder do cache distribuído entra em ação.

Imaginemos que, depois de você recuperar o conteúdo X do injetor, um desastre deixa a sua região isolada do mundo. Acontece que o conteúdo X se torna especialmente relevante, pois ele descreve algumas formas pelas quais você pode ajudar a sua comunidade em situações como essa.

Nesse momento, uma segunda pessoa usando o Navegador CENO também tenta obter tal conteúdo. O acesso ao servidor de origem ou a qualquer coisa para além de sua região é impossível, então o CENO verifica o índex do cache distribuído para aquele conteúdo e descobre que seu dispositivo o está semeando. O CENO obtém seu endereço de Internet pelo índex, conecta-se a ele e solicita o conteúdo conforme mostrado abaixo.

Figura: Cliente recebe conteúdo assinado de cliente

Agora que o segundo dispositivo também detém uma cópia do conteúdo X, ele então anuncia isso no índex de cache distribuído e, por consequência, torna-se um semeador. Caso uma terceira pessoa interessada nesse conteúdo use o Navegador CENO para recuperá-lo, o CENO a partir de então verá no índex dois endereços para o conteúdo: o do seu dispositivo e o do segundo usuário. Se o conteúdo é pesado (por exemplo, um vídeo), o terceiro dispositivo pode tentar obter metade dele a partir de cada um dos outros dispositivos (como mostrado abaixo), assim acelerando o download e reduzindo o tráfego usado por eles.

Figura: Cliente recebe conteúdo assinado de múltiplos clientes

Por fim, a situação pode ficar ainda pior e toda a infraestrutura comercial e estatal de rede pode ser desligada. Neste caso, a Ouinet e o Navegador CENO também possuem algum suporte para compartilhamento dispositivo para dispositivo de conteúdo entre dois clientes situados em uma mesma rede local (por exemplo, conectados o mesmo ponto de acesso WiFi), mesmo que a rede não possua acesso a outras.