Darmowe narzędzie prywatności
Zapieczętuj plik
Zaszyfruj plik świeżym, jednorazowym kluczem i wyślij go dowolnym kanałem. Ten, kto ma klucz, otworzy go tutaj, na tej stronie. Nic nigdy nie jest wysyłane na serwer, nie ma frazy hasłowej do złamania, a zawartość widzisz, zanim cokolwiek zostanie zapisane.
Działa w całości w tej karcie. Ta strona w ogóle nie może komunikować się z żadnym serwerem.
Pieczętowanie…
Zapieczętowane.
To twój zaszyfrowany plik. Bez klucza nikt go nie odczyta. Ani my, ani nikt inny.
Klucz — pokazany tylko teraz
Ten klucz istnieje tylko na tej stronie, w tej chwili. Nie jest nigdzie zapisywany ani wysyłany. Jeśli go zgubisz, nikt nie otworzy pliku, łącznie z nami. Zapisz go, zanim stąd wyjdziesz.
Albo udostępnij klucz jako link
Klucz znajduje się po znaku # w linku. Przeglądarki nigdy nie wysyłają tej części do żadnego serwera. Link otwiera tę stronę z gotową kartą Otwórz i wypełnionym kluczem, po czym usuwa klucz z paska adresu.
Wyślij plik i klucz osobno.
Każdy, kto ma zarówno zapieczętowany plik, jak i klucz, może go otworzyć. Wyślij je różnymi kanałami, na przykład plik mailem, a link z kluczem SMS-em. Wtedy żadna pojedyncza skrzynka nigdy nie ma obu.
Klucz odczytany z twojego linku i usunięty z paska adresu, więc nie trafia do twojej historii.
Sprawdzanie…
Wewnątrz tego zapieczętowanego pliku
Nic jeszcze nie zostało zapisane. Oto co zapieczętowany plik deklaruje jako swoją zawartość:
- Nazwa
- Rozmiar
- Typ
Ostrożnie — ten typ pliku może uruchomić kod na twoim urządzeniu
Odszyfrowano.
Plik został odszyfrowany na twoim urządzeniu i udostępniony do pobrania. Nic, co go dotyczy, nigdy nie opuściło tej strony.
Od twórców Sealby — szyfrowanego sejfu na iPhone’a
Sealby trzyma zdjęcia, pliki i notatki w szyfrowanych sejfach na twoim iPhonie. Bez konta, bez serwerów, nieczytelne dla nikogo poza tobą.
Każdy parametr, wyłożony wprost
- Szyfr
- AES-256-GCM (WebCrypto), tag 128-bitowy na fragment
- Klucz
- 256 bitów z CSPRNG przeglądarki, generowany świeżo przy każdym pieczętowaniu, użyty raz, wyprowadzony z niczego
- Fragmentacja
- zaszyfrowany manifest (nazwa pliku, rozmiar, typ), a następnie plik w fragmentach po 1 MiB — każdy uwierzytelniany osobno
- Nonce
- 32-bitowa losowa sól pieczęci ‖ 64-bitowy licznik fragmentów — nigdy nie powtarza się w obrębie pliku, a klucz i tak jest jednorazowy
- Dane uwierzytelniane
- pełny 16-bajtowy nagłówek plus indeks każdego fragmentu i łączna liczba fragmentów — zmiana kolejności, obcięcie lub wklejenie fragmentów psuje odszyfrowanie
- Ciąg klucza
- base64url, 47 znaków: 32-bajtowy klucz plus 3-bajtowa suma kontrolna SHA-256, dzięki czemu literówka kończy się czystym błędem zamiast śmieciami
Uczciwe odpowiedzi na pytanie, co to robi
Wszystko dzieje się w twojej przeglądarce.
Zarówno pieczętowanie, jak i otwieranie wczytują plik do pamięci tej strony, uruchamiają tam AES-256-GCM przy użyciu wbudowanego silnika WebCrypto twojej przeglądarki i oddają wynik jako plik do pobrania. Nic nie jest wysyłane. Nie ma konta ani przetwarzania po stronie serwera. W odróżnieniu od reszty tej witryny ta strona nie wczytuje nawet bezciasteczkowego licznika odwiedzin. Żadnej analityki jakiegokolwiek rodzaju.
To nie jest tylko obietnica. Strona jest serwowana z nagłówkiem Content-Security-Policy, który pozwala przeglądarce pobierać wyłącznie własne statyczne pliki tej witryny. Nie ma jak wysłać twojego pliku, twojego klucza ani czegokolwiek innego na żaden serwer, w tym nasz. Otwórz narzędzia deweloperskie przeglądarki podczas pieczętowania, a zobaczysz zero żądań. Dla najbardziej dosadnego dowodu zainstaluj Skrzynkę narzędzi i zapieczętuj plik w trybie samolotowym. Przy wyłączonej sieci nic nie może wyjść.
Klucz jest wszystkim — a my nigdy go nie mamy.
Każde pieczętowanie generuje w twojej przeglądarce świeży, losowy klucz 256-bitowy. Jest pokazywany raz i nigdzie nie przechowywany: ani w naszych systemach (żadne nie biorą w tym udziału), ani w pamięci twojej przeglądarki, ani w zapieczętowanym pliku. Nie ma frazy hasłowej do zgadnięcia ani niczego do złamania siłowego. Kto ma klucz i plik, ten go otworzy. Kto nie ma, nie otworzy.
To ma twardą konsekwencję: jeśli klucz przepadnie, plik przepada. Nie ma resetu, zgłoszenia do wsparcia ani odzyskiwania. To nie jest nasza nieuprzejmość. Kopia, którą moglibyśmy odzyskać, byłaby kopią, którą ktoś mógłby ukraść albo zażądać.
Link z kluczem nigdy nie dociera do serwera.
Link do udostępnienia umieszcza klucz po znaku # w adresie URL. Ta część, fragment, zostaje w przeglądarce. Nigdy nie wchodzi w skład tego, co przeglądarka wysyła do jakiegokolwiek serwera, naszego czy czyjegokolwiek. Gdy ta strona wczytuje się z kluczem w linku, odczytuje klucz, przełącza się na kartę Otwórz i natychmiast usuwa klucz z paska adresu. Dzięki temu nie zostaje w widocznym URL-u ani w historii przeglądarki.
Mimo to każdy, kto ma i link, i zapieczętowany plik, może go otworzyć. Dlatego ta strona mówi ci, byś wysyłał plik i klucz różnymi kanałami.
Widzisz zawartość, zanim cokolwiek zostanie zapisane.
Otwieranie odbywa się w dwóch krokach. Najpierw strona odszyfrowuje wyłącznie mały manifest: oryginalną nazwę pliku, rozmiar i typ. Pokazuje ci to, z głośnym ostrzeżeniem dla typów plików mogących uruchamiać kod (programy, skrypty, instalatory, dokumenty z makrami, HTML) oraz dla nazw przebranych podwójnym rozszerzeniem w rodzaju invoice.pdf.exe. Nic nie zostaje zapisane, dopóki nie klikniesz, by odszyfrować. Strona nigdy sama nie otwiera ani nie renderuje odszyfrowanej treści. Jedynie udostępnia plik do pobrania.
Miej jasność co do tego, czego szyfrowanie dowodzi, a czego nie. Zapieczętowany plik jest poufny w drodze. Zapieczętowanie nie mówi nic o tym, kto go wysłał ani czy jego zawartość jest bezpieczna. Traktuj niespodziewany zapieczętowany plik tak sceptycznie jak niespodziewany załącznik.
Gdzie naprawdę przebiega granica zaufania.
Uruchamiasz kod, który podała ci ta witryna. Gdyby sealby.app albo twoje połączenie z nim zostały skompromitowane, złośliwa strona mogłaby odczytać to, co w nią wpisujesz. Dotyczy to każdego narzędzia szyfrującego opartego na stronie WWW i wolimy to powiedzieć, niż udawać, że jest inaczej. Co z tym robimy: strona jest plikiem statycznym i trzymamy ją wolną od kodu firm trzecich. Zainstalowana Skrzynka narzędzi pozwala dalej używać wersji, którą już wczytałeś. A format jest opisany poniżej, więc można pod niego zbudować niezależne narzędzia.
Twoje własne urządzenie też jest wewnątrz tej granicy. Rozszerzenia przeglądarki z dostępem do stron albo złośliwe oprogramowanie na komputerze mogą odczytać wszystko, co może odczytać dowolna strona. Zapieczętowany plik ukrywa swoją zawartość, ale nie wszystko. Każdy, kto go ma, widzi jego rozmiar (mniej więcej rozmiar oryginału) i to, że jest plikiem zapieczętowanym przez Sealby.
Ograniczenia bez owijania w bawełnę
- Utracony klucz = utracony plik. Bez wyjątków, z założenia.
- Nie widzimy twoich plików ani kluczy, więc nie możemy też przeskanować ich pod kątem złośliwego oprogramowania. Ostrzeżenie o typie pliku opiera się wyłącznie na nazwie pliku. Nie jest gwarancją bezpieczeństwa.
- Każdy, kto ma zarówno zapieczętowany plik, jak i klucz, może go otworzyć. Narzędzie nie wie i nie sprawdza, kim jest.
- Rozmiar zapieczętowanego pliku z grubsza zdradza rozmiar oryginału.
- Jeden plik, do 100 MB, na jedno pieczętowanie. Wiele plików najpierw spakuj.
Format, bajt po bajcie
Wszystko, czego techniczny czytelnik potrzebuje, by niezależnie zweryfikować wynik tej strony albo otworzyć plik .sealed w trzydziestu liniach Pythona:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | wersja | 0x01 — cokolwiek innego jest odrzucane jako „utworzone nowszą wersją” |
| 9 | algorytm | 0x01 = AES-256-GCM |
| 10–13 | sól pieczęci | 4 bajty, CSPRNG, świeża przy każdym pieczętowaniu |
| 14–15 | zarezerwowane | muszą być zerami |
| 16–koniec | ramki fragmentów | każda: uint32 BE długość szyfrogramu, następnie szyfrogram AES-GCM + 16-bajtowy tag |
Fragment 0 to manifest: JSON w UTF-8 {"name":…,"size":…,"type":…}. Fragmenty 1…N−1 to plik w kawałkach po 1 MiB. Dla fragmentu i z N: nonce = sól ‖ uint64 BE i; dane uwierzytelniane = nagłówek ‖ uint64 BE i ‖ uint64 BE N. Dzięki temu manipulacja, obcięcie, zmiana kolejności, przeniesienie i wklejanie między plikami nie przechodzą uwierzytelniania. Każdy z tych przypadków jest potwierdzony testem negatywnym zapisanym w repozytorium.
Ciąg klucza: base64url (bez wypełnienia) z 32-bajtowego klucza, po którym następują pierwsze 3 bajty jego SHA-256, łącznie 47 znaków. Literówka nie przechodzi sumy kontrolnej, zamiast produkować śmieci.
Pełna, dokładna co do bajtu specyfikacja (FORMAT-WEB-v1) ·Wektory testowe o znanych wynikach (JSON)
Referencyjne narzędzie otwierające (Python, biblioteka 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 jest dla plików w drodze. Sejf jest dla plików w spoczynku.
Pieczętowanie chroni plik, gdy gdzieś zmierza. Sealby chroni wszystko, co zostaje: zdjęcia, pliki i notatki w szyfrowanych sejfach na twoim iPhonie. Bez konta, bez serwerów, nieczytelne dla nikogo poza tobą.
iPhone i iPad · iOS 17+ · Za darmo