Ответ 1
Использовать пример 1
Как насчет локального хранилища? Возможно, вам захочется сохранить некоторые данные, но зашифруйте их, чтобы другие пользователи компьютера не могли получить к нему доступ?
Например:
- Пользователь подключается к серверу через HTTPS.
- Сервер аутентифицирует пользователя.
- Сервер выполняет пароль шифрования, специфичный для этого пользователя.
- Пользователь делает некоторые вещи локально.
- Некоторые данные хранятся локально (зашифрованы с помощью пароля).
- Пользователь не работает
- Пользователь возвращается на сайт на более позднем этапе.
- Пользователь подключается через HTTPS.
- Сервер аутентифицирует пользователя.
- Сервер служит для пароля пользователя.
- Клиентская JS-клиент использует пароль шифрования для дешифрования локальных данных.
- Пользователь делает то или другое локально с их локализованными локализованными локальными данными в настоящее время.
Это может быть полезно в случаях, когда у вас есть толстый клиент с большим количеством (чувствительных) данных, которые необходимо использовать во время сеансов, где обслуживание данных с сервера недопустимо из-за размера. Я не могу придумать много примеров, когда это применимо...
Он также может быть полезен в тех случаях, когда пользователь приложения генерирует конфиденциальные данные и что данные не должны (или не должны) когда-либо отправляться (или храниться) на сервере.
В приведенном примере вы можете локально хранить данные кредитной карты пользователя, зашифровать и использовать JS для автоматического ввода его в форму. Вы могли бы сделать это, вместо того чтобы хранить сервер данных и обслуживать предварительно заполненную форму таким образом, но при таком подходе вам не нужно хранить данные своей кредитной карты на сервере (что в некоторых странах существует законы о). Очевидно, что спорный вопрос о том, является ли сохранение данных кредитной карты, зашифрованных на пользовательской машине, более или менее угрозой безопасности, чем хранение ее на стороне сервера.
Там, вероятно, лучший пример...
Я не знаю какого-либо существующего проекта, который использует этот метод.
Использовать пример 2
Как насчет повышения производительности по сравнению с HTTPS, облегченного с помощью обмена паролями?
Например:
- Пользователь подключается к серверу через HTTPS.
- Сервер аутентифицирует пользователя.
- Сервер выполняет пароль шифрования, специфичный для этого пользователя.
- Затем сервер перенаправляет на HTTP (который имеет гораздо меньше накладных расходов, чем HTTPS, и поэтому будет намного лучше с точки зрения производительности).
- Поскольку на сервере и на клиенте есть пароль шифрования (и этот пароль был передан по защищенному соединению), они могут теперь отправлять и получать безопасно зашифрованные конфиденциальные данные без накладных расходов на шифрование/дешифрование целых запросов с помощью HTTPS. Это означает, что сервер может обслуживать веб-страницу, где зашифрованы только чувствительные части. Затем клиент может расшифровать зашифрованные части.
Этот вариант использования, вероятно, не так уж и стоит, потому что HTTPS обычно имеет приемлемые уровни производительности, но поможет, если вам нужно выжать немного больше скорости.
Использовать случай 3
Хранилище доказательств хоста. Вы можете зашифровать клиентскую часть данных, а затем отправить ее на сервер. Сервер может хранить данные и делиться ими, но, не зная закрытого ключа клиента, он не может его расшифровать. Это считается основой для таких сервисов, как lastpass.