Almacenar contraseña localmente. ¿Dónde? ¿Cómo pasarlo de forma segura?

13

Estoy desarrollando una aplicación. El usuario debe ingresar sus credenciales que serán enviadas al servidor. Si el usuario abre la aplicación por segunda vez, no debería tener que volver a ingresar, las credenciales deben almacenarse en la máquina del usuario. También estos datos pueden ser pasados. Mi aplicación es multiplataforma, así que estoy buscando una solución multiplataforma. Así que paso a paso el algoritmo debería verse así:

  1. El usuario ingresa el inicio de sesión y una contraseña, y estos datos van al servidor. ¿Cómo puedo pasarlo con seguridad? ¿Debo usar un protocolo seguro como https o ssl?
  2. Si las credenciales son correctas, necesito guardar estos datos en la máquina local. ¿Debo usar un archivo de base de datos local, un archivo binario o simplemente un archivo de texto? ¿Dónde almacenar este archivo? Y apuesto a que necesito cifrar esto. También necesito descifrarlo más tarde, pero para descifrar necesito algunos datos adicionales (alguna clave, probablemente), ¿verdad? ¿Dónde almacenar esta información adicional?
  3. En algún momento, necesito pasar esta información a otro proceso. Ya tengo establecida la comunicación tcp entre procesos. ¿Es esto suficiente para pasar? ¿Debo pasarlo encriptado o desencriptado?

Por favor, corríjame si mis pasos están mal. Esta es la primera vez que trato con la seguridad, por lo que carezco de conocimientos.

    
pregunta nikitablack 21.01.2015 - 13:00
fuente

4 respuestas

9

HTTPS o un protocolo personalizado que usa TLS para el cifrado es la forma correcta de comunicarse de forma segura con un servidor remoto, suponiendo que lo implemente correctamente y salga si algo no está bien con los certificados (he visto aplicaciones móviles que a pesar de usar HTTPS , acepté mi certificado autofirmado de inmediato sin siquiera preguntar al usuario, haciendo que toda la "seguridad" no tenga sentido).

Almacenar las credenciales de forma segura en la máquina es mucho más difícil porque si su aplicación puede descifrarlas, también lo puede hacer el malware con los mismos privilegios que su aplicación: cualquier protección solo sería seguridad por oscuridad y no detendrá a un atacante dedicado. , puede que solo proteja contra "ladrones" comunes que están diseñados principalmente para robar perfiles de navegador (historial, cookies de sesión) o archivos personales (por posible robo de identidad) y no robará el binario real de la aplicación para que el atacante no sepa cómo hacerlo. las credenciales guardadas estaban encriptadas, o incluso si tiene el binario de la aplicación, puede que no le importe porque la ingeniería inversa requiere mucho tiempo y requiere experiencia (tenga en cuenta que los desarrolladores de malware a menudo no son los que realmente las implementan y recopilan / revenden el robo datos).

Puede obtener una clave del hardware como pbkdf2(sha512(OSname+OSversion+CPUmodel+MACaddress)) y usarla como clave para cifrar las credenciales, que puede recuperarse en la misma máquina pero no beneficiará a un atacante si solo robó las credenciales cifradas y el binario de la aplicación, a menos que aún tenga acceso a la máquina para regresar y obtener el mismo valor

No es necesario utilizar el cifrado para la comunicación entre procesos en la misma máquina, si un atacante puede interceptar esa comunicación que ya tiene el control de la máquina (en el mismo nivel de privilegio que usa la aplicación, si no más) que significa que puedes leer lo que dije anteriormente sobre no poder defenderte de eso.

    
respondido por el user42178 21.01.2015 - 13:26
fuente
12
  

El usuario ingresa un nombre de usuario y una contraseña, y estos datos van a la   servidor. ¿Cómo puedo pasarlo con seguridad? Debería usar un protocolo seguro   como https o ssl?

¡Sí! Debe pasar los datos de forma segura, utilizando TLS, por ejemplo.

  

Si las credenciales son correctas, necesito guardar estos datos en el local   máquina. ¿Debo usar un archivo de base de datos local, un binario o solo un texto?   ¿expediente? ¿Dónde almacenar este archivo? Y apuesto a que necesito cifrar esto. también   Necesito descifrarlo más tarde, pero para descifrar necesito algo más   Datos (alguna clave, probablemente), ¿verdad? ¿Dónde almacenar esta información adicional?

Puede generar una clave en lugar de la contraseña, por ejemplo, en la autenticación, el servidor devuelve una CLAVE (bits aleatorios) que se guarda en una base de datos con el ID del usuario, y almacena esa CLAVE localmente, pero en El servidor sabes a quién le pertenece. Luego, en el segundo inicio de sesión, envía esa clave al servidor, que verifica si es válida (pertenece a ese usuario) y no caducó.

  

En algún momento necesito pasar esta información a otro proceso. yo   Ya tenemos establecida la comunicación tcp entre procesos. Es esto   suficiente para pasar? Debería pasarlo encriptado o desencriptado.

De nuevo, solo pasas la llave. Puede cifrar, pero es realmente difícil evitar todos los tipos de ataques que puede sufrir su sistema.

    
respondido por el G4spr 21.01.2015 - 13:20
fuente
-1

Esto es lo que tenía en mente, ya que he creado una aplicación como esta que funciona como un encanto.

Como ya está utilizando TCP, puede cifrar todos los datos que envía y descifrarlos dentro de la aplicación.

  1. El usuario inicia sesión y los datos que ingresó la primera vez se envían cifrados al servidor.

  2. El servidor lee los datos cifrados y comprueba si el inicio de sesión es correcto y envía una respuesta al cliente.

  3. El cliente lee los datos y verifica si hay un inicio de sesión exitoso.

  4. El token se almacena dentro de la aplicación, por lo que el usuario no tendrá que volver a ingresar los datos.

  5. Cada vez que el usuario inicia la aplicación, primero la aplicación verifica el token de inicio de sesión y luego inicia sesión automáticamente mientras se carga la pantalla de inicio de la aplicación.

Cifre todos los datos entrantes y salientes si planea crear una aplicación de mensajería, o si se trata de una aplicación relacionada con la web, simplemente cifre las partes importantes.

Use un protocolo de enlace de 3 vías si desea usar un TCP personalizado, o use HTTPS si así lo desea si está relacionado con la web.

Solo hay un problema que podría desordenar todo y es si la máquina del usuario está infectada con un keylogger que puede leer todos los datos enviados desde el teclado (por ejemplo, la primera vez que tiene que usar sus credenciales de inicio de sesión) / p>

Espero que esto te haya ayudado lo suficiente como para guiarte en la dirección correcta.

    
respondido por el GaringoXXS 21.01.2015 - 16:41
fuente
-1

Puede guardar su contraseña en un administrador de contraseñas.
Es gratis y útil. Algunas opciones

    
respondido por el livia 23.11.2016 - 02:48
fuente

Lea otras preguntas en las etiquetas