¿Cómo almacenar de forma segura la información sin una clave o contraseña?

1

Para una situación hipotética, imagine un programa que guarda la contraseña de su usuario y luego ingresa automáticamente sin pedirles nuevamente su contraseña. La contraseña debe estar protegida de alguna manera, pero si fuera cifrada, ¿no habría una contraseña o clave sin cifrar en alguna parte?

Conozco muchos programas que hacen esto, pero como he estado investigando, no he encontrado formas confiables de proteger esta información. La seguridad informática generalmente se toma muy en serio, con algoritmos matemáticamente comprobados para la mayoría de los cifrados, ssl, etc. Pero con esto, la mayoría de los consejos que he encontrado es esconderlos en algún lugar de la computadora, o intentar dividirlos o no. Hazlo "difícil" de encontrar. Eso no suena como un consejo muy seguro.

¿Hay alguna forma para que un programa almacene de forma segura una contraseña, sin que quede nada en texto sin formato, y sin requerir que un usuario ingrese una contraseña? Lo siento si esta pregunta es demasiado abierta, pero agradecería que alguien al menos me indicara la dirección correcta.

    
pregunta ins0maniac 23.11.2016 - 01:32
fuente

4 respuestas

3

@Limit proporciona una buena respuesta para las aplicaciones web, pero me gustaría responder a tu pregunta para el caso general.

E.G. tiene una aplicación, que le confía su contraseña para que pueda ingresar a otros servicios. Un buen ejemplo sería su cliente de correo (ya sea en su teléfono inteligente o en su computadora de escritorio), que debe almacenar su nombre de usuario y contraseña para autenticarse con el servidor de correo. Otro ejemplo de aplicaciones que hacen esto sería navegadores web que pueden almacenar sus credenciales de inicio de sesión para varios sitios web.

Estos agentes de software necesitan acceso a su contraseña de texto simple, por lo que no se puede usar la solución estándar para mantener una contraseña segura (hash de contraseña).

La respuesta corta a su pregunta en este caso: tiene toda la razón, esto no es seguro y sus credenciales no se pueden proteger de manera confiable ( suponiendo que no se le pregunte por el cliente de correo / navegador web para proporcionar una contraseña maestra, es decir) .

La respuesta más larga : algunos sistemas operativos proporcionan un tipo de contraseña segura, que básicamente es un archivo que contiene las contraseñas, pero el archivo se cifra antes de almacenarlo en el disco.

Para cifrar y descifrar, el sistema operativo necesita una clave. Genera uno aleatorio y luego cifra esta clave con la contraseña que usa para iniciar sesión en la cuenta de usuario de su sistema operativo. Cada vez que inicia sesión, la contraseña que ingresó se utiliza para descifrar la clave aleatoria. Así que esto agrega una capa de seguridad (que puede ser evitada por el malware, pero al menos no es suficiente con solo mirar el archivo de contraseñas para robar sus contraseñas). Por supuesto, si no tiene ninguna autenticación de inicio de sesión configurada para su cuenta de usuario del sistema operativo, esto no tiene sentido, ya que el sistema operativo no tendrá ningún secreto para cifrar y descifrar la clave del archivo de contraseña.

Los sistemas operativos que proporcionan este servicio seguro de contraseña para aplicaciones de usuario son, por lo que sé, una minoría. Pero hay unos pocos sistemas que funcionan casi así. Por ejemplo, el entorno de escritorio KDE en Linux proporciona una contraseña segura; no está conectado a la contraseña de su cuenta de usuario del sistema, por lo que debe proporcionar una contraseña adicional, pero solo una vez por sesión. Todos los agentes de software que utilizan la contraseña segura pueden acceder a sus respectivas contraseñas.

(Aparte, los sistemas operativos de teléfonos inteligentes como iOS y Android proporcionan un cifrado transparente de todos sus datos en el teléfono. Si lo habilita, funciona exactamente como el sistema que describí para cifrar la contraseña de forma segura: su firma en secreto (por ejemplo, código PIN, contraseña) se utiliza para cifrar la clave maestra que cifra y descifra los datos almacenados)

    
respondido por el Pascal 23.11.2016 - 08:53
fuente
2

Creo que estás confundiendo la administración de sesiones con este enfoque.

Los programas que toman la contraseña del usuario como entrada y luego inician sesión la próxima vez sin solicitar una contraseña almacenan un identificador de sesión del usuario en el cliente. De esta manera, cuando el usuario realiza una nueva solicitud, envía el identificador junto con él y el identificador se actualiza según el diseño del sistema.

En cuanto a mantenerlo en secreto, los sitios web usualmente los almacenan como una cookie segura en el navegador y se aseguran de que están protegidos contra los scripts entre sitios y el secuestro de cookies para garantizar la seguridad. Algunos sitios web actualizan este token en cada solicitud para minimizar el impacto de un identificador de sesión comprometido.

    
respondido por el Limit 23.11.2016 - 02:39
fuente
0

Para cifrar de forma segura algo con una contraseña que solo una aplicación conoce, debes usar la API especial black_magic.AbrAcaDabrA(data_to_store) .

Más seriamente, el uso común es tener una contraseña maestra que se usa para proteger una clave aleatoria fuerte que se usa para cifrar los datos de forma simétrica. En ese momento, los datos pueden contener cualquier cosa, incluidas otras contraseñas, y pueden persistir de forma segura en el disco entre sesiones . La única restricción es que el usuario debe proporcionar la contraseña maestra al iniciar una nueva sesión .

Hay varias variantes de esto. En Windows, la contraseña de inicio de sesión se puede utilizar como una contraseña maestra para las carpetas cifradas nativas. Muchos navegadores tienen esta noción de contraseña maestra para almacenar otras contraseñas de manera segura y esta contraseña maestra solo se solicita una vez para cualquier ejecución del navegador, y todos los administradores de contraseñas que conozco también actúan de esa manera.

Pero hay una fuerte limitación a esto: solo debes usarlo en un sistema en el que puedas confiar. Durante la sesión, la aplicación debe guardar un secreto en la memoria. Puede ser la contraseña maestra, la clave descifrada o los datos descifrados. Raramente se usa el último porque deberá volver a pedir la contraseña maestra si se deben cambiar los datos. Pero entonces, otro programa con derechos de administrador puede leer esa memoria para robar el secreto, y de ahí toda la información. Por supuesto, el secreto se puede confundir con una transformación inversible, pero solo es una ofuscación, porque se puede romper con la ingeniería inversa y todos sabemos que la ofuscación no es una verdadera seguridad.

Por supuesto, escribir un secreto en un sistema no seguro lo compromete inmediatamente. Pero aquí la bolsa de contraseña completa está comprometida ...

    
respondido por el Serge Ballesta 23.11.2016 - 09:56
fuente
0

No puede almacenar contraseñas de forma segura únicamente en el software. Pero si tiene un TPM u otro dispositivo de hardware como un token USB, es posible usar un software que use los dispositivos para cifrar los datos con una clave casi no extraíble. Vale la pena mencionar que Intel trajo una tecnología llamada SGX a Skylake que puede usarse para almacenar y procesar datos de forma casi segura también. Este "cuasi" porque no puede proteger sus datos del fabricante del dispositivo, porque los fabricantes a menudo plantan (y con frecuencia documentan eso) puertas traseras para ganar más dinero y cumplir con las solicitudes de las agencias. Si los fabricantes, las agencias y sus empleados son de confianza, entonces usted está seguro.

    
respondido por el KOLANICH 23.11.2016 - 19:52
fuente

Lea otras preguntas en las etiquetas