Darmowe narzędzie prywatności

Zaszyfruj plik w przeglądarce

Wybierz plik, wybierz frazę hasłową i pobierz zaszyfrowaną kopię. AES-256-GCM, z kluczem wyprowadzonym w twojej przeglądarce. Nic nie jest wysyłane, a po wczytaniu działa offline. Format jest opisany bajt po bajcie poniżej, więc niczego nie musisz brać na słowo.

Działa w całości w tej karcie. Nic nie jest wysyłane, a po wczytaniu działa offline.

Dowolny plik. Duże pliki potrzebują pamięci. Zobacz uczciwe ograniczenia poniżej.

Nie ma odzyskiwania. Zapomniana fraza hasłowa oznacza plik, którego nikt, łącznie z nami, nigdy nie otworzy.

Każdy parametr, wyłożony wprost

Szyfr
AES-256-GCM (WebCrypto), tag 128-bitowy
Wyprowadzanie klucza
PBKDF2-HMAC-SHA-256, 600 000 iteracji
Sól KDF
16 bajtów, CSPRNG, świeża dla każdego pliku
Nonce GCM
12 bajtów, CSPRNG, świeży dla każdego pliku
Dane uwierzytelniane
cały 42-bajtowy nagłówek, więc manipulacja przy dowolnym zadeklarowanym parametrze psuje odszyfrowanie
Kodowanie frazy hasłowej
UTF-8, znormalizowane NFC (dzięki czemu ta sama fraza wpisana na dowolnym urządzeniu daje ten sam klucz)

Uczciwe ograniczenia

To nie jest format sejfu z aplikacji Sealby. Aplikacja wyprowadza klucze Argon2id skalibrowanym pod każde urządzenie, opakowuje je w Secure Enclave i trzyma treść w zaprzeczalnych, dzielonych na fragmenty kontenerach. Strona internetowa nie potrafi nic z tego. Ta strona to samodzielne narzędzie zbudowane na tym, co przeglądarki oferują natywnie.

PBKDF2 nie wymaga dużo pamięci. To jedyna funkcja wyprowadzania klucza, którą przeglądarki dostarczają natywnie, a 600 000 iteracji spowalnia każdą próbę, ale maszyna z GPU wciąż atakuje ją znacznie szybciej niż Argon2id. Ochrona leży więc w twojej frazie hasłowej: cztery losowe słowa albo więcej, a nie hasło.

WebCrypto szyfruje jednym zamachem. Nie ma strumieniowania, więc cały plik siedzi w pamięci dwa–trzy razy naraz podczas przetwarzania. Setki megabajtów są w porządku na większości urządzeń. Do wielogigabajtowych archiwów użyj narzędzia desktopowego. Zaszyfrowany wynik ujawnia też przybliżony rozmiar pliku. Nazwa jest zaszyfrowana w środku, ale rozmiar nie jest ukryty.

Format, bajt po bajcie

Wszystko, czego techniczny czytelnik potrzebuje, by niezależnie zweryfikować wynik tej strony albo odszyfrować go w dwudziestu liniach Pythona:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8wersja0x01
9algorytm0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iteracjeuint32, big-endian (600 000)
14–29sól16 bajtów
30–41nonce12 bajtów
42–koniecszyfrogramAES-256-GCM ładunku, AAD = bajty 0–41; ostatnie 16 bajtów to tag GCM

Ładunek przed zaszyfrowaniem: [2-bajtowa długość nazwy, big-endian][nazwa pliku, UTF-8][bajty pliku]. Oryginalna nazwa pliku podróżuje zaszyfrowana; przy odszyfrowaniu jest przywracana.

Referencyjny deszyfrator (Python, biblioteka cryptography)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0]          # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42])     # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)

To jest demo. Produktem jest sejf.

Jeden plik, jedna fraza hasłowa, jedna strona. Tyle potrafi przeglądarka. Sealby robi to porządnie: Argon2id skalibrowany pod twoje urządzenie, klucze w Secure Enclave i ukryte sejfy bez żadnej przechowywanej listy ani ich liczby.

Pobierz w App Store

iPhone i iPad · iOS 17+ · Za darmo