Mjet falas për privatësinë

Enkriptoni një skedar në shfletuesin tuaj

Zgjidhni një skedar dhe një frazëkalim, pastaj shkarkoni një kopje të enkriptuar. AES-256-GCM, me çelësin të derivuar në shfletuesin tuaj. Asgjë nuk ngarkohet dhe, pasi ngarkohet faqja, funksionon jashtë linje. Formati dokumentohet bajt për bajt më poshtë, ndaj nuk keni pse të na besoni verbërisht.

Ekzekutohet tërësisht në këtë skedë. Asgjë nuk ngarkohet dhe, pasi ngarkohet faqja, funksionon jashtë linje.

Zgjidhni një skedar

Çfarëdo skedari. Skedarët e mëdhenj kërkojnë memorie. Shihni kufizimet e sinqerta më poshtë.

Nuk ka rikuperim. Një frazëkalim i harruar do të thotë një skedar që askush, përfshirë ne, nuk mund ta hapë kurrë.

Çdo parametër, i deklaruar

Algoritmi i enkriptimit
AES-256-GCM (WebCrypto), etiketë 128-bitëshe
Derivimi i çelësit
PBKDF2-HMAC-SHA-256, 600,000 përsëritje
Kripa KDF
16 bajte, CSPRNG, e re për çdo skedar
Nonce GCM
12 bajte, CSPRNG, i ri për çdo skedar
Të dhënat e autentikuara
i gjithë kreu prej 42 bajtesh, kështu që ndryshimi i cilitdo parametër të deklaruar e prish dekriptimin
Kodimi i frazëkalimit
UTF-8, i normalizuar me NFC (në mënyrë që i njëjti frazëkalim i shkruar në çdo pajisje të derivojë të njëjtin çelës)

Kufizime të sinqerta

Ky nuk është formati i kasafortës së aplikacionit Sealby. Aplikacioni derivon çelësat me Argon2id të kalibruar për çdo pajisje, i mbështjell në Secure Enclave dhe e ruan përmbajtjen në mbajtës të ndarë në blloqe e të mohueshëm. Një faqe uebi nuk mund të bëjë asgjë nga këto. Kjo faqe është një mjet i pavarur, i ndërtuar mbi atë që shfletuesit ofrojnë vetë.

PBKDF2 nuk është funksion që kërkon shumë memorie. Është i vetmi funksion për derivimin e çelësave që shfletuesit e ofrojnë vetë dhe 600,000 përsëritje e ngadalësojnë çdo hamendësim, por një sistem me GPU e sulmon ende shumë më shpejt se Argon2id. Prandaj mbrojtja qëndron te frazëkalimi juaj: katër ose më shumë fjalë të rastësishme, jo një fjalëkalim.

WebCrypto enkripton me një kalim. Nuk ka transmetim rrjedhës, ndaj i gjithë skedari qëndron në memorie dy deri në tre herë gjatë përpunimit. Qindra megabajte nuk janë problem në shumicën e pajisjeve. Për arkiva me shumë gigabajte, përdorni një mjet desktop. Dalja e enkriptuar zbulon gjithashtu madhësinë e përafërt të skedarit. Emri enkriptohet brenda, por madhësia nuk fshihet.

Formati, bajt për bajt

Gjithçka që i duhet një lexuesi teknik për të verifikuar në mënyrë të pavarur daljen e kësaj faqeje ose për ta dekriptuar në njëzet rreshta Python:

bytesfieldcontents
0–7shenja magjikeASCII "SBXF0001"
8versioni0x01
9algoritmi0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13përsëritjetuint32, big-endian (600,000)
14–29kripa16 bajte
30–41nonce12 bajte
42–funditeksti i enkriptuarAES-256-GCM i përmbajtjes, AAD = bajtet 0–41; 16 bajtet e fundit janë etiketa GCM

Përmbajtja para enkriptimit: [gjatësia 2-bajtëshe e emrit, big-endian][emri i skedarit, UTF-8][bajtet e skedarit]. Emri origjinal i skedarit udhëton i enkriptuar; gjatë dekriptimit rikthehet.

Dekriptues referencë (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)

Ky është demonstrimi. Kasaforta është produkti.

Një skedar, një frazëkalim, një faqe. Kaq mund të bëjë një shfletues. Sealby e bën siç duhet: Argon2id të kalibruar për pajisjen tuaj, çelësa në Secure Enclave dhe kasaforta të fshehura pa listë ose numër të ruajtur.

Shkarkojeni në App Store

iPhone dhe iPad · iOS 17+ · Falas