组合 ECDSA 密钥

Posted

技术标签:

【中文标题】组合 ECDSA 密钥【英文标题】:Combining ECDSA keys 【发布时间】:2013-04-24 17:10:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你可以通过添加两个私钥来做到这一点

privkey = privateA + privateB (mod order)

或者,在 OpenSSL 代码中:

BN_mod_add_quick(privkey, privateA, privateB, order);

这里orderorder = s - j 的最小数字,因此sP = jP 是椭圆曲线上的点P。你的新私钥的公钥是pubkey = privkey * G,或者:

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

order和生成点G的值是曲线参数,在创建和设置group(一个EC_GROUP对象)时设置。

【讨论】:

【参考方案2】:

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

【讨论】:

用于密钥的拆分密钥零信任生成。私有A + 私有B == 公共A + 公共B。不过,我不听从你的回答。基点的顺序是什么意思? 基点的顺序是,嗯,只是基点的顺序:) 或者,曲线的顺序,椭圆曲线点组的顺序,不知道它有什么其他同义词。基点 G 与自身相加 N 次(其中 N 是阶数),将产生相同的点 G。

以上是关于组合 ECDSA 密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 golang 加密写出 ecdsa 密钥?

ECDSA密钥

C# ecdsa 签名 - 我可以选择哪个密钥规范?

无法从 Java 读取 OpenSSL 生成的 ECDSA 密钥:InvalidKeySpecException

Github - 删除 ECDSA-SK 密钥

如何将 ECDSA 密钥转换为 PEM 格式