#395 A ver, intento explicarlo mejor aunque así escrito es una mierda. Siempre re-leo las cosas que explico y nunca suenan como me gustaría.
2FA es un nombre común que se le da a la opción de pedir un código adicional durante un proceso de autenticación. Principalmente hay 4 tipos de 2FA:
- Código random enviado al movil
- Código random enviado al mail
- Algoritmo privativo de la app de turno
- Algoritmo OTP
Los 2 primeros no los voy a comentar demasiado. Básicamente configuras un número de teléfono y/o mail en la cuenta y cada vez que haces login te mandan un código de verificación al móvil o e-mail. Este método es el menos seguro dentro de la família 2FA, aunque ya añade una capa adicional de protección interesante.
El algoritmo privativo es un 2FA propio dela app, ejemplos reales: Blizzard Autenticator y Steam Guard. Deberían ser seguros, pese a que no son de código abierto y jamás sabremos si Blizzard/Steam/otro lo han implementado correctamente. El principal inconveniente es que terminas con 40 apps de autenticators en el móvil, una app única para cada servicio. Y eso es un problema.
El último método (OTP) es el mejor de todos. OTP es un algoritmo público, open source, conocido y seguro. Además es compatible con cualquier app de "autenticator". Todos los servicios que usamos deberían utilizar y ofrecer OTP. Te da la libertad de centralizar la gestión de esos 2FA en la app que te guste, por ejemplo: Authy, Google Autenticator o el propio Bitwarden (sí, la versión Pro+ de Bitwarden es también un generador de OTP.
Lo bueno de OTP es que no hay comunicación externa con nadie. Tu dispositivo puede generar los códigos sin necesidad de conectarse a ningún sitio, ni acceder a internet ni nada. Tu movil perdido en la Antártida podrá seguir generando códigos OTP para acceder a tus cuentas.
En el momento que queremos proteger una cuenta con OTP, el proveedor genera un token único, tú lo introduces en tu autenticator y la cuenta queda vinculada. Cualquiera que tenga ese token podrá generar códigos para acceder a esa cuenta. Normalmente este proceso se hace a través de un QR. El token queda almacenado en tu app/móvil, por eso puedes generar códigos sin necesidad de tener acceso a internet.
Genial! Pro aquí aparece un problema como comentas.... Qué pasa si pierdo el móvil?
Bien, los tokens de cada cuenta con 2FA están dentro de tu movil. Si lo pierdes, se rompe o te lo roban... te quedas sin acceso. Authy solventa este problema con un sistema de backups muy curioso. Generas un password para Authy, con ese password se encripta tu base de datos de tokens y se envía encriptada a Authy. Si por alguna razón pierdes el móvil, solo necesitas ese password para poder recuperar tus tokens y seguir generando 2FA.
El password de authy jamás viaja al servidor. Ni la propia empresa conoce ese password, así que sería uno de esos a guardar en un papelito en tu casa.
Muchas cuentas, cuando habilitas el 2FA, te proponen un método para saltarte el 2FA en caso de que pierdas el acceso/autenticator/token. Suelen generarte un password gordo que deberás introducir para deshabilitar el 2FA. Esas claves las guardo en las notas de Bitwarden... por seguridad por si algñun día pierdo todo.
Y finalmente si Authy te resulta demasiado volátil debido a su seguridad... puedes usar otro autenticator. El propio Bitwarden tiene el suyo própio. En el momento que activas el 2FA, copias el token a mano dentro de Bitwarden. Si es un QR deberás descifrarlo a mano previamente. Así tengo yo alguna cuenta dentro de mi Biitwarden:
Como puedes ver, tengo en Bitwarden mi pasword de Github, y el propio bitwarden genera el 2FA/OTP en el momento. Abajo en las notas que he tapado tengo la recuperación para saltarme el 2FA en caso de pérdida. Y finalmente como tengo el token TAMBIÉN en authy, tengo un backup de mis tokens encriptados en la nube.
Se entiende? xd