Una propuesta de login sin contraseña

Me conciernen respecto al inicio de sesión en las plataformas de internet dos cosas que creo que no están yendo en el rumbo correcto:

  • la seguridad de los usuarios
  • la comodidad de los usuarios

Elaboraré un poco.

La seguridad de los usuarios

El detalle aquí es que las prácticas saludables de manejo de la información digital no están uniformemente distribuídas entre la población. Si bien hay prácticas bien conocidas como el manejo de un gestor de contraseñas esto no supone la regla sino la excepción, solamente quizá entre los mismos círculos que conocen del lado técnico los riesgos está bien difundido su uso.

Entonces tenemos cosas como las listas de los passwords más usados circulando en la red y una tremenda brecha de alfabetización digital que nos aleja del ideal de usar contraseñas aleatorias de longitud razonable. Otras prácticas igual de razonables son igual de escasas. Y por encima de eso algunos sistemas mal diseñados impiden por completo la realización de esta meta por limitar la longitud de la contraseña o los caracteres que puedes usar en ella.

Hoy día son muy comunes las contraseñas que llevan algún patrón en el mejor de los casos o son repetidas en muchos servicios en el peor.

La comodidad de los usuarios

Entonces manejar contraseñas se vuelve una pesadilla. No las puedes recordar todas. Punto. Nuestra vida digital se llena de servicios en los que confiamos o de los que dependemos y que manejan alguna parte de nuestra información, y su uso presupone la vulnerabilidad más sencilla de todas: nosotros mismos.

Preguntas como ¿qué contraseña le puse? o ¿dónde la guardé? inundan la vida de los usuarios. A estas alturas del partido deberíamos tener mecanismos más accesibles que tener que recordar una cadena aleatoria de caracteres.

Es engorroso también tener que pensar en una nueva contraseña por cada nuevo sitio, o tener que escribirla dos veces en un formulario.

Quizá aquí sea importante mencionar que si bien el inicio de sesión social ataca el problema de la comodidad también delega el problema de la seguridad a una plataforma tercera en que debemos confiar, o que debe tener un registro previo del usuario, lo cual no siempre sucede y además puede poner en duda cuestiones como la privacidad y la autonomía de las diferentes plataformas.

La propuesta

Sin mas rodeos, lo que propongo es un sistema de registro e inicio de sesión sin contraseña en absoluto, que delega la tarea de verificación de la identidad al correo electrónico. Cosa que por lo demás no es nada nueva (trata de recuperar tu contraseña de cualquier sitio y verás). El argumento es que el correo electrónico ya es actualmente la fuente primaria de verificación de la identidad de una persona e incluso los sitios que requieren contraseña confían en este mecanismo a veces de forma exclusiva para muchas cosas relativas a la seguridad.

Se realizaría bajo el siguiente esquema:

  • Este es un mecanismo exclusivo de plataformas en línea accesibles por medio de un navegador, aplicación móvil o cualquier tipo de agente de usuario que coexista en un sistema que permita acceso al correo electrónico.
  • Al momento de registro se pide únicamente nombre de usuario como identificador, y correo electrónico como medio externo de validación de identidad (incluso el nombre de usuario se puede delegar al correo electrónico según se decida, simplificando aun más el proceso).
  • Aquí se podría ya otorgar un acceso, quizá limitado, a la plataforma, o restringir completamente el acceso hasta que validen el correo electrónico. En cualquier caso la validación del correo es un paso fundamental pues será el mecanismo de verificación de identidad en lo futuro.
  • Una vez validado el correo se tiene acceso permanente a la plataforma, garantizado por una cookie o cualquier mecanismo local de almacenamiento de datos que guardará un token equivalente a la contraseña pero cuya existencia es irrelevante para el usuario.
  • En sucesivos inicios de sesión se utiliza este mismo token, o de haber expirado (si por ejemplo se usa un mecanismo como JWT) se usa para obtener un token nuevo. Todo esto de forma transparente para el usuario, quien se puede enfocar en el uso de la plataforma.
  • En el evento de que el usuario utilize un nuevo agente de usuario (que por ende no tiene un token válido) se recurrirá a un formulario de inicio de sesión que pide el nombre de usuario y manda un correo con un enlace de un solo uso que al visitarlo generará el token y dará acceso inmediato a la plataforma. Para el usuario solamente sucedió un click.

Es fácil ver se que ganan algunos beneficios en este esquema:

  • Seguridad equivalente o superior, pues ya en muchas plataformas el correo electrónico es validador indiscutible de la identidad del usuario.
  • Forma de registro simplificada, que carece de confirmación de correo ni contraseña. (Cabría mencionar que la confirmación del correo no es necesaria pues si no pudiste recibir el correo de verificación no tendrás acceso a la plataforma).
  • Reducción de la carga cognitiva del usuario. Los procesos se acortan, algunos incluso se eliminan (como la recuperación de la contraseña).
  • Menos información que proteger en la plataforma. No hay contraseñas almacenadas, así que no se es portador de más información que la que a la plataforma concierne y no se es suceptible a las terribles prácticas de almacenamiento que se pueden dar.
  • Resistencia adicional a phishing. Existe un ataque en el cual el usuario es engañado para visitar un sitio idéntico al original y se le pide que escriba sus credenciales. En mi propuesta este ataque no es posible pues el usuario no escribe realmente sus credenciales en el sitio y los enlaces de inicio de sesión mandan directamente al sitio original y son enviados siempre al correo con que está registrado el usuario.

Desventajas

No me sentiría cómodo sin enunciar las desventajas que yo mismo puedo ver en este esquema:

  • En las computadoras compartidas, la presencia de un token siempre válido de la sesión hace al agente de usuario portador permanente de la capacidad de manejo de la información del usuario. Piénsese en un internet público por ejemplo. Para minimizar este problema (no ajeno a los sitios con contraseña por cierto) propongo una casilla de verificación al momento de inicio de sesión que indique si la computadora es compartida (equivalente a recordar mi sesión pero creo yo que el cambio en las palabras puede hacer más claro para algunos cuándo usarlo).
  • No es un esquema compatible con el cifrado de la información. Si el sistema requiere cifrado de la información del usuario de manera que solo con credenciales válidas sea posible recuperarla y que estas credenciales las tenga el usuario entonces habría que pensar en una extensión que permita resolver esto sin una contraseña, pero este esquema por sí mismo no contempla ese caso. Algo pensable es que si el cifrado es opcional entonces solo se pida una contraseña al activarlo, así por lo menos es una decisión y no una obligación.

Extensiones

Para tener mayor seguridad se puede complementar este mecanismo con un sistema de verificación de dos pasos, solicitado solamente una vez por cada nuevo agente de usuario y para hacer actualizaciones de información muy importante como modificar las configuraciones del perfil o el mismo correo electrónico.

Si la plataforma en cuestión tiene una aplicación móvil entonces el correo electrónico podría no ser necesario para la mayoría de las situaciones. Pensemos que hoy día usamos Telegram o WhatsApp y que en estas aplicaciones nunca establecimos una contraseña, sino que delegan la verificación de la identidad a un tercer sistema, que es el número telefónico, para estas tareas.

¿Qué te parece?

A mi me parece relevante cuestionar la forma que entendemos que existe por defecto para iniciar sesión en una plataforma. Lo tomamos como un hecho sin preguntarnos si existirán formas mejores. ¿Crees que será buena idea? ¿Se te ocurren problemas importantes que pueda presentar?

No dudes mandar tus comentarios, ando en twitter y mastodon.

Actualiaciones

2020-09-18

De los comentarios que recibí de algunos lectores:

Un esquema como este no tendría sentido para plataformas de finanzas o que manejen información crítica de alguna manera. Cosas como la banca en línea merecen buenos sistemas de seguridad con verificación de dos pasos obligatoria. Aun en este escenario, si reducimos la cantidad de contraseñas que necesitamos a las áreas críticas, ¡quizá sí logremos acordarnos de todas las que necesitamos!

Por otro lado menciono que el login social delega la seguridad a un tercero en quien debemos confiar, pero al mismo tiempo propongo una delegación similar pero hacia otro tercero (el correo). Una respuesta a esto es que no se puede forzar a alguien a ser parte de una red social solo para tener la comodidad de un inicio de sesión rápido. Absolutamente ninguna red social tiene a todas las personas y sin embargo todos tenemos un correo (o no podrías registrarte en uno de estos sitios en primer lugar, aun sin mi idea).

2020-09-25

Gracias a las anotaciones que hizo un amigo en el blog me puse a reflexionar sobre la posibilidad de que un atacante envíe un correo fraudulento para intentar tener acceso a la plataforma. Lo interesante aquí es que como no hay credenciales mas que el nombre de usuario, no hay mucha información relevante que el atacante pueda obtener en un sitio falso. Los correos de inicio de sesión legítimos contienen un enlace que manda directo al sitio original. Para que un ataque sea efectivo el atacante debe conseguir ese enlace, lo cual si bien no imposible sí requeriría otras maniobras.

2020-10-07

Añadí una nota sobre la relación de este esquema con el cifrado de los datos personales.