Безплатен инструмент за поверителност

Запечатайте файл

Шифровайте файл с нов еднократен ключ и го изпратете по избран от вас канал. Който държи ключа, го отваря тук, на тази страница. Нищо не се качва, няма парола за разбиване и виждате съдържанието, преди да се запише каквото и да било.

Работи изцяло в този раздел. Страницата изобщо не може да се свързва със сървър.

Всички параметри, без премълчаване

Шифър
AES-256-GCM (WebCrypto), 128-битов таг за всяка част
Ключ
256 бита от CSPRNG на браузъра, генерирани наново при всяко запечатване, използвани веднъж, без извличане от друга стойност
Разделяне
шифрован манифест (име, размер, тип), после файлът на части от 1 MiB — всяка удостоверена отделно
Nonce
32-битова случайна сол за запечатването ‖ 64-битов брояч на частите — никога не се повтаря във файла, а ключът така или иначе е еднократен
Удостоверени данни
пълната 16-байтова заглавка плюс индексът на всяка част и общият им брой — пренареждане, съкращаване или съединяване на части проваля дешифрирането
Низ на ключа
base64url, 47 знака: 32-байтовият ключ плюс 3-байтова SHA-256 контролна сума, така че печатна грешка да се открие чисто, вместо да създаде безсмислен резултат

Откровени отговори за действието на инструмента

Всичко се извършва в браузъра ви.

И запечатването, и отварянето прочитат файла в паметта на страницата, изпълняват там AES-256-GCM чрез вградената WebCrypto система на браузъра и връщат резултата като изтегляне. Нищо не се качва. Няма акаунт и обработка на сървър. За разлика от останалата част на сайта, страницата не зарежда дори брояча на посещения без бисквитки. Няма никакви анализи.

Това не е просто обещание. Страницата се предоставя с Content-Security-Policy, която позволява на браузъра да изтегля само собствените статични файлове на този сайт. Тя няма начин да изпрати файла, ключа или друго към който и да е сървър, включително наш. Отворете инструментите за разработчици на браузъра по време на запечатване и ще видите нула заявки. За най-категорично доказателство инсталирайте Toolbox и запечатвайте в самолетен режим. При изключена мрежа нищо не може да напусне устройството.

Ключът е всичко — и ние никога не го притежаваме.

Всяко запечатване генерира нов случаен 256-битов ключ в браузъра ви. Той се показва веднъж и не се пази никъде: нито в наши системи (не участват такива), нито в хранилището на браузъра, нито в запечатания файл. Няма парола за отгатване и нищо за грубо изпробване. Който има ключа и файла, може да го отвори. Който няма и двете — не може.

Това има сурова последица: ако ключът се изгуби, файлът е изгубен. Няма нулиране, заявка до поддръжката или възстановяване. Не става дума за липса на съдействие. Копие, което ние можем да възстановим, е копие, което някой може да открадне или изиска.

Връзката с ключа никога не достига до сървър.

Връзката за споделяне поставя ключа след # в URL адреса. Тази част — фрагментът — остава в браузъра. Тя никога не се включва в данните, които браузърът изпраща към наш или чужд сървър. Когато страницата се зареди с ключ във връзката, тя го прочита, превключва към раздела „Отваряне“ и веднага го премахва от адресната лента. Така ключът не остава във видимия URL адрес или историята на браузъра.

Все пак всеки, който има и връзката, и запечатания файл, може да го отвори. Затова страницата ви казва да изпращате файла и ключа по различни канали.

Виждате съдържанието, преди да се запише каквото и да било.

Отварянето протича на две стъпки. Първо страницата дешифрира само малък манифест: оригиналното име, размера и типа на файла. Показва ги с ясно предупреждение за типове, които могат да изпълняват код (програми, скриптове, инсталатори, документи с макроси, HTML), и за имена, прикрити с двойно разширение като invoice.pdf.exe. Нищо не се записва, докато не щракнете за дешифриране. Страницата никога не отваря и не визуализира самото дешифрирано съдържание. Тя само предлага файла за изтегляне.

Важно е да е ясно какво доказва и какво не доказва шифроването. Запечатаният файл е поверителен при прехвърляне. Запечатването не казва нищо за подателя или безопасността на съдържанието. Отнасяйте се към неочакван запечатан файл със същото недоверие като към неочакван прикачен файл.

Къде всъщност е границата на доверието.

Изпълнявате код, предоставен от този сайт. Ако sealby.app или връзката ви с него бъде компрометирана, злонамерена страница може да прочете това, което поставяте в нея. Това важи за всеки уеб инструмент за шифроване и предпочитаме да го кажем, вместо да се преструваме на обратното. Нашите мерки: страницата е статичен файл и не съдържа код на трети страни. Инсталираният Toolbox ви позволява да използвате вече заредена версия. Форматът е документиран по-долу, така че за него могат да се създадат независими инструменти.

Собственото ви устройство също е в границата. Разширения на браузъра с достъп до страницата или зловреден софтуер на машината могат да прочетат всичко, което може и страницата. Запечатаният файл скрива съдържанието, но не всичко. Всеки, който го държи, вижда размера му (приблизително колкото оригинала) и че е запечатан от Sealby.

Ограничения на ясен език

  • Изгубен ключ = изгубен файл. Без изключения, по замисъл.
  • Не виждаме файловете или ключовете ви, затова не можем и да ги сканираме за зловреден софтуер. Предупреждението за типа се основава само на името на файла. То не е гаранция за безопасност.
  • Всеки, който има и запечатания файл, и ключа, може да го отвори. Инструментът не знае и не проверява кой е този човек.
  • Размерът на запечатания файл приблизително разкрива размера на оригинала.
  • Един файл до 100 MB на запечатване. Първо съберете няколко файла в zip.

Форматът, байт по байт

Всичко необходимо на технически читател, за да провери независимо резултата от страницата или да отвори .sealed файл с тридесет реда Python:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8версия0x01 — всичко друго се отхвърля като „създадено с по-нова версия“
9алгоритъм0x01 = AES-256-GCM
10–13сол на запечатването4 байта, CSPRNG, нова за всяко запечатване
14–15запазенотрябва да е нула
16–крайрамки на частитевсяка: дължина на шифрования текст като uint32 BE, после AES-GCM шифрованият текст + 16-байтов таг

Част 0 е манифестът: UTF-8 JSON {"name":…,"size":…,"type":…}. Части 1…N−1 са файлът на парчета от 1 MiB. За част i от N: nonce = сол ‖ uint64 BE i; удостоверени данни = заглавка ‖ uint64 BE i ‖ uint64 BE N. Така подправяне, съкращаване, пренареждане, преместване и съединяване на части от различни файлове провалят удостоверяването. Всеки случай е доказан с включен отрицателен тест.

Низ на ключа: base64url (без допълване) на 32-байтовия ключ, следван от първите 3 байта на неговия SHA-256, общо 47 знака. Печатна грешка проваля контролната сума, вместо да създаде безсмислен резултат.

Референтен инструмент за отваряне (Python, библиотека cryptography)
import base64, hashlib, json, struct, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SEALBY-W" and raw[8] == 1 and raw[9] == 1
assert raw[14:16] == b"\x00\x00"
header, salt = raw[:16], raw[10:14]
frames, off = [], 16
while off < len(raw):
    (n,) = struct.unpack(">I", raw[off:off + 4]); off += 4
    frames.append(raw[off:off + n]); off += n
assert off == len(raw)

kb = base64.urlsafe_b64decode(sys.argv[2] + "=")   # 47-char key string
key, check = kb[:32], kb[32:35]
assert hashlib.sha256(key).digest()[:3] == check    # typo check

N = len(frames)
def chunk(i):
    nonce = salt + struct.pack(">Q", i)
    aad = header + struct.pack(">QQ", i, N)
    return AESGCM(key).decrypt(nonce, frames[i], aad)

manifest = json.loads(chunk(0))
data = b"".join(chunk(i) for i in range(1, N))
assert len(data) == manifest["size"]
open(manifest["name"], "wb").write(data)
print("decrypted ->", manifest["name"])

Това е за файлове в движение. Трезорът е за файлове в покой.

Запечатването защитава файл по пътя му. Sealby защитава всичко, което остава: снимки, файлове и бележки в шифровани трезори на вашия iPhone. Без акаунт, без сървъри, четими единствено от вас.

Изтеглете от App Store

iPhone и iPad · iOS 17+ · Безплатно