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:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versione | 0x01 |
| 9 | algoritmo | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iterazioni | uint32, big-endian (600.000) |
| 14–29 | salt | 16 byte |
| 30–41 | nonce | 12 byte |
| 42–fine | testo cifrato | AES-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.
iPhone e iPad · iOS 17+ · Gratis