Libreng tool para sa privacy

Mag-encrypt ng file sa browser mo

Pumili ng file, magtakda ng passphrase, at mag-download ng encrypted na kopya. AES-256-GCM, na may key na hinango sa browser mo. Walang ina-upload, at gumagana ito offline kapag na-load na. Nakadokumento sa ibaba ang format, bawat byte, kaya hindi mo kailangang basta maniwala sa sinasabi namin.

Ganap na tumatakbo sa tab na ito. Walang ina-upload, at gumagana ito offline kapag na-load na.

Pumili ng file

Anumang file. Kailangan ng memory para sa malalaking file. Tingnan ang tapat na paliwanag ng mga limitasyon sa ibaba.

Walang paraan ng pag-recover. Kapag nakalimutan ang passphrase, wala nang sinuman, pati kami, ang makakabukas sa file kailanman.

Malinaw na nakasaad ang bawat parameter

Cipher
AES-256-GCM (WebCrypto), 128-bit tag
Paghalaw ng key
PBKDF2-HMAC-SHA-256, 600,000 iteration
KDF salt
16 bytes, CSPRNG, bago sa bawat file
GCM nonce
12 bytes, CSPRNG, bago sa bawat file
Authenticated data
ang buong 42-byte header, kaya mabibigo ang pag-decrypt kapag pinakialaman ang alinmang nakasaad na parameter
Encoding ng passphrase
UTF-8, naka-normalize sa NFC (kaya ang parehong pariralang tina-type sa anumang device ay naghahango ng parehong key)

Tapat na paliwanag ng mga limitasyon

Hindi ito ang vault format ng Sealby app. Naghahango ang app ng mga key gamit ang Argon2id na naka-calibrate sa bawat device, binabalot ang mga ito sa Secure Enclave, at iniimbak ang content sa mga container na hinati sa mga chunk at maaaring maikaila ang pag-iral. Walang alinman dito ang kayang gawin ng isang web page. Ang pahinang ito ay isang hiwalay na utility na binuo gamit ang mga likas na kakayahan ng browser.

Hindi memory-hard ang PBKDF2. Ito lang ang key-derivation function na likas na kasama sa mga browser, at pinapabagal ng 600,000 iteration ang bawat hula, pero mas mabilis pa rin itong inaatake ng isang GPU rig kaysa sa Argon2id. Kaya nasa passphrase mo ang proteksiyon: apat o higit pang random na salita, hindi isang password.

Sabay-sabay na ini-encrypt ng WebCrypto ang lahat. Walang streaming, kaya nasa memory ang buong file nang dalawa hanggang tatlong ulit habang pinoproseso. Ayos lang ang daan-daang megabyte sa karamihan sa mga device. Para sa mga archive na maraming gigabyte, gumamit ng desktop tool. Ibinubunyag din ng encrypted na output ang tinatayang laki ng file. Naka-encrypt ang pangalan sa loob, pero hindi nakatago ang laki.

Ang format, bawat byte

Lahat ng kailangan ng isang teknikal na mambabasa upang hiwalay na maberipika ang output ng pahinang ito, o ma-decrypt ito sa dalawampung linya ng Python:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8bersiyon0x01
9algorithm0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13mga iterationuint32, big-endian (600,000)
14–29salt16 bytes
30–41nonce12 bytes
42–endciphertextAES-256-GCM ng payload, AAD = bytes 0–41; ang huling 16 bytes ang GCM tag

Payload bago ang encryption: [2-byte na haba ng pangalan, big-endian][filename, UTF-8][mga byte ng file]. Kasamang naka-encrypt ang orihinal na filename; ibinabalik ito sa pag-decrypt.

Decryptor na sanggunian (Python, cryptography library)
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)

Ito ang demo. Ang vault ang produkto.

Isang file, isang passphrase, isang pahina. Iyan ang kayang gawin ng browser. Ginagawa ito nang maayos ng Sealby: Argon2id na naka-calibrate sa device mo, mga key sa Secure Enclave, at mga nakatagong vault na walang nakaimbak na listahan o bilang.

I-download sa App Store

iPhone at iPad · iOS 17+ · Libre