cryptography - 如何将 ECDSA 曲线规范从 SEC2 形式转换为 Go 需要的形式?

标签 cryptography standards go elliptic-curve

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

Secp256k1 由 SECG 标准(SEC 2,第 2 部分,Recommended Elliptic Curve Domain Parameters over 𝔽p,第 15 页)根据参数 p、a、b、压缩的 G、未压缩的 G、n 和 h 定义。

Go's crypto library ,曲线由参数 P、N、B、Gx、Gy 和 BitSize 定义。如何将 SECG 给出的参数转换为 Go 需要的参数?

最佳答案

在Go的elliptic包中,

A Curve represents a short-form Weierstrass curve with a=-3.

因此,我们有 y² = x³ - 3·x + B 形式的曲线(其中 xy 都取值𝔽P). PB 因此是识别曲线的参数,其他仅用于对将用于密码学的曲线元素的操作。

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

这些曲线并不相同,与这里选择的b和B无关。

您的转换无法使用 elliptic 包的 Curve,因为它只支持一些特殊的曲线类(这些带有 a = -3),而 SEC 2 推荐来自其他类别的曲线(对于 ...k1 曲线,a = 0)。


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

关于cryptography - 如何将 ECDSA 曲线规范从 SEC2 形式转换为 Go 需要的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7478821/

相关文章:

算法加密可能吗?

c - 为什么 C 中的等式表达式中不允许使用结构?

python - 大于/小于 Python 中的比较

user-interface - 如何在 QML 中创建一个没有标题栏但带有关闭/最小化/最大化按钮的窗口?

windows - 确定是否可以在 windows 上删除文件

cryptography - 带有 ed25519 曲线签名的 BIP44

php - JavaScript 中的 AES 匹配 PHP 的 mcrypt

java - Android RSA 和 node.js RSA 加密/解密

c++ - C++ 引用中的函数描述与可能的实现

api - 构建和维护具有多个文件的 Golang 项目