Nástroj pro soukromí zdarma

Zapečeť soubor

Zašifruj soubor čerstvým jednorázovým klíčem a pošli ho jakoukoli cestou chceš. Ten, kdo má klíč, ho otevře přímo tady, na téhle stránce. Nic se nikdy nenahrává, není tu žádná fráze k prolomení a co je uvnitř, uvidíš dřív, než se cokoli uloží.

Běží celé v téhle záložce. Tahle stránka nemůže komunikovat s žádným serverem.

Každý parametr, uvedený

Šifra
AES-256-GCM (WebCrypto), 128bitový tag na každý blok
Klíč
256 bitů z CSPRNG prohlížeče, generovaný čerstvě pro každé zapečetění, použitý jednou, neodvozený z ničeho
Dělení na bloky
zašifrovaný manifest (název souboru, velikost, typ) a pak soubor v blocích po 1 MiB — každý autentizovaný zvlášť
Nonce
32bitová náhodná sůl zapečetění ‖ 64bitové počítadlo bloků — v rámci souboru se nikdy neopakuje a klíč je tak jako tak jednorázový
Autentizovaná data
celá 16bajtová hlavička plus index každého bloku a celkový počet bloků — přeházení, useknutí nebo vsunutí bloků rozbije dešifrování
Řetězec klíče
base64url, 47 znaků: 32bajtový klíč plus 3bajtový kontrolní součet SHA-256, takže překlep selže čistě místo toho, aby vznikl nesmysl

Poctivé odpovědi na to, co tohle dělá

Všechno se děje ve tvém prohlížeči.

Pečetění i otevírání načtou soubor do paměti téhle stránky, spustí tam AES-256-GCM pomocí vestavěného enginu WebCrypto tvého prohlížeče a výsledek vrátí jako stahovaný soubor. Nic se nenahrává. Není tu účet ani zpracování na straně serveru. Na rozdíl od zbytku webu tahle stránka nenačítá ani počítadlo návštěv bez cookies. Žádná analytika jakéhokoli druhu.

Není to jen slib. Stránka se doručuje s Content-Security-Policy, která prohlížeči dovolí stahovat jen statické soubory z tohohle webu. Nemá jak poslat tvůj soubor, tvůj klíč ani cokoli jiného na jakýkoli server, náš nevyjímaje. Otevři si při pečetění vývojářské nástroje prohlížeče a uvidíš nula požadavků. Pro ten nejpřímější důkaz si nainstaluj sadu nástrojů a zapečeť v režimu letadlo. S vypnutou sítí nemůže nic odejít.

Klíč je všechno — a my ho nikdy nemáme.

Každé zapečetění vygeneruje ve tvém prohlížeči čerstvý náhodný 256bitový klíč. Zobrazí se ti jednou a neuchovává se nikde: ne v našich systémech (žádné v tom nefigurují), ne v úložišti tvého prohlížeče, ne v zapečetěném souboru. Není tu žádná fráze k uhodnutí a nic, co by šlo prolomit hrubou silou. Kdo má klíč a soubor, otevře ho. Kdo ne, neotevře.

To má tvrdý důsledek: když se klíč ztratí, soubor je pryč. Není žádný reset, žádný ticket na podporu, žádná obnova. Není to tím, že bychom byli nevstřícní. Kopie, kterou bychom uměli obnovit, by byla kopií, kterou by někdo mohl ukrást nebo si vynutit.

Odkaz s klíčem se na server nikdy nedostane.

Odkaz ke sdílení dává klíč za znak # v URL. Tuhle část, fragment, si prohlížeč nechává. Nikdy ji nezahrne do toho, co posílá jakémukoli serveru, našemu ani cizímu. Když se tahle stránka načte s klíčem v odkazu, klíč přečte, přepne na záložku Otevřít a okamžitě ho z adresního řádku odstraní. Tak nezůstane ve viditelné URL ani v historii prohlížeče.

Přesto: kdokoli má zároveň odkaz i zapečetěný soubor, dokáže ho otevřít. Právě proto ti tahle stránka říká, ať soubor a klíč posíláš různými cestami.

Co je uvnitř, uvidíš dřív, než se cokoli uloží.

Otevírání probíhá ve dvou krocích. Nejdřív stránka dešifruje jen malý manifest: původní název, velikost a typ. Ten ti ukáže, s hlasitým varováním u typů souborů, které můžou spustit kód (programy, skripty, instalátory, dokumenty s makry, HTML), a u názvů maskovaných dvojitou příponou jako invoice.pdf.exe. Nic se nezapíše, dokud neklepneš na dešifrování. Stránka dešifrovaný obsah sama nikdy neotevírá ani nezobrazuje. Jen nabídne soubor ke stažení.

Buď si jasný v tom, co šifrování dokazuje a co ne. Zapečetěný soubor je důvěrný po cestě. Zapečetění neříká nic o tom, kdo ho poslal ani jestli je jeho obsah bezpečný. K nečekanému zapečetěnému souboru se chovej stejně skepticky jako k nečekané příloze.

Kde doopravdy leží hranice důvěry.

Spouštíš kód, který ti poslal tenhle web. Kdyby byl sealby.app nebo tvé připojení k němu kompromitované, mohla by škodlivá stránka číst, co do ní vložíš. To platí pro každý webový šifrovací nástroj a raději to řekneme, než abychom předstírali opak. Co s tím děláme: stránka je statický soubor a držíme ji bez kódu třetích stran. Nainstalovaná sada nástrojů ti umožní dál používat verzi, kterou už máš načtenou. A formát je níže zdokumentovaný, aby proti němu šlo postavit nezávislé nástroje.

Uvnitř té hranice je i tvoje vlastní zařízení. Rozšíření prohlížeče s přístupem ke stránkám nebo malware v počítači si přečtou cokoli, co vidí jakákoli stránka. Zapečetěný soubor skrývá svůj obsah, ne však všechno. Kdokoli ho drží, vidí jeho velikost (zhruba velikost originálu) a to, že jde o soubor zapečetěný Sealby.

Meze bez okolků

  • Ztracený klíč = ztracený soubor. Bez výjimek, záměrně.
  • Na tvoje soubory ani klíče nevidíme, takže je taky nemůžeme prověřit na malware. Varování u typu souboru vychází jen z názvu. Není to záruka bezpečnosti.
  • Kdokoli má zapečetěný soubor i klíč, dokáže ho otevřít. Nástroj neví a nekontroluje, kdo to je.
  • Velikost zapečetěného souboru zhruba prozradí velikost původního souboru.
  • Jeden soubor, až 100 MB, na jedno zapečetění. Víc souborů nejdřív zabal do zipu.

Formát, bajt po bajtu

Všechno, co technický čtenář potřebuje k nezávislému ověření výstupu téhle stránky, nebo k otevření souboru .sealed ve třiceti řádcích Pythonu:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8verze0x01 — cokoli jiného se odmítne jako „vytvořeno novější verzí“
9algoritmus0x01 = AES-256-GCM
10–13sůl zapečetění4 bajty, CSPRNG, čerstvá pro každé zapečetění
14–15rezervovánomusí být nula
16–konecrámce blokůkaždý: uint32 BE délka šifrového textu, pak šifrový text AES-GCM + 16bajtový tag

Blok 0 je manifest: JSON v UTF-8 {"name":…,"size":…,"type":…}. Bloky 1…N−1 jsou soubor po kouscích o 1 MiB. Pro blok i z N: nonce = sůl ‖ uint64 BE i; autentizovaná data = hlavička ‖ uint64 BE i ‖ uint64 BE N. Takže pozměnění, useknutí, přeházení, přemístění i vsunutí z jiného souboru vždy selžou při autentizaci. Každý případ je doložen negativním testem zapsaným v repozitáři.

Řetězec klíče: base64url (bez výplně) 32bajtového klíče následovaného prvními 3 bajty jeho SHA-256, celkem 47 znaků. Překlep neprojde kontrolním součtem, místo aby vznikl nesmysl.

Referenční otvírač (Python, knihovna 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"])

Tohle je pro soubory na cestě. Trezor je pro soubory v klidu.

Zapečetění chrání soubor cestou někam. Sealby chrání všechno, co zůstává: fotky, soubory a poznámky v šifrovaných trezorech ve tvém iPhonu. Žádný účet, žádné servery, čitelné jen pro tebe.

Stáhnout v App Storu

iPhone a iPad · iOS 17+ · Zdarma