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:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8versión0x01
9algoritmo0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iteracionesuint32, big-endian (600,000)
14–29sal16 bytes
30–41nonce12 bytes
42–fintexto cifradoAES-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.

Descárgalo en el App Store

iPhone y iPad · iOS 17+ · Gratis