Құпиялылыққа арналған тегін құрал

Файлды қорғалған күйде жіберу

Файлды жаңадан жасалған бір реттік кілтпен шифрлап, қалаған арнаңызбен жіберіңіз. Кілті бар адам оны осы бетте аша алады. Ештеңе жүктеп жіберілмейді, бұзып табуға болатын құпия сөз тіркесі жоқ және ештеңе сақталмай тұрып файлдың ішін көресіз.

Барлық жұмыс осы қойындыда орындалады. Бұл бет ешбір сервермен байланыса алмайды.

Барлық параметр ашық көрсетілген

Шифр
AES-256-GCM (WebCrypto), әр бөлікке 128-bit тег
Кілт
браузердің CSPRNG құралынан алынған 256 bits; әр файлға жаңадан жасалады, бір рет қолданылады, басқа мәннен туындатылмайды
Бөліктерге бөлу
шифрланған манифест (файл атауы, көлемі, түрі), содан кейін файл 1 MiB бөліктерге бөлінеді — әр бөлік бөлек аутентификацияланады
Бірреттік мән
32-bit кездейсоқ файл тұзы ‖ 64-bit бөлік санауышы — бір файл ішінде қайталанбайды; кілт те бір рет қана қолданылады
Аутентификацияланатын деректер
толық 16-byte тақырып, әр бөліктің индексі және бөліктердің жалпы саны — бөліктердің орнын ауыстыру, қысқарту не біріктіру шифрды ашуға кедергі жасайды
Кілт жолы
base64url, 47 таңба: 32-byte кілт және 3-byte SHA-256 тексеру қосындысы; қате таңба түсініксіз нәтиже шығармай, анық қате береді

Құралдың жұмысы туралы ашық жауаптар

Барлық жұмыс браузеріңізде орындалады.

Қорғау да, ашу да файлды осы беттің жадына оқиды, браузеріңіздің кіріктірілген WebCrypto қозғалтқышымен AES-256-GCM алгоритмін іске қосады және нәтижені жүктеп алуға береді. Ештеңе жүктеп жіберілмейді. Тіркелгі де, серверде өңдеу де жоқ. Сайттың басқа беттерінен айырмашылығы, бұл бет браузерде сақталатын шағын дерек файлдарын қолданбайтын кіру санауышын да жүктемейді. Ешқандай талдау құралы жоқ.

Бұл жай уәде емес. Бет браузерге тек осы сайттың статикалық файлдарын алуға рұқсат беретін Content-Security-Policy саясатымен беріледі. Ол файлды, кілтті немесе басқа нәрсені ешбір серверге, соның ішінде біздікіне, жібере алмайды. Файлды қорғау кезінде браузердің әзірлеуші құралдарын ашсаңыз, бірде-бір сұрау жіберілмегенін көресіз. Тікелей тексеру үшін Toolbox құралын орнатып, ұшақ режимінде файлды қорғаңыз. Желі өшірулі болса, ештеңе сыртқа шыға алмайды.

Бәрі кілтке байланысты — ол бізде ешқашан болмайды.

Әр қорғау кезінде браузеріңізде жаңа кездейсоқ 256-bit кілт жасалады. Ол сізге бір рет көрсетіледі және еш жерде сақталмайды: біздің жүйелерде де (олар қатыспайды), браузердің жергілікті сақтау орнында да, шифрланған файлда да жоқ. Табуға тырысатын құпия сөз тіркесі да, жаппай іріктеп бұзатын мән де жоқ. Кілті мен файлы бар адам оны аша алады. Екеуі қатар жоқ адам аша алмайды.

Мұның қатаң салдары бар: кілт жоғалса, файлға қолжетімділік те жоғалады. Қайта орнату да, қолдау қызметі арқылы ашу да, қалпына келтіру де мүмкін емес. Бұл көмектескіміз келмегендіктен емес. Біз қалпына келтіре алатын көшірмені басқа біреу ұрлай немесе талап ете алар еді.

Кілті бар сілтеме серверге жетпейді.

Бөлісу сілтемесі кілтті URL ішіндегі # таңбасынан кейін орналастырады. Фрагмент деп аталатын бұл бөлік браузерде қалады. Браузер оны ешбір серверге, біздікіне де, басқасына да жібермейді. Бет кілті бар сілтемемен ашылғанда, кілтті оқып, Ашу қойындысына өтеді де, оны мекенжай жолағынан дереу алып тастайды. Сондықтан кілт көрінетін URL ішінде де, браузер тарихында да қалмайды.

Дегенмен сілтеме мен шифрланған файлдың екеуі де қолында бар кез келген адам файлды аша алады. Сол себепті бет файл мен кілтті бөлек арналармен жіберуге кеңес береді.

Ештеңе сақталмай тұрып, файлдың ішінде не барын көресіз.

Ашу екі қадамнан тұрады. Алдымен бет тек шағын манифесттің шифрын ашады: бастапқы файл атауы, көлемі және түрі. Соны көрсетіп, код іске қоса алатын файл түрлері (бағдарламалар, сценарийлер, орнатқыштар, макросты құжаттар, HTML) және invoice.pdf.exe сияқты қос кеңейтіммен бүркемеленген атаулар туралы айқын ескертеді. Шифрды ашу түймесін басқанша ештеңе жазылмайды. Бет шифры ашылған мазмұнды өзі ашпайды да, көрсетпейді де. Файлды тек жүктеп алуға ұсынады.

Шифрлау нені дәлелдейтінін және нені дәлелдемейтінін ескеріңіз. Шифрланған файл жолда құпия сақталады. Бірақ шифрлау оны кім жібергенін де, ішіндегісі қауіпсіз екенін де көрсетпейді. Күтпеген шифрланған файлға күтпеген тіркеме сияқты сақтықпен қараңыз.

Сенімнің нақты шегі қайда өтеді.

Сіз осы сайт жіберген кодты іске қосасыз. Егер sealby.app сайтына немесе оған қосылымыңызға зиян келтірілсе, зиянды бет оған енгізген деректеріңізді оқи алады. Бұл вебтегі кез келген шифрлау құралына тән, сондықтан мұны жасырмай айтамыз. Қолданатын шараларымыз: бет статикалық файл түрінде беріледі және онда үшінші тарап коды жоқ. Орнатылған Toolbox бұрын жүктелген нұсқаны пайдалануды жалғастыруға мүмкіндік береді. Пішім төменде сипатталған, сондықтан оған тәуелсіз құралдар жасауға болады.

Өз құрылғыңыз да осы сенім шегінің ішінде. Бетке кіре алатын браузер кеңейтімдері немесе құрылғыдағы зиянды бағдарлама кез келген бет оқи алатын нәрсені оқи алады. Шифрланған файл мазмұнын жасырады, бірақ бәрін емес. Файл кімнің қолында болса, сол оның көлемін (шамамен бастапқы файл көлемін) және Sealby шифрлаған файл екенін көре алады.

Қарапайым тілмен айтылған шектеулер

  • Кілт жоғалса = файлға қолжетімділік жоғалады. Бұл — әдейі қойылған қатаң шарт.
  • Біз файлдарыңызды да, кілттеріңізді де көре алмаймыз, сондықтан оларды зиянды бағдарламаға тексере де алмаймыз. Файл түрі туралы ескерту тек атауына сүйенеді. Ол қауіпсіздік кепілдігі емес.
  • Шифрланған файл мен кілттің екеуі де бар кез келген адам файлды аша алады. Құрал оның кім екенін білмейді де, тексермейді де.
  • Шифрланған файлдың көлемі бастапқы файл көлемін шамамен көрсетеді.
  • Әр қорғау әрекетінде бір файл, 100 MB дейін. Бірнеше файлды алдымен zip мұрағатына салыңыз.

Пішімнің байт сайын сипаттамасы

Беттің нәтижесін өз бетінше тексеруге немесе .sealed файлын Python тіліндегі отыз жол кодпен ашуға қажет барлық мәлімет:

bytesfieldcontents
0–7сәйкестендіру белгісіASCII "SEALBY-W"
8нұсқа0x01 — басқа мән «жаңарақ нұсқамен жасалған» деген себеппен қабылданбайды
9алгоритм0x01 = AES-256-GCM
10–13файл тұзы4 bytes, CSPRNG, әр файлға жаңадан жасалады
14–15резервтелгеннөл болуы тиіс
16–endбөлік жазбаларыәрқайсысы: uint32 BE шифрмәтін ұзындығы, содан кейін AES-GCM шифрмәтіні + 16-byte тег

0-бөлік — манифест: UTF-8 JSON {"name":…,"size":…,"type":…}. 1…N−1 бөліктері — 1 MiB бөліктерге бөлінген файл. N бөліктің әр i бөлігі үшін: nonce = salt ‖ uint64 BE i; authenticated data = header ‖ uint64 BE i ‖ uint64 BE N. Сондықтан өзгерту, қысқарту, ретін ауыстыру, орнын өзгерту және басқа файл бөліктерін қосу әрекеттерінің бәрі аутентификациядан өтпейді. Әр жағдай репозиторийде сақталған теріс тестпен дәлелденген.

Кілт жолы: 32-byte кілттің және одан кейінгі SHA-256 мәнінің алғашқы 3 bytes бөлігінің base64url көрінісі (толықтырусыз), барлығы 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+ · Тегін