Mejores prácticas para la recuperación de archivos encriptados (o contraseñas)

3

Estoy escribiendo una aplicación (Java) que almacena datos potencialmente confidenciales en la nube utilizando un proveedor elegido por el usuario. Así que estoy cifrando los archivos usando AES / EAX + PBKDF2. Esa es la parte fácil, o eso parece.

Vivo con miedo a la pregunta inevitable: "Olvidé mi contraseña, ¿puedes ayudar?"

Los pensamientos hasta ahora son:

  1. No se puede hacer nada: todo lo que hago debilita el cifrado para todos. Esta es la respuesta que un purista daría, creo. Pero no es realmente una opción, ya que en realidad no aborda el problema de la contraseña o la recuperación de datos.

  2. Genere una contraseña aleatoria real y cifrada con la contraseña de usuario y una contraseña de depósito aleatoria que envío a mi servidor. Esto no reduce las solicitudes de ayuda, pero proporciona una resolución pero debilita la seguridad de todos.

  3. Haz # 2, pero no envíes al servidor, almacena la contraseña de custodia con los datos y cifra en función de las respuestas a tres preguntas seleccionadas por el usuario. Esto podría ser opcional.

Me inclino hacia 3. Al ser opcional, solo debilita tu seguridad si decides hacerlo.

Me gustaría saber si existen "mejores prácticas" para este tipo de cosas. Todo lo que he leído es sobre restablecimientos de contraseñas web / servidor.

    
pregunta RabidMutant 17.09.2016 - 10:21
fuente

2 respuestas

4

Respondí en Stack Overflow, pero veo que esto también está publicado aquí, así que repito mi respuesta desde allí:

Se trata de un problema con el que luchan muchas empresas de seguridad serias. En pocas palabras:

Tienes razón en que el # 1 es la opción más segura. Algunas empresas, como SpiderOak , se enorgullecen de mantener los datos tan seguros que ni siquiera podrían acceder a ellos bajo cualquier circunstancia.

Si lo hace # 2, ¿cuál es el punto de cifrado en el lado del cliente en primer lugar? Tendría sentido si lo único que desea son beneficios de rendimiento, no beneficios de seguridad.

Para # 3: Las preguntas secretas no funcionan .

Otra alternativa de usar el intercambio secreto para permitir algún tipo de recuperación de contraseña. La contraseña del usuario o la clave que cifra los datos del usuario se divide en una cantidad de recursos compartidos que se distribuyen a entidades confiables. La recuperación de la contraseña o clave requiere que estas entidades trabajen juntas. Esto evita que un solo jugador malo tenga acceso a los datos del usuario. En general, es mejor hacer esto con la clave criptográfica en lugar de la contraseña (las contraseñas a veces se comparten entre diferentes sistemas, por lo que un usuario no debe desear que nadie vea su contraseña). Desafortunadamente, esta solución intermedia requiere mucha reflexión e implementación, y tiene un costo administrativo elevado.

    
respondido por el TheGreatContini 17.09.2016 - 22:52
fuente
0

La recuperación de claves es una pregunta muy antigua y desde un punto de vista conceptual no ha cambiado durante siglos:

  • si solo existe una clave (lea: solo una persona conoce el secreto ), solo el propietario de la clave puede abrir la caja fuerte, pero si la clave se destruye o se pierde (lea: el usuario olvida su contraseña), lo que está en la caja fuerte (leer: datos encriptados) se pierde (*) = > esto se puede utilizar para datos personales cuando el riesgo de compromiso es más grave que el riesgo de pérdida
  • esto se puede mitigar creando una segunda clave (lea: un tercero tiene acceso al secreto). Si la clave se pierde o se destruye, el propietario de la caja fuerte solicita la copia e inmediatamente crea una nueva copia = > esto se utiliza cuando la pérdida de datos es un mayor riesgo, cuando la información es esencial para más de una persona, por ejemplo, los archivos confidenciales de una organización.

En este último caso, la parte difícil no es técnica, sino solo organizativa: ¿cómo puede el propietario de la clave confiar en el tercero? Para los restablecimientos de contraseñas web / servidor, los administradores siempre pueden hacer cualquier cosa en nombre de un usuario, por lo que conceptualmente tienen una clave y pueden dar una copia al propietario. En organizaciones medianas a grandes y datos altamente confidenciales, un uso común es tener un seguro (físico o numérico) que solo puede desbloquearse mediante dos claves diferentes, y nadie debería mantenga ambas teclas - nota: esto es más o menos cómo funcionan las cajas fuertes personales en el banco, el banco es responsable de la llave de la sala de cajas fuertes y el propietario tiene la llave de su caja fuerte personal. Para datos menos confidenciales, un oficial de seguridad puede guardar copias, así es como funciona la recuperación de claves con la carpeta encriptada de microsoft: la clave simétrica se cifra dos veces, una con la clave personal del usuario y una vez con una clave administrativa para permitir que un administrador se recupere los datos.

Entonces, la buena pregunta es cuál es su verdadero requisito de seguridad:

  • el único usuario es responsable de sus propios datos
  • el administrador (o la mesa de ayuda o ...) debería poder recuperar los datos si un usuario pierde su contraseña
  • realmente necesita dos personas diferentes para cooperar con el fin de recuperar datos

La tercera forma se puede configurar simplemente codificando una clave simétrica secuencialmente con dos claves públicas diferentes, pero la recuperación será más compleja porque los propietarios de las claves privadas tendrán que trabajar juntos.

(*) siempre puedes intentar romper una caja de seguridad física, pero algunas pueden ser diseñadas especialmente para destruir su contenido en ese caso

Hablemos ahora de tu problema real. El juego de 3 preguntas es un intento de un sistema de autenticación de múltiples factores. El problema es que alguien que conoce a la persona puede adivinar las respuestas si son ciertas (y muchas personas saben mucho acerca de las celebridades) y el uso puede olvidar lo que contestó y no quiere que nadie pueda adivinarlo. La mejor manera para que un usuario no olvide una contraseña en particular es almacenarla en una caja fuerte segura como la excelente keypass . La analogía será: Pongo una copia de todas mis llaves en una caja fuerte y mantengo su llave adjunta a mi collar. Para evitar la pérdida del archivo de contraseñas, es fácil sincronizar un paso de teclado en un escritorio con uno en un teléfono inteligente. Desafortunadamente, solo puede ser utilizado por usuarios educables.

Si lo que necesita es permitir que los usuarios recuperen su contraseña, significa que tiene que crear una copia (en su servidor o en la máquina del usuario) cifrada con una clave pública de la cual es propietario la parte privada . Si el usuario conserva la copia, tendrá que enviársela para que la descifre y la envíe. Esta parte es muy sensible y puede intentar configurar una autenticación de múltiples factores: una autenticación normal y una cuenta de correo secundaria, por ejemplo. Si usted guarda la copia, debería pensar en las consecuencias de que su clave maestra se vea comprometida = > rompe toda la seguridad del sistema.

    
respondido por el Serge Ballesta 17.09.2016 - 11:21
fuente

Lea otras preguntas en las etiquetas