Cómo funciona

Sin inventos - solo primitivas bien estudiadas: BIP-39, X25519, HKDF-SHA256, XChaCha20-Poly1305. Este es todo el camino, en lenguaje llano.

12 palabras son toda la identidad

Un perfil comienza con una frase semilla BIP-39: 12 palabras en inglés que contienen 128 bits de entropía. Las palabras se estiran en una semilla, y HKDF deriva de ella el par de claves de cifrado. Las mismas palabras en cualquier dispositivo restauran las mismas claves: no hay ninguna «cuenta» que recuperar, solo la frase.

La dirección es la clave pública

Su clave pública X25519, codificada en bech32 con el prefijo sk, es su dirección: unos 60 caracteres que empiezan por sk1. Entréguela como texto o código QR. No hay ningún directorio donde registrarse ni ningún servidor que asocie nombres con personas.

sk1qsva3e52awafjvedj5ethvc5hs9j4t0ml26m83kn6kycsh9m46rejzha

Un mensaje se convierte en un sobre

El texto se cifra una sola vez con una clave de mensaje aleatoria usando XChaCha20-Poly1305. Luego esa clave se envuelve en una ranura para cada destinatario - y siempre en una ranura más para usted. Por eso sus propios mensajes enviados siguen siendo legibles: descifrar su historial es la misma operación que leer el correo entrante.

Las ranuras son anónimas y están mezcladas: el sobre no lleva direcciones, así que un observador externo solo ve tamaños. La clave de cada ranura se acuerda mediante dos intercambios X25519 - uno con una clave efímera generada para este sobre (forward secrecy) y otro con la clave permanente del remitente (autenticación del remitente).

versión 1 B clave del remitente 32 B clave efímera 32 B ranuras 48 B cada una nonce 24 B texto cifrado + etiqueta carga útil
Estructura del sobre (versión 2)

El sobre viaja como texto plano

El sobre binario se envuelve en base64 dentro de un bloque blindado. Es autónomo: péguelo en un mensajero, un correo, un foro o un archivo - cualquier canal que entregue texto entrega mensajes de Secret Keeper.

-----BEGIN SECRET MESSAGE V1-----
AlXhZ0Qq7bfPj…base64…M42kLBi6p4Jro
-----END SECRET MESSAGE V1-----

Archivos: el contenedor .skf

Los archivos usan el mismo esquema de ranuras, pero el cuerpo se cifra por fragmentos, de modo que un vídeo de varios gigabytes fluye sin cargarse en memoria. Los nonces de los fragmentos siguen la construcción STREAM (como en age y Tink): un contador detecta reordenamientos y duplicados, y un byte final detecta el truncamiento. Hasta el nombre del archivo va dentro de la cabecera cifrada.

Copias de seguridad

Una copia de seguridad es un archivo .skb: ajustes, contactos e historial en un único contenedor cifrado para usted mismo - el mismo esquema que los archivos cifrados, así que desde fuera no se puede leer nada, ni siquiera las direcciones de los contactos. La frase semilla nunca está en la copia: el perfil se restaura con las 12 palabras, y la copia restaura todo lo que las rodea.

Qué se consigue con esto

Forward secrecy
una clave efímera nueva para cada sobre
El remitente puede leer
su propia ranura en cada sobre que envía
Sin estado
sin sesiones por pares ni nada almacenado en servidores
Sin identificadores de usuario
la dirección es la propia clave pública
Dos implementaciones
Dart en la aplicación, @noble en la extensión - verificadas entre sí con vectores de prueba compartidos

¿Quiere comprobarlo?

La especificación completa a nivel de bytes es pública - el mismo documento con el que se prueban la aplicación y la extensión:

Leer la especificación del protocolo