Recentemente, o Thiago Valverde publicou um artigo em seu blog, chamado
"Reverse engineering my bank's security token", em que descreve como ele fez a engenharia reversa nos
tokens de autenticação utilizados para acesso ao Internet Banking do Bradesco. Rapidamente o artigo foi tirado do ar, mas é possível ver
uma cópia dele no cache do Google.
Conforme descrito em seu artigo original, o Thiago descobriu como funciona a versão para celulares Android do token do Bradesco e, com base no algoritmo do token e em uma chave criptográfica armazenada nele, o conseguiu criar um clone de seu token utilizando um Arduino, como mostra o
vídeo abaixo.
Existe um algoritmo padrão de mercado para criar os
tokens OTP ( "One Time Password"), chamado
OATH (sigla criada a partir de
"Open Authentication") - que, inclusive, é um padrão que tem sua própria
RFC. Desde que foi criado, muitos fabricantes adotaram este padrão, embora alguns fabricantes mais antigos e tradicionais de tokens (como RSA e Vasco) ainda utilizem seus algoritmos proprietários.
O padrão OATH utiliza um algoritmo aberto para geração das senhas,
cuja especificação está disponível no próprio site do projeto: é, basicamente, um
algoritmo que utiliza uma "semente" única (um valor único para cada token), uma espécie de contador (que pode ser baseado em tempo, isto é, utilizando um relógio para medir o tempo desde um momento inicial) e
combina isso tudo utilizando um algoritmo de
hash criptográfico (os mesmos utilizados para fazer assinaturas digitais), o
HMAC-SHA-1.
Ou seja, não há nenhum mistério e, muito menos, nenhuma ciência oculta no funcionamento destes tokens, que são amplamente utilizados para redes privadas de empresas (VPNs) e acessos a sites de Internet Banking em todo o mundo. No final das contas, independente do algoritmo utilizado, o segredo e a segurança dos tokens segue o mesmo princípio dos algoritmos de criptografia: está na chave, ou seja, na semente única que serve de base para cada token funcionar.