Что видит сервер

Сервер видит идентификатор секрета, шифротекст, IV, срок жизни, лимит просмотров и технические события вроде создания или просмотра. Этого достаточно, чтобы выдать секрет один раз и затем пометить его сгоревшим.

Сервер не видит открытый текст. Он также не получает ключ расшифровки, потому что ключ находится во фрагменте ссылки после #.

Шифрование в браузере

Когда вы создаете секрет, браузер генерирует случайный ключ и шифрует текст через AES-GCM. На сервер отправляется уже зашифрованный результат.

При открытии ссылки браузер получает шифротекст, берет ключ из фрагмента URL и расшифровывает данные локально. Сервер участвует в выдаче шифротекста, но не в чтении содержимого.

Burn-after-read и TTL

После успешного reveal сервер увеличивает счетчик просмотров. Если лимит достигнут, запись помечается сгоревшей и больше не выдается.

TTL ограничивает срок жизни. Даже если ссылку никто не открыл, по истечении срока секрет становится недоступен.

Парольная фраза

Парольная фраза не отправляется на сервер. В браузере она используется для оборачивания основного ключа. Получателю нужны и ссылка, и фраза.

Это полезно, когда ссылка идет через один канал, а фраза через другой. Такой сценарий особенно уместен для подрядчиков, ключей доступа и финансовых реквизитов.

FAQ

Может ли администратор сервера прочитать секрет?

По модели продукта сервер хранит только шифротекст и не получает ключ. Но перед активным платным использованием важен внешний аудит реализации.

Зачем нужно at-rest шифрование, если есть клиентское?

Это дополнительный защитный слой для шифротекста в базе. Он не заменяет клиентское шифрование.