Eina de privadesa gratuïta

Xifra un fitxer al navegador

Tria un fitxer, tria una frase de pas i descarrega’n una còpia xifrada. AES-256-GCM, amb la clau derivada al teu navegador. No es puja res i funciona fora de línia un cop carregat. El format està documentat byte a byte més avall, perquè no t’hagis de creure res del que diem.

Funciona íntegrament en aquesta pestanya. No es puja res i, un cop carregada, funciona fora de línia.

Qualsevol fitxer. Els fitxers grans necessiten memòria. Mira els límits honestos de més avall.

No hi ha cap recuperació. Una frase de pas oblidada vol dir un fitxer que ningú, nosaltres inclosos, no podrà obrir mai.

Tots els paràmetres, declarats

Xifratge
AES-256-GCM (WebCrypto), etiqueta de 128 bits
Derivació de clau
PBKDF2-HMAC-SHA-256, 600.000 iteracions
Salt de la KDF
16 bytes, CSPRNG, nou per a cada fitxer
Nonce GCM
12 bytes, CSPRNG, nou per a cada fitxer
Dades autenticades
tota la capçalera de 42 bytes, així que manipular qualsevol paràmetre declarat trenca el desxifratge
Codificació de la frase de pas
UTF-8, normalitzada en NFC (perquè la mateixa frase escrita en qualsevol dispositiu derivi la mateixa clau)

Límits honestos

Aquest no és el format de caixa forta de l’app Sealby. L’app deriva les claus amb Argon2id calibrat per a cada dispositiu, les embolcalla al Secure Enclave i guarda el contingut en contenidors negables partits en blocs. Res de tot això ho pot fer una pàgina web. Aquesta pàgina és una utilitat independent construïda amb el que els navegadors ofereixen de manera nativa.

PBKDF2 no és de memòria intensiva. És l’única funció de derivació de clau que els navegadors porten de sèrie, i 600.000 iteracions fan que cada provatura sigui lenta, però un equip de GPU encara l’ataca molt més de pressa que Argon2id. Per tant, la protecció viu a la teva frase de pas: quatre paraules aleatòries o més, no una contrasenya.

WebCrypto xifra d’una sola passada. No hi ha flux continu, així que tot el fitxer és a la memòria dues o tres vegades alhora mentre es processa. Centenars de megabytes: cap problema en la majoria de dispositius. Per a arxius de diversos gigabytes, fes servir una eina d’escriptori. La sortida xifrada també revela la mida aproximada del fitxer. El nom va xifrat a dins, però la mida no s’amaga.

El format, byte a byte

Tot el que un lector tècnic necessita per verificar la sortida d’aquesta pàgina pel seu compte, o per desxifrar-la en vint línies de Python:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8versió0x01
9algorisme0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iteracionsuint32, big-endian (600.000)
14–29salt16 bytes
30–41nonce12 bytes
42–finaltext xifratAES-256-GCM de la càrrega útil, AAD = bytes 0–41; els 16 bytes finals són l’etiqueta GCM

Càrrega útil abans del xifratge: [longitud del nom de 2 bytes, big-endian][nom del fitxer, UTF-8][bytes del fitxer]. El nom original viatja xifrat; en desxifrar-lo, es restaura.

Desxifrador de referència (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)

Això és la demostració. La caixa forta és el producte.

Un fitxer, una frase de pas, una pàgina. Això és el que pot fer un navegador. Sealby ho fa com cal: Argon2id calibrat per al teu dispositiu, claus al Secure Enclave i caixes fortes ocultes sense cap llista ni recompte desats.

Descarrega-la a l’App Store

iPhone i iPad · iOS 17+ · Gratuït