¿Cómo implementar la autenticación codificada de inicio de sesión de Android?
Tengo una base de datos de inicio de sesión, desde mi cliente Android tengo que pasar la contraseña de una manera segura. Quiero implementar una pantalla de inicio de sesión que es capaz de hacer cifrado.
¿Cómo implementar el cifrado de seguridad en mi aplicación?
- ¿Cómo lograr alta seguridad en aplicaciones móviles?
- ¿Cómo almacenar módulo, exponente público y exponente privado de forma segura en Android?
- ¿Cómo funciona la aplicación de instalación de AppBrain?
- ¿Cómo verificar los datos de POST se envía desde la aplicación de Android con la firma SHA1 correcta?
- Hacer que el teclado Android resista a los ataques de KeyLogger
- Cómo detener el ataque hack / DOS en la API web
- Cómo ocultar la clave pública en android?
- ¿Cómo la emulación de tarjeta basada en software (HCE) garantiza la seguridad NFC?
- ¿Cómo funciona la autenticación de WhatsApp?
- Android - Almacenamiento seguro
- Ofuscación: ocultar valores codificados en java
- Clave de String en Java RSA
- ¿Qué es APPKEY en Truecaller API?
Todavía es un poco vago lo que es lo que quieres lograr, ya que realmente no entiendo lo que quieres decir con "pantalla de inicio de sesión que es capaz de hacer cifrado".
Si te entiendo correctamente aunque estoy adivinando que desea tener una pantalla de inicio de sesión en su aplicación que sus usuarios necesitan para pasar a fin de utilizar su aplicación. Algo como una puerta en un edificio, o una cerca? Bueno, no puedo decir exactamente cómo lograrlo, pero tal vez aclarar algunos problemas.
Primer intento – ftp de Plaintext, o es?
El usuario introduce su nombre de usuario y una contraseña, comprueba si el usuario existe en la base de datos y compara la contraseña con la de la base de datos.
Simple, pero no tan seguro. En este caso necesitará almacenar las contraseñas en texto claro, lo que significa que alguien más ( vamos a llamar a su malvada Eva ) podría crear otra aplicación, leer de la base de datos y obtener las contraseñas.
Mitigación paso 1 – Hash
Para mitigar esto podría hash su contraseña (preferiblemente con una sal). Para hash una cadena, eche un vistazo a la clase MessageDigest , hay un ejemplo disponible a través del enlace. Ahora, usar un hash significa que usted (para citar Wikipedia)
Convertir una cantidad grande, posiblemente de tamaño variable de datos en un pequeño datum
Es decir, se obtienen algunos datos distintos de lo que se da la función hash. Un hash es una función rápida y unidireccional, por lo que no obtendrá la contraseña real una vez que la hasch. Pero no hay problema, almacenar el hash de la contraseña en la base de datos, y comparar el hash de la contraseña al iniciar sesión.
Esto es algo mejor que el texto sin formato, malvado Eve podría leer de la base de datos, pero no sería la contraseña que necesita para entrar en su aplicación para iniciar sesión. No se preocupe por Eve mal, "Voy a conseguir una mesa de Rainbow " Dice, "y comparar mi tabla de arco iris con la contraseña de su base de datos".
Mitigación paso 2 – Hashing con una sal
Tan cerca … Bueno, para mitigar un ataque de arco iris puedes usar una sal, en otras palabras otro valor añadido a la contraseña que creará un hash diferente. La belleza de los hashes son que sólo es necesario agregar una pequeña cantidad de datos adicionales para que el hash parezca casi aleatoriamente diferente del hash sin los bits adicionales de datos. Una simple sal puede ser el nombre de usuario, almacenar hash(username + password)
lugar de hash(password)
. Ahora, puesto que los hashes son rápidos de calcular, la sal debe ser ocultada de alguna manera. La forma en que lo haces depende de ti , pero debes enfatizar que lo tienes en secreto.
Evil Eve ya está bastante enojada, pero podría encontrar la sal, y en ese caso deja su computadora corriendo cuando duerme y cuando se despierte seguramente tendrá una contraseña agrietada.
Mitigación paso 3 – Las iteraciones son tu amigo
Dado que las funciones de hash son rápidas, ¿por qué no simplemente hash el hash de la contraseña, y ya que son rápidos, ¿por qué no hash el hash del hash de la contraseña? Hey, mientras estamos en ello, ¿por qué no hacerlo de esta manera. ¿Cuánto tiempo debe esperar el usuario antes de poder iniciar sesión? Si está bien esperar un segundo, ¿cuántas iteraciones puedes completar en ese segundo? La lectura de algunas respuestas en este hilo de stackoverflow podría dar algunas razones, cuanto más mejor. Combine esto con la mitigación de la sal y debe ser bastante sólido.
Bueno, Malvada Eva tendrá un tiempo difícil penetrar su pantalla de inicio de sesión por ahora, hashed contraseñas con sales e iteraciones y todo.
Otros asuntos
Pero recuerde, su defensa es tan fuerte como su eslabón más débil! Pregúntese esto también, ¿qué estoy tratando de proteger? ¿Protegerá mi pantalla de inicio de sesión? ¡Si los villanos no pueden romper la puerta, podrían simplemente pasar por el seto !
Puede leer más acerca de la seguridad en Java y la arquitectura de cifrado si desea obtener más información acerca de la seguridad en Java.
- ¿Podemos tener add-ons (FireFox) o extensiones (Chrome) en los navegadores móviles
- Usar el ancho de la ventana de vista de meta en la vista Web de Android