sábado, 26 de abril de 2008

A Meta-Assinatura

Como eu já disse antes, eu sou uma criatura que se empolga fácil. Ainda não tinha feito nem duas semanas que eu e o Fábio tínhamos entrado na Poli, e nós já estávamos procurando iniciação científica pra fazer. Depois de alguma procura, achamos uma legal: o Routo Terada estava procurando alunos pra estudar Criptologia.

O nosso medo inicial era que o Routo não quisesse aceitar dois alunos de primeiro ano, mas isso foi mais simples que esperávamos: "Ah, eu posso passar uma tarefa simples pra vocês. O Schneier acabou de publicar um algoritmo novo chamado Blowfish, vocês tem seis meses pra quebrar". É claro que não conseguimos quebrar o Blowfish, mas aprendemos um bocado no processo :)

Assinaturas digitais, por exemplo. O Isaac Newton, quando queria provar que algum manuscrito era dele, podia simplesmente assiná-lo com uma pena; mas o Stephen Hawking não pode fazer isso! Pra ele, o ideal são as assinaturas digitais. Para assinar digitalmente, você precisa de algum tipo de problema que seja difícil de resolver, mas que seja fácil de checar se foi resolvido (como a fatoração de números, ou o problema da sacola).

Um exemplo simples de como isso funciona me veio à mente algum tempo atrás, enquanto eu lia um livro do Hofstadter (se você não conhece o Hofstadter, tem uma entrevista dele para a rede Globo disponível online). Suponha que eu fiz uma grande descoberta e quero divulgar isso para o mundo:

O Ricardo sabe onde está o Bin Laden.

Embora tenha meu nome ali, qualquer um pode alterar e trocar o nome, então não tem como garantir que fui eu que escrevi:

O Wilerson sabe onde está o Bin Laden.

O método que eu bolei, e que na falta de nome melhor eu chamo de Meta-Assinatura, consiste em adicionar informação auto-referente à sua sentença:

O Ricardo afirma que sabe onde esta o Bin Laden, nesta sentenca com dezessete letras a, vinte e sete letras e, seis letras i, sete letras o, quatro letras u e uma letra x.

Confira que a contagem de letras está certinha. Dessa maneira, o Wilerson não pode trocar o nome na frase, pois se ele trocar, a contagem de letras vai mudar. Assim, a frase com meta-assinatura garante quem é o autor. Nesse método, contar as letras é muito simples, mas consertar a frase para o número de letras bater, é bem difícil (quer dizer, só com seis letras e algum esforço, até dá pra consertar a frase, mas se você usar o alfabeto inteiro na sua contagem, aí fica realmente complexo).

Para criar a frase com meta-assinatura, você não pode tentar procurar a solução por força bruta, porque demora demais. Uma solução mais rápida é criar uma função que conte as letras da sentença e troque os números correspondentes, e depois cruzar os dedos e torcer pro ponto fixo dessa função ser um atrator. O script em python abaixo faz isso, tomando o cuidado de detectar loops para não ficar preso:

Meta-Assinatura em python

Eu ainda não consegui assinar uma sentença usando todas as letras do alfabeto (ie, gerando um pangram), porque esse método não garante convergência. Se você conseguir, me avise :)

7 comentários:

  1. Oi Ricardo! Passei aqui para dar uma olhada no seu blog! Parabéns!
    Passa no meu tb...
    http://exercitapaciencia.blogspot.com

    Bjs!

    ResponderExcluir
  2. A solução é mais simples do que imaginamos.
    Basta encher o Wilerson de porrada que assim não teremos mais problemas com ele plagiando o material dos outros!

    ResponderExcluir
  3. nooossa que interessante!!!! depois que lí o código Da Vinci, me apaixonei pelo tema....Mas acho que não tenho inteligência suficiente pra decifra-los....ou paciência....rsrsrsrsrsrs.....
    Os textos estão ótimos. Parabéns!!
    beijos.

    ResponderExcluir
  4. Bem legal. Mas a meta-assinatura não pode ser realmente usada como assinatura digital, né? A idéia da assinatura digital é que é fácil para qualquer um confirmar que a assinatura é sua, mas extremamente difícil para qualquer um além de você forjar a sua assinatura. Assinar com a meta-assinatura é igualmente difícil para você ou qualquer outra pessoa. :)

    ResponderExcluir
  5. A Meta-Assinatura é mais ilustrativa que útil :)

    ResponderExcluir
  6. Interessante seu comentario sobre o nome do meu blog....

    ResponderExcluir
  7. Eu ia fazer o mesmo comentário que o Mauro.

    Mas o problema é interessante de qualquer forma, mesmo que não como assinatura.

    Gostei muito dos seus artigos.

    Abraço

    ResponderExcluir