Backup de Google Authenticator 2 para Android

Google provee de una herramienta muy útil para realizar la autenticación en dos pasos llamada Google Authenticator 2. La aplicación está disponible para Android a través del market.

La utilidad de esta aplicación, en caso que queramos acceder a nuestro correo desde equipos públicos, en un viaje, etc, es enorme, puesto que nos pedirá además de la contraseña, un código generado por nuestro teléfono móvil.

Incluso sin cobertura, la aplicación funciona. Su funcionamiento se basa en un secreto conocido por ambas partes más una sincronización horaria (un timestamp) y con eso generar un hash y de él obtener varias posiciones a modo de código.

Además, google nos permite imprimir una serie de códigos de un solo uso por si nos quedamos sin batería. Códigos de un solo uso.

Otros servicios como Dropbox, permiten el uso de google authenticator 2, también hay una herramienta para GNU/Linux en línea de comandos llamada OATH que permite calcular el código.

Algo similar puede implementarse también en PHP, yo mismo he realizado algunas pruebas con un token generado en función de un secreto y un timestamp: https://github.com/jfsanchez/scripts/tree/master/otp-test

El tema está en que cuando cambiamos de dispositivo, o bien si queremos tener el generador de claves en varios equipos, tendremos que hacer un backup de la base de datos de secretos.

Google Authenticator 2 guarda su base de datos en: /data/data/com.google.android.apps.authenticator/databases/databases para extraerla, se puede con adb:

adb pull /data/data/com.google.android.apps.authenticator/databases/databases

La base de datos está en sqlite, algo muy habitual. Para saber los secretos, bastará con una simple consulta select:

sqlite3 ./databases
select * from accounts;

El resultado será algo similar a:

1|correo@gmail.com|dd11xx55ccccdd2w|0|0|0
2|Dropbox:correo@dominio.tld|AAAAAAAAAAAAAAAAAAAAAAAAAA|0|0|0

Y con eso podremos meter a mano los códigos en la nueva instalación de google authenticator.