Almacenamiento de información de autenticación de terceros; ¿Es esto seguro?

0

Tengo una solicitud de función para conectar mi aplicación web PHP al servidor de correo de los usuarios. Normalmente me he alejado de este tipo de trabajo, ya que significará almacenar las contraseñas de los usuarios por correo electrónico.

Mi pregunta: ¿es seguro almacenar una contraseña de correo electrónico de terceros de usuarios, si la contraseña de correo electrónico está cifrada usando la funcionalidad openssl de PHP, de la cual la clave privada será una versión con hash de la contraseña de inicio de sesión de los usuarios en la aplicación PHP. (Las contraseñas de inicio de sesión de los usuarios se procesarán utilizando un algoritmo diferente para fines de autenticación). La contraseña de texto sin formato para la aplicación web no se almacenará en el servidor.

Al iniciar sesión el usuario, podemos usar la contraseña de texto sin formato para acceder a la clave privada a la contraseña de correo electrónico cifrada del usuario. Luego se puede volver a cifrar con openSSL, con una clave de servidor actualizada diariamente.

El resultado (o parte del mismo) de ese cifrado, podría almacenarse como una cookie en el navegador de los usuarios, solo accesible cada vez que el usuario carga una página en la aplicación web.

¿Este método es efectivo para garantizar la seguridad de las contraseñas de correo electrónico de terceros?

    
pregunta user1020317 18.02.2014 - 20:03
fuente

1 respuesta

1

Es difícil decir cómo se redactó, pero parece que puede haber algunas áreas que pueden mejorarse. No desea que la clave se derive de una versión con hash de la contraseña, sino que desea utilizar una función de derivación de clave segura para obtener una clave de cifrado para el conjunto de claves del usuario.

Las claves derivadas tienen una seguridad limitada, por lo que desea limitar la cantidad de cifrado con la clave derivada. Mi recomendación es producir una clave de cifrado verdaderamente aleatoria para usar para las credenciales de correo electrónico del usuario. Esa clave (simétrica) se encripta con la clave derivada de la contraseña del usuario y se almacena en la base de datos. Cuando el usuario inicia sesión, su contraseña debe usarse para determinar su clave derivada y la clave de datos debe descifrarse y almacenarse en la sesión del usuario. Cuando el usuario necesita acceder a la configuración de correo electrónico, la clave está disponible para ser utilizada para el descifrado, sin embargo, tan pronto como finaliza la sesión, las credenciales se borrarán de la memoria y no estarán disponibles hasta que el usuario vuelva a ingresar su contraseña.

El uso de una clave separada para cifrar las credenciales de correo electrónico también significa que puede usar la criptografía asimétrica para cifrar la clave de configuración de modo que pueda ser utilizada por un servidor separado para enviar correos electrónicos cuando el usuario está desconectado ( Si terminas necesitando esa característica). Dado que este servidor de correo electrónico podría estar aislado de la entrada del mundo exterior, tendría un grado de seguridad mucho mayor y la clave privada no estaría disponible para el mundo exterior, por lo que sería muy difícil comprometer los detalles de la cuenta.

    
respondido por el AJ Henderson 18.02.2014 - 21:16
fuente

Lea otras preguntas en las etiquetas