Как я могу объединить две частные / открытые пары ключей ECDSA в одну? Я знаю, что это сделано с модульным добавлением в openssl, я просто не понимаю, как это работает. Кто-нибудь может мне это объяснить?
Вы можете сделать это, добавив два закрытых ключа
privkey = privateA + privateB (mod order)
или в коде OpenSSL:
BN_mod_add_quick(privkey, privateA, privateB, order);
Вот order
наименьшее число, где order = s - j
такой, что sP = jP
для точки P на эллиптической кривой. Открытый ключ вашего нового закрытого ключа pubkey = privkey * G
, или же:
EC_POINT_mul(group, pubkey, privkey, NULL, NULL, ctx);
Значения order
и генератор точки G
являются параметрами кривой и задаются при создании и настройке group
(объект EC_GROUP).
Закрытый ключ ECDSA — это просто число, порядок базовой точки.
Вы можете просто добавить два закрытых ключа (то есть числа), уменьшив сумму по модулю порядка базовых точек и возведя в степень базовую точку для этого порядка.
Но зачем тебе это?