segunda-feira, 19 de maio de 2008

GeraSenha

Ultimamente tenho revisado muitas coisas que fiz há algum tempo e que acabaram ficando esquecidas. É impressionante como temos coisas que fizemos que podem ser úteis ou divertidas e que deixamos esquecidas em algum lugar.

Depois de ressuscitar alguns textos mais didáticos sobre criptografia, resolvi desempoeirar o antigo GeraSenha. O GeraSenha é um programa que fiz há muitos anos para gerar senhas a partir de um segredo mestre e da identificação do sistema em que a senha será usada. Assim, somente é preciso lembrar uma única senha (o segredo mestre) para podermos gerar em real-time todas as senhas de que precisamos. Além disso, o GeraSenha não depende de estado, ou seja, não tem nenhum tipo de arquivo de configuração ou de dados. Isso é um grande vantagem para quem precisa de mobilidade ou compartilhamento.

Comecei então a revisar a literatura, começando pelos artigos que me deram a idéia do GeraSenha e que foram usados como base para o trabalho de final de curso do meu irmão. A partir daí comecei a olhar artigos mais recentes e percebi que a técnica do GeraSenha original tinha ficado datada.

Um dos artigos trouxe um insight interessante: para gerar a senha precisamos de uma função uniderecional (one-way function) que não seja muito rápida para se computar. Que ironia... Há décadas que os pesquisadores tentam criar funções unidirecionais que sejam cada vez mais rápidas de se computar (funções de hash por exemplo) e a gente agora precisa de uma função que seja lenta, embora não exageradamente lenta porque o usuário não vai querer esperar horas para que a senha de acesso à sua conta de emails seja gerada.

A função não pode ser rápida demais, porque ficaria vulnerável a uma busca exaustiva. Se for muito rápido calcular a senha, um adversário poderia facilmente testar todas as alternativas até achar a senha mestra escolhida.

Enfim, estou ainda em busca desta função unidirecional "meio lenta"... Quem vir alguma por aí, por favor me avise.

Nenhum comentário: