Что видит сервер
Сервер видит идентификатор секрета, шифротекст, IV, срок жизни, лимит просмотров и технические события вроде создания или просмотра. Этого достаточно, чтобы выдать секрет один раз и затем пометить его сгоревшим.
Сервер не видит открытый текст. Он также не получает ключ расшифровки, потому что ключ находится во фрагменте ссылки после #.
Шифрование в браузере
Когда вы создаете секрет, браузер генерирует случайный ключ и шифрует текст через AES-GCM. На сервер отправляется уже зашифрованный результат.
При открытии ссылки браузер получает шифротекст, берет ключ из фрагмента URL и расшифровывает данные локально. Сервер участвует в выдаче шифротекста, но не в чтении содержимого.
Burn-after-read и TTL
После успешного reveal сервер увеличивает счетчик просмотров. Если лимит достигнут, запись помечается сгоревшей и больше не выдается.
TTL ограничивает срок жизни. Даже если ссылку никто не открыл, по истечении срока секрет становится недоступен.
Парольная фраза
Парольная фраза не отправляется на сервер. В браузере она используется для оборачивания основного ключа. Получателю нужны и ссылка, и фраза.
Это полезно, когда ссылка идет через один канал, а фраза через другой. Такой сценарий особенно уместен для подрядчиков, ключей доступа и финансовых реквизитов.
FAQ
Может ли администратор сервера прочитать секрет?
По модели продукта сервер хранит только шифротекст и не получает ключ. Но перед активным платным использованием важен внешний аудит реализации.
Зачем нужно at-rest шифрование, если есть клиентское?
Это дополнительный защитный слой для шифротекста в базе. Он не заменяет клиентское шифрование.