3

我正在尝试在 Google Go 的曲线 secp256k1 中实现 ECDSA。

Secp256k1 由 SECG 标准(SEC 2,第 2 部分,p上的推荐椭圆曲线域参数,第 15 页)根据参数 p、a、b、G 压缩、G 未压缩、n 和 h 定义。

Go 的加密库中,曲线由参数 P、N、B、Gx、Gy 和 BitSize 定义。如何将 SECG 给定的参数转换为 Go 需要的参数?

4

1 回答 1

3

ellipticGo 的包中,

ACurve表示 a=-3 的简式 Weierstrass 曲线。

所以,我们有形式的曲线y² = x³ - 3·x + B(其中两者都x取值yP P因此B是识别曲线的参数,其他参数仅对将用于加密的曲线元素的操作是必需的。

SECG 标准 SEC 2 将 secp256k1 曲线定义为y² = x³ + a·x + ba = 0,即有效y² = x³ + b

这些曲线是不一样的,与这里选择的b和B无关。

elliptic使用包的Curveclass无法进行转换,因为它仅支持某些特殊的曲线类别(这些带有a = -3),而 SEC 2 推荐其他类别的...k1曲线(曲线的 a = 0)。


另一方面,...r1名称中带有的曲线似乎具有a = -3. 实际上,secp256r1似乎与 as 中可用的曲线elliptic相同p256()。(我没有证明这一点,但至少 SEC 2 中基点的未压缩形式的一些十六进制数字是椭圆基点的坐标。)

于 2011-09-20T01:49:28.300 回答