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:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versió | 0x01 |
| 9 | algorisme | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iteracions | uint32, big-endian (600.000) |
| 14–29 | salt | 16 bytes |
| 30–41 | nonce | 12 bytes |
| 42–final | text xifrat | AES-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.
iPhone i iPad · iOS 17+ · Gratuït