Рейтинг:2

Curve448 — Можно ли повторно использовать ключевой материал Ed448 для X448?

флаг in

В настоящее время я сталкиваюсь с ситуацией, когда доступны пары ключей Ed448 (закрытый + открытый ключ), и систему следует расширить с помощью операции Диффи-Хеллмана (ECDH). Прежде всего позвольте мне обобщить то, что я понял до сих пор.

Эд448: Есть алгоритм цифровой подписи на edwards448.

Х448: построена ли функция Диффи-Хеллмана для Curve448.

Кривая448: представляет собой эллиптическую кривую в формате Монтгомери, как указано в RFC7748.

Эдвардс448: Эллиптическая кривая, связанная с Curve448 картой, как указано в RFC7748.

Для Curve25519 я прочитал Curve25519 вместо Ed25519 для обмена ключами? Почему? и для меня это звучало так, как будто можно преобразовать существующий открытый ключ Ed25519 в ключ X25519, применив определенную карту. Почему-то я не очень хорошо знаком со всей используемой здесь математикой. Затем, прочитав еще немного, я нашел Что означает «бирациональная эквивалентность» в криптографическом контексте? что дало мне еще несколько идей. Потом я прочитал RFC7748 снова и увидел, что бирациональная эквивалентность верна и для Curve448. Кроме того, существует определение «edwards448», которое также предоставляет карту между точками кривой Монтгомери и Эдвардса. Используемая карта определяется как:

$$ (u, v) = (\frac{y^2}{x^2}, \frac{(2 - x^2 - y^2)*y}{x^3}) $$

Если я правильно понял приведенные выше ссылки, можно преобразовать открытый ключ в координату, которая будет использоваться в функции X448. Исключением является то, что в случае $х$ из приведенного выше уравнения равно 0, то карта не может быть применена и трансформация невозможна. Кроме того, глава, относящаяся к Curve448 в Эллиптическая кривая Cryptographx Ecc приводит меня в том же направлении, что возможно преобразовать существующий ключевой материал и впоследствии повторно использовать его для X448. Если я правильно понял, закрытый ключ в ECC представляет собой целое число, а не «точку кривой».

Теперь мне любопытно, действительно ли можно преобразовать существующую пару ключей, чтобы ее можно было повторно использовать для ECDH, и как это сделать.Или если нужно "ввести" вторую пару ключей только для ECDH. Поэтому я прошу помощи, так как я новичок в этой теме.

Рейтинг:4
флаг es
  1. Вам не нужно преобразовывать открытый ключ Edwards448 в бирационально эквивалентный открытый ключ Curve448, чтобы выполнить ECDH. Вы можете просто придерживаться Edwards448. Если вы используете Curve448, будет прирост производительности, но в зависимости от вашей реализации этот прирост производительности может быть в значительной степени компенсирован преобразованием, которое должен будет выполнить верификатор, чтобы получить ваш открытый ключ Curve448 из вашего открытого ключа Edwards448. Вы должны использовать функцию «скалярного умножения» вашей библиотеки Edwards448 EC для выполнения операции ECDH.

  2. Закрытые ключи EC являются «скалярами», что означает положительное целое число, меньшее, чем размер группы точки генератора на этой кривой. Открытые ключи — это точки на кривой и пары координат «элементов поля». Элемент поля — это положительное целое число, меньшее, чем простое число. $р = 2^{448} - 2^{224} - 1$.

  3. Если вы решите перейти с Edwards448 на Curve448, то эти точки будут иметь один и тот же скалярный закрытый ключ.Обратите внимание, что из-за того, что X448 использует только x-координату Curve448 во время соглашения о ключе умножения переменной-базы-скаляра, отображение будет таким, что обе точки Edwards448 $P$ и $I-P$ будет сопоставлен с той же точкой соглашения о ключах X448 Curve448 (где $I$ точка Эдвардса448, удаленная на бесконечность). К счастью для вас, вы отображаете от Edwards448 до Curve448, а это значит, что вы не столкнетесь с двусмысленностью.

  4. Преобразование из Edwards448 в Curve448 просто: $$\texttt{curve448}_{x-coord} = \left(\frac{\texttt{ed448}_{y-coord}}{\texttt{ed448}_{x-coord}}\right)^2 $$ Обратите внимание, что «деление» достигается за счет умножения с модульной мультипликативной инверсией. Ваша библиотека EC должна предоставить вам эту функциональность. Операции сделаны $мод\п$.

  5. Обратите внимание, что Ed448 начнет с «сырого» 57-байтового закрытого ключа, хэширует его с помощью SHAKE256, очистит самый старший байт, установит старший бит второго старшего байта в 1 и очистит два младших байта. младшие значащие биты. Следовательно, это хешированная и измененная версия вашего необработанного закрытого ключа Ed448, которую вам нужно использовать идентично с Curve448. Ключи Curve448 имеют размер 56 байт, и безопасно отрезать самый старший байт из 57-байтового хешированного и измененного ключа Edwards448, поскольку этот ключ Edwards448 всегда будет содержать нули в самом старшем байте. Обратите внимание, что поскольку все элементы поля имеют обратный порядок байтов, «самый старший байт» является последним байтом в массиве байтов.

  6. Интересно отметить, что реализация BouncyCastle X448 выполняет скалярное умножение с базовой точкой Curve448, запрашивая реализацию BouncyCastle Ed448 для выполнения скалярного умножения точно такого же скаляра на базовую точку Ed448. Затем BouncyCastle преобразует результат обратно в эквивалентную точку Curve448, используя ту же формулу, указанную в пункте 4 выше. Посмотреть код здесь.

флаг tr
Я не думаю, что (4) правильно; это будет «обычная карта», но edwards448 - это 4-изогения. Как упоминалось в ОП, это должно быть $ u = y ^ 2 / x ^ 2 $
knaccc avatar
флаг es
@Конрадо, спасибо, ты прав, я неправильно прочитал RFC7748. Как вы заметили, вариант Curve448 Эдвардса, к которому применяется моя старая формула, не совпадает с отображением, необходимым для Edwards448. Я исправил ответ и написал код, чтобы дважды проверить, работает ли ответ.
флаг in
@knaccc спасибо за ответ. У меня вопрос, связанный с (5). Правильно ли я понимаю, что нельзя напрямую использовать закрытый ключ существующей пары ключей для X448. Но вместо этого для получения секрета необходимо применить алгоритм, упомянутый в [RFC8032] (https://datatracker.ietf.org/doc/html/rfc8032#section-5.2.5) вплоть до шага 3 (умножение исключено). скаляр с? Для меня первые шаги такие же, как в [RFC7748] (https://datatracker.ietf.org/doc/html/rfc7748#section-5). Вы хотите сказать это в (5)?
knaccc avatar
флаг es
@dbog Да, верно, то, что я описал в пункте 5, описано в шагах 1-3 раздела 5.2.5 RFC8032. Это закрытый ключ, который вы используете для X448. Я не понимаю конкретно, что вы имеете в виду в RFC7748 - можете ли вы пояснить, пожалуйста?
флаг in
@knaccc спасибо за быстрый ответ. В RFC7748 в разделе 5 указано следующее: «Предполагается, что скаляры представляют собой случайно сгенерированные байты… Аналогично, для X448 установите два младших значащих бита первого байта в 0, а старший значащий бит последнего байта в 1. Это означает, что результирующее целое число равно вида 2^447 плюс четыре раза значение от 0 до 2^445 - 1 (включительно)."
knaccc avatar
флаг es
Да, соглашение о ключах X448 берет необработанный закрытый ключ, который вы ему даете, и делает `&= 0xFC` в первом байте и `|= 0x80` в последнем байте. Поскольку это уже было сделано с необработанным закрытым ключом Ed448 на этапах 1-3 пункта 5.2.5 RFC8032, как описано в моем пункте 5 выше, хешированный и измененный ключ Ed448, который вы используете для X448, не будет изменен X448. зажим, и будет совместим.
флаг in
@knaccc большое спасибо! Это ответ на мой вопрос :)

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

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