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.
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ų:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versija | 0x01 |
| 9 | algoritmas | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iteracijos | uint32, big-endian (600 000) |
| 14–29 | druska | 16 baitų |
| 30–41 | nonce | 12 baitų |
| 42–pabaiga | šifruotas tekstas | AES-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.
iPhone ir iPad · iOS 17+ · Nemokama