Herramienta de privacidad gratuita
Cifra un archivo en tu navegador
Elige un archivo, elige 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 cargada. El formato está documentado byte por byte aquí abajo, para que no tengas que creernos nada.
Todo ocurre en esta pestaña. No se sube nada y funciona sin conexión una vez cargada.
Cualquier archivo. Los archivos grandes necesitan memoria. Mira los límites honestos aquí abajo.
No hay recuperación. Una frase de acceso olvidada significa un archivo que nadie —nosotros incluidos— podrá abrir jamás.
Cada parámetro, declarado
- Cifrado
- AES-256-GCM (WebCrypto), etiqueta de 128 bits
- Derivación de clave
- PBKDF2-HMAC-SHA-256, 600,000 iteraciones
- Sal del KDF
- 16 bytes, CSPRNG, nueva por archivo
- Nonce GCM
- 12 bytes, CSPRNG, nuevo por archivo
- Datos autenticados
- el encabezado completo 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 claves con Argon2id calibrado por dispositivo, las envuelve en el Secure Enclave y guarda el contenido en contenedores negables por bloques. Nada de eso lo puede hacer una página web. Esta página es una utilidad independiente construida sobre lo que los navegadores ofrecen de forma nativa.
PBKDF2 no exige memoria. Es la única función de derivación de clave que los navegadores traen de forma nativa, y 600,000 iteraciones hacen lenta cada conjetura, pero un equipo con GPU la sigue atacando 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 todo el archivo permanece en memoria dos o tres veces mientras se procesa. Cientos de megabytes están bien en la mayoría de los 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 adentro, pero el tamaño no queda oculto.
El formato, byte por byte
Todo lo que un lector técnico necesita para verificar por su cuenta lo que produce esta página, o descifrarlo 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 demostración. 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 como se debe: Argon2id calibrado para tu dispositivo, claves en el Secure Enclave y cajas fuertes ocultas sin ninguna lista ni conteo guardado.
iPhone y iPad · iOS 17+ · Gratis