Что значит «сервер не видит данные»

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

Ключ расшифровки хранится во фрагменте URL после #. Браузеры не отправляют этот фрагмент в HTTP-запросе, поэтому сервер не получает ключ вместе со ссылкой.

Чем это отличается от HTTPS

HTTPS защищает канал между браузером и сервером. Это важно, но сервер все равно видит данные, если они отправлены открытым текстом. Сквозное шифрование добавляет другой слой: сервер принимает уже зашифрованное содержимое.

Иными словами, HTTPS защищает дорогу, а клиентское шифрование защищает сам груз.

Как проверить подход

Смотрите, где генерируется ключ, отправляется ли он в query-параметрах, есть ли открытый исходный код клиентской криптографии и что именно хранит сервер. Если ключ лежит в обычном параметре URL до знака ?, сервер его увидит.

Для серьезного использования важен аудит. Даже если идея правильная, ошибки в реализации могут испортить модель безопасности.

FAQ

Фрагмент URL после # безопасен сам по себе?

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

Почему нужна парольная фраза?

Она добавляет второй канал. Если ссылка утекла, без фразы получатель не сможет раскрыть секрет.