如何使用 secp256k1 C 库生成各种密钥对?

Posted

技术标签:

【中文标题】如何使用 secp256k1 C 库生成各种密钥对?【英文标题】:How to generate various key-pair by using secp256k1 C library? 【发布时间】:2020-11-23 08:25:09 【问题描述】:

我只是使用secp256k1 C lib编写一个小测试程序,目标是生成各种随机ecdsa密钥对,通过使用secp256k1-zkp API,只需跟进tests.c中的一些示例。

然而,有点惊讶的是,我发现我无法获得不同的密钥对,每次运行测试程序时,我都会得到完全相同的私钥(之后是相同的公钥)。

这没有意义,但我不知道问题出在哪里,有人可以提供帮助和建议吗?

以下是我正在使用的示例代码:

random_scalar_order_test(&rand);
secp256k1_scalar_get_b32(privkey, &rand);
CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
CHECK(secp256k1_ec_pubkey_create(ctx, pubkey, &pubkeylen, 
                                 privkey, (secp256k1_rand32() & 3) != 0) == 1);

编译后看,每次我运行测试,前两行代码总是提供完全相同的私钥,所以公钥也会固定。 是否有任何 rand seed API 可用于每次调用时生成不同的私钥?

【问题讨论】:

【参考方案1】:

曲线公钥总是不同的,即使是相同的私钥。这是正常行为。

【讨论】:

感谢您的回答,我不记得我原来的问题的解决方案是什么——但这应该是随机生成 pubkey 的东西。关于你的回答——我认为这是不正确的,只要你有一个固定且有效的私钥,你就应该有一个完全固定的公钥——这条规则适用于所有公钥加密机制。

以上是关于如何使用 secp256k1 C 库生成各种密钥对?的主要内容,如果未能解决你的问题,请参考以下文章

Secp256k1 库

libsecp256k1比特币密码算法开源库

Mbedtls_pk_parse_public_key 返回 0xfffffff0 和 secp256k1 公钥

Python edcsa SECP256k1 未正确签名

Secp256k1 曲线签名接近预期签名但缺少 2 段

libsecp256k1比特币密码算法开源库