ss.spagin.dev

Безопасность

Коротко

Секрет шифруется в твоём браузере ещё до отправки. На сервер уходит и хранится только зашифрованный набор байт и односторонний хэш ключа.

Из того, что лежит на сервере, восстановить содержимое невозможно — ни владельцу сервиса, ни тому, кто получит доступ к базе. Ключ лежит в части ссылки после # — браузер никогда не отправляет её на сервер.

Как движутся данные

Твой браузер

Секрет: hunter2

Ключ-фраза: кот.река (случайные слова)

HKDF-SHA-256 → ключ AES-256, шифрование AES-256-GCM

📦 blob — зашифрованные байты

# keyHash = SHA-256(ключ) — односторонний

через сеть уходит только blob + keyHash →
Сервер

Хранит: blob, keyHash, id

❌ ключа нет → расшифровать невозможно

keyHash годится только чтобы проверить «тот ли ключ прислали», но не чтобы восстановить сам ключ.

ссылка с ключом → получателю напрямую
Браузер получателя

Открывает ссылку → берёт ключ-фразу из части после # (на сервер не уходит)

запрашивает blob (на сервер летит только keyHash), расшифровка идёт в браузере

🔓 Секрет расшифрован локально: hunter2

Что у кого есть

Открытый текст секретатолько в браузересервер — никогда
Ключ-фраза (расшифровка)в ссылке после # / в браузересервер — никогда не получает
blob (шифр)естьсервер хранится
keyHash (хэш ключа)вычисляетсясервер хранится
id секретав ссылкесервер хранится

Почему это нельзя взломать

🔒

AES-256-GCM

Стойкое шифрование. Перебрать ключ из 5 случайных слов перебором нереально.

#️⃣

Хэш необратим

keyHash = SHA-256 от ключа. Из хэша ключ не восстановить — функция односторонняя.

💥

Один просмотр + TTL

После раскрытия — 15 минут, затем удаление. Нераскрытый живёт 7 дней.

Важно про ссылку

Ключ — это часть ссылки. Кто угодно со ссылкой сможет раскрыть секрет (один раз), поэтому относись к ссылке как к самому секрету: передавай её только получателю и не публикуй в открытых местах. На сервере же без ссылки лежит лишь бесполезный шифр.