Рейтинг:0

Как определить значение группы ECDHE, используемое в сеансе TLS

флаг us

В ECDHE группа является публичной ценностью. Я хочу получить это значение для сеанса. Я проверил сеанс с помощью Wireshark. В разделе ServerHello -> Расширение общего доступа к ключу -> Запись общего доступа к ключу я нашел следующие параметры:

Запись общего ключа: группа: x25519, длина обмена ключами: 32
Группа: x25519 (29)
Длина обмена ключами: 32
Обмен ключами: 22d9....88e....635... (полная длина 64 шестнадцатеричных символа, 256 бит)

Можете ли вы объяснить больше? Как тогда значение длины обмена ключами равно 32, но это 256 бит и 64 шестнадцатеричных символа?

kelalaka avatar
флаг in
Это 32 байта и это 64 шестнадцатеричных символа. Вопросы, связанные с инструментами, здесь не по теме.
randomname avatar
флаг us
@kelalaka Спасибо! Пост не об инструменте. Но какое это значение из опубликованного вывода инструмента?
kelalaka avatar
флаг in
@knaccc это нотация ECC; это должно быть $x([a]G)$. Это $x22519(a,9)$ в нотации RFC, которая выполняет лестницу Монтгомери и возвращает только первую координату. Я не уверен, как Wireshark действительно это видит, однако, кажется, что они пропускают кодировку базовой точки. См. [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) и раздел 5. Считаете ли вы, что на этот вопрос действительно можно ответить? TLS 1.3 говорит, что подчиняется rfc7748, где кодировка $9$ также является 32-байтовой.
Maarten Bodewes avatar
флаг in
Да, открытый ключ всегда сжимается для этого x25519 в необработанном формате (просто целое число с обратным порядком байтов статических размеров). Его размер составляет 256 бит (криптозапись), 32 байта (в протоколе) или — только для человеческого восприятия — 64 шестнадцатеричных символа.
Рейтинг:2
флаг es

Рукопожатие TLS 1.3 работает следующим образом:

Клиент отправит на сервер структуру данных «ClientHello». На данном этапе клиент еще не знает, какие «Группы» поддерживает сервер. Чтобы избежать дополнительного обращения к серверу, он может предположительно содержать «элемент группы» для группы, которую он предпочитает использовать. В рассматриваемом случае элемент group представляет собой 32-байтовый открытый ключ для использования с «Группой 29» (29 == hex 0x1d), которая является идентификатором TLS для того, что обычно известно как X25519. Список нумерации для всех поддерживаемых TLS групп находится здесь: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml

X25519 означает замену Диффи-Хеллмана с использованием хорошо известной базовой точки G на эллиптической кривой Curve25519, где элементы группы находятся в большой циклической подгруппе, содержащей G, внутри этой кривой. Точку G передавать не нужно, потому что она определена как часть Стандарт X25519 и одинаково для всех вызовов X25519.

Эфемерный открытый ключ клиента — это «групповой элемент», который был отправлен предположительно. Для X25519 он имеет длину 32 байта (64 шестнадцатеричных символа или 256 бит). Этот групповой элемент указан как значение «обмена ключами» в разделе «общие ключи» структуры данных ClientHello.

Сервер ответит сообщением «ServerHello», если он согласится использовать спекулятивно включенную группу клиента, здесь Группа 29. Это включает элемент группы сервера в значении «обмена ключами» в разделе «общие ключи».Этот групповой элемент является эфемерным открытым ключом сервера.

С помощью этой информации и клиент, и сервер смогут вычислить один и тот же общий секрет, называемый «предварительным секретом». Затем они объединяются с данными ClientHello и ServerHello для получения симметричных ключей шифрования (см. https://datatracker.ietf.org/doc/html/rfc8446#section-7.1). Это позволяет серверу и клиенту безопасно обмениваться данными друг с другом с помощью шифрования с проверкой подлинности, такого как AES-GCM.

Если сервер не согласен с предложенной клиентом группой или клиент решил не предлагать какую-либо группу, но сервер согласен с (другой) группой, которую клиент указал в «поддерживаемых группах», вместо этого он отправляет HelloRetryRequest, который сообщает client, чтобы повторить ClientHello, используя указанную группу, которую сервер затем принимает, как указано выше. Если сервер не согласен Любые группу, которую поддерживает клиент, он отправляет предупреждение об ошибке, и рукопожатие завершается неудачно — если клиент также не предложил доступный PSK, но обычно это происходит только для возобновления, а если начальное рукопожатие не удается, возобновление невозможно.

TLS 1.0-1.2 обрабатывает ECDHE по-другому — если вообще, потому что там это необязательно. В этих протоколах набор шифров определяет обмен ключами и аутентификацию, а также шифр данных и хэш для HMAC (если не AEAD) и PRF (если 1.2). Клиент отправляет ClientHello список наборов шифров, которые он поддерживает, любой, некоторые или все из которых могут использовать ECDHE в сочетании с аутентификацией RSA или ECDSA (т. е. сертификатом). и расширение support-groups (или support-curves до RFC7919), определяющее поддерживаемые им кривые. Если сервер соглашается на предложенный набор шифров ECDHE и предложенную кривую, он отправляет ServerHello, указав набор шифров, затем его цепочку сертификатов, а затем ServerKeyExchange, содержащий идентификатор кривой и ее эфемерный открытый ключ.Клиент (если он принимает сертификат) отправляет ClientKeyExchange, содержащий его эфемерный открытый ключ, после чего вычисление общего секрета происходит аналогичным образом, хотя детали получения рабочих ключей отличаются от 1.3, а также от 1.2 и ранее.

kelalaka avatar
флаг in
это нотация ECC; это должно быть $x([a]G)$. Это $x22519(a,9)$ в нотации RFC, которая выполняет лестницу Монтгомери и возвращает только первую координату. Я не уверен, как Wireshark действительно это видит, однако, кажется, что они пропускают кодировку базовой точки. См. [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) и раздел 5. Считаете ли вы, что на этот вопрос действительно можно ответить? TLS 1.3 говорит, что подчиняется rfc7748, где кодировка $9$ также является 32-байтовой.
knaccc avatar
флаг es
@kelalaka шестнадцатеричный код «обмена ключами» в ServerHello — это открытый ключ сервера, который представляет собой скаляр базовой точки (координата x 9), умноженный на закрытый ключ сервера, или X25519 (server_private_key, 9) в нотации rfc7748.Не уверен, что вы подразумеваете под «пропустить кодирование базовой точки» - нет необходимости передавать базовую точку 9, поскольку она хорошо известна как часть спецификации X25519.
kelalaka avatar
флаг in
Как я сказал просто под вопросом, речь идет о сопоставлении стандарта с WireShark, который не дает информации о закодированной базовой точке $ 9 $. Почему они выглядели именно так, зависит от выбора дизайнера.
knaccc avatar
флаг es
@kelalaka Думаю, мы по-разному интерпретировали вопрос. Я предположил, что проблема заключалась в том, что плакат был сбит с толку тем, что означает «группа», тем более что группа могла означать «группу 29», могла означать элемент группы, который является открытым ключом сервера, или могла означать группу базовой точки. Поэтому мой подход состоял в том, чтобы просто объяснить всю терминологию.
Рейтинг:0
флаг vu

Эта группа используется в обмене ключами X25519, в котором используется Curve25519 DJB (Дэниел Дж. Бернштейн).

Существует ряд коммерческих стандартов, известных как SEC#* (Стандарт эффективной криптографии), определяющих криптографию на основе эллиптических кривых. Открытые ключи (точки) в этих стандартах имеют длину либо 2x+1 (несжатые координаты x-y с байтом заголовка), либо x+1 (сжатые координаты x с байтом заголовка) байтов.

Есть еще DJB и его команды усилия по созданию эффективных кривых без боковых каналов известный как X25519 (для обмена ключами) и Ed25519 (для цифровой подписи). Открытые ключи также являются точками, но они определяются непосредственно в терминах байтовой кодировки координаты в 1 измерении, поэтому нет необходимости в байте заголовка.

Ваш инструмент указал, что это x25519, созданный людьми из DJB.

Вам также может быть интересно узнать, что существует еще одна серия стандартов, известная как PKCS#* (Стандарт криптографии с открытым ключом), первая в серии определяет криптографию RSA, используемую в Интернете (существуют и другие стандарты RSA, используемые в других местах). .

kelalaka avatar
флаг in
X25519 не использует координату $y$.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.