Tokens anónimos

O que são tokens anónimos?

Se utilizar uma chave MetaGer, recebe uma palavra-passe gerada aleatoriamente que o seu navegador nos envia com cada pesquisa, para que possamos ativar a pesquisa sem publicidade. Se utilizar a nossa aplicação Android ou a nossa extensão para Chrome e Firefox, em vez dessa palavra-passe o seu navegador envia-nos com cada pesquisa uma palavra-passe gerada aleatoriamente (token anónimo), criada localmente, para autenticação. Assim garante-se que cada palavra-passe é única e não tem qualquer ligação com a verdadeira chave MetaGer nem com as restantes palavras-passe.

Que problema resolvem os tokens anónimos?

Se o seu navegador nos enviasse sempre a mesma palavra-passe em cada pesquisa, teríamos pelo menos em teoria a possibilidade de relacionar entre si todas as pesquisas feitas com a mesma chave. Mesmo que não o façamos, seria ainda assim necessária confiança para ter a certeza de que a sua pesquisa é anónima. Para que a pesquisa anónima não seja apenas uma promessa nossa, mas algo que podemos demonstrar, introduzimos os tokens anónimos.

Como funciona?

Queremos, portanto, que as palavras-passe de utilização única sejam geradas diretamente no seu dispositivo e que nos sejam enviadas para autenticação durante as pesquisas. Só que, para cada token anónimo no seu dispositivo, temos de garantir que foi descontado um token normal da sua chave MetaGer — sem (e aqui está a dificuldade) ficarmos a saber que chave MetaGer foi usada para gerar esse token anónimo.

Tradicionalmente, usaríamos para isso alguma forma de assinatura criptográfica: assinaríamos o token anónimo gerado. Quando mais tarde nos enviasse o token anónimo juntamente com a assinatura, poderíamos ter a certeza de que o token é válido. Só que, para obter a assinatura, ter-nos-ia enviado o token anónimo juntamente com a sua chave verdadeira, o que anularia o anonimato.

Por isso usamos uma forma modificada de assinatura criptográfica, a chamada assinatura cega. Numa analogia do mundo real, é como se nos enviasse o seu token anónimo dentro de um envelope com papel químico. Neste exemplo, não conseguiríamos abrir o envelope, mas conseguiríamos assinar por fora, e a nossa assinatura passaria para o token anónimo lá dentro. Ao receber o envelope de volta, poderia retirá-lo e enviar-nos mais tarde a palavra-passe e a assinatura. Poderíamos então confirmar que a assinatura é de facto nossa.

Na verdade, esta analogia é um pouco enganadora, porque no processo real, no momento em que nos envia o token anónimo e a assinatura, não só nunca vimos o token anónimo como também nunca vimos a própria assinatura. E ainda assim conseguimos verificar que foi gerada por nós.

O que significa isto para as suas pesquisas autenticadas?

Graças ao algoritmo descrito, tanto nós como o utilizador podemos ter a certeza de que, em cada pesquisa autenticada, é usada uma nova palavra-passe aleatória sem qualquer relação com a sua chave MetaGer.

O que este algoritmo tem de especial é que todos os componentes que garantem o anonimato são executados localmente no seu dispositivo. Esse código-fonte pode ser consultado e verificado por qualquer pessoa a qualquer momento.

E o melhor: não precisa de configurar nada para utilizar tokens anónimos. Basta instalar e usar a nossa extensão para o navegador ou a nossa aplicação Android para que o seu dispositivo passe a usar tokens anónimos em todas as pesquisas.

O algoritmo por detrás:

Numa assinatura RSA clássica, pegaríamos no token anónimo m, no expoente secreto d e no módulo público N da nossa chave privada e criaríamos a assinatura através de m^d (mod N). Só que queremos que m permaneça secreto.

Por isso, o seu dispositivo cria com um gerador de números aleatórios um número r que é primo em relação a N. O máximo divisor comum de r e N tem, portanto, de ser 1.

Como r é um número aleatório, daí resulta que m' não revela qualquer informação sobre o token anónimo m guardado localmente.

O nosso servidor recebe agora do seu dispositivo o token anónimo ocultado m', juntamente com a chave MetaGer a utilizar. Descontamos um token da chave e devolvemos ao seu dispositivo a assinatura igualmente ocultada s'≡ (m')^d (mod N).

O seu dispositivo pode agora calcular a assinatura RSA válida s para o token anónimo não ocultado: s≡ s' r^-1 (mod N). Isto funciona porque, para chaves RSA, r^(e*d)≡ r (mod N). E por isso também: s ≡ s' * r^-1 ≡ (m')^d*r^-1 ≡ m^d*r^(e*d)*r^-1 ≡ m^d*r*r^-1 ≡ m^d (mod N).

Durante uma pesquisa, o seu dispositivo envia-nos então o token anónimo não ocultado juntamente com a assinatura correspondente, para autorização. A chave em si já não nos é enviada durante a pesquisa.

abrir/fechar a barra de navegação