<!-- The markdown twin of https://kleidos.dev/es/overview/, converted from that page at build time. The page is the original; this is the same words with the markup taken off. The site was last changed on 2026-10-25. -->

# 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

![clip](https://kleidos.dev/media/unlock-sticks3.poster.webp)

[En directo desde el dispositivo](https://kleidos.dev/es/recordings/#provenance)

**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.

En esta página

1. [Cómo funciona](https://kleidos.dev/#how)

2. [Cómo se protege](https://kleidos.dev/#security)

3. [Panel de administración](https://kleidos.dev/#panel)

4. [Dispositivos](https://kleidos.dev/#devices)

5. [Límites](https://kleidos.dev/#limits)

6. [Seguir](https://kleidos.dev/#follow)

7. [Apoyar](https://kleidos.dev/#support)

## Cómo funciona

### 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.

[Pantalla del dispositivo](https://kleidos.dev/es/recordings/#provenance)

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

1. ![La pantalla de PIN de Kleidos en un M5StickC Plus S3, con el arco a mitad de recorrido.](https://kleidos.dev/media/pin-sticks3.png)

### 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.

[En directo desde el dispositivo](https://kleidos.dev/es/recordings/#provenance)

**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.

[En directo desde el dispositivo](https://kleidos.dev/es/recordings/#provenance)

**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.

2. ![clip](https://kleidos.dev/media/choose-cores3_se.poster.webp)![clip](https://kleidos.dev/media/card-sticks3.poster.webp)

### 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.

[En directo desde el dispositivo](https://kleidos.dev/es/recordings/#provenance)

**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.

3. ![clip](https://kleidos.dev/media/send-sticks3.poster.webp)

### 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 →](https://kleidos.dev/es/security/)

## 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.

- 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.

![El panel de administración de Kleidos con las seis entradas de demostración de la bóveda, la cuenta de cada una y la fecha de su último cambio.](https://kleidos.dev/media/panel-credentials-desktop.png)

[Panel en un navegador](https://kleidos.dev/es/recordings/#provenance)

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](https://kleidos.dev/assets/fronts/sticks3.svg)

### 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](https://kleidos.dev/assets/fronts/m5stickc-plus2.svg)

### 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](https://kleidos.dev/assets/fronts/m5stickc-plus1.svg)

### 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](https://kleidos.dev/assets/fronts/m5stickc-plus-se.svg)

### 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](https://kleidos.dev/assets/fronts/coreink.svg)

### 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](https://kleidos.dev/assets/fronts/cores3-se.svg)

### 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](https://kleidos.dev/assets/fronts/m5stack-core2-v13.svg)

### 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](https://kleidos.dev/assets/fronts/cardputer.svg)

### 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](https://kleidos.dev/assets/fronts/tdeck-plus.svg)

### 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 →](https://kleidos.dev/es/recordings/)

## Lo que todavía no hace

Lee esta parte antes que el resto.

- 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.

- [Feed de novedades /es/rss.xml Un feed RSS 2.0 con las novedades del proyecto, en el idioma de la página en la que estás. Cada estado de la lista de arriba llega aquí cuando cambia.](https://kleidos.dev/es/rss.xml)

- [Mastodon @jmrplens@mstdn.jmrp.io Hablo del proyecto desde mi propio servidor. Abierto: no hace falta cuenta para leer. (se abre en una pestaña nueva)](https://mstdn.jmrp.io/@jmrplens)

- [Bluesky @jmrp.io Las mismas publicaciones, para quien esté allí. (se abre en una pestaña nueva)](https://bsky.app/profile/jmrp.io)

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:

- [GitHub Sponsors No se queda comisión ni cobra gastos de pasarela. Cobra en dólares. (se abre en una pestaña nueva)](https://github.com/sponsors/jmrplens)

- [Ko-fi Una propina puntual, sin comisión de plataforma, directa. (se abre en una pestaña nueva)](https://ko-fi.com/jmrplens)

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.
