Как браузер генерирует симметричный ключ во время рукопожатия SSL

StackOverflow https://stackoverflow.com/questions/3936071

  •  30-09-2019
  •  | 
  •  

Вопрос

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

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

Вопросы

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Цитируя из этого отличного видео на сетевом видео, Минут 1:18:07.

Ну, где вы получаете случайность на вашем компьютере, потому что ваш компьютер является детерминированным устройством?

Ну, он собирает аплодировки, такие как ваши движения хода мыши, движения ваших ключевых хода и время вашего жесткого диска, он пытается собрать всю эту случайность от вселенной в тягу, так что он может генерировать случайные клавиши только для одно соединение [этот сеанс. Отказ И если эта случайность нарушена, и это произошло много раз за последние 30 лет, то ни один из этого не работает. Если противник может понять, какова ваша случайность, то они могут угадать ваши ключи. Так используйте хорошую случайность.

Примечание: ключи созданы за сессию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top