secp256k1&secp224k1椭圆曲线

1. 有限域内的椭圆曲线

1.1 椭圆曲线直观图形

实数域内的椭圆曲线 y 2 = x 3 + 7 y^2=x^3+7 的展示如下:
在这里插入图片描述
有限域内的椭圆曲线 y 2 = x 3 + 7 y^2=x^3+7 的展示如下(为有限域内离散的点):
在这里插入图片描述

1.2 椭圆曲线上的点运算规则

根据《Elliptic Curves Number Theory And Cryptography 2n.pdf》书中2.2节The Group Law有,对于Weierstrass Equation形式表示的椭圆曲线 y 2 = x 3 + A x + B y^2=x^3+Ax+B ,求曲线上两个点 P 1 = ( x 1 , y 1 ) , P 2 = ( x 2 , y 2 ) x 1 ! = x 2 P_1=(x_1,y_1),P_2=(x_2,y_2),且x_1!=x_2 ,则有 P 3 = P 1 + P 2 = ( x 3 , y 3 ) P_3=P_1+P_2=(x_3,y_3)
m = y 2 y 1 x 2 x 1 m=\frac{y_2-y_1}{x_2-x_1}
x 3 = m 2 x 1 x 2 x_3=m^2-x_1-x_2
y 3 = m ( x 1 x 3 ) y 1 y_3=m(x_1-x_3)-y_1

2. secp256k1椭圆曲线定义

Bitcoin比特币使用的是 secp256k1椭圆曲线(其中的SEC代表Standards for Efficient Cryptography,256代表有限域的位数为256位),其具体参数如下:

  • 曲线方程式为: y 2 = x 3 + 7 y^2=x^3+7 (相当于Weierstrass Equation表示中的 a = 0 , b = 7 a=0,b=7
  • 有限域为: p = 2 256 2 32 977 p=2^{256}-2^{32}-977
  • Base point为: G = ( 79 B E 667 E F 9 D C B B A C 55 A 06295 C E 870 B 07029 B F C D B 2 D C E 28 D 959 F 2815 B 16 F 81798 , 483 A D A 7726 A 3 C 4655 D A 4 F B F C 0 E 1108 A 8 F D 17 B 448 A 68554199 C 47 D 08 F F B 10 D 4 B 8 ) G= (79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
  • Order为: n = F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F E B A A E D C E 6 A F 48 A 03 B B F D 25 E 8 C D 0364141 n=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

2 256 2^{256} 是个非常大的数,约等于 1 0 77 10^{77} ,而整个银河系的原子数大约有 1 0 57 10^{57} 个。一万亿台计算机每皮秒( 1 0 12 10^{-12} 秒)执行一万亿次操作,持续运行一万亿年,总操作数仍将小于 1 0 56 10^{56} 次。 A trillion computers doing a trillion operations every picosecond ( 1 0 12 10^{-12} seconds) for a trillion years is still less than 1 0 56 10^{56} operations.

P = s G P=sG ,其中 s [ 0 , n ) s\in[0,n) 为scalar私钥, P = ( x , y ) P=(x,y) 为公钥。
P = ( x , y ) = ( 5 C B D F 0646 E 5 D B 4 E A A 398 F 365 F 2 E A 7 A 0 E 3 D 419 B 7 E 0330 E 39 C E 92 B D D E D C A C 4 F 9 B C , 6 A E B C A 40 B A 255960 A 3178 D 6 D 861 A 54 D B A 813 D 0 B 813 F D E 7 B 5 A 5082628087264 D A ) P=(x, y) = (5CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC, 6AEBCA40BA255960A3178D6D861A54DBA813D0B813FDE7B5A5082628087264DA) 为例,在实际传输存储时,需要将P的x和y坐标序列化,有两种表示方式:

  • 无压缩方式:以“04”(1字节)为首依次拼接x坐标(32字节)和y坐标值(32字节),共需要65字节。045CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC6AEBCA40BA255960A3178D6D861A54DBA813D0B813FDE7B5A5082628087264DA
  • 压缩方式:若已知x坐标,y坐标只有两种可能——正数or负数(有限域内即为奇数or偶数),可增加标志位,若y为偶数,则以“02”开始;若y为奇数,则以“03”开始。后面紧接x坐标值即可。总共仅需33字节。025CBDF0646E5DB4EAA398F365F2EA7A0E3D419B7E0330E39CE92BDDEDCAC4F9BC

3. secp224k1椭圆曲线定义

根据《SEC 2: Recommended Elliptic Curve Domain Parameters》,有secp224k1椭圆曲线参数如下:

  • 曲线方程式为: y 2 = x 3 + 5 y^2=x^3+5 (相当于Weierstrass Equation表示中的 a = 0 , b = 5 a=0,b=5
  • 有限域为: p = 2 224 2 32 2 12 2 11 2 9 2 7 2 4 2 1 p=2^{224} − 2^{32} − 2^{12} − 2^{11} − 2^9 − 2^7 − 2^4 − 2 − 1
  • Base point为: G = ( A 1455 B 334 D F 099 D F 30 F C 28 A 169 A 467 E 9 E 47075 A 90 F 7 E 650 E B 6 B 7 A 45 C , 7 E 089 F E D 7 F B A 344282 C A F B D 6 F 7 E 319 F 7 C 0 B 0 B D 59 E 2 C A 4 B D B 556 D 61 A 5 ) G= ( A1455B33 4DF099DF 30FC28A1 69A467E9 E47075A9 0F7E650E B6B7A45C, 7E089FED 7FBA3442 82CAFBD6 F7E319F7 C0B0BD59 E2CA4BDB 556D61A5)
  • Order为: n = 010000000000000000000000000001 D C E 8 D 2 E C 6184 C A F 0 A 971769 F B 1 F 7 n=01 00000000 00000000 00000000 0001DCE8 D2EC6184 CAF0A971 769FB1F7

以下为《SEC 2: Recommended Elliptic Curve Domain Parameters》中的secp系列曲线如下:
在这里插入图片描述
在这里插入图片描述

参考资料:
[1] 《The Orders of Elliptic Curves y2 = x3 + b, b ∈ F∗q》
[2] https://eng.paxos.com/blockchain-101-elliptic-curve-cryptography
[3] 《SEC 2: Recommended Elliptic Curve Domain Parameters》

发布了154 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/102005945