Seguridad. Sistemas de Autenticación

Seguridad. Sistemas de Autenticación

Muy buenas. Esta es una página pilar dentro de la sección de ciberseguridad. Esta concretamente va a estar centrada en la autenticación, un aspecto absolutamente crítico en cualquiera de los contextos en los que se presenta, y que en los próximos años puede sufrir cambios muy profundos, tanto a nivel tecnológico, como desde el punto de vista funcional. Pero vayamos por partes.

Este artículo pretendo que sea el punto de partida de todo lo relacionado con la autenticación, empezando por el concepto en sí, pasando por los principales métodos o factores de autenticación que existen, y acabando los mecanismos, estándares o soluciones concretas que tenemos (o que vamos a tener en un futuro muy próximo).

Tabla de contenidos:

  1. Autenticación. Un poco de historia
  2. Métodos o factores de autenticación
    1. Autenticación basada en algo que sabes (contraseñas)
    2. Autenticación basada en quién eres (biometría)
    3. Autenticación basada en algo que tienes
    4. Autenticación de doble factor (2FA) o multi factor (MFA)
  3. Estándares y mecanismos de autenticación
    1. Contraseñas
    2. Token OTP
    3. Token TOTP
    4. FIDO U2F
    5. FIDO2 (WebAuthn & CTAP)
  4. Esto continua

Autenticación. Un Poco de Historia

En su esencia, el concepto de autenticación se remonta a tiempos antiguos, y consiste principalmente en verificar la identidad de un usuario, por tal de otorgarle acceso a una serie de recursos que sólo deben ser accesibles para él.

Esta misma idea, trasladada al mundo digital de nuestros días, se ha convertido en uno de los aspectos más críticos del que más implicaciones se derivan.

Los primeros ordenadores personales popularizaron el uso de nombre de usuario y contraseña como único método de acceso a la sesión de cada usuario. Eran máquinas que funcionaban en un contexto muy local, por lo que requerían unas medidas de seguridad que poco tenían que ver con las que se hacen necesarias en el contexto actual.

Con el despliegue masivo de Internet y el uso de dispositivos cada vez mas conectados entre si, esto ha dejado de ser suficiente, dando lugar a una completa revolución en cuanto métodos y sistemas de autenticación.

Métodos o Factores de Autenticación

Los métodos o factores de autenticación no son más que las diferentes maneras que tienes, como usuario, de acreditar que eres tu, por tal de poder autenticarte en un sistema, ya sea tu ordenador de escritorio, tu smartphone, tu cuenta de correo, o tu cuenta del banco.

A día de hoy existen un gran número de soluciones de autenticación diferentes, pero a nivel teórico, en su mayor parte todas las podemos agrupar en uno de estos tres métodos o factores de autenticación:

  • Basados en algo que sabes. Una contraseña o un PIN numérico que sólo sepas tu.
  • Basados en algo que eres. Puede ser tu huella dactilar, tu iris ocular, etc.
  • Basados en algo que posees. Puede ser un token, un certificado digital, etc.

No podemos obviar que pueden haber más factores, como aquellos basados en tu ubicación geográfica, o en tu comportamiento. En el sector de la banca, por ejemplo, utilizan los denominados factores basados en el riesgo (RBA), para ayudar a prevenir el fraude, al determinar algorítmicamente el nivel de riesgo de ciertas operaciones.

Lo cierto, sin embargo, es que estos últimos son mas bien factores de apoyo, que no sirven para llevar a cabo el proceso de autenticación en si, sino que lo complementan, y pueden servir para bloquearlo en caso de que se detecte un patrón anómalo (por ejemplo que inicies sesión una mañana desde Barcelona, y al cabo de una hora, vuelvas a intentarlo desde Hong Kong).

A continuación te voy a explicar brevemente en qué consiste cada uno de estos métodos. Más adelante, en un próximo apartado, ya entraremos más en detalle en qué soluciones concretas existen, basadas en estos tres métodos.

Autenticación Basada en Algo que Sabes (Contraseñas)

Este factor determina que la autenticación se hace mediante un dato que sólo tu debes conocer y a la vez debe ser lo suficientemente complejo como para impedir que otras personas puedan adivinarlo fácilmente.

Este dato puede presentarse de formas muy diversas, ya sea una contraseña alfanumérica, un PIN, una pregunta secreta, o incluso una forma. El quid de la cuestión es que sólo debe ser conocido por ti, porque es lo que te acredita.

En cualquiera de sus variantes, el factor basado en algo que sabes es el más antiguo de todos, y el que, durante mucho tiempo, se ha venido utilizando casi en exclusiva.

Pese a su veteranía, y a los inconvenientes que presenta, a día de hoy sigue siendo ampliamente utilizado en muchos sistemas de autenticación, pero generalmente se usa como primera barrera de entrada, en combinación con otro factor diferente.

Autenticación Basada Algo que Eres (Biometría)

Este factor determina que la autenticación se hace mediante tu biometría, algo que es inherente a ti, y que por lo tanto no se puede imitar (o no debería ser fácilmente imitable).

Para ello se pueden utilizar un gran numero de metodologías: reconocimiento de huellas dactilares, reconocimiento facial, de voz, o incluso escaneo ocular. La clave aquí se trata de que en todos los casos se utiliza algo inherente a ti.

Muchos dispositivos vienen equipados de serie con elementos que permiten ese tipo de autenticación (escaneo de huella, cámara de reconocimiento facial, etc.), y en muchos casos se utiliza como una alternativa al uso de contraseñas, mas que como segundo factor.

Pese a ello, es un factor que no esta exento de crítica, sobretodo desde el punto de vista de la privacidad (aunque esto habría que evaluarlo en función de cada solución particular)

Autenticación Basada en Algo que Tienes (Tokens, Certificados Digitales)

Este factor determina que la autenticación se lleva a cabo mediante algo que tienes, o a lo que tienes acceso solo tu.

Esto puede presentarse de formas muy diferentes: una contraseña de un solo enviado por SMS a tu dispositivo móvil, un token en una aplicación de autenticación en tu smartphone, una clave criptográfica en una llave de hardware, etc.

A día de hoy es probablemente el factor sobre el que se han desarrollado más estándares y soluciones diferentes.

La principal ventaja de este método es que te evita la tarea de tener que recordar contraseñas complejas, o de tener que preocuparte de como almacenarlas, a la vez que (generalmente) no tiene las implicaciones de seguridad que puede tener el uso de la biometría.

Autenticación de Doble Factor (2FA) o Multi-Factor (MFA)

Como puedes ver, la autenticación a día de hoy puede llevarse a cabo según factores de naturaleza muy distinta, cada uno con sus pros y sus contras. Así pues, para ofrecer una seguridad lo mas completa posible, en su momento alguien pensó que lo deseable sería combinar a varios de estos factores.

Aquí es donde entran en juego los métodos que se basan en proporcionar un doble factor de autenticación, o incluso un múltiple factor de autenticación.

  • 2FA viene de Two-Factor Authentication, y comprende a todos aquellos mecanismos que combinan dos factores diferentes para llevar a cabo la autenticación. La mayoría de implementaciones combinan un factor basado en algo que sabes, como tu contraseña, y otro basado en algo que tienes, generalmente mediante tokens y contraseñas de un solo uso (como OTP y TOTP), y en algunos casos también mediante llaves de hardware.
  • MFA viene de Multi-Factor Authentication, y no es más que una generalización del 2FA, en el que se extiende el concepto de dos factores. En este caso, comprende a todos aquellos mecanismos en los que la autenticación se lleva a cabo combinando dos o más factores diferentes.

En muchos casos, verás que se usa el término 2FA o MFA indistintamente, independientemente, aun cuando se siguen utilizando dos factores de autenticación.

Principales Estándares y Mecanismos de Autenticación

Ahora que has visto un poco la teoría básica, pasemos a ver la chicha interesante, y es que partiendo de esas bases, lo cierto es que existen un gran compendio de mecanismos, estándares y especificaciones de autenticación, que a su vez pueden comprender a un gran numero de soluciones concretas.

A continuación te presentaré los que considero que son los principales que debes conocer a día de hoy, debido a su vigencia actual (los tres primeros), y a la vigencia que creo que van a tener en un futuro (los últimos).

Siguiendo con la filosofía del blog, lo que aquí verás son estándares o especificaciones abiertas, lo que significa que cualquier solución puede hacer uso de ellos, ya sea en formato privativo, o en formato libre (estas son las que nos interesan más).

Contraseñas

Aunque no constituyen un estándar como tal, he querido incluir aquí las contraseñas, porque siguen siendo el mecanismo de autenticación más utilizado, y son el principal exponente dentro del grupo de factores basados en algo que sabes.

Las contraseñas son un mecanismo que ha sobrevivido años y años desde antes incluso de la aparición de los primeros ordenadores personales.

Aún así ahora, donde su uso masivo empieza a hacer más evidente sus múltiples puntos flacos, tanto desde el punto de vista de la comodidad, como de la seguridad que ofrecen (principalmente por la relación inversa entre comodidad y seguridad que presentan).

Es muy grande la tentación de poner una contraseña fácil pensando únicamente en hecho de que te sea fácil de recordar, pero para que este sistema pueda considerarse mínimamente seguro, la contraseña debe ser lo suficientemente compleja como para que no pueda ser adivinada por terceras partes.

Cuando digo adivinar, no me refiero a que alguien vaya probando una a una las diferentes combinaciones. Hoy día hay muchos programas que se dedican a romper contraseñas por fuerza bruta y con la ayuda de diccionarios, por lo que si utilizas una palabra o patrón mínimamente común, es cuestión de que alguien le ponga ganas para que te la pille.

Además de esto, otro gran punto crítico se encuentra en tu forma de custodiar tus contraseñas. Lo más recomendado a día de hoy es utilizar un buen gestor de contraseñas (mejor si es uno de software libre como puede ser KeePassXC o Bitwarden), y dejar que el propio gestor te genere contraseñas lo más complejas posibles para cada servicio.

Y por ultimo, está la forma en que el servidor de cada servicio almacene sus contraseñas. Por norma general no se deberían almacenar jamas las contraseñas en claro, sino su hash, pero a veces se dan sorpresas. En este punto no tienes ningún control, y debes fiarte de que el proveedor de servicios cumplirá con los mínimos.

Como ves, es un sistema que, aunque bien gestionado puede seguir siendo robusto robusto, presenta demasiados puntos débiles, haciendo que, a día de hoy, se quede realmente corto como único mecanismo de autenticación.

Token OTP

One-Time Password, más conocido como OTP, es una especificación de autenticación que utiliza un código de un solo uso generado aleatoriamente con cada inicio de sesión y que caduca a los 5 o 10 minutos.

Los tokens OTP nacieron con el propósito de paliar muchas de las debilidades que tiene la autenticación simple por contraseña, y generalmente se utilizan como un segundo factor basado en algo que tienes, para usarse en combinación con tu contraseña de usuario.

En un token OTP, el código temporal que debes introducir a la hora de autenticarte se genera a partir de un evento concreto, que es el momento en el que se activa el token de inicio de sesión. A partir de ahí, para su generación se parte de una clave de inicialización fija o seed, que es conocida tanto por el token como por el servidor, y un contador que va cambiando cada vez que se activa el token.

A muy grandes rasgos, el proceso de autenticación mediante un token OTP es el siguiente:

  1. Inicio de sesión. Primero te acreditas en un determinado servicio con tu nombre de usuario y contraseña. En este momento, se activa el token OTP para la generación de una contraseña temporal.
  2. Generación del código temporal. El token OTP genera el código temporal partiendo de la seed y de la posición del contador, y te la indica por el canal que hayas establecido (SMS, email, notificación push de tu móvil, etc.).
  3. Verificación. Una vez introducido el código, el servidor determinará su validez y en caso afirmativo te permitirá el inicio de sesión.
  4. Expiración. La validez del código suele ser de unos 5 minutos. Pasado ese tiempo, dejará de ser valido para el inicio de sesión.

Este mecanismo esta presente en muchas soluciones a día de hoy, aunque se puede presentar de muy diversas formas.

  • Confirmación de inicio de sesión por SMS. Uno de los casos más habituales en los que se presenta es en la confirmación de inicio de sesión de algún servicio o plataforma, en los que se puede establecer que el segundo factor sea el envío de un código a través de SMS. También es común utilizar la misma operativa, pero no solo para los inicios de sesión, sino a la hora de confirmar ciertas operaciones criticas dentro de la plataforma (un cambio de contraseña, una transferencia bancaria, etc.)
  • Confirmación de inicio de sesión por email. Otro caso de uso, aunque no tan extendido como el SMS, es que el código se envíe por email, a la cuenta que hayas asociado.

Como ves, este proceso añade una importante capa de seguridad en tus inicios de sesión, y puede impedir de forma eficaz que alguien pueda entrar en una cuenta tuya, aunque haya conseguido hacerse con tus credenciales de usuario.

Pese a esto, también tiene algunas debilidades. La mas importante recae justamente en el canal empleado para el envío del token, que en muchos casos suele ser el SMS. No voy a extenderme mucho aquí, puesto que todos hemos a hablar del SIM swapping.

Por este motivo, cada vez más se han ido popularizando las soluciones basadas en tokens TOTP, que, además, no dependen del envío de la clave por SMS, con el riesgo que ello conlleva.

Token TOTP

Time-based One-Time Password, más conocido como TOTP, es una especificación de autenticación que utiliza un código de un solo uso generado aleatoriamente cada 30 o 60 segundos, y que solo tiene validez durante ese lapso de tiempo.

TOTP nace como una evolución de OTP, y considera una especificación más segura que OTP a la hora de implementar un segundo factor de autenticación basado en algo que tienes.

A diferencia de este último, en donde la generación del código viene determinada por un evento, en el caso de TOTP el código temporal se genera partiendo de una marca de tiempo. Para ello, se parte igualmente de una semilla, pero luego el contador se sustituye por una marca de tiempo que se va actualizando cada 30 o 60 segundos.

A grandes rasgos, el proceso de autenticación mediante un token TOTP consta de las siguientes fases:

  1. Distribución del token. El proveedor de servicios te entrega una URL de sincronización para importar el token (suele ser en forma de código QR), y que contiene la información sobre el algoritmo utilizado para la generación del código temporal, la semilla y el intervalo de actualización de la marca de tiempo, etc.
  2. Importar el token a tu aplicación de autenticación. Esta URL luego la debes añadir a una aplicación de autenticación compatible con TOTP (puede ser escaneando el código QR).
  3. Inicio de sesión. A partir de este momento, cada vez que inicies sesión en esta plataforma, se te pedirá que introduzcas el código que marque tu aplicación en este mismo momento, y que sólo será valido durante esos 30 o 60 segundos, antes de que cambie.
  4. Verificación. Una vez introducido el código, el servidor (que también dispone de la misma semilla) computará su validez de acuerdo a la marca de tiempo correspondiente en ese preciso momento, y en caso afirmativo, te permitirá el inicio de sesión.

Este mecanismo está presente en muchas soluciones de autenticación a día de hoy y generalmente suele presentarse de la siguientes formas:

  • Confirmación de inicio de sesión mediante App en tu smartphone. Uno de los casos más habituales en los que se presenta es en la confirmación de inicio de sesión de algún servicio o plataforma, mediante el uso de una App de autenticación compatible con TOTP en tu smartphone.

Como ves, a diferencia de lo que ocurre en OTP, aquí el código de autenticación se va generando continuamente y lo tienes siempre visible a través de tu aplicación de autenticación. La ventaja más importante es que puede operar sin necesidad de depender de un canal de transmisión como el SMS. Además, como las claves secretas solo existen dentro de la App, es más difícil interceptar la información.

TOTP es un especificación abierta, y puede ser implementada por cualquier aplicación, tanto de software libre como propietaria. Aquí uno de los puntos mas críticos en mi opinión es escoger una aplicación que te de libertad para hacer tu propio backup de la seed y almacenarlo donde quieras, o incluso usarlo con otra aplicación.

Teniendo en cuenta todo lo anterior, no es raro que TOTP se haya ido imponiendo progresivamente frente a OTP.

FIDO U2F

Universal 2nd Factor o U2F, es un estándar abierto desarrollado por la FIDO Alliance en 2014 que define la implementación de un segundo factor de autenticación mediante el uso de dispositivos de hardware como llaves USB o tarjetas inteligentes.

En cuando al uso de un segundo factor de autenticación, U2F representa el siguiente salto evolutivo con respecto al uso de tokens OTP y TOTP, tanto en cuanto a seguridad, como en comodidad.

A nivel tecnológico, U2F se basa en el uso de la criptografía de clave pública y clave privada, y el soporte para las claves suele ser un dispositivo de autenticación compatible con U2F, que puede ser conectado a tu ordenador por USB (o mediante NFC) para permitir que el navegador web se pueda comunicar con él.

A continuación te detallo brevemente el proceso de autenticación contemplado por U2F, y que involucra a tres partes: el servidor web frente al que te quieres autenticar, tu navegador web, y el dispositivo de autenticación U2F.

  1. Registro de dispositivo. El primer paso es el de registrar tu dispositivo U2F con la web o la plataforma que deseas proteger con este segundo factor. Esto se hace conectando tu dispositivo por USB (o NFC) al ordenador o smartphone donde tienes la sesión abierta con la plataforma. En este punto, tu navegador enviará un hash al dispositivo de autenticación para identificar a la plataforma, y este creará un par de claves publico/privada. La clave publica será compartida con el servidor web, pero la clave privada nunca saldrá del dispositivo U2F.
  2. Inicio de sesión. A partir de este momento, cada vez que inicies sesión en esta plataforma con tu usuario y contraseña, el servidor solicitará que insertes tu dispositivo U2F como segundo factor.
  3. Autenticación. Tu navegador generará una semilla o nonce criptográfico basado en varios factores y lo cifrará utilizando una de las claves del dispositivo U2F. A partir de ahí, te solicitará que interactúes con tu dispositivo U2F (típicamente pulsando un botón), y este responderá calculando la firma del nonce con su clave privada y devolviéndola al navegador.
  4. Verificación. El navegador reenviará el nonce cifrado y la firma recibida del dispositivo U2F al servidor web, y este comprobará la validez de la firma utilizando la clave publica de la que dispone. A partir de ahí, si todo sale bien, te permitirá el inicio de sesión.
  5. Revocación. En cualquier momento dado, en caso de ser necesario, puedes revocar la credencial de autenticación específica asociada con tu cuenta eliminándola de tus dispositivos registrados a través de la página de administración de la web en cuestión.

La principal ventaja de U2F frente a las soluciones basadas en tokens OTP o TOTP es que reducen la interacción del usuario a la mínima expresión. Aquí ya no hay que introducir ninguna segunda clave, sino que es el propio dispositivo U2F el que se encarga de todo el trabajo.

Con la aparición de FIDO2 en 2018, U2F cae bajo el paraguas de FIDO2, renombrado como CTAP1, a la vez que ya ha aparecido una evolución del mismo, denominada CTAP2. De todo esto, sin embargo, te hablo a continuación.

FIDO2. WebAuthn & CTAP

FIDO2 es el nombre que recibe el último marco de autenticación propuesto por la FIDO Alliance, que define como creen que debe ser el futuro de la autenticación. FIDO2 es en realidad una combinación de dos especificaciones que operan a niveles distintos:

  • WebAuthn, que es la especificación de autenticación en la parte web, y que ha sido desarrollada por la W3C para permitir que te puedas loguear un cualquier sitio sin necesidad de contraseñas. WebAuthn es en definitiva una API que debe ser debe ser soporta a nivel de los diferentes navegadores web.
  • CTAP, que es el protocolo de autenticación que define como el navegador web (cliente) se comunica con el soporte de autenticación. CTAP dispone actualmente de dos versiones, CTAP1 (que es el estándar U2F renombrado) y CTAP2, y aunque FIDO2 contempla igualmente el uso de WebAuthn con CTAP1, aquí voy a centrarme en CTAP2, la evolución de este.

WebAuthn es una API que debe ser soportada a nivel del navegador web, y que funciona mediante el intercambio de credenciales criptográficas entre tu navegador (el cliente), el soporte de autenticación (puede estar integrado en el propio equipo o ser un dispositivo externo) y el servicio online (el servidor).

Es compatible con una gran variedad de mecanismos de autenticación local, ya sea el uso de un PIN, la biometría, o mediante un dispositivo externo. Independientemente del mecanismo utilizado, WebAuthm no revela esta información al servidor, por lo que la privacidad esta mucho mas garantizada que en otros sistemas (sobretodo respecto a otras soluciones de autenticación biométrica).

Las credenciales consisten en el uso de un par de claves público/privada que es generado por el soporte de autenticación y queda asociado al servicio online, de forma que la clave privada nunca sale del soporte, pero la clave pública se envía al servidor durante el registro, para que sea capaz de verificar la firma durante el proceso de inicio de sesión..

El soporte de autenticación sólo firma las solicitudes de autenticación que coinciden con el servicio online registrado, haciéndole mucho mas resistente a ataques de phishing que las soluciones basadas en el uso de tokens y contraseñas de un solo uso, como OTP y TOTP

CTAP2, es la evolución de CTAP1, y a diferencia de éste, no se limita a definir como implementar un segundo factor de autenticación, sino que en realidad integra las tres posibles modalidades: la autenticación de un único factor, la autenticación de doble factor, y la autenticación multi-factor.

Esto Continua

Como indico al principio, esta pagina forma parte de la serie de introducción a la seguridad, en un contexto de usuario doméstico, y que sirve de punto de partida para todo el contenido relacionado con la seguridad que hay y habrá en el blog. A continuación iré enlazando el resto de paginas, a medida que las vaya teniendo preparadas.

  1. Ciberseguridad operacional u OPSEC
  2. Seguridad en Linux
  3. Seguridad en la autenticación

Espero que lo disfrutes:)