C++ 组合ECDSA密钥

C++ 组合ECDSA密钥,c++,openssl,addition,ecdsa,modular-arithmetic,C++,Openssl,Addition,Ecdsa,Modular Arithmetic,如何将两个ECDSA私钥/公钥对合并为一个?我知道它是通过openssl中的模块化加法完成的,我只是不明白它是如何工作的。有人能给我解释一下吗?ECDSA私钥-只是一个数字,一个基点的顺序。 您只需添加两个私钥(即数字),减少和模基点顺序,并将基点按此顺序求幂。 但是为什么需要这个呢?您可以通过添加两个私钥来实现这一点 privkey = privateA + privateB (mod order) 或者,在OpenSSL代码中: BN_mod_add_quick(privkey, priv

如何将两个ECDSA私钥/公钥对合并为一个?我知道它是通过openssl中的模块化加法完成的,我只是不明白它是如何工作的。有人能给我解释一下吗?

ECDSA私钥-只是一个数字,一个基点的顺序。 您只需添加两个私钥(即数字),减少和模基点顺序,并将基点按此顺序求幂。
但是为什么需要这个呢?

您可以通过添加两个私钥来实现这一点

privkey = privateA + privateB (mod order)
或者,在OpenSSL代码中:

BN_mod_add_quick(privkey, privateA, privateB, order);
这里,
order
是最小的数字,其中,
order=s-j
,因此,对于椭圆曲线上的点p,
sP=jP
。新私钥的公钥是
pubkey=privkey*G
,或者:

EC_POINT_mul(group, pubkey, privkey, NULL, NULL, ctx);

order
和generator point
G
的值是曲线参数,在创建和设置
(一个EC_组对象)时设置。

用于分割密钥零信任密钥生成。privateA+privateB==publicA+publicB。不过,我不明白你的答案。基点的顺序是什么意思?基点的顺序是,嗯,只是基点的顺序:)或者,曲线的顺序,椭圆曲线点组的顺序,不知道它有什么同义词。基点G自身加N次(其中N为顺序)将产生相同的点G。