2010-10-14 4 views
9

У меня есть небольшая путаница в SSL рукопожатии между браузером и сервером в типичном HTTPS веб-сценарии:Как браузер генерирует симметричный ключ во время SSL рукопожатия

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

Вопросы 1) Как браузер выбирает и генерирует этот «случайный» выбранный симметричный ключ?

2) У разработчиков (или/или пользователей браузера) есть контроль над этим механизмом генерации симметричных ключей?

+0

Клиент не генерирует ключ сеанса; не шифрует его; и не передает его. Ключ сеанса выводится по протоколу соглашения о ключах. Ваше описание в основном неверно. Ваш вопрос основан на ложном предположении. – EJP

ответ

8

Here - очень хорошее описание того, как работает установка HTTPS. Я обеспечу резюме, как сеансовый ключ приобретается оба сторон (клиент и сервер), этот процесс известен как «протокол согласования ключа», вот как это работает:

  1. Клиент генерирует 48 байт «пред- мастер секрет "случайное значение.
  2. Клиент накладывает эти байты на случайные данные, чтобы входной сигнал равнялся 128 байтам.
  3. Клиент шифрует его с помощью открытого ключа сервера и отправляет его на сервер.
  4. Затем мастер ключ производится обеими сторонами следующим образом:

    master_secret = PRF(
        pre_master_secret, 
        "master secret", 
        ClientHello.random + ServerHello.random 
    ) 
    

ЧПИ является «псевдослучайных функций», который также определен в спецификации и довольно умный. Он объединяет в себе секрет, метку ASCII и данные семени, которые мы передаем, с помощью сообщения с кодом-кэшем . Варианты кода аутентификации (HMAC) как хэш-функции MD5, так и SHA-1 . Половина ввода отправляется каждой хэш-функции. Это умный, потому что он довольно устойчив к атаке, даже перед лицом недостатков в MD5 и SHA-1. Этот процесс может давать обратную связь сам по себе и итерировать навсегда, чтобы генерировать столько байтов, сколько нам нужно.

Следуя этой процедуре, мы получаем 48-байтовый «главный секрет».

+0

Клиент не генерирует ключ сеанса; не шифрует его; и не передает его. Ключ сеанса выводится по протоколу соглашения о ключах. – EJP

+0

@ EJP, вы правы, мой ответ был абсолютно неправильным, я переписал его. Пожалуйста, проверьте его и скажите, если вы думаете, что сейчас лучше. – Andrey

Смежные вопросы