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