Herramienta de privacidad gratuita

Sella un archivo

Cifra un archivo con una clave de un solo uso recién generada y mándalo por el canal que quieras. Quien tenga la clave lo abre aquí mismo, en esta página. Nunca se sube nada, no hay ninguna frase de acceso que descifrar y ves lo que hay dentro antes de guardar nada.

Se ejecuta enteramente en esta pestaña. Esta página no puede comunicarse con ningún servidor en absoluto.

Todos los parámetros, declarados

Cifrador
AES-256-GCM (WebCrypto), etiqueta de 128 bits por fragmento
Clave
256 bits del CSPRNG del navegador, generada nueva en cada sellado, usada una sola vez, no derivada de nada
Fragmentación
un manifiesto cifrado (nombre, tamaño y tipo del archivo) y luego el archivo en fragmentos de 1 MiB, cada uno autenticado por separado
Nonce
sal de sellado aleatoria de 32 bits ‖ contador de fragmentos de 64 bits — nunca se repite dentro de un archivo y, en cualquier caso, la clave es de un solo uso
Datos autenticados
la cabecera completa de 16 bytes más el índice de cada fragmento y el número total de fragmentos — reordenar, truncar o injertar fragmentos rompe el descifrado
Cadena de la clave
base64url, 47 caracteres: la clave de 32 bytes más una suma de comprobación SHA-256 de 3 bytes, para que una errata falle limpiamente en lugar de producir basura

Respuestas honestas sobre lo que hace esta herramienta

Todo ocurre en tu navegador.

Tanto sellar como abrir leen el archivo en la memoria de esta página, ejecutan ahí AES-256-GCM con el motor WebCrypto integrado en tu navegador y te devuelven el resultado como una descarga. No se sube nada. No hay cuenta ni procesamiento en un servidor. A diferencia del resto de esta web, esta página ni siquiera carga el contador de visitas sin cookies. Ninguna analítica de ningún tipo.

Esto no es solo una promesa. La página se sirve con una Content-Security-Policy que solo permite al navegador descargar los archivos estáticos de esta misma web. No tiene forma de enviar tu archivo, tu clave ni ninguna otra cosa a ningún servidor, incluido el nuestro. Abre las herramientas de desarrollo de tu navegador mientras sellas y verás que no se produce ni una sola petición. Para la prueba más contundente, instala la caja de herramientas y sella en modo avión. Con la red apagada, nada puede salir.

La clave lo es todo, y nosotros nunca la tenemos.

Cada sellado genera en tu navegador una clave aleatoria nueva de 256 bits. Se te muestra una sola vez y no se guarda en ninguna parte: ni en nuestros sistemas (no interviene ninguno), ni en el almacenamiento de tu navegador, ni en el archivo sellado. No hay ninguna frase de acceso que adivinar ni nada a lo que aplicar fuerza bruta. Quien tenga la clave y el archivo puede abrirlo. Quien no, no.

Eso tiene una consecuencia dura: si se pierde la clave, el archivo se pierde. No hay restablecimiento, ni tique de soporte, ni recuperación. No es que no queramos ayudar. Una copia que nosotros pudiéramos recuperar sería una copia que alguien podría robar o exigir.

El enlace de la clave nunca llega a un servidor.

El enlace para compartir pone la clave después del # de la URL. Esa parte, el fragmento, se la queda el navegador. Nunca se incluye en lo que el navegador envía a ningún servidor, ni al nuestro ni al de nadie. Cuando esta página se carga con una clave en el enlace, la lee, cambia a la pestaña Abrir y borra de inmediato la clave de la barra de direcciones. Así no se queda en la URL visible ni en el historial del navegador.

Aun así, cualquiera que tenga a la vez el enlace y el archivo sellado puede abrirlo. Por eso esta página te dice que envíes el archivo y la clave por canales distintos.

Ves lo que hay dentro antes de guardar nada.

Abrir ocurre en dos pasos. Primero la página descifra solo un pequeño manifiesto: el nombre original, el tamaño y el tipo del archivo. Te lo muestra, con un aviso bien visible para los tipos de archivo que pueden ejecutar código (programas, scripts, instaladores, documentos con macros, HTML) y para los nombres disfrazados con una doble extensión, como invoice.pdf.exe. No se escribe nada hasta que pulsas para descifrar. La página nunca abre ni muestra por su cuenta el contenido descifrado. Solo ofrece el archivo para descargarlo.

Ten claro qué demuestra el cifrado y qué no. Un archivo sellado es confidencial mientras viaja. Sellarlo no dice nada sobre quién lo envió ni sobre si su contenido es seguro. Trata un archivo sellado inesperado con el mismo escepticismo que un adjunto inesperado.

Dónde está de verdad la frontera de confianza.

Estás ejecutando código que te ha servido esta web. Si sealby.app o tu conexión con ella estuvieran comprometidos, una página maliciosa podría leer lo que pongas en ella. Esto vale para cualquier herramienta de cifrado basada en la web, y preferimos decirlo antes que fingir lo contrario. Lo que hacemos al respecto: la página es un archivo estático y la mantenemos libre de código de terceros. La caja de herramientas instalada te permite seguir usando una versión que ya has cargado. Y el formato está documentado más abajo, para que se puedan crear herramientas independientes compatibles con él.

Tu propio dispositivo también está dentro de la frontera. Las extensiones de navegador con acceso a la página, o el malware de la máquina, pueden leer todo lo que puede leer cualquier página. El archivo sellado esconde su contenido, pero no todo. Cualquiera que lo tenga puede ver su tamaño (aproximadamente el del original) y que es un archivo sellado por Sealby.

Los límites, en lenguaje llano

  • Clave perdida = archivo perdido. Sin excepciones, por diseño.
  • No podemos ver tus archivos ni tus claves, así que tampoco podemos analizarlos en busca de malware. El aviso sobre el tipo de archivo se basa solo en el nombre del archivo. No es una garantía de seguridad.
  • Cualquiera que tenga a la vez el archivo sellado y la clave puede abrirlo. La herramienta no sabe ni comprueba quién es.
  • El tamaño del archivo sellado revela aproximadamente el del archivo original.
  • Un archivo, de hasta 100 MB, por sellado. Junta varios archivos en un ZIP primero.

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 para abrir un archivo .sealed en treinta líneas de Python:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8versión0x01 — cualquier otro valor se rechaza como «creado con una versión más nueva»
9algoritmo0x01 = AES-256-GCM
10–13sal de sellado4 bytes, CSPRNG, nueva en cada sellado
14–15reservadodebe ser cero
16–fintramas de fragmentoscada una: longitud del texto cifrado en uint32 BE y, a continuación, el texto cifrado AES-GCM + la etiqueta de 16 bytes

El fragmento 0 es el manifiesto: JSON en UTF-8 {"name":…,"size":…,"type":…}. Los fragmentos 1…N−1 son el archivo en piezas de 1 MiB. Para el fragmento i de N: nonce = sal ‖ uint64 BE i; datos autenticados = cabecera ‖ uint64 BE i ‖ uint64 BE N. Así, la manipulación, el truncamiento, el reordenamiento, la reubicación y el injerto entre archivos hacen fallar la autenticación en todos los casos. Cada caso está demostrado por una prueba negativa registrada en el repositorio.

Cadena de la clave: base64url (sin relleno) de la clave de 32 bytes seguida de los 3 primeros bytes de su SHA-256, 47 caracteres en total. Una errata hace fallar la suma de comprobación en lugar de producir basura.

Lector de referencia (Python, biblioteca cryptography)
import base64, hashlib, json, struct, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SEALBY-W" and raw[8] == 1 and raw[9] == 1
assert raw[14:16] == b"\x00\x00"
header, salt = raw[:16], raw[10:14]
frames, off = [], 16
while off < len(raw):
    (n,) = struct.unpack(">I", raw[off:off + 4]); off += 4
    frames.append(raw[off:off + n]); off += n
assert off == len(raw)

kb = base64.urlsafe_b64decode(sys.argv[2] + "=")   # 47-char key string
key, check = kb[:32], kb[32:35]
assert hashlib.sha256(key).digest()[:3] == check    # typo check

N = len(frames)
def chunk(i):
    nonce = salt + struct.pack(">Q", i)
    aad = header + struct.pack(">QQ", i, N)
    return AESGCM(key).decrypt(nonce, frames[i], aad)

manifest = json.loads(chunk(0))
data = b"".join(chunk(i) for i in range(1, N))
assert len(data) == manifest["size"]
open(manifest["name"], "wb").write(data)
print("decrypted ->", manifest["name"])

Esto es para los archivos en tránsito. La caja fuerte es para los archivos en reposo.

Sellar protege un archivo mientras viaja a alguna parte. Sealby protege todo lo que se queda: fotos, archivos y notas en cajas fuertes cifradas en tu iPhone. Sin cuenta, sin servidores, y que nadie más que tú puede leer.

Descargar en el App Store

iPhone y iPad · iOS 17+ · Gratis