Рейтинг:2

Использование одного и того же закрытого ключа для X25519 и ECDSA (с использованием curve25519)

флаг ru
jjd

Я пишу приложение, в котором необходимы как шифрование/дешифрование, так и подпись/проверка, и я выбираю X25519 в качестве алгоритма согласования ключей, который будет создавать ключ для шифрования, и ECDSA для подписи сообщений.

Генерация ключа: я генерирую закрытый ключ curve25519 из мнемоники (поэтому у меня есть случайный 32-байтовый закрытый ключ).

Теперь у меня есть массив 32 байта, я хочу использовать этот массив байтов массива как для шифрования, так и для подписи, проблема, которая у меня есть, для X25519 мне нужно применить зажим ключа, чтобы этот закрытый ключ был действительным, что выглядит так:

закрытый ключ[0] &= 248; // сбрасываем 3 младших бита
privateKey[31] &= 127 // сбросить старший бит
privateKey[31] |= 64 // устанавливаем второй старший бит

Но для ECDSA ключ должен быть в диапазоне $[1, Н]$, где N (для кривой 25519) равно $2^{252}$ + небольшой фактор, и поэтому мне нужно преобразовать мой 32-байтовый массив в число, которое подходит для этого диапазона.

У меня есть несколько вопросов:

  • Почему закрытый ключ X25519 не должен соответствовать диапазону $[1, Н]$?
  • Кроме того, почему не важно применить функцию фиксации ключа, используемую в X25519, к ключу, используемому для ECDSA?
knaccc avatar
флаг es
Не используйте один и тот же закрытый ключ напрямую для подписи и шифрования. Используйте HKDF-Expand для равномерно случайного 32-байтового главного ключа, чтобы сгенерировать отдельные ключи подписи и шифрования. Затем позвольте вашим библиотекам сжимать или уменьшать их по модулю N любыми способами, которые они сочтут необходимыми.
Maarten Bodewes avatar
флаг in
Привет jjd и добро пожаловать. Я удалил Bouncy Castle / часть реализации; это для [so] или, может быть, [codereview.se]; тут не в тему. Пожалуйста, перечитайте и очистите свой вопрос перед публикацией, пользователи не должны выполнять, например. Капитализация для вас.
jjd avatar
флаг ru
jjd
Спасибо, knaccc, ваш ответ был полезен!
jjd avatar
флаг ru
jjd
Я обязательно буду следовать правилам в следующий раз, когда мне будет плохо.
kelalaka avatar
флаг in
Отвечает ли это на ваш вопрос? 1) [Генерация открытого ключа для Ed25519 vs X25519] (https://crypto.stackexchange.com/questions/76156/public-key-generation-for-ed25519-vs-x25519) 2) [Использование одного ключа Ed25519 для шифрования и подпись] (https://crypto.stackexchange.com/q/37896/18298) 3) [Использование одного и того же закрытого ключа для X25519 и ECDSA (с использованием curve25519)] (https://crypto.stackexchange.com/q/ 63732/18298)
jjd avatar
флаг ru
jjd
это так, спасибо!
Рейтинг:3
флаг gb

Почему закрытый ключ X25519 не должен соответствовать диапазону $[1,N]$?

Сбрасывая старший бит и три младших бита, вы фактически ограничиваете ключ только 252 битами. Когда ты сказал $N$ является $2^{252}$ + небольшой фактор, вы говорите о заказе подгруппа используется x25519, а не полный порядок группы кривых. Эта подгруппа имеет индекс (или кофактор) 8. Сброс трех младших битов заставляет секрет быть кратным 8, то есть он будет лежать в этой большой подгруппе простого порядка.

Кроме того, почему не важно применить функцию фиксации ключа, используемую в X25519, к ключу, используемому для ECDSA?

Насколько мне известно, Curve25519 не используется для ECDSA. Вы имели в виду EdDSA (в частности, ed25519)?

jjd avatar
флаг ru
jjd
Спасибо за Ваш ответ! вы правы, я думаю, что кривая 25519 для ECDSA - плохой выбор с моей стороны, я сейчас думаю об использовании EdDSA, я знаю, что EdDSA и X25519 используют разные кривые, но они используют одну и ту же функцию зажима клавиш, верно, это безопасно использовать один и тот же закрытый ключ (но разные открытые ключи) как для EdDSA, так и для X25519, или безопаснее, если я получу два разных ключа, используя мои случайные 32 байта?
meshcollider avatar
флаг gb
Вы обязательно должны получить два отдельных ключа. Повторное использование ключей почти всегда имеет непредвиденные сложности с безопасностью. Кстати, не забудьте принять и проголосовать за ответ, если он помог!
jjd avatar
флаг ru
jjd
только что сделал, мне нужно как минимум 15 репутации, чтобы проголосовать, спасибо за ответ!
dave_thompson_085 avatar
флаг cn
@jjd: на самом деле Ed25519 (популярный пример EdDSA) и X25519 используют одну и ту же _curve_ математически, но разные представления - X25519 использует форму Монтгомери, а Ed25519 использует форму Эдвардса, и эти формы имеют разные коэффициенты и расчеты, но они то, что математики назвать бирационально эквивалентными.См. https://datatracker.ietf.org/doc/html/rfc7748.

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

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