Подтвердить что ты не робот

Каковы допустимые варианты использования шифрования на стороне клиента?

Я только что прочитал о Crypto Library в Стэнфорде Javascript (jsfiddle пример), который поддерживает SHA256, AES и другие стандартные схемы шифрования полностью в javascript. Библиотека кажется очень изящной, но я не знаю разумного варианта использования.

Как несколько вопросов уже указывалось, шифрование на стороне клиента не является безопасным способом передачи защищенных данных на сервер. Вместо этого следует использовать HTTPS. Итак, есть ли какие-либо проекты, которые выиграют или требуют шифрования на стороне клиента?

4b9b3361

Ответ 1

Использовать пример 1

Как насчет локального хранилища? Возможно, вам захочется сохранить некоторые данные, но зашифруйте их, чтобы другие пользователи компьютера не могли получить к нему доступ?

Например:

  • Пользователь подключается к серверу через HTTPS.
  • Сервер аутентифицирует пользователя.
  • Сервер выполняет пароль шифрования, специфичный для этого пользователя.
  • Пользователь делает некоторые вещи локально.
  • Некоторые данные хранятся локально (зашифрованы с помощью пароля).
  • Пользователь не работает
  • Пользователь возвращается на сайт на более позднем этапе.
  • Пользователь подключается через HTTPS.
  • Сервер аутентифицирует пользователя.
  • Сервер служит для пароля пользователя.
  • Клиентская JS-клиент использует пароль шифрования для дешифрования локальных данных.
  • Пользователь делает то или другое локально с их локализованными локализованными локальными данными в настоящее время.

Это может быть полезно в случаях, когда у вас есть толстый клиент с большим количеством (чувствительных) данных, которые необходимо использовать во время сеансов, где обслуживание данных с сервера недопустимо из-за размера. Я не могу придумать много примеров, когда это применимо...

Он также может быть полезен в тех случаях, когда пользователь приложения генерирует конфиденциальные данные и что данные не должны (или не должны) когда-либо отправляться (или храниться) на сервере.

В приведенном примере вы можете локально хранить данные кредитной карты пользователя, зашифровать и использовать JS для автоматического ввода его в форму. Вы могли бы сделать это, вместо того чтобы хранить сервер данных и обслуживать предварительно заполненную форму таким образом, но при таком подходе вам не нужно хранить данные своей кредитной карты на сервере (что в некоторых странах существует законы о). Очевидно, что спорный вопрос о том, является ли сохранение данных кредитной карты, зашифрованных на пользовательской машине, более или менее угрозой безопасности, чем хранение ее на стороне сервера.

Там, вероятно, лучший пример...

Я не знаю какого-либо существующего проекта, который использует этот метод.

Использовать пример 2

Как насчет повышения производительности по сравнению с HTTPS, облегченного с помощью обмена паролями?

Например:

  • Пользователь подключается к серверу через HTTPS.
  • Сервер аутентифицирует пользователя.
  • Сервер выполняет пароль шифрования, специфичный для этого пользователя.
  • Затем сервер перенаправляет на HTTP (который имеет гораздо меньше накладных расходов, чем HTTPS, и поэтому будет намного лучше с точки зрения производительности).
  • Поскольку на сервере и на клиенте есть пароль шифрования (и этот пароль был передан по защищенному соединению), они могут теперь отправлять и получать безопасно зашифрованные конфиденциальные данные без накладных расходов на шифрование/дешифрование целых запросов с помощью HTTPS. Это означает, что сервер может обслуживать веб-страницу, где зашифрованы только чувствительные части. Затем клиент может расшифровать зашифрованные части.

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

Использовать случай 3

Хранилище доказательств хоста. Вы можете зашифровать клиентскую часть данных, а затем отправить ее на сервер. Сервер может хранить данные и делиться ими, но, не зная закрытого ключа клиента, он не может его расшифровать. Это считается основой для таких сервисов, как lastpass.

Ответ 2

Как и на клиенте, вы можете использовать obfuscation, чтобы сделать вещи более трудными для обычных пользователей, чтобы заглянуть внутрь, но так как клиенту также необходимо иметь копию расшифровки, ничего не помешает пользователю использовать сам дешифратор либо.

JavaScript - это небезопасная среда, период.

Ответ 3

Одно использование, которое приходит на ум, - это защита хоста. Именно там вы хотите хранить данные на сервере или хранить и пересылать через сервер, но не предоставлять серверу доступ к данным.

Клиент может зашифровать данные до передачи на сервер и сохранить закрытый ключ или, по крайней мере, пароль для закрытого ключа локально.

Я считаю, что это основа для таких сервисов, как lastpass.