如何使用 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 库生成各种密钥对?的主要内容,如果未能解决你的问题,请参考以下文章