Безкоштовний інструмент приватності

Зашифруйте файл у своєму браузері

Оберіть файл, задайте парольну фразу й завантажте зашифровану копію. AES-256-GCM, із ключем, виведеним у вашому браузері. Нічого не вивантажується, і після завантаження все працює офлайн. Формат описано нижче побайтово, тож вам не доведеться вірити нам на слово.

Працює цілком у цій вкладці. Нічого не вивантажується, і після завантаження працює офлайн.

Будь-який файл. Великі файли потребують пам’яті. Див. чесні межі нижче.

Відновлення не існує. Забута парольна фраза означає файл, який ніхто, зокрема й ми, ніколи не відкриє.

Кожен параметр — названо

Шифр
AES-256-GCM (WebCrypto), 128-бітний тег
Виведення ключа
PBKDF2-HMAC-SHA-256, 600 000 ітерацій
Сіль KDF
16 байтів, CSPRNG, нова для кожного файлу
Одноразове число GCM
12 байтів, CSPRNG, нове для кожного файлу
Автентифіковані дані
увесь 42-байтовий заголовок, тож підміна будь-якого заявленого параметра ламає розшифрування
Кодування парольної фрази
UTF-8, нормалізація NFC (щоб та сама фраза, набрана на будь-якому пристрої, давала той самий ключ)

Чесні межі

Це не формат сейфа застосунку Sealby. Застосунок виводить ключі за допомогою Argon2id, відкаліброваного під кожен пристрій, загортає їх у Secure Enclave і зберігає вміст у заперечних поблокових контейнерах. Нічого з цього вебсторінка зробити не може. Ця сторінка — самостійна утиліта, побудована на тому, що браузери пропонують нативно.

PBKDF2 не є вимогливим до пам’яті. Це єдина функція виведення ключа, яку браузери постачають нативно, і 600 000 ітерацій роблять кожен здогад повільним, але GPU-установка все одно атакує його значно швидше, ніж Argon2id. Тому захист живе у вашій парольній фразі: чотири випадкових слова або більше, а не пароль.

WebCrypto шифрує за один раз. Потокової обробки немає, тож увесь файл під час роботи лежить у пам’яті у дво- чи триразовому обсязі. Сотні мегабайтів на більшості пристроїв — нормально. Для багатогігабайтних архівів беріть настільний інструмент. Зашифрований результат також розкриває приблизний розмір файлу. Назва зашифрована всередині, але розмір не приховано.

Формат, байт за байтом

Усе, що потрібно технічному читачеві, щоб незалежно перевірити те, що видає ця сторінка, або розшифрувати це двадцятьма рядками Python:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8версія0x01
9алгоритм0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13ітераціїuint32, big-endian (600 000)
14–29сіль16 байтів
30–41одноразове число12 байтів
42–кінецьшифротекстAES-256-GCM корисного навантаження, AAD = байти 0–41; останні 16 байтів — тег GCM

Корисне навантаження до шифрування: [2 байти довжини імені, big-endian][ім’я файлу, UTF-8][байти файлу]. Оригінальна назва файлу мандрує зашифрованою; під час розшифрування вона відновлюється.

Еталонний розшифрувальник (Python, бібліотека 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)

Це демонстрація. Продукт — це сейф.

Один файл, одна парольна фраза, одна сторінка. Ось що вміє браузер. Sealby робить це як слід: Argon2id, відкалібрований під ваш пристрій, ключі в Secure Enclave і приховані сейфи, для яких ніде не зберігається ні перелік, ні кількість.

Завантажити в App Store

iPhone та iPad · iOS 17+ · Безкоштовно