Brezplačno orodje za zasebnost
Zapečati datoteko
Datoteko šifriraj z novim enkratnim ključem in jo pošlji po poljubnem kanalu. Tisti, ki ima ključ, jo odpre kar tukaj, na tej strani. Nič se nikoli ne naloži, ni gesla, ki bi ga bilo mogoče zlomiti, in preden se kar koli shrani, vidiš, kaj je notri.
Teče v celoti v tem zavihku. Ta stran ne more prav nič komunicirati s strežnikom.
Pečatim…
Zapečateno.
To je tvoja šifrirana datoteka. Brez ključa je ne more prebrati nihče. Niti mi, niti kdor koli drug.
Ključ — prikazan samo zdaj
Ta ključ obstaja samo na tej strani, prav zdaj. Nikjer se ne shrani in ne pošlje. Če ga izgubiš, datoteke ne more odpreti nihče, niti mi. Shrani ga, preden odideš.
Ali pa ključ deli kot povezavo
Ključ je za znakom # v povezavi. Brskalniki tega dela nikoli ne pošljejo nobenemu strežniku. Povezava odpre to stran s pripravljenim zavihkom Odpri in vpisanim ključem, nato pa ključ odstrani iz naslovne vrstice.
Datoteko in ključ pošlji ločeno.
Kdor koli ima hkrati zapečateno datoteko in ključ, jo lahko odpre. Pošlji ju po različnih kanalih, na primer datoteko po e-pošti, povezavo s ključem pa s sporočilom SMS. Tako noben nabiralnik nikoli ne drži obojega.
Ključ prebran iz tvoje povezave in odstranjen iz naslovne vrstice, da ostane zunaj tvoje zgodovine.
Preverjam…
V tej zapečateni datoteki
Nič še ni bilo shranjeno. To zapečatena datoteka pravi, da vsebuje:
- Ime
- Velikost
- Vrsta
Previdno — ta vrsta datoteke lahko na tvoji napravi izvaja kodo
Dešifrirano.
Datoteka je bila dešifrirana na tvoji napravi in ponujena v prenos. O njej ni nič nikoli zapustilo te strani.
Od ustvarjalcev Sealbyja — šifriranega trezorja za iPhone
Sealby hrani fotografije, datoteke in zapiske v šifriranih trezorjih na tvojem iPhonu. Brez računa, brez strežnikov, berljivo samo zate.
Vsak parameter, naveden
- Šifra
- AES-256-GCM (WebCrypto), 128-bitna oznaka na kos
- Ključ
- 256 bitov iz brskalnikovega CSPRNG, na novo ustvarjen za vsak pečat, uporabljen enkrat, izpeljan iz ničesar
- Deljenje na kose
- šifriran manifest (ime datoteke, velikost, vrsta), nato datoteka v kosih po 1 MiB — vsak overjen posebej
- Nonce
- 32-bitna naključna sol pečata ‖ 64-bitni števec kosov — znotraj datoteke se nikoli ne ponovi, ključ pa je tako ali tako enkraten
- Overjeni podatki
- celotna 16-bajtna glava ter indeks vsakega kosa in skupno število kosov — prerazvrščanje, krajšanje ali vrivanje kosov zlomi dešifriranje
- Niz ključa
- base64url, 47 znakov: 32-bajtni ključ in 3-bajtna kontrolna vsota SHA-256, tako da tipkarska napaka čisto odpove, namesto da bi dala smeti
Pošteni odgovori o tem, kaj to počne
Vse se zgodi v tvojem brskalniku.
Pečatenje in odpiranje datoteko preberata v pomnilnik te strani, tam poženeta AES-256-GCM z vgrajenim pogonom WebCrypto tvojega brskalnika in rezultat vrneta kot prenos. Nič se ne naloži. Ni računa in ni obdelave na strežniku. Za razliko od preostalega spletnega mesta ta stran ne naloži niti števca obiskov brez piškotkov. Nobene analitike.
To ni le obljuba. Stran je postrežena s pravilnikom Content-Security-Policy, ki brskalniku dovoli pridobivanje samo statičnih datotek s tega spletnega mesta. Nima nobenega načina, da bi tvojo datoteko, tvoj ključ ali kar koli drugega poslala kateremu koli strežniku, tudi našemu ne. Med pečatenjem odpri razvijalska orodja brskalnika in videl boš, da ni nobene zahteve. Za najbolj neposreden dokaz namesti orodjarno in pečati v letalskem načinu. Ko je omrežje izklopljeno, nič ne more oditi.
Ključ je vse — in mi ga nikoli nimamo.
Vsak pečat v tvojem brskalniku ustvari nov naključen 256-bitni ključ. Prikaže se ti enkrat in se ne hrani nikjer: ne v naših sistemih (nobeden ni vpleten), ne v shrambi tvojega brskalnika, ne v zapečateni datoteki. Ni gesla, ki bi ga bilo mogoče uganiti, in ničesar, kar bi bilo mogoče razbiti s silo. Kdor ima ključ in datoteko, jo lahko odpre. Kdor ju nima, ne.
To ima trdo posledico: če se ključ izgubi, je datoteka izgubljena. Ni ponastavitve, ni zahtevka za podporo, ni obnovitve. Nismo neustrežljivi. Kopija, ki bi jo lahko obnovili, bi bila kopija, ki bi jo lahko kdo ukradel ali zahteval.
Povezava s ključem nikoli ne doseže strežnika.
Povezava za deljenje ključ postavi za znak # v naslovu URL. Ta del, fragment, ostane v brskalniku. Nikoli ni vključen v tisto, kar brskalnik pošlje kateremu koli strežniku, ne našemu ne tujemu. Ko se ta stran naloži s ključem v povezavi, ključ prebere, preklopi na zavihek Odpri in ključ takoj odstrani iz naslovne vrstice. Tako ne obtiči v vidnem naslovu ali v zgodovini brskalnika.
Kljub temu lahko datoteko odpre vsak, ki ima hkrati povezavo in zapečateno datoteko. Zato ti ta stran pravi, naj datoteko in ključ pošlješ po različnih kanalih.
Preden se kar koli shrani, vidiš, kaj je notri.
Odpiranje poteka v dveh korakih. Najprej stran dešifrira le majhen manifest: izvirno ime datoteke, velikost in vrsto. To ti pokaže, z glasnim opozorilom za vrste datotek, ki lahko izvajajo kodo (programi, skripti, namestitveni programi, dokumenti z makri, HTML), in za imena, preoblečena z dvojno končnico, kot je invoice.pdf.exe. Nič se ne zapiše, dokler ne klikneš za dešifriranje. Stran dešifrirane vsebine nikoli sama ne odpre ali izriše. Datoteko le ponudi v prenos.
Bodi si na jasnem, kaj šifriranje dokazuje in česa ne. Zapečatena datoteka je zaupna na poti. Samo pečatenje ne pove ničesar o tem, kdo jo je poslal in ali je njena vsebina varna. Nepričakovano zapečateno datoteko obravnavaj tako skeptično kot nepričakovano priponko.
Kje je v resnici meja zaupanja.
Poganjaš kodo, ki ti jo je postreglo to spletno mesto. Če bi bila sealby.app ali tvoja povezava do nje ogrožena, bi zlonamerna stran lahko prebrala, kar vanjo vneseš. To velja za vsako spletno orodje za šifriranje in raje to povemo, kot da bi se delali drugače. Kaj glede tega naredimo: stran je statična datoteka in jo ohranjamo brez kode tretjih oseb. Nameščena orodjarna ti omogoča, da še naprej uporabljaš že naloženo različico. Format pa je dokumentiran spodaj, da je zanj mogoče zgraditi neodvisna orodja.
Znotraj meje je tudi tvoja naprava. Razširitve brskalnika z dostopom do strani ali zlonamerna programska oprema na računalniku lahko preberejo vse, kar lahko prebere katera koli stran. Zapečatena datoteka sicer skrije svojo vsebino, ne pa vsega. Kdor jo ima, vidi njeno velikost (približno velikost izvirnika) in to, da gre za datoteko, zapečateno s Sealbyjem.
Omejitve po domače
- Izgubljen ključ = izgubljena datoteka. Brez izjem, že po zasnovi.
- Tvojih datotek in ključev ne vidimo, zato jih tudi ne moremo pregledati za zlonamerno programsko opremo. Opozorilo o vrsti datoteke temelji le na imenu datoteke. Ni jamstvo varnosti.
- Datoteko lahko odpre vsak, ki ima zapečateno datoteko in ključ. Orodje ne ve in ne preverja, kdo je.
- Velikost zapečatene datoteke približno razkrije velikost izvirne datoteke.
- Ena datoteka, do 100 MB, na pečat. Več datotek najprej stisni v zip.
Format, bajt za bajtom
Vse, kar tehnični bralec potrebuje, da izhod te strani neodvisno preveri ali da datoteko .sealed odpre v tridesetih vrsticah Pythona:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | različica | 0x01 — vse drugo se zavrne kot »ustvarjeno z novejšo različico« |
| 9 | algoritem | 0x01 = AES-256-GCM |
| 10–13 | sol pečata | 4 bajti, CSPRNG, nova za vsak pečat |
| 14–15 | rezervirano | mora biti nič |
| 16–konec | okviri kosov | vsak: uint32 BE dolžina šifropisa, nato šifropis AES-GCM + 16-bajtna oznaka |
Kos 0 je manifest: JSON v UTF-8 {"name":…,"size":…,"type":…}. Kosi 1…N−1 so datoteka v delih po 1 MiB. Za kos i od N: nonce = sol ‖ uint64 BE i; overjeni podatki = glava ‖ uint64 BE i ‖ uint64 BE N. Zato poseg, krajšanje, prerazvrščanje, premikanje in vrivanje med datotekami vsi padejo na overitvi. Vsak primer je dokazan z negativnim testom v izvorni kodi.
Niz ključa: base64url (brez dopolnjevanja) 32-bajtnega ključa, ki mu sledijo prvi 3 bajti njegove vrednosti SHA-256, skupaj 47 znakov. Tipkarska napaka pade na kontrolni vsoti, namesto da bi dala smeti.
Popolna bajtno natančna specifikacija (FORMAT-WEB-v1) ·Testni vektorji z znanimi odgovori (JSON)
Referenčni odpiralnik (Python, knjižnica 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"])To je za datoteke na poti. Trezor je za datoteke v mirovanju.
Pečatenje varuje datoteko na poti nekam. Sealby varuje vse, kar ostane: fotografije, datoteke in zapiske v šifriranih trezorjih na tvojem iPhonu. Brez računa, brez strežnikov, berljivo samo zate.
iPhone in iPad · iOS 17+ · Brezplačno