【问题标题】:Is there a preferred function for generating a private/public key-pair for an elliptic curve?是否有为椭圆曲线生成私钥/公钥对的首选函数?
【发布时间】:2021-08-02 02:14:52
【问题描述】:

以下两个功能之一是否优于另一个? 它们是否都做同样的事情,只是实现方式不同?

两者似乎返回相同的值,只是在不同的包中。

我想为以下曲线创建一个私钥/公钥对

提前致谢! :)

【问题讨论】:

    标签: go cryptography elliptic-curve key-generator


    【解决方案1】:

    在椭圆曲线密码学中,私钥只是某个范围内的一个大随机数,通常是0 - 2^256,但范围是由曲线本身定义的,通常是某个循环子群的顺序,或者处理时的整个曲线顺序素数曲线。

    ECC 用于许多事情,椭圆曲线 Diffie Hellman、椭圆曲线签名 (ECDSA) 它们都需要给定私钥与曲线的生成点 的标量 乘法 来建立公共键

    出于各种安全和效率原因,这些标量乘法函数的实现方式不同。

    简单来说就是三种乘法函数:

    • 固定基数
    • 基于变量的
    • 双碱基

    ECDSA 使用固定基数,ECDH 使用可变基数。

    这里有直觉,在 ECDH 期间,您必须将您的私钥乘以其他人的“变量”公共点。

    无论如何,要使用 Brainpool,您必须生成一个适合该曲线顺序的密钥,并将其乘以曲线生成点。通常大多数 API 都允许指定曲线。

    顺便说一句,别用Brainpool,它sucks

    【讨论】:

    • 那么@rico,你想使用密钥进行签名吗?如果是这样,请使用 ECDSA.generateKey 并将 Bp512 作为曲线传递
    • 另外,私钥不是生成器。
    • 我在改句的时候不小心按了回车...所以这是实际的评论:非常感谢您的详细评论!我想我理解你写的大部分内容,但我不知道为什么会选择一个特定的乘法算法而不是另一个......因为我只是在做 DH,我想我会使用 elliptic 实现。你能解释一下为什么我会选择一种实现而不是另一种吗?另外,我将曲线切换到 Ed448。 PS:我认为私钥是生成点的标量乘数,用于通过组操作导出公钥。
    • 这就是我生成密钥和获取共享数据的方式:pastebin.com/ANVSTQ7r
    • 稍后会看看这个并给你反馈。
    猜你喜欢
    • 2016-07-19
    • 2020-03-04
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多