OpenSSL ECSA 签名和 Libsecp256k1

问题描述

我在 secp256k1 曲线上使用 OpenSSL 进行 ECDSA 数字签名。问题是,OpenSSL 在签名中引入了一个随机熵,因此每次对完全相同的数据进行签名时,都会得到一个不同的签名。

另一方面,Libsecp256k1 使用 RFC6979 作为随机数,它本质上是消息的散列,作为签名生成中的熵。因此,每次您签署同一封邮件时,您都会获得相同的签名。

OpenSSL 有一个名为 ECDSA_do_sign_ex 的函数,它有一个原型:

ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst,int dgstlen,const BIGNUM *kinv,const BIGNUM *rp,EC_KEY *eckey);

但是在 OpenSSL 的文档中没有任何地方解释 kinvrp BIGNUM 是什么。它只是说...“应该设置为 NULL”。

我想要做的是通过向 OpenSSL 提供相同的 RFC6979 熵,使 OpenSSL 的 ECDSA 签名与 Libsecp256k1 签名相同。这可以通过以某种方式通过 kinv/rp 向 OpenSSL 提供 RFC6979 熵来完成吗?有谁知道如何做到这一点,或者知道这是否可行?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)