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.
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
PIN o contraseñaSe escribe en el propio dispositivo y no se guarda en ninguna parte.
PBKDF2-SHA256Sobre 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.
Clave de cifrado de clavesComprueba 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.
Clave de la bóvedaDa las claves de trabajo mediante HMAC-SHA256 con etiquetas fijas: una que cifra y otra que autentica. Ninguna se escribe nunca en la flash.
Cada registroUna 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.
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.
Solo se abre desde un dispositivo desbloqueado, y solo en la red del propio dispositivo: WPA3-SAE con hash-to-element, tramas de gestión protegidas obligatorias, sin modo de respaldo WPA2 y un único cliente a la vez.
Por defecto cada sesión saca una contraseña nueva de 20 caracteres y la muestra como un código QR de Wi-Fi normal en la pantalla desbloqueada. Si lo prefieres, puedes fijar una.
Dentro de ese enlace cifrado el panel habla HTTP sin cifrar, con un token por sesión, una comprobación de Host que corta el DNS rebinding, un tiempo máximo de inactividad y límites de peticiones por dirección. No hay TLS por encima: el cifrado del Wi-Fi es la frontera del transporte.
Borrar la bóveda, eliminar una entrada u olvidar todos los emparejamientos te vuelve a pedir el secreto de desbloqueo y cuenta para el mismo bloqueo. Un secreto incorrecto recibe siempre el mismo rechazo, tanto si solo era incorrecto como si fue el que inició un bloqueo o el que gastó el último intento.
El Bluetooth y el Wi-Fi no funcionan nunca a la vez. Cada sesión de Bluetooth tiene un dueño que la detiene, y al panel se llega solo después de esa parada: un test del repositorio fija qué superficie es dueña de cada sesión y dónde termina.
Las actualizaciones, en las placas de 8 MB: subes el firmware desde el panel detrás de una segunda contraseña que se muestra en el dispositivo. Una imagen compilada para otra placa, o de una versión anterior, se rechaza; y una actualización que arranca pero no se confirma vuelve sola a la anterior.
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.
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
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
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
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
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
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
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
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
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.
Es una versión previa, la 0.1.0. No he encargado ninguna auditoría independiente.
Todavía no he conseguido que la compilación endurecida funcione de principio a fin en un dispositivo.
En las compilaciones abiertas, quien copie la flash puede probar PIN tras PIN sin tener el dispositivo delante. Un PIN más largo (de 6 u 8 cifras), o una contraseña en los modelos con teclado o con pantalla táctil, lo hace más lento; solo la clave atada al chip de la compilación endurecida lo impide. Lleva el dispositivo contigo.
El panel de administración se fía de quien entre en su red Wi-Fi. Para entrar hace falta la contraseña de un solo uso que aparece en tu pantalla desbloqueada: escanea tú su código QR, y en privado.
Solo la compilación endurecida comprueba las firmas del firmware.
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.