Instrument gratuit de confidențialitate
Sigilează un fișier
Criptează un fișier cu o cheie nouă, de unică folosință, și trimite-l prin ce canal vrei. Cine are cheia îl deschide chiar aici, pe această pagină. Nimic nu se încarcă vreodată undeva, nu există nicio frază de acces de spart, iar tu vezi ce e înăuntru înainte să se salveze ceva.
Rulează integral în această filă. Această pagină nu poate comunica deloc cu vreun server.
Se sigilează…
Sigilat.
Acesta este fișierul tău criptat. Fără cheie, nimeni nu îl poate citi. Nici noi, nimeni.
Cheia — afișată doar acum
Această cheie există doar pe această pagină, chiar acum. Nu este stocată sau trimisă nicăieri. Dacă o pierzi, nimeni nu mai poate deschide fișierul, nici noi. Salveaz-o înainte să pleci.
Sau partajează cheia sub formă de link
Cheia stă după # din link. Browserele nu trimit niciodată acea parte către vreun server. Linkul deschide această pagină cu fila Deschide pregătită și cheia completată, apoi elimină cheia din bara de adrese.
Trimite fișierul și cheia separat.
Oricine are și fișierul sigilat, și cheia îl poate deschide. Trimite-le prin canale diferite, de exemplu fișierul pe e-mail și linkul cu cheia prin SMS. Astfel nicio căsuță de mesaje nu le deține pe amândouă.
Cheia a fost citită din linkul tău și eliminată din bara de adrese, ca să rămână în afara istoricului tău.
Se verifică…
În interiorul acestui fișier sigilat
Nu s-a salvat nimic încă. Iată ce spune fișierul sigilat că ar conține:
- Nume
- Dimensiune
- Tip
Atenție — acest tip de fișier poate rula cod pe dispozitivul tău
Decriptat.
Fișierul a fost decriptat pe dispozitivul tău și oferit spre descărcare. Nimic despre el nu a părăsit vreodată această pagină.
De la creatorii Sealby — seiful criptat pentru iPhone
Sealby ține poze, fișiere și notițe în seifuri criptate pe iPhone-ul tău. Fără cont, fără servere, pe care nu le poate citi nimeni în afară de tine.
Fiecare parametru, declarat
- Cifru
- AES-256-GCM (WebCrypto), etichetă de 128 de biți per bloc
- Cheie
- 256 de biți din CSPRNG-ul browserului, generată nouă la fiecare sigilare, folosită o singură dată, derivată din nimic
- Împărțire în blocuri
- un manifest criptat (nume fișier, dimensiune, tip), apoi fișierul în blocuri de 1 MiB — fiecare autentificat separat
- Nonce
- sare de sigilare aleatorie pe 32 de biți ‖ contor de bloc pe 64 de biți — niciodată repetat într-un fișier, iar cheia e oricum de unică folosință
- Date autentificate
- întregul antet de 16 octeți plus indexul fiecărui bloc și numărul total de blocuri — reordonarea, trunchierea sau inserarea de blocuri rupe decriptarea
- Șirul cheii
- base64url, 47 de caractere: cheia de 32 de octeți plus o sumă de control SHA-256 de 3 octeți, astfel încât o greșeală de tastare eșuează curat în loc să producă gunoi
Răspunsuri oneste despre ce face acest instrument
Totul se întâmplă în browserul tău.
Și sigilarea, și deschiderea citesc fișierul în memoria acestei pagini, rulează acolo AES-256-GCM cu motorul WebCrypto integrat al browserului tău și îți returnează rezultatul ca descărcare. Nimic nu se încarcă undeva. Nu există cont și nu există procesare pe server. Spre deosebire de restul acestui site, această pagină nici măcar nu încarcă contorul de vizite fără cookie-uri. Nicio analitică de niciun fel.
Asta nu e doar o promisiune. Pagina este servită cu o Content-Security-Policy care permite browserului să descarce doar fișierele statice ale acestui site. Nu are cum să trimită fișierul tău, cheia ta sau orice altceva către vreun server, inclusiv al nostru. Deschide instrumentele de dezvoltare ale browserului în timp ce sigilezi și vei vedea zero cereri. Pentru cea mai directă dovadă, instalează Toolbox-ul și sigilează în mod avion. Cu rețeaua oprită, nimic nu poate pleca.
Cheia e totul — și noi nu o avem niciodată.
Fiecare sigilare generează în browserul tău o cheie aleatorie nouă, de 256 de biți. Îți este arătată o singură dată și nu este ținută nicăieri: nici în sistemele noastre (niciunul nu e implicat), nici în stocarea browserului tău, nici în fișierul sigilat. Nu există nicio frază de acces de ghicit și nimic de spart prin forță brută. Cine are cheia și fișierul îl poate deschide. Cine nu, nu poate.
Asta are o consecință dură: dacă se pierde cheia, fișierul e pierdut. Nu există resetare, nu există tichet de asistență, nu există recuperare. Nu e vorba că nu vrem să ajutăm. O copie pe care am putea-o recupera ar fi o copie pe care cineva ar putea-o fura sau ar putea-o cere.
Linkul cu cheia nu ajunge niciodată la un server.
Linkul de partajare pune cheia după # din URL. Acea parte, fragmentul, rămâne în browser. Nu este niciodată inclusă în ce trimite browserul către vreun server, al nostru sau al altcuiva. Când această pagină se încarcă cu o cheie în link, citește cheia, comută pe fila Deschide și elimină imediat cheia din bara de adrese. Astfel nu rămâne în URL-ul vizibil sau în istoricul browserului.
Cu toate acestea, oricine are și linkul, și fișierul sigilat îl poate deschide. De aceea pagina îți spune să trimiți fișierul și cheia prin canale diferite.
Vezi ce e înăuntru înainte să se salveze ceva.
Deschiderea se face în doi pași. Întâi pagina decriptează doar un mic manifest: numele original al fișierului, dimensiunea și tipul. Ți-l arată, cu un avertisment apăsat pentru tipurile de fișiere care pot rula cod (programe, scripturi, programe de instalare, documente cu macrocomenzi, HTML) și pentru nume deghizate cu o extensie dublă, precum invoice.pdf.exe. Nu se scrie nimic până nu dai clic pe decriptare. Pagina nu deschide și nu afișează niciodată ea însăși conținutul decriptat. Doar oferă fișierul spre descărcare.
Să fim limpezi în privința a ce dovedește și a ce nu dovedește criptarea. Un fișier sigilat este confidențial în tranzit. Sigilarea nu spune nimic despre cine l-a trimis sau dacă e sigur ce conține. Tratează un fișier sigilat neașteptat la fel de sceptic ca pe un atașament neașteptat.
Unde se află de fapt granița încrederii.
Rulezi cod pe care ți l-a servit acest site. Dacă sealby.app sau conexiunea ta către el ar fi compromise, o pagină malițioasă ar putea citi ce introduci în ea. Asta e valabil pentru orice instrument de criptare bazat pe web, și preferăm să o spunem decât să ne prefacem altfel. Ce facem în privința asta: pagina este un fișier static și o ținem lipsită de cod terț. Toolbox-ul instalat îți permite să folosești mai departe o versiune pe care ai încărcat-o deja. Iar formatul e documentat mai jos, ca să se poată construi instrumente independente pentru el.
Și propriul tău dispozitiv este în interiorul graniței. Extensiile de browser cu acces la pagină, sau programele malițioase de pe dispozitiv, pot citi tot ce poate citi orice pagină. Fișierul sigilat își ascunde conținutul, dar nu tot. Oricine îl are îi poate vedea dimensiunea (aproximativ cea a originalului) și faptul că este un fișier sigilat de Sealby.
Limitele, pe înțelesul tuturor
- Cheie pierdută = fișier pierdut. Fără excepții, prin proiectare.
- Nu îți putem vedea fișierele sau cheile, așa că nici nu le putem scana de programe malițioase. Avertismentul privind tipul de fișier se bazează doar pe numele fișierului. Nu este o garanție de siguranță.
- Oricine are și fișierul sigilat, și cheia îl poate deschide. Instrumentul nu știe și nu verifică cine este.
- Dimensiunea fișierului sigilat dezvăluie aproximativ dimensiunea fișierului original.
- Un fișier, până la 100 MB, la fiecare sigilare. Arhivează mai întâi mai multe fișiere.
Formatul, octet cu octet
Tot ce îi trebuie unui cititor tehnic ca să verifice independent rezultatul acestei pagini sau ca să deschidă un fișier .sealed în treizeci de linii de Python:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | versiune | 0x01 — orice altceva este respins ca fiind „făcut cu o versiune mai nouă” |
| 9 | algoritm | 0x01 = AES-256-GCM |
| 10–13 | sare de sigilare | 4 octeți, CSPRNG, nouă la fiecare sigilare |
| 14–15 | rezervat | trebuie să fie zero |
| 16–final | cadre de blocuri | fiecare: uint32 BE lungimea textului cifrat, apoi textul cifrat AES-GCM + eticheta de 16 octeți |
Blocul 0 este manifestul: JSON UTF-8 {"name":…,"size":…,"type":…}. Blocurile 1…N−1 sunt fișierul în bucăți de 1 MiB. Pentru blocul i din N: nonce = sare ‖ uint64 BE i; date autentificate = antet ‖ uint64 BE i ‖ uint64 BE N. Așa că modificarea, trunchierea, reordonarea, relocarea și inserarea între fișiere eșuează toate la autentificare. Fiecare caz este dovedit printr-un test negativ înregistrat în cod.
Șirul cheii: base64url (fără umplutură) al cheii de 32 de octeți, urmată de primii 3 octeți ai SHA-256-ului ei, 47 de caractere în total. O greșeală de tastare nu trece de suma de control, în loc să producă gunoi.
Specificația completă, exactă la nivel de octet (FORMAT-WEB-v1) ·Vectori de test cu răspuns cunoscut (JSON)
Deschizător de referință (Python, biblioteca 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"])Asta e pentru fișierele în tranzit. Seiful e pentru fișierele în repaus.
Sigilarea protejează un fișier în drumul lui undeva. Sealby protejează tot ce rămâne: poze, fișiere și notițe în seifuri criptate pe iPhone-ul tău. Fără cont, fără servere, pe care nu le poate citi nimeni în afară de tine.
iPhone și iPad · iOS 17+ · Gratuit