Tus contraseñas, en un dispositivo que llevas encima.

Kleidos guarda tus contraseñas cifradas en un dispositivo pequeño y las escribe por ti por Bluetooth, después de que lo desbloquees en el propio dispositivo. Sin app. Sin nube. Sin registrarte en nada.

  • Próximamente
  • AES-256 + HMAC-SHA256
  • Bluetooth LE Secure Connections
  • Red de administración WPA3
Desbloquear un dispositivo, de la pantalla bloqueada a la lista de la bóveda. Un M5StickC Plus S3 despierta en su pantalla bloqueada. Se mantiene pulsado un botón cuatro veces y el arco avanza hasta una cifra distinta cada vez; el dispositivo deriva la clave y la bóveda desbloqueada lista seis servicios de demostración: GitHub, Google, Microsoft, Dropbox, Mastodon y Bluesky. Una grabación de la propia pantalla del dispositivo: la placa envió cada fotograma por su cable USB según lo dibujaba, mientras un script accionaba sus controles, así que el clip transcurre a la velocidad real del dispositivo.

Cómo funciona

  1. Paso 1. Lo desbloqueas

    Introduces el PIN en el dispositivo. Los modelos de dos botones no tienen teclado numérico: mantienes pulsado un botón mientras un arco recorre las cifras y lo sueltas en la tuya, una pulsación por cifra. El PIN es de 4, 6 u 8 cifras; los modelos con teclado usan una contraseña en su lugar, y los táctiles te dejan elegir cuál usar.

    La pantalla de PIN, a mitad de recorrido. Capturado de la propia pantalla del dispositivo en una compilación de desarrollo.
  2. Paso 2. Eliges una entrada

    Recorres la bóveda y abres una entrada. El dispositivo dibuja la marca del servicio cuando reconoce el nombre, y la contraseña sigue oculta hasta que pides verla; después se vuelve a ocultar sola.

    La lista de la bóveda. En el modelo táctil un dedo arrastra la lista de la bóveda hasta el último de los seis servicios de demostración, y dos toques lo abren: se ve la cuenta y la contraseña sigue oculta. Una grabación de la propia pantalla del dispositivo: la placa envió cada fotograma por su cable USB según lo dibujaba, mientras un script accionaba sus controles, así que el clip transcurre a la velocidad real del dispositivo.
    Una entrada, con la contraseña oculta. En el Plus S3 la lista de la bóveda baja dos filas y una entrada se abre en su tarjeta: el usuario, la contraseña oculta y un código de un solo uso en vivo con su cuenta atrás. La barra de acciones pasa de escribir a mostrar, y la contraseña queda a la vista tres segundos bajo un aviso antes de que el dispositivo la vuelva a ocultar por su cuenta. Una grabación de la propia pantalla del dispositivo: la placa envió cada fotograma por su cable USB según lo dibujaba, mientras un script accionaba sus controles, así que el clip transcurre a la velocidad real del dispositivo.
  3. Paso 3. Dejas que la escriba

    Eliges qué enviar. Kleidos se convierte en un teclado Bluetooth, lo escribe en el ordenador que emparejaste y vuelve a apagar el Bluetooth.

    Elegir qué escribir. Una entrada de demostración abierta. El selector pregunta qué escribir (el par, el usuario o la contraseña), el dispositivo se anuncia y espera a un ordenador, y, al cancelar la sesión, el Bluetooth se apaga de nuevo. Una grabación de la propia pantalla del dispositivo: la placa envió cada fotograma por su cable USB según lo dibujaba, mientras un script accionaba sus controles, así que el clip transcurre a la velocidad real del dispositivo.

    Qué hace el enlace Bluetooth

    • Solo envía. El dispositivo es un teclado: lo único que el ordenador puede escribirle es el byte de los LED del teclado, y Kleidos no hace nada con él.
    • El emparejamiento es solo LE Secure Connections, con un número de seis cifras que comparas y confirmas en el dispositivo. El emparejamiento antiguo no se incluye en la compilación.
    • Las pulsaciones salen solo por un enlace vinculado, cifrado y autenticado, con una clave de 16 bytes, y el enlace se vuelve a comprobar justo antes de cada informe.
    • El dispositivo se anuncia con una dirección privada que cambia cada 15 minutos.
    • Un ordenador ya emparejado no puede volver a emparejarse en silencio: el dispositivo lo rechaza y te pregunta primero.
    • El Bluetooth está apagado hasta que abres una sesión (enviar una entrada, emparejar un ordenador nuevo, hacer la configuración inicial), y se apaga cuando el dispositivo se bloquea o se duerme.
  4. Paso 4. Lo administras desde el navegador

    Para añadir, importar o exportar entradas, abres el panel de administración: el dispositivo desbloqueado levanta su propia red Wi-Fi y muestra un código QR. Lo escaneas y tienes el panel en el navegador. Los modelos con teclado también pueden editar entradas en el propio dispositivo.

    El dispositivo también guarda códigos 2FA. En las seis placas con chip de reloj vienen activados; en las tres que no lo tienen, el reloj se desvía durante un sueño, así que los códigos están desactivados hasta que los activas y el dispositivo tiene una sincronización reciente de la hora, de una red, del navegador que abrió el panel o de una posición por satélite.

La seguridad en el dispositivo

La bóveda son unos pocos ficheros en la flash del dispositivo. Todo lo que viene ahora trata de cuánto valen esos ficheros para quien se los lleve.

Cómo llega tu PIN a los registros
  1. PIN o contraseña Se escribe en el propio dispositivo y no se guarda en ninguna parte.
  2. PBKDF2-SHA256 Sobre una sal aleatoria propia de esta bóveda: 175 000 iteraciones en el ESP32-S3 y 40 000 en el ESP32 clásico, unos dos segundos en ambos.
  3. Clave de cifrado de claves Comprueba el HMAC de la clave de la bóveda envuelta en meta.bin y la desenvuelve. Un PIN nuevo solo vuelve a envolver esa clave, y no toca ningún registro.
  4. Clave de la bóveda Da las claves de trabajo mediante HMAC-SHA256 con etiquetas fijas: una que cifra y otra que autentica. Ninguna se escribe nunca en la flash.
  5. Cada registro Una versión, un IV de 16 bytes, una etiqueta HMAC de 32 bytes y el texto cifrado con AES-256-CBC. La etiqueta se comprueba antes de descifrar nada.

Cada entrada va cifrada y autenticada

Un registro se cifra con AES-256-CBC y se autentica con HMAC-SHA256 (cifrar y luego autenticar). La etiqueta se verifica antes de descifrar nada, y cubre el tipo del registro, su ranura y un contador: así un registro no se puede mover a otra ranura, ni leer como si fuera de otro tipo, ni revertir por separado. Las entradas de contraseña se rellenan todas hasta los mismos 4 KB, así que su tamaño no dice nada de lo que guardan.

Tu PIN no se guarda en ninguna parte

La clave se deriva del PIN con PBKDF2-SHA256 sobre una sal aleatoria propia de cada bóveda: 175 000 iteraciones en las placas ESP32-S3 y 40 000 en las ESP32 clásicas, calibradas para un desbloqueo de unos dos segundos. Lo que se guarda es un verificador, no el PIN. El cifrado, la autenticación y la comprobación del desbloqueo usan tres claves distintas. Las dos cifras difieren porque los dos chips calculan el hash de forma distinta: el ESP32-S3 agrupa el trabajo en su propio periférico de hash, unos 8,8 microsegundos por iteración; el ESP32 clásico ejecuta un hash escrito para este proyecto desde memoria interna rápida, unos 39. Los mismos dos segundos dan para cuatro veces más iteraciones.

Bloqueo y, al final, borrado

Desde el cuarto intento fallido el dispositivo se bloquea 30 segundos, y desde el séptimo, 5 minutos. El décimo borra la bóveda, todos los vínculos de Bluetooth y la identidad de la red de administración. El intento se anota antes de comprobar el secreto, así que cortar la corriente no recupera un intento.

Las claves se borran al bloquearse

Bloquear y dormir apagan las radios y después borran de la memoria las claves y las listas descifradas. Los búferes que las contenían se sobrescriben a propósito, no solo se liberan.

Las compilaciones de producción son silenciosas

La compilación de producción abierta y la endurecida no llevan consola serie ni una sola llamada de log, y un fallo no imprime nada: ni cabecera, ni registros del procesador, ni traza. Lo único que queda es la línea de arranque de la ROM del propio chip, que no dice nada de tu bóveda. Las contraseñas, los usuarios y los PIN se mantienen fuera de los logs por diseño. En lugar de la traza hay un anillo de direcciones de los fallos, que solo se lee desde el panel de administración autenticado. No guarda el contenido de las pilas, porque la pila de una tarea en el instante del fallo puede contener el PIN.

Compilación endurecida: en desarrollo

En desarrollo

En las placas de 8 MB la compilación endurecida añade Secure Boot v2, cifrado de la flash y ajustes cifrados, y ata la clave de la bóveda al chip concreto, para que una copia de la flash no se pueda atacar fuera del dispositivo. El secreto al que la ata sale de un mecanismo distinto en cada familia: en las placas de ESP32 clásico es un valor aleatorio de treinta y dos bytes guardado en los ajustes cifrados, y eso está escrito y probado; en las placas ESP32-S3 es una clave dentro de los propios fusibles del chip, que se graba desde el ordenador en un paso aparte antes del primer arranque endurecido. Ese paso ya existe y ninguna placa ha pasado todavía por él: por eso digo que toda la compilación está sin terminar.

La versión completa: veinte amenazas, cuarenta y cinco controles y lo que no puedes comprobar →

El panel de administración

En desarrollo

Las tareas en lote (añadir entradas, importar de otro gestor, exportar una copia de seguridad cifrada, actualizar el firmware) se hacen en el navegador, sobre una red que levanta el propio dispositivo. El servidor web es el propio dispositivo: no pasa nada por ningún servicio externo. Cuatro de las placas tienen ranura de tarjeta, y en esas el dispositivo puede escribir y leer por sí mismo la misma copia cifrada, sin navegador y sin red.

El panel está en desarrollo. Ya es donde se añaden entradas, se importan de otro gestor y se exporta una copia de seguridad cifrada, y sigue cambiando: donde el dispositivo dibuja la marca de cada servicio, el panel escribe el nombre como texto.

La bóveda en el panel: las mismas seis entradas de demostración que muestra el dispositivo.

Abrí la propia página del panel (los bytes que sirve el firmware) en un navegador, contra una bóveda de demostración servida desde mi ordenador y no desde una placa, y la capturé ahí. El recorrido y el resto de las capturas están con las demás grabaciones.

Los dispositivos

Un mismo firmware en nueve placas, desde un stick de 24 × 48 mm con dos botones hasta un dispositivo de 73 × 115 mm con teclado. La placa que uses cambia cómo la desbloqueas y cuánto cabe en la pantalla; no cambia la bóveda. De las cuatro placas ESP32-S3, solo el CoreS3 SE lleva además un chip de reloj.

M5StickC Plus S3, 24 por 48 mm, dibujado a escala

M5StickC Plus S3

Chip
ESP32-S3
Entrada
Dos botones
Pantalla
135×240
Carcasa
24×48 mm
Reloj
Interno, se desvía durante un sueño
Ranura de tarjeta
No: las copias pasan por el panel
Capacidad
250 credenciales, 40 códigos 2FA
Compilación endurecida
En desarrollo
M5StickC Plus2, 24 por 48 mm, dibujado a escala

M5StickC Plus2

Chip
ESP32
Entrada
Dos botones
Pantalla
135×240
Carcasa
24×48 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
No: las copias pasan por el panel
Capacidad
100 credenciales, 40 códigos 2FA
Compilación endurecida
En desarrollo, revisión de chip 3.0 o posterior
M5StickC Plus 1.1, 24 por 48 mm, dibujado a escala

M5StickC Plus 1.1

Chip
ESP32
Entrada
Dos botones
Pantalla
135×240
Carcasa
24×48 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
No: las copias pasan por el panel
Capacidad
100 credenciales, 30 códigos 2FA
Compilación endurecida
No disponible (4 MB de flash)
M5StickC Plus SE, 24 por 48 mm, dibujado a escala

M5StickC Plus SE

Chip
ESP32
Entrada
Dos botones
Pantalla
135×240
Carcasa
24×48 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
No: las copias pasan por el panel
Capacidad
100 credenciales, 30 códigos 2FA
Compilación endurecida
No disponible (4 MB de flash)
M5Stack CoreInk, 40 por 56 mm, dibujado a escala

M5Stack CoreInk

Chip
ESP32
Entrada
Rueda
Pantalla
200×200
Carcasa
40×56 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
No: las copias pasan por el panel
Capacidad
100 credenciales, 30 códigos 2FA
Compilación endurecida
No disponible (4 MB de flash)
M5Stack CoreS3 SE, 54 por 54 mm, dibujado a escala

M5Stack CoreS3 SE

Chip
ESP32-S3
Entrada
Pantalla táctil
Pantalla
320×240
Carcasa
54×54 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
Sí: escribe sus propias copias
Capacidad
500 credenciales, 50 códigos 2FA
Compilación endurecida
En desarrollo
M5Stack Core2 v1.3, 54 por 54 mm, dibujado a escala

M5Stack Core2 v1.3

Chip
ESP32
Entrada
Pantalla táctil
Pantalla
320×240
Carcasa
54×54 mm
Reloj
Chip con respaldo de batería
Ranura de tarjeta
Sí: escribe sus propias copias
Capacidad
500 credenciales, 50 códigos 2FA
Compilación endurecida
En desarrollo, revisión de chip 3.0 o posterior
M5Cardputer ADV, 84 por 54 mm, dibujado a escala

M5Cardputer ADV

Chip
ESP32-S3
Entrada
Teclado
Pantalla
240×135
Carcasa
84×54 mm
Reloj
Interno, se desvía durante un sueño
Ranura de tarjeta
Sí: escribe sus propias copias
Capacidad
250 credenciales, 40 códigos 2FA
Compilación endurecida
En desarrollo
LilyGO T-Deck Plus, 73 por 115 mm, dibujado a escala

LilyGO T-Deck Plus

Chip
ESP32-S3
Entrada
Teclado
Pantalla
320×240
Carcasa
73×115 mm
Reloj
Interno, se desvía durante un sueño
Ranura de tarjeta
Sí: escribe sus propias copias
Capacidad
500 credenciales, 50 códigos 2FA
Compilación endurecida
En desarrollo

No recomiendo ninguna. El producto es el firmware, y donde de verdad se elige es en la rejilla de arriba.

Cada placa está dibujada a partir de las medidas tomadas de su propia carcasa y de su pantalla, no de una foto. Las imágenes y las grabaciones de las pantallas reales están en la página de grabaciones.

Las pantallas se muestran en inglés. El dispositivo también habla español, francés, alemán e italiano.

Kleidos es un proyecto independiente, sin relación con M5Stack ni con LilyGO. Los nombres de producto son marcas de sus propietarios.

Grabaciones de una placa de cada tipo →

Lo que todavía no hace

Lee esta parte antes que el resto.

Seguir y suscribirse

No hay nada que instalar ni nada en lo que registrarte. Elige lo que ya leas.

Todavía no hay repositorio que seguir: mantengo el código privado mientras preparo la primera versión, así que el feed y las dos cuentas son todo lo que hay.

Apoyar el proyecto

Esto lo pago de mi bolsillo, y acabas de pasar por delante de la factura.

Las nueve placas de arriba son hardware de desarrollo. Compré cada una de ellas para que Kleidos funcionara en ella, y cada una necesitó su driver de pantalla, su controlador de alimentación y su propia disposición en una pantalla de otro tamaño; cinco de ellas salen grabadas en la página de grabaciones. Ese es el gasto. Las horas explican por qué ha tardado tanto, pero son contexto, no una factura.

Aquí no se vende nada. No hay versión publicada, no hay nada que descargar y el repositorio todavía no está abierto. Si aun así quieres apoyar el proyecto, estos son los dos sitios:

Donar no te da nada: ni nivel, ni recompensa, ni compilación anticipada, ni prioridad en nada, ni tu nombre en una lista. Prefiero que siga siendo una donación a que se convierta en una compra.

Y si prefieres gastar el dinero en hardware antes que en mí: las placas son de M5Stack y de LilyGO, que las venden en sus propias tiendas, y también aparecen en tiendas de electrónica y generalistas, entre ellas Digi-Key, Amazon y AliExpress. Cuando haya una versión publicada, grabarla será gratis. Yo no vendo nada y no me llevo nada de quien lo haga.