Mi aplicación requiere que se comprueben las contraseñas * localmente *. ¿Cómo puedo evitar los problemas de seguridad?

0

Tengo una aplicación en la que hay un Propietario de cuenta principal que tiene una contraseña completamente segura verificada por el servidor, con hash y con sal, lo cual es genial. No te preocupes allí.

Pero cada cuenta también tiene una lista de "empleados" y la tabla completa de empleados se descarga regularmente para almacenamiento local en los dispositivos de la aplicación. La tabla completa, incluido el campo de contraseña, debe estar disponible fuera de línea , por lo que debe descargarse y almacenarse, y la contraseña debe comprobarse rápidamente.

¿Es una mejor práctica almacenar un "PIN" en lugar de una contraseña en esta situación? ¿Hay algún uso en el cifrado de estas contraseñas? ¿Qué tipo de cifrado puedo hacer que sea extremadamente rápido y fácil de implementar en todos los idiomas?

Esta contraseña / pin en particular, ten en cuenta que en realidad no da acceso a muchas funciones de la aplicación, esto simplemente les permite iniciar sesión y cerrar sesión, por lo que de manera realista la falta de seguridad no es desastrosa. no hay mucho que alguien pueda hacer maliciosamente, incluso si tuviera una de estas contraseñas.

    
pregunta TKoL 27.06.2018 - 15:35
fuente

2 respuestas

2

Creo que tienes dos opciones:

  1. Realice la seguridad de contraseña adecuada y envíe hashes para que el sistema local los verifique
  2. Use un "PIN" en lugar de una contraseña para minimizar el daño si se roban las credenciales.

Para resumir lo que está preguntando, el problema obvio es que el hecho de tener que enviar las credenciales de alguna forma aumenta el riesgo de robo de las credenciales. Dado que la reutilización de contraseñas es un problema que nunca termina, pasar las contraseñas de las personas para la validación local es un peligro para sus usuarios más que cualquier otra cosa.

El cifrado en realidad no ayuda mucho (o quizás dependiendo de tus preocupaciones de seguridad) porque independientemente de en qué aros hagas que la aplicación salte, la aplicación aún tiene que poder verificar las contraseñas sin conexión, lo que significa que hay una forma de recuperar las contraseñas de texto sin formato.

Hash

Probablemente, la forma más segura de usar contraseñas reales es seguir el protocolo estándar y usar un algoritmo de hashing de contraseñas seguras. Obviamente, por lo tanto, no quiere un algoritmo rápido, pero no puedo imaginar que el teléfono sea mucho más lento en el hash para causar problemas dolorosos en la interfaz de usuario. Obviamente, tendrá que reproducir su algoritmo de hash en su teléfono, probablemente no será un gran problema para los algoritmos de hash estándar.

El hash proporciona una capa básica de protección contra el robo de contraseñas en tránsito o desde el teléfono. Obviamente, aunque no protegerá las contraseñas débiles contra los forzados brutos. Sin embargo, si estas contraseñas no están conectadas a los detalles del usuario de otra manera (por ejemplo, las direcciones de correo electrónico), entonces ese es un problema menor: todas las contraseñas que utilicé podrían salpicarse públicamente en Internet, pero no importaría si mi dirección de correo electrónico no está conectado a ellos. Si puede asegurarse de que las contraseñas no estén conectadas de ninguna manera a cualquier información personal, entonces hay menos preocupaciones.

PINs

La otra opción sería usar un PIN, como usted menciona, y convertirlo definitivamente en un PIN - solo números. Esto evitará que las personas reutilicen su contraseña. Sin embargo, no evitará que las personas reutilicen su número de PIN de cajero automático, por lo que aún mantendré estas credenciales lejos de cualquier información personal.

En resumen, si todo lo que tiene es una contraseña o PIN, entonces ya no es realmente una contraseña, es solo un identificador único asignado a un usuario. Es mucho menos peligroso que lo hayan robado (o al menos, solo es peligroso para su aplicación y lo que esa identificación única le permite a un usuario malintencionado). Por lo tanto, la mejor opción es realmente para asegurarse de que estas contraseñas locales nunca estén conectadas (o conectables) a la información real del usuario.

    
respondido por el Conor Mancone 27.06.2018 - 16:10
fuente
2

Además de la contraseña seleccionada por el usuario y el PIN seleccionado por el usuario, una tercera estrategia es una contraseña generada por el sistema. Esto puede ofrecer un buen grado de seguridad y, como se genera, garantiza que no se reutilizará algo que el usuario ya usa en otros lugares. Como no necesita mucha seguridad, puede utilizar una frase de contraseña de 2 o 3 palabras. Un formato de adjetivo-sustantivo es fácil.

Si obtienes listas de 100 adjetivos y 1000 nombres (google para las listas de palabras), eso te dará 100,000 frases posibles. Eso es tan fuerte como un PIN de 5 dígitos. Los PIN serán cosas como purple meerkat y abstract house . Puede agregar un adverbio al comienzo para hacer que la contraseña sea más fuerte. Por ejemplo, agregar solo 30 adverbios produciría frases como subtly purple meerkat y very abstract house y le da 3,000,000 frases posibles, eso es mejor que un PIN de 6 dígitos.

    
respondido por el Neil Smithline 27.06.2018 - 19:02
fuente

Lea otras preguntas en las etiquetas