Как SSL шифрует данные с сервера на клиент? - программирование
Подтвердить что ты не робот

Как SSL шифрует данные с сервера на клиент?

Большинство статей wiki описывают, как клиентский браузер использует открытый ключ (сертификат) шифрует конфиденциальные данные (например, имя пользователя/пароль) и отправляет эти зашифрованные данные на сервер. Сервер будет использовать закрытый ключ для его расшифровки. Я получаю эту часть. Но нет четкой информации о том, как сервер шифрует данные и отправляет их обратно в браузер.

Используйте мой онлайн-банкинг в качестве примера:

(0) Я уже принял доверенный сертификат (открытый ключ) из своего онлайн-банкинга.

(1) Через URL-адрес SSL мой браузер посещает https://myonlinebanking.com

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

(3) Веб-сервер банка получил мои зашифрованные данные и использовал его закрытый ключ для дешифрования и успешной аутентификации моей учетной записи.

Теперь вот мои вопросы:

Как банк отправляет мои данные? Банк шифрует данные ответа по какому ключу? Если банк зашифрован "открытым ключом", человек-в-середине может видеть его так, как я его вижу. Значит, человек-в-середине не знает мое имя пользователя/пароль, но он все еще может видеть баланс моего аккаунта?

Благодарим вас за помощь.

4b9b3361

Ответ 1

Процесс TLS handshake устанавливает симметричный ключ между обеими сторонами, потенциально используя асимметричную криптографию в процессе (детали зависят от точных алгоритмов которые были согласованы между клиентом/сервером). Таким образом, связь шифруется в обоих направлениях, не только в одну сторону.

Тем, что в конечном итоге защищает вас от MITM, заключается в том, что ваш браузер выполняет некоторую проверку валидности хоста. Сертификат, представленный сервером в рукопожатии, сначала проверяется на предмет его действительности. Если это удастся, ваш браузер проверяет, привязан ли сертификат к конкретному хосту, с которым он разговаривает. Если эта проверка будет опущена, атака MITM все равно будет успешной, даже если остальная часть сообщения строго соблюдает протокол, включая все криптографические элементы. Злоумышленник может просто притворяться любым хостом и выполнять оставшуюся часть протокола послушно, вы не знаете разницы.

Ответ 2

У вас есть неправильные предположения:

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

Протокол TLS (Transport Layer Secuirty) использует комбинацию асимметричного шифрования (открытый ключ) и симметричного шифрования (Secure Key). Основное сообщение с вашим банком использует симметричное шифрование, для которого ключи сеанса (защищенный ключ) безопасно устанавливаются во время установления связи TLS, используя асимметричное шифрование.

Это все в рукопожатии TLS (Transport Layer Security), которое очень хорошо объясняется в этой ссылке здесь.