Word key: the portable key as a .dkk file or as six words

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main
dev 7 days ago
parent bf2187c690
commit e5f68636e0

@ -254,7 +254,7 @@ El vector de GT (`vectors/tlock_ibe.json`) ya está cubierto en `App`. El paso 9
- Un head de 16 MiB tarda de 10 a 40 s en la página, en el hilo principal (Go tarda la mitad): `open()` en un worker.
- Menores: el `TypeError` sin sumidero llega tras los pasos 3 a 8 con un `Blob`; `tempfile.remove()` marca borrado antes de lograrlo; `measureFiles` en cada tecla con 65 535 ficheros; un bundle `.app` no avisa (igual que la CLI).
- Nada está subido: la rama `v0.10` de `App` y `main` `13910b3` de `datekeys-go` esperan al autor.
6. La entrega 2 abre la versión siguiente del spec, y la 3 espera al documento «Servicio de sellado DateKeys v1». Para otra revisión externa, el artefacto hay que volver a publicarlo desde el diseño nuevo.
6. La entrega 2 abre la versión siguiente del spec, y la 3 espera al documento «Servicio de sellado DateKeys v1». En esa versión entra también la **llave de palabras** que pidió el autor el 01-10: la llave portable guardada como fichero `.dkk` o como 6 palabras al azar, a elegir, derivadas con scrypt y el `capsule_id` ([spec_v0.11/llave_palabras.md](spec_v0.11/llave_palabras.md)), primero en Go y después en la página. Además, el 01-10 el autor pidió que `/inspect` pueda pedir la firma a drand: ya lo hace, con un botón (`2ec7102`), lo que cambia la decisión 4 del plan de la fase 2. Para otra revisión externa, el artefacto hay que volver a publicarlo desde el diseño nuevo.
**Hecho el 30-09 por la noche: el formato 3 en Go.** Rama `v0.10` de `datekeys-go`, subida con el tag `spec-v0.10` en `cc35d2c`, un commit o varios por paso del plan:
- `631d09c`, el spec con la regla de invisibles; `6fba1dd`, paso 1, `internal/pathrule` con las tablas de Unicode 18.0.0 y best-fit generadas y su `TablesDigest`; `72e86b8`, paso 2, el códec de `BODY`, `security` y el head.

@ -0,0 +1,35 @@
# Llave de palabras (propuesta para la versión siguiente del spec)
*1 de octubre de 2026. Pedida por el autor: «nadie va a tener idea de cómo hacer ese tipo de claves» (las de `age`), «si lo hacemos como un wallet a partir de 6 palabras», y «si quiere el archivo, que lo guarde, y si no, que apunte las palabras». Pendiente de diseño detallado, de spec y de implementación, primero en Go y después en la página.*
## Qué es
La llave portable de una cápsula `time_and_key` (§38) se puede guardar de dos formas, y quien la crea elige una o las dos:
- el fichero `.dkk`, como hoy;
- 6 palabras al azar, apuntadas a mano, como la frase de recuperación de un wallet.
Las dos son la misma llave: el fichero y las palabras abren la misma entrada X25519 de `INNER_ACCESS_AGE`. El formato de la cápsula no cambia: es una credencial X25519 más (§37, §39).
## Cómo funciona
1. Al crear la cápsula, el escritor genera 6 palabras al azar de una lista fija de 2048, con una suma de control que detecte una palabra mal escrita, como BIP-39. No las elige la persona: su entropía es conocida, 66 bits.
2. De las palabras sale `I_ACCESS`: una derivación lenta, scrypt, de las palabras normalizadas con una sal que incluye el `capsule_id`, da los 32 bytes de la identidad X25519. Con el `capsule_id` en la sal, cada cápsula exige su propio ataque.
3. La cápsula guarda la parte pública como una de sus 16 entradas. El `.dkk`, si se descarga, lleva esa misma identidad.
4. Para abrir, se escriben las 6 palabras. El lector recalcula `I_ACCESS` con el `capsule_id` de `PUBLIC_HEADER` y prueba las entradas, como con un `.dkk`.
## Seguridad
- Antes de la fecha nadie puede probar palabras: las entradas de acceso van dentro de `OUTER_TIME_AGE`.
- Pasada la fecha, quien tenga el `.dkc` puede probarlas sin conexión. 66 bits con scrypt hacen inviable recorrerlas. Con 8 o 12 palabras el margen es mayor, a cambio de apuntar más.
- La lista, la normalización (espacios, mayúsculas y acentos), la suma de control, los parámetros de scrypt y la sal quedan fijados en el spec, para que la CLI de Go y la página abran las mismas cápsulas.
## Dependencias
scrypt ya está en las dos implementaciones: Go lo tiene en `golang.org/x/crypto`, que `age` ya usa, y la página en `@noble/hashes`. No hace falta ninguna dependencia nueva.
## Preguntas para el autor
1. ¿6 palabras, o 8 o 12?
2. ¿La lista española de BIP-39, la inglesa, o una propia? Hay que comprobar la licencia de la que se elija antes de incluirla.
3. ¿La página ofrece las palabras por defecto y el `.dkk` como opción, o al revés?
Loading…
Cancel
Save

Powered by TurnKey Linux.