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 y abrir una entrada. Un StickC Plus S3 despierta en su pantalla bloqueada. Se pulsa un botón cuatro veces y el arco recorre un dígito distinto 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 Wi-Fi según lo dibujaba, mientras un script accionaba sus controles, así que el clip transcurre a la velocidad real del dispositivo.
Un firmware, nueve placas. Dibujadas a escala con las medidas reales de la carcasa y la pantalla de cada placa: 24 × 48 mm la más pequeña, 73 × 115 mm la más grande.
Dibujo con pantallas del dispositivo Un firmware, nueve placas Dibujadas a escala con las medidas reales de la carcasa y la pantalla de cada placa: 24 × 48 mm la más pequeña, 73 × 115 mm la más grande.

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 frase de paso en su lugar, y los táctiles te dejan elegirla.

    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. 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 Wi-Fi 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. Capturado de la propia pantalla del dispositivo en una compilación de desarrollo.
  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 Bluetooth se apaga de nuevo. Montado con capturas de la propia pantalla del dispositivo, en el orden y en los tiempos en que las muestra una ejecución real.

    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 está ni compilado.
    • Las pulsaciones salen solo por un enlace emparejado, cifrado y autenticado con 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, la primera configuración — 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.

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 El PIN o la frase de paso pasan por PBKDF2-SHA256 con una sal aleatoria propia de cada bóveda. De ahí sale una clave que desenvuelve la clave de la bóveda, y esa clave da las claves separadas que cifran y autentican cada registro. PIN o frase de pasoPBKDF2-SHA256, sal aleatoriadesenvuelve la clave de la bóvedaregistros con AES-256-CBC + HMAC-SHA256

Cada entrada va cifrada y autenticada

Un registro se cifra con AES-256-CBC y se autentica con HMAC-SHA256, cifrar y después 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.

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 emparejamientos 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 bloquear

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 están calladas

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

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 lejos del dispositivo. No la he terminado: me falta escribir lo que aprovisiona la clave del chip en las placas ESP32-S3, así que allí una compilación endurecida no puede ni crear una bóveda.

El panel de administración

En desarrollo

Todo lo que va en lote — añadir entradas, importar de otro gestor, exportar una copia de seguridad cifrada, actualizar el firmware — se hace 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.

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 este 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 equipo de 73 × 115 mm con teclado. La placa cambia cómo lo desbloqueas y cuánto cabe en la pantalla; no cambia la bóveda.

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
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
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
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
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
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
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
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
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
Compilación endurecida
En desarrollo

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

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.

Todos los flujos, en todas las placas →

Por dónde va el proyecto

Todo, con honestidad: lo que funciona, lo que se está construyendo y lo que no se ha empezado. Cada fila dice qué lo hace cierto.

  1. Funciona

    Un firmware, nueve placas

    Cada placa registra su propio hardware — su pantalla, su controlador de alimentación, sus botones o su teclado — en el mismo firmware, y los dibujos de «Los dispositivos» se generan con esas mismas placas medidas (src/boards/).

  2. Funciona

    La bóveda cifrada en el dispositivo

    Las entradas se guardan como registros cifrados y autenticados, con claves distintas para cifrar, autenticar y comprobar el desbloqueo, y la batería de pruebas del ordenador cubre el ciclo completo y los rechazos (src/vault/).

  3. Funciona

    El desbloqueo, con cada tipo de entrada

    Las placas de dos botones marcan un PIN con el arco temporizado, las que tienen teclado aceptan una frase de paso, y a las táctiles se les ofrece cualquiera de las dos (src/ui/entry/).

  4. Funciona

    Teclear por Bluetooth

    El dispositivo se convierte en un teclado Bluetooth durante la sesión que se le ordena abrir, teclea por un enlace emparejado y autenticado, y apaga la radio cuando la sesión termina (src/ble/).

  5. Funciona

    Actualizar el firmware desde el navegador

    En las placas con sitio para dos particiones de aplicación, el firmware se sube desde el panel de administración; una imagen compilada para otra placa o una versión anterior se rechazan, y una actualización que arranca pero nunca se confirma vuelve atrás por sí sola (src/platform/ota.cpp).

  6. En construcción

    El panel de administración

    En desarrollo. Ya es donde se añaden entradas, se importan de otro gestor y se exportan como copia cifrada, y sigue cambiando (src/web/).

  7. En construcción

    La compilación endurecida

    En desarrollo. El arranque seguro, el cifrado de la flash y los ajustes cifrados están configurados para las placas de 8 MB; en las de ESP32-S3 todavía no he escrito lo que aprovisiona la clave propia del chip, así que allí una compilación endurecida no puede crear hoy una bóveda (docs/security/secure-provisioning-checklist.md).

  8. Sin empezar

    El consumo, medido en la batería

    El consumo de cada placa sigue siendo una estimación. No he hecho las medidas de banco que cambiarían esas estimaciones por lecturas de un medidor, así que esta página no da ninguna cifra de consumo (docs/testing/production-sleep-checklist.md).

  9. Sin empezar

    La tirada larga de principio a fin

    Los criterios de publicación piden 50 ciclos completos — arrancar, desbloquear, buscar, teclear, dormir — sin un cuelgue. No los he hecho, y tampoco he marcado ninguna otra casilla de esa lista (docs/QA_CHECKLIST.md).

  10. Sin empezar

    La primera publicación

    Todavía no hay nada que instalar: el firmware va por la versión 0.1.0, no hay ninguna publicación, y esta página dice «muy pronto» porque es lo que hay (version.txt).

  11. Sin empezar

    Grabar una placa desde el navegador

    La página que instalaría el firmware por USB desde un navegador está escrita y aparcada: no tiene ninguna publicación que ofrecer, así que este sitio no publica nada en su dirección y su propio manifiesto no lista ninguna compilación (web/).

  12. Sin empezar

    Una revisión de alguien de fuera

    No he encargado a nadie de fuera del proyecto que revise el firmware ni la criptografía. El expediente por el que empezaría un auditor está escrito y esperando (docs/security/audit-dossier.md).

No pongo fechas. Esta lista solo nombra trabajo que existe en el repositorio, y un paso que nada de allí pueda demostrar figura como no empezado.

Lo que todavía no hace

Lee esta parte antes que el resto.

Los departamentos

El proyecto está organizado como lo estaría una empresa. Cada departamento es trabajo que existe en este repositorio, y todos los puestos los ocupa la misma persona.

Dirección

Fundador y director

José M. Requena Plens

  1. Marca y diseño

    Director creativo

    José M. Requena Plens

    Sí, otra vez.

    docs/design/

  2. Producto y hardware

    Responsable de selección de placas

    José M. Requena Plens

    Y sigue siendo él.

    variants/

  3. Firmware

    Ingeniero principal de firmware

    José M. Requena Plens

    src/

  4. Seguridad

    Arquitecto de criptografía

    José M. Requena Plens

    La entrevista fue corta.

    src/crypto/

  5. Interfaz y experiencia

    Responsable de diseño de producto

    José M. Requena Plens

    src/ui/

  6. Panel de administración · servidor

    Ingeniero de servidor

    José M. Requena Plens

    Viene del departamento de al lado.

    src/web/

  7. Panel de administración · cliente

    Ingeniero de cliente

    José M. Requena Plens

    web_src/index.html

  8. Validación y QA

    Responsable de calidad

    José M. Requena Plens

    Aquí también hay plan de carrera.

    test/

  9. Laboratorio de hardware

    Técnico de pruebas de placa

    José M. Requena Plens

    qa/tests/hardware/

  10. Documentación

    Redactor técnico

    José M. Requena Plens

    Y el que pone el café.

    docs/

  11. Publicación

    Responsable de versiones

    José M. Requena Plens

    version.txt

  12. Cumplimiento y licencias

    Asesoría legal (GPL-3.0)

    José M. Requena Plens

    Vacantes: todas.

    LICENSE

Seguir y suscribirse

No hay nada que instalar ni ningún registro. 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.