背景图

什么是Secp256k1

本文的阅读需要理解椭圆曲线,了解相关知识请查看我之前的博客文档。

secp256k1是指比特币中使用的ECDSA曲线的参数,并且在高效密码学标准(SEC)(Certicom Research,http://www.secg.org/sec2-v2.pdf)中进行了定义。

在比特币开始流行之前,secp256k1几乎从未使用过,但由于其几个不错的属性,它现在越来越受欢迎。大多数常用曲线具有随机结构,但secp256k1是以特殊的非随机方式构建的,可以实现特别高效的计算。因此,如果实施得到充分优化,它通常比其他曲线快30%以上另外,与流行的NIST曲线不同,secp256k1的常量是以可预测的方式选择的,这大大降低了曲线创建者在曲线中插入任何后门的可能性。

下面看一下这里面的函数图:

Secp256k1是secp256k1椭圆曲线y2 = x3 + 7在实数上的图形。请注意,因为secp256k1实际上是在字段Zp上定义的,所以它的图形实际上看起来像是随机分散的点,而不是像图中这样是连续的点。

技术细节

从标准摘录:

与Koblitz曲线secp256k1相关联的Fp上的椭圆曲线域参数由单元T=(p,a,b,G,n,h)指定,其中有限域Fp由下式定义:

1
2
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
= 2256 - 232 - 29 - 28 - 27 - 26 - 24 - 1

Fp上的曲线E:y2 = x3 + ax + b由下式定义:

1
2
a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007

压缩形式的基点G是:

1
G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

而在未压缩的形式是:

1
G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

最后,G的循环因子n(就是指nG=G)和辅因子h如下:

1
2
n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01

属性

  • secp256k1具有特征p,它的素数域定义为ℤp。常用的一些其他曲线具有特征2,并且在二进制伽罗瓦(Galois)域GF(2n)上定义,但secp256k1不是其中之一。
  • 因为一个常数为零,曲线方程中ax项始终为零,因此曲线方程变为y2 = x3 + 7。

也可以看看

secp256k1是什么(Pieter Wuille的比特币堆栈交换答案)

原文

Secp256k1

0%