Cómo manejar correctamente las contraseñas para una aplicación de Android

2

Por lo tanto, algunos antecedentes. Actualmente estoy trabajando en una aplicación de redes sociales para Android. Lo estamos programando en Java, y estamos utilizando OKHTTP3 para una conexión con el backend de PHP, que se encargará de actualizar la base de datos MySQL y el almacenamiento.

Mi pregunta es la siguiente: ¿Cómo debo manejar las contraseñas? Una vez que el usuario ingresa sus credenciales en el formulario de inicio de sesión, ¿debo ingresar la contraseña (planeamos usar bcrypt) y luego enviarlos a través del servidor de PHP para un almacenamiento inmediato? ¿O el Backend de PHP necesita hacer más hash o cifrado de seguridad?

La forma en que creo que se hará en este momento es la siguiente: 1. El usuario ingresa las credenciales para el registro 2. La contraseña está oculta 3. Las credenciales se envían al servidor 4. Las credenciales se ingresan en MySQL. ¿Qué se debe hacer de manera diferente? ¿Esto está bien?

Leyendo haciendo una aplicación de iPhone / Android que envíe una contraseña de usuario a mi servidor, ¿cómo asegurarla? no respondió a mi pregunta lo suficientemente bien.

    
pregunta Bobdabiulder 24.08.2016 - 17:52
fuente

2 respuestas

2

Malinterpretas el propósito de un hash.

Un hash criptográficamente seguro es una función unidireccional, por lo que el texto original (la contraseña) no se puede determinar, excepto por la fuerza bruta.

En su ejemplo, no es necesario encontrar el texto original. Si el atacante roba el hash, entonces todavía puede iniciar sesión sin saber la contraseña original, simplemente modificando una copia de la aplicación para usar el hash robado en lugar de generar una nueva.

Su servidor debe hacer el hash internamente, no la aplicación. (del lado del cliente)

Para las contraseñas, debe usar un Hash lento como BCrypt, con un factor de trabajo alto. Esto debería llevar unos 100 ms en su hardware de destino (con la protección DoS adecuada), sabiendo que el hardware de fuerza bruta de un atacante será mucho más rápido.

Ten en cuenta que no se puede asegurar password s débil, sin importar cuán lenta sea tu función hash.

También asegúrate de usar una conexión HTTPS entre la aplicación y el servidor, ya que los usuarios móviles pueden usar WiFi compartida que podría usarse fácilmente para simular conexiones HTTP simples.

    
respondido por el George Bailey 23.09.2016 - 19:03
fuente
-2

Puede hacer la verificación de entrada generalmente regular para enviar al servidor. Utilice una conexión https para enviar su credencial. Tal vez la actualización en lugar de okhttp3? (solo por simplicidad no por razones de seguridad). Esa es una buena base para comenzar IMHO. Si necesitas almacenar información en Android, puedes usar Realm. Es una base de datos móvil que admite el cifrado y es una solución simple para almacenar información en el dispositivo. Si necesita almacenar solo la contraseña, sugeriría usar la función "Almacén de claves" del sistema Android.

    
respondido por el wolfy 24.08.2016 - 18:06
fuente

Lea otras preguntas en las etiquetas