Gratis privatlivsværktøj

Forsegl en fil

Krypter en fil under en frisk engangsnøgle, og send den gennem præcis den kanal, du vil. Den, der har nøglen, åbner den lige her på denne side. Intet uploades nogensinde, der er ingen adgangssætning at knække, og du ser, hvad der er indeni, før noget gemmes.

Kører udelukkende i denne fane. Denne side kan slet ikke tale med nogen server.

Hver parameter, oplyst

Ciffer
AES-256-GCM (WebCrypto), 128-bit tag pr. blok
Nøgle
256 bit fra browserens CSPRNG, genereret på ny pr. forsegling, brugt én gang, afledt af ingenting
Opdeling
et krypteret manifest (filnavn, størrelse, type) og derefter filen i blokke på 1 MiB — hver autentificeret for sig
Nonce
32-bit tilfældigt forseglingssalt ‖ 64-bit bloktæller — gentages aldrig inden for en fil, og nøglen er alligevel til engangsbrug
Autentificerede data
hele den 16 byte store header plus hver bloks indeks og det samlede antal blokke — at ombytte, afkorte eller splejse blokke ødelægger dekrypteringen
Nøglestreng
base64url, 47 tegn: den 32 byte store nøgle plus en 3 byte SHA-256-kontrolsum, så en tastefejl fejler rent i stedet for at give volapyk

Ærlige svar om, hvad dette gør

Alt sker i din browser.

Både forsegling og åbning læser filen ind i denne sides hukommelse, kører AES-256-GCM dér med din browsers indbyggede WebCrypto-motor og giver resultatet tilbage som en download. Intet uploades. Der er ingen konto og ingen behandling på serversiden. I modsætning til resten af dette websted indlæser denne side ikke engang den cookiefri besøgstæller. Ingen analytics overhovedet.

Det er ikke bare et løfte. Siden serveres med en Content-Security-Policy, der kun lader browseren hente dette websteds egne statiske filer. Den har ingen mulighed for at sende din fil, din nøgle eller noget andet til nogen server, heller ikke vores. Åbn din browsers udviklerværktøjer, mens du forsegler, og du vil se nul forespørgsler. For det mest håndgribelige bevis: installér værktøjskassen, og forsegl i flytilstand. Med netværket slukket kan intet forlade enheden.

Nøglen er alt — og vi har den aldrig.

Hver forsegling genererer en frisk, tilfældig 256-bit nøgle i din browser. Den vises for dig én gang og opbevares ingen steder: ikke i vores systemer (ingen er involveret), ikke i din browsers lager, ikke i den forseglede fil. Der er ingen adgangssætning at gætte og intet at brute-force. Den, der har nøglen og filen, kan åbne den. Den, der ikke har, kan ikke.

Det har en hård konsekvens: mistes nøglen, er filen væk. Der er ingen nulstilling, ingen supportsag, ingen gendannelse. Det er ikke, fordi vi er uvillige til at hjælpe. En kopi, vi kunne gendanne, ville være en kopi, nogen kunne stjæle eller kræve udleveret.

Nøglelinket når aldrig en server.

Delingslinket lægger nøglen efter # i URL’en. Den del, fragmentet, bliver i browseren. Den indgår aldrig i det, browseren sender til nogen server, hverken vores eller andres. Når denne side indlæses med en nøgle i linket, læser den nøglen, skifter til fanen Åbn og fjerner straks nøglen fra adresselinjen. Så den bliver ikke hængende i den synlige URL eller i browserhistorikken.

Alligevel kan alle, der har både linket og den forseglede fil, åbne den. Derfor siger denne side, at du skal sende filen og nøglen gennem forskellige kanaler.

Du ser indholdet, før noget gemmes.

At åbne sker i to trin. Først dekrypterer siden kun et lille manifest: det oprindelige filnavn, størrelse og type. Det viser den til dig, med en tydelig advarsel for filtyper, der kan køre kode (programmer, scripts, installationsprogrammer, makrodokumenter, HTML), og for navne forklædt med en dobbelt filendelse som invoice.pdf.exe. Intet skrives, før du klikker for at dekryptere. Siden åbner eller viser aldrig selv det dekrypterede indhold. Den tilbyder kun filen som download.

Vær klar over, hvad kryptering beviser og ikke beviser. En forseglet fil er fortrolig undervejs. Forseglingen siger intet om, hvem der sendte den, eller om indholdet er sikkert. Behandl en uventet forseglet fil lige så skeptisk som en uventet vedhæftet fil.

Hvor tillidsgrænsen i virkeligheden går.

Du kører kode, dette websted har serveret til dig. Hvis sealby.app eller din forbindelse til det blev kompromitteret, kunne en ondsindet side læse det, du lægger ind i den. Det gælder ethvert webbaseret krypteringsværktøj, og det siger vi hellere end at lade som om. Hvad vi gør ved det: siden er en statisk fil, og vi holder den fri for tredjepartskode. Den installerede værktøjskasse lader dig blive ved med at bruge en version, du allerede har indlæst. Og formatet er dokumenteret herunder, så uafhængige værktøjer kan bygges mod det.

Din egen enhed er også inden for grænsen. Browserudvidelser med sideadgang, eller malware på maskinen, kan læse alt, hvad enhver side kan. Den forseglede fil skjuler sit indhold, men ikke alt. Alle, der har den, kan se dens størrelse (omtrent originalens) og at det er en Sealby-forseglet fil.

Begrænsninger i klar tale

  • Mistet nøgle = mistet fil. Ingen undtagelser, sådan er det designet.
  • Vi kan ikke se dine filer eller nøgler, så vi kan heller ikke scanne dem for malware. Advarslen om filtype er kun baseret på filnavnet. Den er ikke en sikkerhedsgaranti.
  • Alle med både den forseglede fil og nøglen kan åbne den. Værktøjet hverken ved eller tjekker, hvem de er.
  • Den forseglede fils størrelse afslører groft den oprindelige fils størrelse.
  • Én fil, op til 100 MB, pr. forsegling. Pak flere filer som zip først.

Formatet, byte for byte

Alt, hvad en teknisk læser skal bruge for selv at verificere denne sides output eller åbne en .sealed-fil på tredive linjer Python:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8version0x01 — alt andet afvises som »lavet med en nyere version«
9algoritme0x01 = AES-256-GCM
10–13forseglingssalt4 byte, CSPRNG, nyt pr. forsegling
14–15reserveretskal være nul
16–slutblokrammerhver: uint32 BE chiffertekstlængde, derefter AES-GCM-chifferteksten + 16 byte tag

Blok 0 er manifestet: UTF-8-JSON {"name":…,"size":…,"type":…}. Blok 1…N−1 er filen i stykker på 1 MiB. Pr. blok i af N: nonce = salt ‖ uint64 BE i; autentificerede data = header ‖ uint64 BE i ‖ uint64 BE N. Så manipulation, afkortning, ombytning, flytning og splejsning på tværs af filer fejler alle autentificeringen. Hvert tilfælde er bevist af en committet negativ test.

Nøglestreng: base64url (uden udfyldning) af den 32 byte store nøgle efterfulgt af de første 3 byte af dens SHA-256, 47 tegn i alt. En tastefejl fejler kontrolsummen i stedet for at give volapyk.

Referenceåbner (Python, cryptography-biblioteket)
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"])

Dette er til filer undervejs. Boksen er til filer, der bliver liggende.

Forsegling beskytter en fil på vej et sted hen. Sealby beskytter alt det, der bliver: billeder, filer og noter i krypterede bokse på din iPhone. Ingen konto, ingen servere, læsbart for ingen andre end dig.

Hent i App Store

iPhone & iPad · iOS 17+ · Gratis