
После прочтения сжечь. Как устроен zero-knowledge сервис, где сервер не видит ключ
casablanque 11 минут назад После прочтения сжечь. Как устроен zero-knowledge сервис, где сервер не видит ключ Средний 6 мин 185 Open source * Криптография * Информационная безопасность * Кейс Привет! Задача возникла...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. casablanque 11 минут назад После прочтения сжечь. Как устроен zero-knowledge сервис, где сервер не видит ключ Средний 6 мин 185 Open source * Криптография * Информационная безопасность * Кейс Привет! Задача возникла банальная: нужно передать коллеге пароль, API-ключ или конфиг.
Телега — не хочется, почта — тем более. Существующие решения от OneTimeSecret до PasswordPusher и прочих — либо закрытый код и доверяй на слово, либо требуют своего сервера. Одни требуют регистрации, другие — напичканные всем подряд комбайны.
Технические детали
Захотелось сделать так: открытый код, шифрование в браузере, сервер физически не может прочитать содержимое и, разумеется, бесплатно. Так появился BurnAfterRead — self-destructing E2E encrypted drops на Cloudflare Workers. АрхитектураСтек получился полностью serverless:Cloudflare Workers — HTTP API и раздача статикиCloudflare D1 — SQLite для метаданных (id, TTL, счётчик просмотров)Cloudflare R2 — хранение зашифрованного blobDurable Objects — атомарное управление доступом к дропуReact + Web Crypto API — фронт, всё шифрование в браузереНикакого своего сервера, никаких баз данных для обслуживания — всё на Cloudflare edge.
Zero-knowledgeКлючевая идея: сервер никогда не видит ключ расшифровки. Схема работает так:1. Браузер генерирует 256-битный ключ через crypto.
Текст или файл шифруется AES-GCM 256 с рандомным 12-байтовым IV3. На сервер уходит только ciphertext4. Ключ добавляется в ссылку как URL-фрагмент: вопрос который обычно возникает: а разве браузер не отправляет фрагмент на сервер?
Отраслевые последствия
Это явно прописано в RFC 9110 §4. 3: фрагмент (часть после #) никогда не включается в HTTP-запрос. Cloudflare Workers, D1, R2 и все логи никогда не увидят значение после #k=.
Проверить это легко: открыть DevTools → Network, открыть любую ссылку с дропом и убедиться что в запросах нет фрагмента. ШифрованиеAES-GCM выбран не случайно. В отличие от AES-CBC, GCM обеспечивает не только конфиденциальность, но и аутентификацию — к ciphertext добавляется 16-байтовый auth tag.
Это означает что любая модификация зашифрованных данных в транзите или на сервере будет обнаружена при расшифровке, и операция упадёт с ошибкой. // Вся крипта — Web Crypto API, никаких сторонних библиотек const key = await crypto. generateKey( { name: "AES-GCM", length: 256 }, true, ); const iv = crypto.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





