2013/08/12

Android não sabe Inventar Números Aleatórios e coloca Bitcoins em Risco


Há uma vulnerabilidade no método de criação de números aleatórios - ou melhor dizendo, pseudo-aleatórios - no Android que coloca em risco os Bitcoins que tiverem, permitindo aos atacantes limpar-vos o vosso saldo. Os bitcoins são uma moeda digital com uma forte componente criptográfica para garantir a sua segurança. No entanto, a criptografia necessita de números aleatórios para que os seus algoritmos funcionem como é suposto.

Da mesma forma que todos nós usamos passwords que não queremos que ninguém consiga repetir, o bitcoin usa números gerados aleatoriamente com um mínimo de 160 bits que fazem com que as probabilidades de alguém conseguir descobrir o vosso sejam infinitesimais (o equivalente a adivinharem uma password aleatória de 20 caracteres). O grande problema é que as máquinas são muito boas a fazer contas, mas não são nada boas a inventarem números "à sorte".

As máquinas não têm imaginação, nem têm a imprevisibilidade que a maioria das coisas na Natureza tem. Uma moeda atirada ao ar, cairá sobre uma face ou a outra? Uma gota a escorrer pela vossa mão, irá seguir um percurso ou outro?

Para sermos verdadeiros, também o nosso cérebro é mau a escolher números aleatórios. Peçam a alguém para preencher um boletim do Euromilhões "à sorte", e o mais provável é que a pessoa os distribua de forma que fiquem espalhados pela grelha - não colocando sequer a hipótese de preencher os números: 1, 2, 3, 4, 5, por exemplo.

Nos computadores, sempre que é necessário criar números à sorte recorrem-se a algoritmos que geram números pseudo-aleatórios. Mas, por vezes esses algoritmos não são tão eficientes como deveriam, e começam a gerar padrões repetidos. É precisamente isso que acontece com o gerador de números aleatórios existente no Android, e que faz com que os bitcoins guardados em carteiras digitais criadas no Android usando o algoritmo local estejam em risco.

... Engraçado como algo aparentemente tão simples como gerar números "à sorte" possa afinal ser tão complicado, não é?

4 comentários:

  1. O computador actual é uma máquina determinística logo é "anti-natura" fazer coisas ao acaso. Daí que se utilizam algoritmos que utilizam distribuições probabilísticas para gerar números que aparentemente nada têm a ver uns com os outros. Para tornar as coisas menos previsíveis usam-se valores como a hora actual, o número de cliques no rato/teclado desde que se ligou o PC, etc... para tornar o processo o menos previsível possível. Mas inerentemente ainda não é um processo verdadeiramente aleatório.

    ResponderEliminar
  2. Bem, tendo em conta os equipamentos em que é usado Android acho muito infeliz não serem usados os imensos sensores analógicos que qualquer smartphone ou tablet possuem.

    O ruído no microfone, a localização do telemóvel, a potência do sinal, etc... tudo isto podia ser usado para criar um excelente gerador aleatório de números.

    De todos os SO onde isto poderia ocorrer acho que o Android é um dos que menos desculpas tem.

    ResponderEliminar
    Respostas
    1. O microfone seria uma boa fonte para a coisa, sem dúvida. :)

      Eliminar