Nemokamas privatumo įrankis

Užšifruok failą savo naršyklėje

Pasirink failą, susikurk slaptafrazę ir atsisiųsk užšifruotą kopiją. AES-256-GCM, o raktas išvedamas tavo naršyklėje. Niekas neįkeliama į serverį, ir įkėlus puslapį tai veikia be interneto. Formatas žemiau aprašytas baitas po baito, todėl tau nereikia tikėti mūsų žodžiu.

Viskas vyksta šioje kortelėje. Niekas neįkeliama į serverį, ir įkėlus puslapį tai veikia be interneto.

Pasirink failą

Bet koks failas. Dideliems failams reikia atminties. Žr. sąžiningus apribojimus žemiau.

Atkūrimo nėra. Pamiršta slaptafrazė reiškia failą, kurio niekada niekas, net mes, negalės atidaryti.

Kiekvienas parametras – atvirai

Šifras
AES-256-GCM (WebCrypto), 128 bitų žyma
Rakto išvedimas
PBKDF2-HMAC-SHA-256, 600 000 iteracijų
KDF druska
16 baitų, CSPRNG, nauja kiekvienam failui
GCM nonce
12 baitų, CSPRNG, naujas kiekvienam failui
Autentifikuoti duomenys
visa 42 baitų antraštė, todėl bet kurio nurodyto parametro pakeitimas sugadina dešifravimą
Slaptafrazės koduotė
UTF-8, normalizuota NFC (todėl ta pati frazė, įvesta bet kuriame įrenginyje, išveda tą patį raktą)

Sąžiningi apribojimai

Tai nėra Sealby programos seifo formatas. Programa raktus išveda naudodama Argon2id, kalibruotą kiekvienam įrenginiui, apgaubia juos Secure Enclave ir turinį saugo paneigiamuose dalimis suskaidytuose konteineriuose. To tinklalapis padaryti negali. Šis puslapis – savarankiškas įrankis, sukurtas iš to, ką naršyklės siūlo natūraliai.

PBKDF2 nėra atminčiai reikli funkcija. Tai vienintelė rakto išvedimo funkcija, kurią naršyklės siūlo natūraliai, o 600 000 iteracijų kiekvieną spėjimą padaro lėtą, tačiau GPU sistema ją vis tiek puola daug greičiau nei Argon2id. Todėl apsauga slypi tavo slaptafrazėje: keturi ar daugiau atsitiktinių žodžių, o ne slaptažodis.

WebCrypto šifruoja vienu žingsniu. Srautinio apdorojimo nėra, todėl apdorojant visas failas atmintyje laikomas du ar tris kartus. Kelių šimtų megabaitų failai daugumoje įrenginių veikia be problemų. Kelių gigabaitų archyvams naudok stalinio kompiuterio įrankį. Užšifruotas rezultatas taip pat atskleidžia apytikslį failo dydį. Pavadinimas užšifruotas viduje, bet dydis neslepiamas.

Formatas, baitas po baito

Viskas, ko technikui reikia, kad nepriklausomai patikrintų šio puslapio rezultatą arba dešifruotų jį dvidešimtyje Python eilučių:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8versija0x01
9algoritmas0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iteracijosuint32, big-endian (600 000)
14–29druska16 baitų
30–41nonce12 baitų
42–pabaigašifruotas tekstasAES-256-GCM naudingosios apkrovos šifravimas, AAD = baitai 0–41; paskutiniai 16 baitų yra GCM žyma

Naudingoji apkrova prieš šifravimą: [2 baitų pavadinimo ilgis, big-endian][failo pavadinimas, UTF-8][failo baitai]. Originalus failo pavadinimas keliauja užšifruotas; dešifruojant jis atkuriamas.

Pavyzdinis dešifruotojas (Python, cryptography biblioteka)
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)

Tai – demonstracija. Seifas yra produktas.

Vienas failas, viena slaptafrazė, vienas puslapis. Tiek gali naršyklė. Sealby tai daro tinkamai: Argon2id, kalibruotas tavo įrenginiui, raktai Secure Enclave, o paslėptų seifų sąrašas ar skaičius niekur nesaugomas.

Atsisiųsti iš App Store

iPhone ir iPad · iOS 17+ · Nemokama