
secp256k1指的是比特币公钥密码学中使用的椭圆曲线的参数,它的定义在有效密码学标准(Standards for Efficient Cryptography,SEC)中,参考Certicom Research:http://www.secg.org/sec2-v2.pdf。目前比特币中使用的是secp256k1和ECDSA算法。
在比特币之前,secp256k1几乎从未被使用过,但由于它具有几个不错的特性,目前正变得越来越受欢迎。大多数常用的曲线都具有随机结构,但secp256k1是以一种特殊的,非随机的方式构建的,因此可以实现高效的计算。如果实现充分优化,它通常比其它曲线的计算速度快30%以上。此外,与流行的NIST曲线不同,secp256k1的常数是以可预测的方式选择的,这显著降低了曲线创建者将任何类型的后门软件插入曲线的可能性。
这是在实数域上, 椭圆曲线secp256k1:y2 = x3 + 7 的图像。请注意,因为实际上secp256k1是在域Zp,上定义的,所以它的图实际上看起来像随机散点,而不像上图所示的那样。
技术细节
以下内容摘自《有效密码学标准》:
椭圆曲线在Fp上的主参数与 Koblitz 曲线 secp256k1 相关联,secp256k1由六元组 T = (p,a,b,G,n,h) 定义,其中有限域 Fp 定义为:
- p= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
- = 2256– 232 – 29 – 28 – 27 – 26 – 24 – 1
曲线 E: y2 = x3+ax+b 在 Fp 上定义为:
- a= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
- b= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
压缩形式的基点G为:
- G= 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
未压缩的形式是:
- G= 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
最后G的阶n和辅因子是:
- n= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
- h= 01
secp256k1的属性
- secp256k1具有特征值p,它定义在素数域ℤp上。其它一些常用的曲线具有特征值2,并且是在二进制伽罗瓦域GF(2n)上定义的,但secp256k1不是。
- 由于常数项a为零,故曲线方程中的ax项始终为零,因此曲线方程可化为y2= x3 + 7。