"Интервьюер Byte: Вы знаете все три версии методов рукопожатия TLS?
"
Процесс рукопожатия TLS более сложен.Как и в предыдущем вопросе, мое предыдущее понимание было очень фрагментарным, и ответ во время интервью был не очень хорошим. Теперь сделайте перерыв и напишите эту статью, чтобы углубить свое понимание.
Подробности следующие:
- История ТЛС.
- Подробная информация о рукопожатии и резюме для каждого выпуска.
- расширение.
История SSL/TLS
Мы знаем, что HTTP — это протокол для передачи открытого текста, который может быть атакован третьими лицами и очень небезопасен. Отсюда и рождение «HTTPS».
Эта буква «S» означает протокол SSL/TLS, который описывается формулой:HTTPS = HTTP + SSL(TLS).
Среди них SSL — это Secure Sockets Layer (Уровень защищенных сокетов), который является сеансовым уровнем в семиуровневой модели OSI.
Веб-сайты с протоколами безопасности TLS, такие какНаггетсв адресной строке браузера Chrome появитсяhttps/www
и т. д. автоматически скрыть, замените его на 🔐:
Ниже приводится частичная история, извлеченная из авторитетного документа:
-
В 1996 году вышел и широко использовался SSL3.0 (он устарел в 2015 году).
-
В 1999 году SSL3.1 был стандартизирован и обновлен до TLS1.0 (безопасность транспортного уровня). Так что,TLS1.0 = SSL3.1.
-
Текущая основная версия — TLS1.2 (выпущена в 2008 г.).
-
В будущем может наступить эпоха TLS1.3 (выпущена в 2018 году).
TLS-рукопожатие
Чтобы понять конкретный процесс рукопожатия, мы должны сначала понять, что такое рукопожатие?
握手 (Handshake)
: как правило, это предварительное действие связи, т. е. достижение определенного соглашения.Например, рукопожатие TCP предназначено для определения возможностей приема и отправки на обоих концах и т. д., а рукопожатие TLS предназначено для проверки удостоверение личности и обмен информацией для создания секретного ключа для последующей зашифрованной связи.
Через захват пакетов Wireshark несложно узнать: используется ли соединение между клиентом и сервером по протоколу HTTP или TLS, все соединения изначально проходят через трехстороннее рукопожатие TCP, а четырехстороннее рукопожатие TLS выполняется после TCP-соединение установлено.
Следовательно, HTTPS требует 7-этапного рукопожатия для первой связи!
Подробные учебные материалы TCP можно найти здесь:Вопрос о душе ПТС, не является предметом рассмотрения в этом разделе.
В этом разделе будут проанализированы два основных метода рукопожатия TLS, а именно:RSA 握手
,DH 握手
. А потом кDH 握手
Продолжайте развивать и оптимизировать основу, а также повышать безопасность и производительность.TLS1.3
Метод рукопожатия версии. Но перед этим нужно разобраться с некоторыми базовыми понятиями (если уже знаете, то можете пропустить).
Основные понятия
① Симметричное шифрование
Одна и та же строка ключей используется для шифрования и дешифрования, общие алгоритмы симметричного шифрования: DES, AES и т. д.
② Асимметричное шифрование
Шифрование и дешифрование используют разные ключи, один как открытый открытый ключ, а другой как секретный закрытый ключ. Информация, зашифрованная открытым ключом, может быть расшифрована только закрытым ключом. И наоборот, информация, зашифрованная закрытым ключом, может быть расшифрована только открытым ключом.
Распространенные алгоритмы асимметричного шифрования: RSA, ECC и др.
Алгоритм RSA: название алгоритма происходит от комбинации фамилий трех ученых.В мире компьютерных сетей он всегда был наиболее широко используемым «алгоритмом асимметричного шифрования».
ECC является "восходящей звездой" в асимметричном шифровании. Он основан на математической проблеме "дискретного логарифма эллиптической кривой". Он использует специальные уравнения кривой и базовые точки для генерации открытых и закрытых ключей. Подалгоритм ECDHE используется для ключей exchange, а ECDSA используется для цифрового знака.
③ Гибридное шифрование
существует对称加密
Алгоритм может расшифровать, пока у вас есть ключ. Если согласованный вами и сайтом ключ будет украден хакером при передаче, он может расшифровать отправленные и полученные данные по своему желанию, а конфиденциальность в процессе общения отсутствует.
существует非对称加密
В алгоритме необходимо применять сложные математические операции.Хотя безопасность гарантирована, скорость очень низкая, что на несколько порядков хуже алгоритма симметричного шифрования.
Поэтому метод «гибридного шифрования» используется в TLS, чтобы учиться на чужих сильных сторонах: используйте его в начале общения非对称加密
Алгоритмы решения проблемы обмена ключами. Все последующее использование对称加密
общаться.
Список наборов шифров
Список наборов шифров обычно отправляется клиентом для выбора сервером. Просмотрите список с помощью openssl:
➜ openssl ciphers -v
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
...
... Cipher Suites(17 suites)
Данные на приведенном выше рисунке показывают, что в список входит до 17 наборов шифров, и один из них обычно выглядит так:
значение:
-
TLS
Во время рукопожатия используйтеECDHE
Алгоритм генерирует pre_random. - Использование аутентификации (подписи)
RSA
алгоритм. - 128 бит
AES
Алгоритм используется для симметричного шифрования, а основной используется в процессе симметричного шифрования.GCM
Пакетный режим, который позволяет алгоритму шифровать открытый текст любой длины с помощью ключа фиксированной длины. - Последний — это алгоритм хэш-дайджеста для проверки целостности данных, использующий
SHA256
алгоритм.
Цифровой сертификат
Цифровые сертификаты обычно выполняют две функции:
- Сервер подтверждает свою подлинность браузеру, ведь секретный ключ и даже доменное имя сервера можно подделать.
- Передайте открытый ключ браузеру.
Сам сертификат предоставляется органом, доверенным органом сертификата (CA).
Рукопожатие RSA
Посмотри сначала на картинку
Конкретный процесс выглядит следующим образом:
1.浏览器向服务器发送随机数 client_random,TLS 版本和供筛选的加密套件列表。
2.服务器接收到,立即返回 server_random,确认好双方都支持的加密套件
以及数字证书 (证书中附带公钥 Public key certificate)。
3.浏览器接收,先验证数字证书。若通过,接着使用加密套件的密钥协商算法 RSA
算法生成另一个随机数 pre_random,并且用证书里的公钥加密,传给服务器。
4.服务器用私钥解密这个被加密后的 pre_random,参考 “非对称加密”。
Теперь и браузер, и сервер имеют одни и те же три учетных данных: client_random, server_random и pre_random. Оба смешивают три случайных числа, используя метод шифрования в наборе просеянных шифров, чтобы сгенерировать окончательный ключ.
Наконец, браузер и сервер взаимодействуют с использованием одного и того же ключа, т.е.对称加密
.
Здесь следует отметить два момента.
Первый: Ни одно из сообщений в рукопожатии не зашифровано секретным ключом, они отправляются открытым текстом.
второй: рукопожатие TLS на самом деле双向认证
В процессе и клиент, и сервер должны выполнить дайджест-аутентификацию и завершение (отправить сообщение «Готово», что означает, что позже HTTP начинает формально шифровать передачу сообщения).
Рукопожатие DH
Или посмотрите на картинку:
Конкретный процесс выглядит следующим образом (сравнение выпусков):
1.浏览器向服务器发送随机数 client_random,TLS 版本和供筛选的加密套件列表。
// RSA
-2.服务器接收到,立即返回 server_random,确认好双方都支持的加密套件
-以及数字证书 (证书中附带公钥)。
// DH
+2.服务器接收到,立即返回 server_random,确认好双方都支持的加密套件
+以及数字证书 (证书中附带公钥)。
+同时服务器利用私钥将 client_random,server_random,server_params 签名,
+生成服务器签名。然后将签名和 server_params 也发送给客户端。
+这里的 server_params 为 DH 算法所需参数。
// RSA
-3.浏览器接收,先验证数字证书。
-若通过,接着使用加密套件的密钥协商算法 RSA 算法
-生成另一个随机数 pre_random,并且用证书里的公钥加密,传给服务器。
// DH
+3.浏览器接收,先验证数字证书和 _签名_。
+若通过,将 client_params 传递给服务器。
+这里的 client_params 为 DH 算法所需参数。
-4.服务器用私钥解密这个被加密后的 pre_random,参考 “非对称加密”。
+4.现在客户端和服务器都有 client_params、server_params 两个参数,
+因 ECDHE 计算基于 “椭圆曲线离散对数”,通过这两个 DH 参数就能计算出 pre_random。
Теперь и браузер, и сервер имеют одни и те же три учетных данных: client_random, server_random и pre_random, и следующие шаги соответствуют рукопожатию RSA.
Защита переадресации рукопожатия DH
Рукопожатие TLS1.2
С концепциями, изложенными в предыдущем разделе, рукопожатие TLS1.2 легко понять. Потому что основное рукопожатие TLS1.2 — это полный процесс рукопожатия DH, описанный в предыдущем разделе.
Рукопожатие TLS1.3
Мир Интернета стремительно развивается, и со временем людей уже не устраивает существующий TLS1.2. В результате была выпущена более быстрая и безопасная «новая версия корабля» TLS1.3.
TLS1.3 упразднил некоторые из первоначальных небезопасных алгоритмов шифрования, в том числе дажеRSA
алгоритм.
Отмена алгоритма RSA не только потому, что есть большая сила его взломать, но и потому, что не хватает前向安全性
. Что такое форвардная безопасность? То есть возможность защитить прошлые сообщения от угрозы раскрытия паролей или ключей в будущем.
Теперь давайте посмотрим на конкретный процесс рукопожатия TLS1.3, сначала поместим картинку:
Сортировка процессов:
// 原 DH 握手
-1.浏览器向服务器发送 client_random,TLS 版本和供筛选的加密套件列表。
// TLS1.3 优化
+1.浏览器向服务器发送 client_params,client_random,TLS 版本和供筛选的加密套件列表。
// 原 DH 握手
-2...
// TLS1.3 优化
+2.服务器返回:server_random、server_params、TLS 版本、确定的加密套件方法以及证书。
+浏览器接收,先验证数字证书和签名。
+现在双方都有 client_params、server_params,可以根据 ECDHE 计算出 pre_random 了。
Наконец, соберите все три параметра, чтобы сгенерировать окончательный ключ.
Как видите, TLS1.3 требует только одного кругового обхода между клиентом и сервером (TLS1.2 требует двух круговых обходов для завершения рукопожатия), т. е.1-RTT
Пожать руки. Конечно, если использоватьPSK
Мы можем даже оптимизировать0-RTT
(Это нехорошо, безопасность под вопросом~).
резюме
Более того, мы прочесали три версии процессов рукопожатия TLS, которые относятся к двум категориям: разновидность RSA, другая версия Диффи-Хеллмана (ECDHE). Различия между этими двумя классами заключаются только в том, как реализовать создание секретного ключа и аутентификацию:
обмен ключами | Аутентификация | |
---|---|---|
Рукопожатие RSA | RSA | RSA |
Рукопожатие DH | ECDHE | RSA/DSA |
Мы видим, что в эволюции версии последний TLS1.3 отказался от алгоритма RSA для большей безопасности и уменьшил RTT для более быстрого. Можно увидеть, что характеристики технологических инноваций Интернета не что иное, как это.
расширять
Как упоминалось ранее, рукопожатие双向认证
процесс, конечно, не абсолютный.
На третьем этапе рукопожатия, когда клиент проверяет сертификат, если сертификат сервера находится в системном списке доверенных сертификатов по умолчанию, он пройдет напрямую.Если его нет в списке по умолчанию, браузер может открыть окно для пользователь может выбрать, доверять ли сертификату.Также возможно, что соединение будет закрыто напрямую, указывая на то, что сертификат не является доверенным.
В приложении, если вы хотите доверять сертификату, которого нет в системном списке доверия, вам необходимо заранее поместить сертификат сервера в приложение. Кроме того, большинство методов аутентификации являются односторонними, то есть аутентифицируется только сертификат сервера, в то время как такие учреждения, как банки, используют двустороннюю аутентификацию.
Конечно, подробностей рукопожатия еще много, из-за недостатка места я не буду здесь вдаваться в подробности, вернемся назад и поговорим об одном из ядер протокола:加密算法
.
В эпоху больших данных для статистики необходимо собирать большое количество личной информации.
С одной стороны, это приносит нам удобство и связано с богатством, например, с использованием哈希
алгоритмический区块链
.
С другой стороны, некоторые личные данные утекают непреднамеренно, что приводит к неблагоприятным последствиям.Например, в результате самоубийства общественного мнения в определенном году личные данные ответчика вспыхнули в Интернете в сочетании со слепой ориентацией масс. , подсудимый был окончательно невыносим.Психическое напряжение приводит к трагедии, вызванной событием, которое можно было бы легко договориться.
Примеров тому так много, что последствия утечки данных неизмеримы.
Для защиты личных данных клиентов, будь то HTTP или HTTPS, рекомендуется передавать информацию в зашифрованном виде. Конечно, потребление производительности, вызванное шифрованием и дешифрованием данных, также должно измеряться каждым разработчиком.
"Чем больше вы знаете об онлайн-мире, тем больше вы будете в восторге.
"
наконец
Вывод статей не из легких, надеюсь вы поддержите волну! Если не так, поправьте меня.
Прошлые выборы:
Сборник рукописного кода "Intermediate and Advanced Front-end Interview"
#fragment Эта статья тест прыжка с якоря
использованная литература
HTTP Soul Question - Бог Троица
Keyless SSL: The Nitty Gritty Technical Details
The First Few Milliseconds of an TLS 1.2 Connection
TLS 1.3 Handshake: Taking a Closer Look
Интуитивно почувствуйте процесс рукопожатия TLS
В этой статье используетсяmdniceнабор текста