Besplatni alat za privatnost
Zapečati datoteku
Šifriraj datoteku svježim jednokratnim ključem i pošalji je kanalom kojim želiš. Tko god ima ključ, otvorit će je upravo ovdje, na ovoj stranici. Ništa se nikad ne prenosi, nema pristupne fraze koju bi netko probijao, a sadržaj vidiš prije nego što se išta spremi.
Radi u cijelosti u ovoj kartici. Ova stranica uopće ne može komunicirati ni s jednim poslužiteljem.
Pečatim…
Zapečaćeno.
Ovo je tvoja šifrirana datoteka. Bez ključa je nitko ne može pročitati. Ni mi, ni itko drugi.
Ključ — prikazan samo sada
Ovaj ključ postoji samo na ovoj stranici, upravo sada. Nigdje se ne sprema niti šalje. Izgubiš li ga, nitko ne može otvoriti datoteku, ni mi. Spremi ga prije nego što odeš.
Ili podijeli ključ kao poveznicu
Ključ stoji iza # u poveznici. Preglednici taj dio nikad ne šalju nijednom poslužitelju. Poveznica otvara ovu stranicu s pripremljenom karticom Otvori i upisanim ključem, a zatim uklanja ključ iz adresne trake.
Pošalji datoteku i ključ odvojeno.
Tko god ima i zapečaćenu datoteku i ključ, može je otvoriti. Pošalji ih različitim kanalima, primjerice datoteku e-poštom, a poveznicu s ključem SMS-om. Tako nijedan sandučić nikad ne drži oboje.
Ključ pročitan iz tvoje poveznice i uklonjen iz adresne trake, pa ostaje izvan povijesti.
Provjeravam…
Unutar ove zapečaćene datoteke
Još ništa nije spremljeno. Ovo je ono što zapečaćena datoteka kaže da sadrži:
- Naziv
- Veličina
- Vrsta
Oprez — ova vrsta datoteke može pokrenuti kod na tvom uređaju
Dešifrirano.
Datoteka je dešifrirana na tvom uređaju i ponuđena za preuzimanje. Ništa o njoj nikad nije napustilo ovu stranicu.
Od tvoraca Sealbyja — šifriranog trezora za iPhone
Sealby drži fotografije, datoteke i bilješke u šifriranim trezorima na tvom iPhoneu. Bez računa, bez poslužitelja, čitljivo samo tebi.
Svaki parametar, naveden
- Šifra
- AES-256-GCM (WebCrypto), 128-bitna oznaka po dijelu
- Ključ
- 256 bitova iz CSPRNG-a preglednika, svjež za svako pečaćenje, upotrijebljen jednom, ni iz čega izveden
- Podjela na dijelove
- šifrirani manifest (naziv, veličina, vrsta), pa datoteka u dijelovima od 1 MiB — svaki zasebno autenticiran
- Nonce
- 32-bitna nasumična sol pečata ‖ 64-bitni brojač dijelova — nikad se ne ponavlja unutar datoteke, a ključ je ionako jednokratan
- Autenticirani podaci
- cijelo zaglavlje od 16 bajtova plus indeks svakog dijela i ukupan broj dijelova — presloživanje, odsijecanje ili spajanje dijelova onemogućuje dešifriranje
- Znakovni zapis ključa
- base64url, 47 znakova: 32-bajtni ključ plus 3-bajtna SHA-256 kontrolna suma, pa tipfeler uredno padne umjesto da proizvede smeće
Pošteni odgovori o tome što ovo radi
Sve se događa u tvom pregledniku.
I pečaćenje i otvaranje učitavaju datoteku u memoriju ove stranice, ondje pokreću AES-256-GCM ugrađenim WebCrypto pogonom tvog preglednika i rezultat vraćaju kao preuzimanje. Ništa se ne prenosi. Nema računa ni obrade na poslužitelju. Za razliku od ostatka ove stranice, ova ne učitava čak ni brojač posjeta bez kolačića. Nikakva analitika.
Ovo nije samo obećanje. Stranica se poslužuje s Content-Security-Policyjem koji pregledniku dopušta da dohvati samo statične datoteke same ove stranice. Nema načina da tvoju datoteku, tvoj ključ ili bilo što drugo pošalje ijednom poslužitelju, ni našem. Otvori razvojne alate preglednika dok pečatiš i vidjet ćeš nula zahtjeva. Za najizravniji dokaz, instaliraj Alatnicu i pečati u zrakoplovnom načinu rada. S isključenom mrežom ništa ne može izaći.
Ključ je sve — a mi ga nikad nemamo.
Svako pečaćenje u tvom pregledniku stvara svjež nasumičan 256-bitni ključ. Prikazuje ti se jednom i ne čuva se nigdje: ni u našim sustavima (nijedan nije uključen), ni u pohrani tvog preglednika, ni u zapečaćenoj datoteci. Nema pristupne fraze koju bi se pogađalo ni ičega za probijanje grubom silom. Tko ima ključ i datoteku, može je otvoriti. Tko nema, ne može.
To ima tvrdu posljedicu: izgubi li se ključ, datoteka je nepovratno izgubljena. Nema poništavanja, prijave podršci ni oporavka. Nismo mi neuslužni. Kopija koju bismo mi mogli vratiti bila bi kopija koju bi netko mogao ukrasti ili zatražiti.
Poveznica s ključem nikad ne dolazi do poslužitelja.
Poveznica za dijeljenje stavlja ključ iza # u URL-u. Taj dio, fragment, ostaje u pregledniku. Nikad se ne uključuje u ono što preglednik šalje ijednom poslužitelju, ni našem ni ičijem. Kad se ova stranica učita s ključem u poveznici, ona ključ pročita, prebaci se na karticu Otvori i odmah ukloni ključ iz adresne trake. Tako ne ostaje u vidljivom URL-u ni u povijesti preglednika.
Ipak, tko god ima i poveznicu i zapečaćenu datoteku, može je otvoriti. Zato ti ova stranica govori da datoteku i ključ šalješ različitim kanalima.
Vidiš što je unutra prije nego što se išta spremi.
Otvaranje se odvija u dva koraka. Prvo stranica dešifrira samo mali manifest: izvorni naziv, veličinu i vrstu. Pokaže ti to, uz glasno upozorenje za vrste datoteka koje mogu pokrenuti kod (programi, skripte, instalacijski programi, dokumenti s makronaredbama, HTML) i za nazive prerušene dvostrukim nastavkom poput invoice.pdf.exe. Ništa se ne zapisuje dok ne klikneš na dešifriranje. Stranica dešifrirani sadržaj nikad sama ne otvara niti prikazuje. Samo nudi datoteku na preuzimanje.
Budi načisto s time što šifriranje dokazuje, a što ne. Zapečaćena je datoteka povjerljiva u prijenosu. Pečaćenje ne govori ništa o tome tko ju je poslao ni je li njezin sadržaj siguran. Prema neočekivanoj zapečaćenoj datoteci budi jednako skeptičan kao prema neočekivanom privitku.
Gdje je zapravo granica povjerenja.
Pokrećeš kod koji ti je poslužila ova web-stranica. Da su sealby.app ili tvoja veza s njim kompromitirani, zlonamjerna bi stranica mogla pročitati ono što u nju unosiš. To vrijedi za svaki alat za šifriranje na webu i radije ćemo to reći nego se pretvarati. Što mi činimo povodom toga: stranica je statična datoteka i držimo je bez koda trećih strana. Instalirana Alatnica omogućuje ti da nastaviš koristiti verziju koju si već učitao. A format je dokumentiran niže, pa se prema njemu mogu graditi neovisni alati.
Unutar granice je i tvoj vlastiti uređaj. Proširenja preglednika s pristupom stranicama ili zloćudni softver na uređaju mogu pročitati sve što može bilo koja stranica. Zapečaćena datoteka skriva svoj sadržaj, ali ne sve. Tko god je ima, može vidjeti njezinu veličinu (otprilike veličinu izvornika) i to da je riječ o Sealbyjevoj zapečaćenoj datoteci.
Ograničenja, jednostavnim riječima
- Izgubljen ključ = izgubljena datoteka. Bez iznimke, po dizajnu.
- Ne možemo vidjeti tvoje datoteke ni ključeve, pa ih ne možemo ni skenirati na zloćudni softver. Upozorenje o vrsti datoteke temelji se samo na nazivu. Nije jamstvo sigurnosti.
- Tko god ima i zapečaćenu datoteku i ključ, može je otvoriti. Alat ne zna i ne provjerava tko je to.
- Veličina zapečaćene datoteke otprilike otkriva veličinu izvorne datoteke.
- Jedna datoteka, do 100 MB, po pečaćenju. Više datoteka prvo zapakiraj u zip.
Format, bajt po bajt
Sve što tehnički čitatelj treba da neovisno provjeri ispis ove stranice, ili da .sealed datoteku otvori u trideset redaka Pythona:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | verzija | 0x01 — sve ostalo odbija se kao „izrađeno novijom verzijom” |
| 9 | algoritam | 0x01 = AES-256-GCM |
| 10–13 | sol pečata | 4 bajta, CSPRNG, nova za svako pečaćenje |
| 14–15 | rezervirano | mora biti nula |
| 16–kraj | okviri dijelova | svaki: uint32 BE duljina šifrata, pa AES-GCM šifrat + 16-bajtna oznaka |
Dio 0 je manifest: UTF-8 JSON {"name":…,"size":…,"type":…}. Dijelovi 1…N−1 su datoteka u komadima od 1 MiB. Za dio i od N: nonce = sol ‖ uint64 BE i; autenticirani podaci = zaglavlje ‖ uint64 BE i ‖ uint64 BE N. Pa diranje, odsijecanje, presložavanje, premještanje i spajanje između datoteka svi padaju na autentikaciji. Svaki je slučaj dokazan predanim negativnim testom.
Znakovni zapis ključa: base64url (bez dopune) 32-bajtnog ključa nakon kojeg slijede prva 3 bajta njegova SHA-256, ukupno 47 znakova. Tipfeler pada na kontrolnoj sumi umjesto da proizvede smeće.
Potpuna specifikacija točna do bajta (FORMAT-WEB-v1) ·Testni vektori s poznatim odgovorima (JSON)
Referentni otvarač (Python, biblioteka 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"])Ovo je za datoteke u prijenosu. Trezor je za datoteke u mirovanju.
Pečaćenje štiti datoteku na putu nekamo. Sealby štiti sve što ostaje: fotografije, datoteke i bilješke u šifriranim trezorima na tvom iPhoneu. Bez računa, bez poslužitelja, čitljivo samo tebi.
iPhone i iPad · iOS 17+ · Besplatno