Strumento gratuito per la privacy

Cifra un file nel tuo browser

Scegli un file, scegli una passphrase e scarica una copia cifrata. AES-256-GCM, con la chiave derivata nel tuo browser. Non viene caricato nulla e funziona offline una volta caricata la pagina. Il formato è documentato byte per byte qui sotto, così non devi crederci sulla parola.

Funziona interamente in questa scheda. Non viene caricato nulla e funziona offline una volta caricata la pagina.

Qualsiasi file. I file grandi richiedono memoria. Vedi i limiti onesti qui sotto.

Non esiste alcun recupero. Una passphrase dimenticata significa un file che nessuno, noi compresi, potrà mai aprire.

Ogni parametro, dichiarato

Cifrario
AES-256-GCM (WebCrypto), tag a 128 bit
Derivazione della chiave
PBKDF2-HMAC-SHA-256, 600.000 iterazioni
Salt del KDF
16 byte, CSPRNG, nuovo per ogni file
Nonce GCM
12 byte, CSPRNG, nuovo per ogni file
Dati autenticati
l’intera intestazione di 42 byte, così manomettere un qualsiasi parametro dichiarato rompe la decifratura
Codifica della passphrase
UTF-8, normalizzata NFC (così la stessa frase digitata su qualsiasi dispositivo deriva la stessa chiave)

Limiti onesti

Questo non è il formato della cassaforte dell’app Sealby. L’app deriva le chiavi con Argon2id calibrato per ogni dispositivo, le avvolge nel Secure Enclave e conserva i contenuti in contenitori negabili suddivisi in blocchi. Nulla di tutto ciò è alla portata di una pagina web. Questa pagina è un’utilità autonoma costruita su ciò che i browser offrono nativamente.

PBKDF2 non è memory-hard. È l’unica funzione di derivazione della chiave che i browser offrono nativamente, e 600.000 iterazioni rendono lento ogni tentativo, ma un impianto GPU lo attacca comunque molto più in fretta di Argon2id. Quindi la protezione vive nella tua passphrase: quattro parole casuali o più, non una password.

WebCrypto cifra in un solo passaggio. Non c’è streaming, quindi durante l’elaborazione l’intero file resta in memoria due o tre volte. Centinaia di megabyte non sono un problema sulla maggior parte dei dispositivi. Per archivi da più gigabyte, usa uno strumento desktop. L’output cifrato rivela inoltre la dimensione approssimativa del file. Il nome è cifrato all’interno, ma la dimensione non è nascosta.

Il formato, byte per byte

Tutto ciò che serve a un lettore tecnico per verificare in autonomia l’output di questa pagina, o per decifrarlo in venti righe di Python:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8versione0x01
9algoritmo0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iterazioniuint32, big-endian (600.000)
14–29salt16 byte
30–41nonce12 byte
42–finetesto cifratoAES-256-GCM del payload, AAD = byte 0–41; gli ultimi 16 byte sono il tag GCM

Payload prima della cifratura: [lunghezza del nome su 2 byte, big-endian][nome del file, UTF-8][byte del file]. Il nome originale viaggia cifrato; alla decifratura viene ripristinato.

Decifratore di riferimento (Python, libreria 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)

Questa è la dimostrazione. La cassaforte è il prodotto.

Un file, una passphrase, una pagina. Ecco cosa può fare un browser. Sealby lo fa per bene: Argon2id calibrato sul tuo dispositivo, chiavi nel Secure Enclave e casseforti nascoste senza alcun elenco o conteggio memorizzato.

Scarica su App Store

iPhone e iPad · iOS 17+ · Gratis