40 votos

¿Cómo se almacena la contraseña de Gmail en Android y dónde?

He mirado alrededor y no he encontrado ninguna información sobre cómo Android se las arregla para almacenar las contraseñas en el dispositivo. Especialmente las contraseñas de Gmail. Quiero saber cómo Android cifra y almacena las contraseñas Qué clave utiliza y dónde la almacena, y qué algoritmo de cifrado utiliza.

1 votos

¿Por qué hay que cifrar la contraseña almacenada con una clave? Esto sólo significaría que uno tiene que introducir la clave cada vez que se requiera la contraseña, entonces podría simplemente no guardar la contraseña e introducirla cada vez.

0 votos

La clave podría ser específica del dispositivo, obtenida del IMEI del teléfono o algo así. Lo que significa que el software puede obtener la clave sin que el usuario tenga que escribirla cada vez.

1 votos

¿Qué impide que cualquier otra pieza de software que se ejecute en el teléfono obtenga la clave? Este enfoque no añade ninguna capa adicional de seguridad

38voto

S S Puntos 8975

La aplicación oficial de Gmail no almacenar la contraseña en su dispositivo. Tu contraseña es 100% segura si utilizas esta aplicación.

Así es como funciona: La contraseña es utilizada por los servidores de autenticación de Google por primera vez SOLAMENTE. Después de la primera autenticación exitosa, un Auth Token se descarga en un dispositivo que se almacena en accounts.db como texto plano. Para todos los accesos posteriores, este Auth Token se utiliza, NO su contraseña original.
Así que, si te roban el dispositivo, todo lo que cualquiera puede conseguir es Auth Token que se convierte en inválida una vez que cambias tu contraseña. Así que, estarás al mando.
Para máxima seguridad, le recomendaría que habilitara 2-Factor Authentication y crear Device Specific Password para su dispositivo. Después de perder el dispositivo, todo lo que necesitas es deshabilitarlo. Ni siquiera necesitas cambiar la contraseña principal.

Nota: Todo esto no es cierto si utilizas aplicaciones de correo electrónico de terceros para Gmail, como la aplicación Stock Email, K-9 Mail, etc. El protocolo IMAP o POP necesita una contraseña original para autentificar a los usuarios cada vez. Por lo tanto, la contraseña debe estar disponible para la aplicación de correo electrónico antes de enviarla al servidor. Por lo tanto, la mayoría de las aplicaciones de correo electrónico almacenan las contraseñas en texto plano (el hashing/encriptación es inútil porque el hashing/clave de encriptación necesita ser almacenado localmente). En este caso, te recomendaría que habilitaras 2-Factor Authentication y crear Device Specific Password para su dispositivo. Después de perder el dispositivo, todo lo que necesitas es deshabilitarlo.

Actualizar:
Técnicamente, es posible almacenar las contraseñas localmente en forma encriptada/hemosificada sin mantener la clave de encriptación/clave hash en texto plano localmente. Gracias a @J.F.Sebastian por señalarlo. Desafortunadamente, tal implementación para Android no está disponible todavía. Iniciando el ICS, Android proporciona API de KeyChain con el que una aplicación puede almacenar una contraseña localmente en forma segura. Las aplicaciones que usan la API de KeyChain son raras, pero la aplicación de correo electrónico de stock la usa (Gracias a @wawa por esta información). Por lo tanto, tu contraseña estará segura con la aplicación de correo electrónico siempre y cuando tu pantalla esté bloqueada. Recuerda que KeyChain no es seguro si el dispositivo está rooteado y no está disponible en dispositivos pre-ICS.

0 votos

Es falso que la única opción sea almacenar las contraseñas IMAP, POP localmente en texto plano. Por ejemplo, 1. Almacenar en un gestor de contraseñas basado en la nube que puede utilizar la autenticación de 2 factores si lo desea (sólo almacena el token específico del dispositivo para el acceso automático). Proteger una clave utilizada para el cifrado de contraseñas utilizando un gesto, algún dongle de hardware, lo que quieras.

6 votos

@J.F. Sebastian: incluso suponiendo que confíes plenamente en el tercero que almacena tus contraseñas, éstas son sólo marginalmente más seguras que el simple almacenamiento de la contraseña en el propio dispositivo. El dispositivo todavía tiene que ser capaz de recuperar el texto plano de la contraseña desde el almacenamiento en la nube y el dispositivo todavía tiene que almacenar la contraseña localmente porque no quieres tener que volver a conectar tu dongle cada vez que te metes en un túnel o en zonas con recepción débil. Lo peor que se puede hacer en materia de seguridad es proporcionar una falsa sensación de seguridad.

0 votos

@LieRyan: 1.Todo el cifrado se puede hacer del lado del cliente, por ejemplo, lastpass, wuala. 2. El código de acceso del dongle/desbloqueo se utiliza para acceder a la clave de cifrado. Puedes usarlo una vez por sesión o si la pantalla está bloqueada o una vez por hora, como quieras. 3. La facilidad de uso puede requerir concesiones en materia de seguridad. Hay muchas soluciones existentes que ofrecen diferentes compensaciones. Almacenar las contraseñas en texto plano localmente es irresponsable para un producto que es utilizado por millones de personas.

13voto

Zuul Puntos 7864

Las contraseñas de Android utilizadas con la aplicación de correo electrónico incorporada se almacenan en texto plano dentro de una base de datos SQLite. Esto contrasta con la Gmail que utiliza Auth Tokens como se describe en La respuesta de Sachin Sekhar .

Para Jelly Bean, la ubicación de la base de datos es:

/data/system/users/0/accounts.db

La ubicación anterior varía con la versión de Android

Esta ubicación en un dispositivo no rooteado está asegurada y protegida por el Sistema Operativo.
En los dispositivos enraizados, los usuarios ya han descifrado técnicamente su propia seguridad, e incluso si no fuera en texto plano, seguiría siendo trivial desencriptarlo ya que la clave tiene que existir en algún lugar del dispositivo para hacerlo.

Un miembro del equipo de desarrollo de Android publicó una explicación que hasta hoy todavía se aplica:

Ahora, con respecto a esta preocupación particular. Lo primero que hay que aclarar es que la aplicación de correo electrónico soporta cuatro protocolos - POP3, IMAP, SMTP, y Exchange ActiveSync - y con muy pocas, muy limitadas excepciones, todos ellos son protocolos más antiguos que requieren que el cliente presente la contraseña al servidor en cada conexión. Estos protocolos requieren que retengamos la contraseña durante todo el tiempo que desee utilizar la cuenta en el dispositivo. Los protocolos más nuevos no hacen esto, por lo que algunos de los artículos han sido contrastados con Gmail, por ejemplo. Los protocolos más nuevos permiten al cliente utilizar la contraseña una vez para generar un token, guardar el token y descartar la contraseña.

Les insto a que revisen el artículo vinculado a en comentario #38 que está bien escrito y es bastante informativo. Proporciona muy buenos antecedentes sobre la diferencia entre "oscurecer" las contraseñas, y hacerlas realmente "seguras". Simplemente oscureciendo su contraseña (por ejemplo, base64) o encriptándola con una clave almacenada en otro lugar, se no hacer que su contraseña o sus datos sean más seguros. Un atacante aún podrá recuperarla.

(En particular, se han hecho algunas afirmaciones sobre algunos de los otros clientes de correo electrónico que no almacenan la contraseña en texto claro. Incluso cuando esto es cierto, no indica que la contraseña sea más segura. Una prueba sencilla: si puede arrancar el dispositivo y éste comenzará a recibir correo electrónico en sus cuentas configuradas, entonces las contraseñas no son realmente seguras. Están ofuscadas o encriptadas con otra clave almacenada en otro lugar).

Además, como este tema parece molestar a muchos usuarios de Android, también puede seguir este debate en Slashdot - Datos de la contraseña de Android almacenados en texto plano .

1 votos

Vaya. Eso me sorprende. No era consciente del hecho de que se almacena en texto plano. Olvídate de estar rooteado o no. Si te rootean el dispositivo, una persona sin escrúpulos podría obtener fácilmente tus credenciales aunque bloquearas el teléfono con una llave de seguridad. Teniendo en cuenta este hecho, ¿también conoces algún mecanismo de encriptación de todo el disco?

0 votos

Bueno, acabo de descubrir que las contraseñas NO están en texto plano. accounts.db tenía los nombres de usuario de las distintas cuentas junto con algunas cadenas de aspecto extraño. Sospeché que se trataba de una simple codificación base64, pero tampoco era el caso. Por lo tanto, debe ser el uso de algún tipo de mecanismo de token de acceso como se indica por @SachinShekhar. Pero todavía me gustaría confirmar si estas 'cadenas' no son alguna forma de contraseña encriptada

1 votos

Sea lo que sea, son algo que se puede utilizar para acceder a la cuenta. Pero, @SachinShekhar, el accounts.db archivo es protegidas para que no sean leídas por otras cuentas que no sean system .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X