Herramienta de privacidad gratuita
Cifra un archivo en tu navegador
Elige un archivo, escoge una frase de acceso y descarga una copia cifrada. AES-256-GCM, con la clave derivada en tu navegador. No se sube nada y funciona sin conexión una vez cargado. El formato está documentado byte a byte más abajo, para que no tengas que creernos en nada.
Se ejecuta enteramente en esta pestaña. No se sube nada y funciona sin conexión una vez cargado.
Cualquier archivo. Los archivos grandes necesitan memoria. Consulta los límites honestos más abajo.
No hay recuperación. Una frase de acceso olvidada significa un archivo que nadie —nosotros incluidos— podrá abrir jamás.
Todos los parámetros, declarados
- Cifrador
- AES-256-GCM (WebCrypto), etiqueta de 128 bits
- Derivación de claves
- PBKDF2-HMAC-SHA-256, 600.000 iteraciones
- Sal del KDF
- 16 bytes, CSPRNG, nueva en cada archivo
- Nonce GCM
- 12 bytes, CSPRNG, nuevo en cada archivo
- Datos autenticados
- toda la cabecera de 42 bytes, así que manipular cualquier parámetro declarado rompe el descifrado
- Codificación de la frase de acceso
- UTF-8, normalizada en NFC (para que la misma frase escrita en cualquier dispositivo derive la misma clave)
Límites honestos
Este no es el formato de caja fuerte de la app Sealby. La app deriva las claves con Argon2id calibrado por dispositivo, las envuelve en el Secure Enclave y guarda el contenido en contenedores negables troceados. Nada de eso puede hacerlo una página web. Esta página es una utilidad independiente construida sobre lo que los navegadores ofrecen de forma nativa.
PBKDF2 no exige mucha memoria. Es la única función de derivación de claves que los navegadores incluyen de forma nativa, y 600.000 iteraciones hacen lenta cada conjetura, pero un equipo de GPU sigue atacándolo mucho más rápido que a Argon2id. Por eso la protección vive en tu frase de acceso: cuatro palabras aleatorias o más, no una contraseña.
WebCrypto cifra de una sola pasada. No hay flujo continuo, así que el archivo entero está en memoria dos o tres veces mientras se procesa. Cientos de megabytes van bien en la mayoría de dispositivos. Para archivos de varios gigabytes, usa una herramienta de escritorio. La salida cifrada también revela el tamaño aproximado del archivo. El nombre va cifrado dentro, pero el tamaño no queda oculto.
El formato, byte a byte
Todo lo que un lector técnico necesita para verificar por su cuenta la salida de esta página, o descifrarla en veinte líneas de Python:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versión | 0x01 |
| 9 | algoritmo | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iteraciones | uint32, big-endian (600.000) |
| 14–29 | sal | 16 bytes |
| 30–41 | nonce | 12 bytes |
| 42–fin | texto cifrado | AES-256-GCM de la carga útil, AAD = bytes 0–41; los últimos 16 bytes son la etiqueta GCM |
Carga útil antes del cifrado: [longitud del nombre en 2 bytes, big-endian][nombre del archivo, UTF-8][bytes del archivo]. El nombre original viaja cifrado; al descifrar se restaura.
Descifrador de referencia (Python, biblioteca cryptography)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0] # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42]) # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)Esto es la demo. La caja fuerte es el producto.
Un archivo, una frase de acceso, una página. Eso es lo que puede hacer un navegador. Sealby lo hace en condiciones: Argon2id calibrado para tu dispositivo, claves en el Secure Enclave y cajas fuertes ocultas sin ninguna lista ni recuento guardado.
iPhone y iPad · iOS 17+ · Gratis