Guía Completa sobre Llaves de Seguridad FIDO2 con nRF52840 y OpenSK

  • El estándar FIDO2 combina WebAuthn y CTAP2 para eliminar las contraseñas mediante criptografía de clave pública vinculada al dominio.
  • OpenSK es un proyecto de código abierto de Google escrito en Rust que permite crear autenticadores físicos utilizando el microcontrolador nRF52840.
  • Estas llaves son prácticamente inmunes al phishing ya que la clave privada nunca sale del hardware y solo firma desafíos de sitios web legítimos.

Primer plano de una mano sosteniendo una llave de seguridad USB, representando la autenticación física FIDO2.

Imagina que un ciberdelincuente consigue tu contraseña del correo electrónico. En un mundo normal, estarías en problemas, pero si usas una llave de seguridad FIDO2, el atacante se queda con las manos vacías. No importa que tenga tu clave escrita en un papel; sin el pequeño dispositivo físico que llevas en el llavero y que requiere tu toque físico para validar la identidad, es imposible entrar en tu cuenta.

Hoy en día, las llaves comerciales son la norma, pero no hace falta gastarse una fortuna para comprender su funcionamiento interno. De hecho, puedes montar tu propio autenticador utilizando el microcontrolador nRF52840 de Nordic y OpenSK, que es el firmware abierto desarrollado por Google. Esta combinación permite transformar un chip potente en una herramienta de ciberseguridad capaz de frenar los ataques de suplantación de identidad más sofisticados.

¿Cómo funciona realmente la tecnología FIDO2?

Fotografía macro detallada de una placa de circuito impreso y microchips, ilustrando el hardware nRF52840.

Para entender este sistema, hay que saber que FIDO2 es la unión de dos estándares: WebAuthn, que se encarga de la parte del navegador, y CTAP2, que gestiona la comunicación entre el ordenador y la llave. El proceso se divide en dos fases críticas. Primero está el registro de la cuenta, donde la llave genera un par de claves criptográficas únicas; la pública se envía al servidor y la clave privada permanece oculta dentro del dispositivo, sin que el sistema operativo o el navegador puedan verla jamás.

Luego viene el inicio de sesión. El sitio web envía un desafío aleatorio que el navegador pasa a la llave. Esta espera a que el usuario toque el sensor para firmar el desafío con la clave privada. El servidor verifica la firma con la clave pública y, si coincide, concede el acceso. Esto demuestra que el usuario no es un script automatizado, sino una persona real con el dispositivo en la mano.

El muro contra el phishing

Manos ensamblando componentes electrónicos en una placa de pruebas, representando el montaje del circuito de la llave.

Lo que hace que estas llaves sean tan potentes es que cada credencial está estrictamente ligada al dominio del sitio. Si te registras en una web oficial, la llave asocia la clave a ese identificador exacto. Si un atacante te engaña para que entres en una web falsa que imita a la original, el navegador informará a la llave del dominio real y, al no encontrar una credencial asociada, no firmará absolutamente nada.

Además, el sistema utiliza un contador que se incrementa con cada uso. Si alguien intentara clonar la credencial, el servidor detectaría que los contadores no coinciden o retroceden, bloqueando la cuenta inmediatamente. A diferencia de los SMS o las apps de autenticación, donde el usuario puede copiar el código en una web falsa sin darse cuenta, aquí el hardware toma la decisión basándose en la URL.

Análisis del hardware: El corazón nRF52840

Bloques de madera formando la palabra 'encryption', simbolizando la criptografía asimétrica y la seguridad de los datos.

Para que una llave de seguridad sea viable, necesita procesar criptografía rápidamente y generar números aleatorios fiables. El chip nRF52840 es ideal porque incluye un núcleo Arm Cortex-M4 a 64 MHz y suficiente memoria flash y RAM para ejecutar OpenSK y el sistema operativo Tock sin necesidad de componentes externos. Pero su verdadera joya es el bloque CryptoCell-310, que acelera operaciones de AES, RSA y curvas elípticas.

Un punto fundamental es el TRNG, o generador de números aleatorios verdadero. En la criptografía de curva elíptica, si un número aleatorio se repite o es predecible, un atacante podría calcular la clave privada. El TRNG evita esto usando ruido físico, eliminando fallos que en el pasado afectaron a consolas como la PlayStation 3 o a ciertas billeteras de Bitcoin en Android. El chip también soporta USB 2.0 nativo, lo que permite diseñar placas muy compactas.

Montaje del circuito y componentes

Primer plano de una persona insertando una llave de seguridad USB en el puerto de un ordenador portátil para iniciar sesión.

Un diseño eficiente suele incluir un conector USB-C con resistencias de 5,1 kΩ para asegurar la alimentación. Para evitar que la electricidad estática del cuerpo humano fría el microcontrolador, se instalan diodos TVS de protección justo después del conector. El reloj es otro componente crítico; un resonador de 32 MHz es indispensable ya que el oscilador interno del chip no tiene la precisión requerida por el USB.

En lugar de un botón mecánico que pueda desgastarse, es común usar un sensor táctil capacitivo como el AT42QT1010. Este chip mide la capacidad del pad de cobre y envía una señal digital al procesador cuando detecta el dedo. Para el mantenimiento, se añade un botón de DFU (Device Firmware Update) y un LED RGB que indica si la llave está esperando el toque, procesando la firma o en modo de actualización.

Software y Firmware: OpenSK y Rust

OpenSK está escrito en Rust, un lenguaje que prioriza la seguridad de la memoria, y corre sobre Tock. Para ponerlo en marcha, se requiere un bootloader que permita cargar archivos en formato UF2 a través de USB. La primera grabación se hace mediante SWD usando OpenOCD y un programador como la Raspberry Pi Pico con firmware debugprobe. Una vez instalado el bootloader, actualizar el firmware es tan sencillo como arrastrar un archivo a la unidad de almacenamiento que aparece en el ordenador.

Si alguien desea personalizar la llave, puede compilar el código fuente. Esto implica instalar el entorno de Rust, aplicar parches específicos para los pines del sensor y el LED, y utilizar herramientas de conversión para generar el binario final. Es importante recordar que, aunque es un proyecto educativo fascinante, no posee la certificación de seguridad de una llave comercial, por lo que se recomienda tener siempre un método de recuperación alternativo.

Tipos de credenciales y almacenamiento

Existen dos formas de gestionar las claves: las descubribles y las no descubribles. Las credenciales descubribles o residentes se guardan directamente en la memoria de la llave, lo que permite hacer inicios de sesión sin contraseña (passkeys). Sin embargo, el espacio es limitado; mientras que algunas llaves guardan 100 claves, otras más avanzadas llegan a las 300 credenciales.

Por otro lado, las credenciales no descubribles no ocupan espacio permanente. La llave utiliza una clave maestra y una semilla proporcionada por el servidor para derivar la clave privada en el momento exacto del uso y luego la borra. Esto permite tener un número virtualmente ilimitado de cuentas asociadas al dispositivo sin saturar su memoria interna.

La seguridad digital ha evolucionado hacia un modelo donde la posesión física y la criptografía asimétrica sustituyen a las vulnerables contraseñas. Implementar una solución basada en FIDO2, ya sea comprando un dispositivo certificado o construyendo uno con OpenSK, representa la defensa más robusta disponible actualmente contra el robo de identidades y el phishing avanzado.


Añadir como fuente preferida en Google