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.
Pečetím…
Zapečetěno.
Tohle je tvůj zašifrovaný soubor. Bez klíče ho nikdo nepřečte. Ani my, ani nikdo jiný.
Klíč — zobrazený jen teď
Tenhle klíč existuje jen na téhle stránce, právě teď. Nikam se neukládá ani neodesílá. Když ho ztratíš, soubor neotevře nikdo, nás nevyjímaje. Ulož si ho, než odejdeš.
Nebo sdílej klíč jako odkaz
Klíč sedí v odkazu za znakem #. Tuhle část prohlížeče na žádný server neposílají. Odkaz otevře tuhle stránku s připravenou záložkou Otevřít a vyplněným klíčem a pak klíč z adresního řádku odstraní.
Pošli soubor a klíč zvlášť.
Kdokoli má zároveň zapečetěný soubor i klíč, dokáže ho otevřít. Pošli je různými cestami, třeba soubor e-mailem a odkaz s klíčem esemeskou. Pak nikdy obojí neleží v jedné schránce.
Klíč načtený z tvého odkazu a odstraněný z adresního řádku, ať zůstane mimo tvou historii.
Kontroluji…
Uvnitř tohohle zapečetěného souboru
Zatím se nic neuložilo. Tohle zapečetěný soubor uvádí jako svůj obsah:
- Název
- Velikost
- Typ
Pozor — tenhle typ souboru může ve tvém zařízení spustit kód
Dešifrováno.
Soubor byl dešifrovaný ve tvém zařízení a nabídnutý ke stažení. Nic z něj tuhle stránku nikdy neopustilo.
Od tvůrců Sealby — šifrovaného trezoru pro iPhone
Sealby drží fotky, soubory a poznámky v šifrovaných trezorech ve tvém iPhonu. Žádný účet, žádné servery, čitelné jen pro tebe.
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:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | verze | 0x01 — cokoli jiného se odmítne jako „vytvořeno novější verzí“ |
| 9 | algoritmus | 0x01 = AES-256-GCM |
| 10–13 | sůl zapečetění | 4 bajty, CSPRNG, čerstvá pro každé zapečetění |
| 14–15 | rezervováno | musí být nula |
| 16–konec | rá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.
Úplná bajtově přesná specifikace (FORMAT-WEB-v1) ·Testovací vektory se známými výsledky (JSON)
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.
iPhone a iPad · iOS 17+ · Zdarma