O cliente
Tor tem o objetivo de garantir seu anonimato na Internet. Este software trabalha redirecionando seu tráfego de Internet através da rede Tor, antes que ele chegue ao seu destino final.
A rede Tor é um conjunto de servidores que funcionam retransmitindo seu tráfego de Internet. Estes servidores são chamados de
relay's. Atualmente, existem cerca de 3.000 relay's disponibilizados por voluntários em todas as partes do mundo.
O primeiro passo do cliente Tor quando ele é iniciado, é buscar em um Directory Server uma lista de endereços de todos os relay's Tor disponíveis.
Tendo posse desta lista, ele escolhe 3 relay's randomicamente. Estes relay's serão usados para a criação de um túnel virtual que vai ligar o cliente Tor até o seu destino. Ou seja, quando o cliente Tor mandar uma mensagem qualquer, esta mensagem não será encaminhada direto pro seu destino.
Ela será enviada primeiramente para o PRIMEIRO_RELAY_TOR (relay de entrada), que vai entregar a mensagem para o SEGUNDO_RELAY_TOR, e que por sua vez vai entregar a mensagem para o TERCEIRO_RELAY_TOR (relay de saída). E então, é o TERCEIRO_RELAY_TOR que entregará a mensagem para o destino final.
Depois de definido quais serão os três relay's que formarão o circuito, o cliente Tor vai até eles e negocia com cada um deles, separadamente, uma chave pública diferente para a encriptação dos dados.
Tendo certeza que o relay só vai conseguir descriptografar e ver a mensagem que foi criptografada com a sua própria chave pública, nós garantimos que nenhum dos relay's vai conseguir ver o caminho todo percorrido pela mensagem.
Exemplo: Supondo que você vai enviar uma mensagem para um destino qualquer usando o Tor, sendo que o circuito (o túnel virtual passando pelos três relay's) já está definido e o Tor já tem as chaves públicas desses três relay's:
- O primeiro passo do Tor é pegar o pacote original e criptografá-lo usando a chave pública do TERCEIRO_RELAY_TOR. Note que, no corpo do pacote, existe a informação que está sendo trafegada (vamos supor que seja um HTTP request) e no Header, entre outras informações, tem o destino original dessa mensagem (que pode ser um site qualquer). Ou seja, a mensagem que contém o destino original vai estar criptografada quando sai de sua máquina e enquanto passa pelos relay 1 e 2. Apenas o terceiro relay vai conseguir descriptografar a mensagem para saber o destino!
- Após a primeira encriptação, o Tor pega essa mensagem criptografada e cria um pacote tendo ela como conteúdo, adiciona o endereço do TERCEIRO_RELAY_TOR no Header e criptografa novamente, agora usando a chave pública SEGUNDO_RELAY_TOR. Isto garante que o endereço do relay de saída (ou seja, o terceiro relay) estará criptografado quando sair de sua máquina, e quando passar pelo primeiro relay. O único que precisa saber o endereço do TERCEIRO_RELAY_TOR é o SEGUNDO_RELAY_TOR, que vai ficar responsável por encaminhar a mensagem para ele.
- Essa mensagem que já foi criptografada duas vezes, agora vai ser criptografada novamente junto com o endereço do SEGUNDO_RELAY_TOR no header, só que agora, com a chave pública do PRIMEIRO_RELAY_TOR. Isso dá uma segurança a mais, caso a comunicação entre seu cliente Tor e o primeiro relay seja interceptada.
Para facilitar o entendimento do esquema de criptografia em camadas, vamos tomar uma perspectiva mais prática:
- Quando a mensagem chegar no primeiro relay e ele a descriptografar, esse relay vai encontrar duas informações: um pacote de dados criptografados e o endereço do segundo relay do circuito. Ele a envia.
- Quando o primeiro relay entregar a mensagem para o segundo relay e ele descriptografar, o conteúdo que ele vai ter acesso vai ser: um pacote de dados criptografado e o endereço desse terceiro relay. E então, ele entrega a mensagem ao terceiro relay.
- O terceiro relay vai descriptografar e vai encontrar a mensagem original (o HTTP request) e o endereço do destino final, e faz o HTTP request.
Obs.: No Header dos pacotes TCP, existe o campo "source address". Logicamente, neste campo, vai ter o endereço do TERCEIRO_RELAY_TOR, e não do cliente.
Para entender melhor
A representação abaixo esquematiza como o redirecionamento de tráfego funciona quando o cliente_TOR tenta conectar-se a um destino qualquer:
Note que:
- O TOR_relay_1 "sabe" apenas o endereço do cliente_TOR e o endereço do TOR_relay_2;
- O TOR_relay_2 "sabe" apenas o endereço do TOR_relay_1 e do TOR_relay_3;
- O TOR_relay_3 "sabe" apenas o endereço do TOR_relay_2 e do Destino;
- O IP que chega ao Destino, é o do TOR_relay_3.
Como notamos acima, o cliente não envia os pacotes diretamente para o destino, assim como o site também não recebe pacotes vindos diretamente do cliente. Isso garante a privacidade de dois modos:
- Não é possível descobrir para ONDE o cliente está enviando pacotes. E graças a esse aspecto, muitas pessoas que vivem em países que promovem a CENSURA podem acessar a Internet livremente;
- O site não sabe por QUEM ele está sendo acessado, algo muito interessante para quem não quer ser identificado quando está usando a Internet.
Pode ser usado também por quem acredita estar sendo monitorado por algum tipo de
sniffer de rede. Como o tráfego até o TOR_relay_3 vai ser criptografado, alguém que esteja "sniffando" sua rede local não vai conseguir nenhuma informação dos dados que estão sendo trafegados e nem para ONDE eles estão sendo enviados.