Autenticación web - contraseña vs archivo de clave

21

Hay un sitio de correo web corporativo (PHP + MySQL) para un número limitado de usuarios que son empleados de una empresa que trabaja de forma remota con el portal web corporativo. Cada usuario tiene un nombre de usuario y contraseña.

Estoy pensando en reemplazar las contraseñas de texto habituales con un archivo de clave, es decir, el usuario elige cualquier archivo para que sea la clave en su primer inicio de sesión, puede ser un archivo de texto o incluso una imagen, la suma de comprobación de ese archivo se almacena en La base de datos y la próxima vez que un usuario de este tipo necesite iniciar sesión, carga su archivo de claves en lugar de escribir una contraseña. ¿Sería esa autenticación más segura que una contraseña al escribir? Supongo que es mucho más difícil averiguar un archivo de claves que una contraseña.

    
pregunta user164863 11.06.2014 - 21:18
fuente

6 respuestas

49

El problema principal con un archivo de clave es que es un archivo . Como tal, se almacena en algún lugar, en algún medio físico. Será copiado con copias de seguridad. El archivo todavía estará allí en los discos duros de descarte. Los usuarios copiarán sus archivos a varios dispositivos para poder iniciar sesión desde todos estos dispositivos. En resumen, los archivos filtración .

A la inversa, una contraseña se ajusta a un cerebro y no necesita escribirse en ninguna parte; el usuario naturalmente lo mueve con él; Las contraseñas no se filtran a las cintas de copia de seguridad y discos viejos Por último, pero no menos importante, la entrada de contraseña funciona bien en los teléfonos móviles, mientras que la carga de archivos puede ser más desafiante desde el punto de vista tecnológico.

Entonces, si bien un archivo secreto puede contener mucho más secreto que una contraseña de uso mental, también tiende a ser mucho menos "secreto" e implica problemas de usabilidad. En general, el método del "archivo secreto" no parece ser más seguro, de forma genérica, que las contraseñas.

Otra forma de verlo: un "archivo secreto" es equivalente, desde un punto de vista de seguridad, a un archivo de texto que contiene una contraseña grande y aleatoria, que el usuario lee cuando desea iniciar sesión (y posiblemente "escriba" la contraseña con una copia & pegar). Cada argumento en contra de escribir una contraseña en un archivo de texto se aplica igualmente a su idea de "archivo secreto".

    
respondido por el Thomas Pornin 11.06.2014 - 21:30
fuente
15

Si desea una autenticación multifactorial (como lo demuestra su comentario: "Estaba pensando en la autenticación de múltiples medios: la contraseña es algo que el usuario sabe y un archivo de clave es algo que debería tener"), hay varias opciones:

  1. Contraseña + certificado del lado del cliente (requiere infraestructura PKI y un certificado difícil de rotar. Es difícil acceder al correo web desde otro dispositivo, pero eso puede ser un beneficio).
  2. Contraseña + OTP. Puede emitir dispositivos HOTP (estilo YubiKey), dispositivos TOTP (estilo token RSA) o usar un dispositivo TOTP suave (como Google Authenticator). Existen varias bibliotecas que implementan TOTP para PHP, como enlace .

Los archivos de claves son fáciles de robar, o puede hacer que los usuarios cometan errores como modificar su archivo de claves (¡imagínese si eligieron un documento que luego editaron!), eliminar su archivo de claves, etc. No es un enfoque fácil de usar y requiere transfiriendo el archivo completo en cada inicio de sesión. Además, los archivos de claves no ofrecen protección contra malware o ataques MITM.

    
respondido por el David 11.06.2014 - 21:44
fuente
9

Nadie ha mencionado la forma "oficial" de hacer esto, usando archivos de certificados de clientes. Estos se no se envían al servidor, pero participan en un proceso criptográfico. Incluso puede almacenarlas en tarjetas inteligentes, en cuyo momento no se pueden robar con el malware en la PC cliente.

El inconveniente es que la interfaz de usuario es torpe y no es fácil de configurar.

(Término de búsqueda útil: "PKCS11")

    
respondido por el pjc50 12.06.2014 - 11:25
fuente
3

Veo al menos 2 puntos en contra de esa idea:

  1. Las contraseñas / frases de contraseña idealmente existen en la memoria del usuario y en ninguna otra parte, mientras que sus "archivos clave" deben existir en algún almacenamiento y, por lo tanto, pueden ser robados.
  2. No está teniendo en cuenta que los usuarios no siempre están sentados frente a la misma computadora, tendrían que transportar esos archivos, más peligro
respondido por el guntbert 11.06.2014 - 21:33
fuente
2

Otro problema con el uso de un archivo es que un archivo es técnicamente volátil, ya que no se garantiza que se mantendrá igual mientras se use. Los archivos se pueden corromper o cambiar sin que te des cuenta o te des cuenta. La pérdida de datos también es un riesgo: si pierde el acceso a la ubicación en la que está almacenado el archivo (computadora portátil robada, falla del disco duro, PowerShell / Bash / commandline typo), ya no podrá acceder al sistema. Una contraseña no tiene estos problemas. no reside en su sistema de archivos, por lo que cualquier problema con su sistema de archivos no lo afectará.

    
respondido por el Nzall 12.06.2014 - 11:30
fuente
1

Como todos los demás dijeron, los dos problemas principales son: 1. Almacenar su clave en un medio de disco duro, siempre es un riesgo de seguridad, ya que alguien puede robar incluso después de que se haya formateado el disco duro. 2. Los usuarios copiarán la clave de un sistema a otro ya que, de hecho, sabemos que nadie usa un sistema para iniciar sesión. Lo que aumentará el riesgo de compromiso del archivo clave. Tener un sistema con un archivo de claves es suficientemente riesgoso, imagina sistemas 3-4 con una copia de la clave, ¿cuáles son las probabilidades de que uno de ellos se vea comprometido? el riesgo está definitivamente allí.

    
respondido por el eof0100 12.06.2014 - 00:19
fuente

Lea otras preguntas en las etiquetas