
Cómo funcionan los secretos TOTP (y por qué no hay que compartirlos)
Qué es un secreto TOTP, los sitios donde sus copias se acumulan en silencio, y el orden exacto para restablecer una cuenta cuyo secreto ya ha circulado.
Un secreto TOTP es una cadena aleatoria, de 16 a 32 caracteres base32, que el proveedor genera una vez y no cambia nunca. No se deriva de tu contraseña, no está ligado a ningún dispositivo, y no tiene caducidad. Toda copia genera códigos válidos para siempre, y nada en la cuenta puede decirte cuántas copias existen.
Ese es todo el expediente contra su compartición. Cada una de esas proposiciones merece su detalle, y hay que añadirle qué se hace con una cuenta cuyo secreto ya ha circulado, puesto que la pregunta llega casi siempre demasiado tarde.
Qué es un secreto, exactamente
La mecánica que convierte un secreto en seis cifras se trata en la guía completa del TOTP en equipo. Lo que cuenta aquí es qué es el secreto en tanto que objeto.
Es simétrico. Los dos lados guardan el mismo valor. No hay mitad pública: no hay, por tanto, nada que puedas distribuir sin riesgo.
Tiene mucha entropía y no se adivina. De 80 a 160 bits de azar. Ningún ataque práctico consiste en calcularlo, y precisamente por eso todo incidente real es una copia.
No tiene ciclo de vida. Sin caducidad, sin versión, sin lista de revocación, sin rotación. El protocolo no tiene ningún vocabulario para «esta copia ya no es válida», solo para «este secreto ya no está configurado en la cuenta».
Es independiente de la contraseña. Restablecer uno no hace nada al otro. Los equipos cambian las contraseñas después de una salida y dejan el segundo factor en su sitio, que es la mitad equivocada si el secreto ha viajado.
Los sitios donde acaba una copia
Esta lista merece leerse despacio. El argumento contra la compartición no es que una copia sea peligrosa, es que las copias se acumulan allí donde nadie mira.
- La base de datos del proveedor, en su sitio.
- La aplicación de autenticación de todos los que escanearon el código QR.
- La copia de seguridad del dispositivo de cada uno de esos teléfonos, viva donde viva.
- La sincronización en la nube de las aplicaciones que la ofrecen, es decir, la mayoría hoy.
- La captura de pantalla tomada durante la configuración, en un carrete de fotos, a su vez sincronizado.
- El mensaje de conversación donde se publicó, más el índice de búsqueda y la retención de esa plataforma.
- La entrada de caja fuerte compartida, exportada un día a un archivo que nadie ha borrado.
- La variable de entorno en un ejecutor de CI o un servidor, si un automatismo se conecta.
Dos cosas son ciertas de todos los elementos posteriores al primero. Ninguno aparece en ninguna parte de los ajustes de seguridad de la cuenta, y ninguno se elimina con una acción que puedas hacer dentro de la cuenta.
Por qué «solo lo compartimos una vez» nunca es una vez
Un secreto compartido una vez no se queda en un solo sitio, porque los sistemas donde aterriza están concebidos para copiar cosas.
Un teléfono se respalda y luego se restaura en su sustituto. Una aplicación de autenticación añade la sincronización en la nube en una actualización, y el secreto está ahora en una cuenta en la que no habías pensado. Una caja fuerte se exporta antes de una migración. Una plataforma de conversación conserva el historial y lo hace buscable por todos los que llegan después, incluidos los que no estaban en el equipo en el momento del mensaje. El portátil de un proveedor se va con el proveedor.
Nada de esto supone que alguien se porte mal. Es el funcionamiento ordinario del software de consumo, y por eso el número de copias de un secreto compartido solo crece.
Lo que su compartición te cuesta
Recuento. No puedes saber cuántas copias existen.
Revocación. No puedes retirar una. Solo puedes invalidarlas todas reconfigurando la cuenta.
Independencia. Un secreto guardado junto a la contraseña hace que una sola compromisión entregue los dos factores, lo que equivale a un factor único con pasos de más.
Atribución. Cualquiera de las copias pudo generar el código usado a las 03:12. Ningún registro, en ninguna parte, dirá cuál.
Todo lo que un equipo espera de la 2FA en una cuenta compartida, desde la disponibilidad sin cuello de botella hasta una salida que funcione, pasando por una respuesta a «quién se conectó», se deriva de no distribuir el secreto. La mecánica para llegar ahí está en compartir códigos TOTP sin compartir el secreto.
Si ya se ha compartido
La mayoría de los equipos que leen esto ya han compartido un secreto en algún sitio. La pregunta útil no es si fue un error, sino qué cuentas merecen el trabajo de un restablecimiento.
1. Decide qué restableces
Restablece las cuentas donde un antiguo depositario del secreto podría hacer verdadero daño: todo lo que toca el dinero, los dominios, los datos de clientes, los derechos de publicación o la infraestructura cloud. Para una cuenta sin importancia cuya contraseña puedes cambiar y cuya lista de acceso es corta, cambiar la contraseña y estrechar la compartición puede ser proporcionado. Lo que cuenta es decidir deliberadamente; decidir por inercia es lo que deja una cuenta de pagos expuesta durante dos años.
2. Restablece en este orden
El orden cuenta, porque dos de estos pasos pueden dejarte fuera si los tomas primero.
- Asegúrate de tener códigos de recuperación al día, o de poder obtenerlos, antes de tocar nada.
- Desactiva la 2FA de la cuenta. Todas las copias existentes del secreto mueren aquí.
- Vuelve a activarla, y pon el nuevo secreto en exactamente un sitio.
- Concede el acceso a las personas que necesitan los códigos, sin distribuir el nuevo secreto.
- Regenera y guarda los códigos de recuperación, fuera de la cuenta que recuperan.
3. Después limpia lo que el restablecimiento no ha tocado
Este es el paso que se salta. Restablecer el segundo factor no suele poner fin a nada de lo que ya está en marcha:
- Cierra todos los dispositivos y todas las sesiones. Un atacante con una sesión viva no necesita códigos.
- Cambia la contraseña, puesto que las dos credenciales suelen haber viajado juntas.
- Repasa las claves de API, los tokens y las aplicaciones conectadas. Se autentican sin el segundo factor por diseño, y sobreviven a su restablecimiento.
- Mira el historial de accesos y de conexión de la cuenta, en busca de lo que venga de una época o un lugar que no deberían existir.
4. Anota dónde vive el nuevo secreto
Una línea por cuenta: dónde está el secreto, quién lo administra, dónde están los códigos de recuperación. Es la ausencia de esa nota lo que vuelve a los equipos reticentes a restablecer nada, porque nadie está seguro de qué se va a romper.
Dónde debería vivir un secreto
En un solo sitio, alcanzable por al menos dos administradores, separado de los códigos de recuperación, y separado de la cuenta que protege. Que sea una entrada restringida de tu gestor de contraseñas o una herramienta hecha para eso importa menos que la parte de «un solo».
Share Auth es una respuesta: el secreto se introduce una vez, se cifra en reposo, y no se muestra nunca más. Los miembros ven códigos y cuentas atrás, el acceso se concede por persona y por cuenta, y cada consulta queda registrada. Lo que elimina es la razón por la que los equipos distribuyen secretos de entrada, a saber, que la persona que tiene el teléfono no siempre está disponible.
En resumen
- Un secreto TOTP es permanente, simétrico e irrevocable tomado aisladamente.
- Compartirlo te cuesta el recuento, la revocación, la independencia de los factores y la atribución.
- Las copias se multiplican por las copias de seguridad, la sincronización, las exportaciones y los historiales de conversación, sin que nadie haga nada mal.
- Si se ha compartido, decide cuenta por cuenta, restablece en orden, y limpia las sesiones y los tokens que el restablecimiento deja atrás.
- Después guarda exactamente una copia, y da más bien a la gente acceso a los códigos.
Preguntas frecuentes
En la práctica sí: clave, secreto y semilla designan la misma cadena base32. Lo que difiere es el Key URI, el texto otpauth:// que codifica el código QR de configuración y que lleva el secreto y sus parámetros. Cuando una herramienta pide una clave, suele esperar el secreto.
Normalmente de 16 a 32 caracteres base32, es decir, de 80 a 160 bits de azar. Adivinarlo no es un ataque realista. Toda compromisión concreta de un secreto TOTP es una copia, no un cálculo.
No. Son dos credenciales sin relación. Un restablecimiento de contraseña deja el secreto intacto, y restablecer el secreto deja la contraseña intacta: por eso un secreto expuesto pide su propia respuesta.
En el protocolo no. Allí donde un proveedor ofrece regenerarlo, lo que ocurre por debajo es una desactivación seguida de una nueva inscripción: todas las copias existentes dejan de funcionar y todos los que necesitan los códigos deben reconfigurarse.
Solo si nunca guardó el secreto. Si solo ha visto códigos, retirarle el acceso lo termina de inmediato. Si escaneó un código QR en algún momento, la copia está en su dispositivo y ningún cambio por tu parte la alcanza.
Normalmente no. Las sesiones existentes, las claves de API y las aplicaciones conectadas suelen sobrevivir a un restablecimiento de la 2FA: una respuesta a una filtración debe incluir, pues, la desconexión de todos los dispositivos y la revisión de los tokens, y no solo la reinscripción del segundo factor.
Sigue leyendo · Cómo funciona TOTP
La guía completa del TOTP en equipoGuía
Cómo funciona el TOTP, qué propiedades del algoritmo causan todos los problemas de las cuentas compartidas, y qué debe montar un equipo.
Autenticación de dos factores: definición y funcionamiento
Qué es la autenticación de dos factores, cómo protege una cuenta, qué métodos existen y por qué no todas las formas de 2FA valen lo mismo.