Tor Project :: Sistema de Anonimato

Fundamentos

O princípio do Tor se baseia em proteger o usuário de um adversário capar de analisar o tráfego da rede, modificar, atrasar e cortar este tráfego, controlar e comprometer nós da rede Tor (já que é aberta). Dado este modelo, alguns outro requisitos também foram definidos:

  • Facilidade de uso, uma rede com poucos usuários reduz a anonimização proporcionada por ela,
  • Baixo custo de operação dos nós,
  • Interoperabilidade,
  • Simplicidade, não ser necessário modificar kernel, roteadores e ser fácil de se implementar.

A rede Tor é uma rede sobreposta, composta por onion routers e seus usuários, que executam o onion proxy para se comunicar com os routers; ambos os softwares rodam como processos em nível de usuário.

Onion Router

Onion router é um nó da rede sobreposta que aceita conexões de usuários, criptografa e redireciona o tráfego para outros nós ou para o destino original. Cada onion router mantém uma conexão TLS [5] para todos os outros e duas chaves, uma usada para assinar os certificados da conexão TLS e outra para decriptar pedidos de comunicação dos onion proxies. O último nó do túnel é chamado de nó de saída, é este que decripta a mensagem em seu conteúdo original e a envia para o destino final.

Onion Proxy

O onion proxy é o software executado pelo usuário que deseja utilizar a rede Tor. Este sistema é capaz de construir os circuitos virtuais, gerenciar as conexões com os onion routers e multiplexar as conexões TCP que ele recebe dos aplicativos pelos circuitos.

Unidade de Comunicação

Os nós da rede Tor se comunicam por meio das conexões TLS com células de tamanho fixo. Estas células possuem um cabeçalho contendo um identificador do circuito (é possível usar multiplos circuitos em uma mesma conexão TLS) e o tipo da célula, se é uma célula de relay ou de controle.

As células de controle são usadas para criar, destruir e confirmar a criação de circuitos, enquanto que as células de relay carregam os dados a serem propagados no circuito e enviados para o destino final e comandos para abrir e fechar conexões TCP e para estender o circuito virtual. [6]

Células de comunicação

Em cima o diagrama de uma célula de controle e em baixo de uma célula de relay.

Circuito

A criação de um circuito é independente ao número de conexões TCPs solicitadas pelo usuário (onion proxy). A criação de circuitos é custosa devido a troca de chaves e a latência na rede, e aplicações como HTTP criam inúmeros streams para acelerar o download do conteúdo. Tendo isso em vista, um circuito pode compartilhar diversas conexões TCP.

A criação de circuitos é feita em background e próativamente, caso seja necessário, o Tor cria mais circuitos para acomodar mais conexões TCP, da mesma forma, ele destrói circuitos inutilizados para poupar recursos.

A figura abaixo [6] demonstra a criação de um circuito e sua extensão a partir de um onion proxy (Alice) até seu destino (website).

circ

Exemplo de criação de circuito e conexão.

Alice envia um pedido de criação para OR1 e OR1 responde que o circuito entre eles foi criado com sucesso, ou seja, ambos já negociaram suas chaves e podem ser feitas trocas de mensagens de relay. Alice solicita para OR1 que o circuito seja estendido com uma mensagem de Relay Extend e OR1 se comunica com OR2 (de acordo com o pedido de Alice) da forma descrita anteriormente. Com o circuito estabelecido, Alice solicita a criação de uma stream TCP e a solicitação é feita incrementalmente até o destino e depois da confirmação da conexão, Alice começa a enviar e receber dados.

Note que Alice deve criptografar a mensagem em cascata e na ordem correta para que cada OR possa decriptá-la e tomar a decisão de repassar para outro nó ou para o destino final, a mensagem só é vista em sua forma original neste nó.

Para fechar a conexão, usa-se o mecanismo normal do TCP. Depois da confirmação do fechamento, o onion proxy avisa aos nós que o a stream foi fechada, mas isso não afeta o circuito utilizado. Quando a conexão é quebrada, o OR de saída envia uma mensagem de relay indicando a quebra da conexão e esta mensagem é propagada até o onion proxy.