1. 有限域内的椭圆曲线
1.1 椭圆曲线直观图形
实数域内的椭圆曲线
y
2
=
x
3
+
7
y^2=x^3+7
y2=x3+7的展示如下:
有限域内的椭圆曲线
y
2
=
x
3
+
7
y^2=x^3+7
y2=x3+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
y2=x3+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
P1=(x1,y1),P2=(x2,y2),且x1!=x2,则有
P
3
=
P
1
+
P
2
=
(
x
3
,
y
3
)
P_3=P_1+P_2=(x_3,y_3)
P3=P1+P2=(x3,y3):
m
=
y
2
−
y
1
x
2
−
x
1
m=\frac{y_2-y_1}{x_2-x_1}
m=x2−x1y2−y1
x
3
=
m
2
−
x
1
−
x
2
x_3=m^2-x_1-x_2
x3=m2−x1−x2
y
3
=
m
(
x
1
−
x
3
)
−
y
1
y_3=m(x_1-x_3)-y_1
y3=m(x1−x3)−y1
2. secp256k1椭圆曲线定义
Bitcoin比特币使用的是 secp256k1椭圆曲线(其中的SEC代表Standards for Efficient Cryptography,256代表有限域的位数为256位),其具体参数如下:
- 曲线方程式为: y 2 = x 3 + 7 y^2=x^3+7 y2=x3+7(相当于Weierstrass Equation表示中的 a = 0 , b = 7 a=0,b=7 a=0,b=7)
- 有限域为: p = 2 256 − 2 32 − 977 p=2^{256}-2^{32}-977 p=2256−232−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) 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 n=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
2 256 2^{256} 2256是个非常大的数,约等于 1 0 77 10^{77} 1077,而整个银河系的原子数大约有 1 0 57 10^{57} 1057个。一万亿台计算机每皮秒( 1 0 − 12 10^{-12} 10−12秒)执行一万亿次操作,持续运行一万亿年,总操作数仍将小于 1 0 56 10^{56} 1056次。 A trillion computers doing a trillion operations every picosecond ( 1 0 − 12 10^{-12} 10−12 seconds) for a trillion years is still less than 1 0 56 10^{56} 1056 operations.
P
=
s
G
P=sG
P=sG,其中
s
∈
[
0
,
n
)
s\in[0,n)
s∈[0,n)为scalar私钥,
P
=
(
x
,
y
)
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)=(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 y2=x3+5(相当于Weierstrass Equation表示中的 a = 0 , b = 5 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 p=2224−232−212−211−29−27−24−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) G=(A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C,7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5)
- 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 n=010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7
以下为《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》