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.

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:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8različica0x01 — vse drugo se zavrne kot »ustvarjeno z novejšo različico«
9algoritem0x01 = AES-256-GCM
10–13sol pečata4 bajti, CSPRNG, nova za vsak pečat
14–15rezerviranomora biti nič
16–konecokviri kosovvsak: 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.

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.

Prenesi iz App Stora

iPhone in iPad · iOS 17+ · Brezplačno