Besplatni alat za privatnost

Zapečatite datoteku

Šifrirajte datoteku svježim jednokratnim ključem i pošaljite je kanalom kojim želite. Ko god ima ključ, otvorit će je upravo ovdje, na ovoj stranici. Ništa se nikad ne prenosi, nema pristupne fraze koju bi neko probijao, a sadržaj vidite prije nego što se išta spremi.

Radi u cijelosti u ovoj kartici. Ova stranica uopće ne može komunicirati ni s jednim serverom.

Svaki parametar, naveden

Šifra
AES-256-GCM (WebCrypto), 128-bitna oznaka po dijelu
Ključ
256 bitova iz CSPRNG-a pregledača, 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 šta ovo radi

Sve se događa u vašem pregledaču.

I pečaćenje i otvaranje učitavaju datoteku u memoriju ove stranice, tamo pokreću AES-256-GCM ugrađenim WebCrypto pogonom vašeg pregledača i rezultat vraćaju kao preuzimanje. Ništa se ne prenosi. Nema naloga ni obrade na serveru. 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 pregledaču dopušta da dohvati samo statične datoteke same ove stranice. Nema načina da vašu datoteku, vaš ključ ili bilo šta drugo pošalje ijednom serveru, ni našem. Otvorite razvojne alate pregledača dok pečatite i vidjet ćete nula zahtjeva. Za najdirektniji dokaz, instalirajte Alatnicu i pečatite u avionskom režimu. 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 vašem pregledaču stvara svjež nasumičan 256-bitni ključ. Prikazuje vam se jednom i ne čuva se nigdje: ni u našim sistemima (nijedan nije uključen), ni u memoriji vašeg pregledača, ni u zapečaćenoj datoteci. Nema pristupne fraze koju bi se pogađalo ni ičega za probijanje grubom silom. Ko ima ključ i datoteku, može je otvoriti. Ko 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 neko mogao ukrasti ili zatražiti.

Link s ključem nikad ne dolazi do servera.

Link za dijeljenje stavlja ključ iza # u URL-u. Taj dio, fragment, ostaje u pregledaču. Nikad se ne uključuje u ono što pregledač šalje ijednom serveru, ni našem ni ičijem. Kad se ova stranica učita s ključem u linku, 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 historiji pregledača.

Ipak, ko god ima i link i zapečaćenu datoteku, može je otvoriti. Zato vam ova stranica govori da datoteku i ključ šaljete različitim kanalima.

Vidite što je unutra prije nego što se išta spremi.

Otvaranje se odvija u dva koraka. Prvo stranica dešifrira samo mali manifest: originalni naziv, veličinu i vrstu. Pokaže vam 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 kliknete na dešifriranje. Stranica dešifrirani sadržaj nikad sama ne otvara niti prikazuje. Samo nudi datoteku na preuzimanje.

Važno je jasno razumjeti šta šifriranje dokazuje, a šta ne. Zapečaćena je datoteka povjerljiva u prijenosu. Pečaćenje ne govori ništa o tome ko ju je poslao ni je li njen sadržaj siguran. Prema neočekivanoj zapečaćenoj datoteci odnosite se jednako skeptično kao prema neočekivanom privitku.

Gdje je zapravo granica povjerenja.

Pokrećete kod koji vam je poslužila ova web-stranica. Da su sealby.app ili vaša veza s njim kompromitirani, zlonamjerna bi stranica mogla pročitati ono što u nju unosite. To vrijedi za svaki alat za šifriranje na webu i radije ćemo to reći nego se pretvarati. Šta mi činimo povodom toga: stranica je statična datoteka i držimo je bez koda trećih strana. Instalirana Alatnica omogućuje vam da nastavite koristiti verziju koju ste već učitali. A format je dokumentiran niže, pa se prema njemu mogu graditi nezavisni alati.

Unutar granice je i vaš vlastiti uređaj. Proširenja pregledača s pristupom stranicama ili zlonamjerni 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. Ko god je ima, može vidjeti njenu veličinu (otprilike veličinu originala) 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 vaše datoteke ni ključeve, pa ih ne možemo ni skenirati na zlonamjerni softver. Upozorenje o vrsti datoteke temelji se samo na nazivu. Nije jamstvo sigurnosti.
  • Ko god ima i zapečaćenu datoteku i ključ, može je otvoriti. Alat ne zna i ne provjerava ko je to.
  • Veličina zapečaćene datoteke otprilike otkriva veličinu originalne datoteke.
  • Jedna datoteka, do 100 MB, po pečaćenju. Više datoteka prvo zapakirajte u zip.

Format, bajt po bajt

Sve što je tehničkom čitaocu potrebno da nezavisno provjeri rezultat ove stranice ili otvori .sealed datoteku u trideset redova Python koda:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8verzija0x01 — sve ostalo odbija se kao „izrađeno novijom verzijom”
9algoritam0x01 = AES-256-GCM
10–13sol pečata4 bajta, CSPRNG, nova za svako pečaćenje
14–15rezerviranomora biti nula
16–krajokviri dijelovasvaki: uint32 BE dužina š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.

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. Sef je za datoteke u mirovanju.

Pečaćenje štiti datoteku na putu negdje. Sealby štiti sve što ostaje: fotografije, datoteke i bilješke u šifriranim sefovima na vašem iPhoneu. Bez naloga, bez servera, čitljivo samo vama.

Preuzmite u prodavnici App Store

iPhone i iPad · iOS 17+ · Besplatno