1. 有限域内的椭圆曲线
1.1 椭圆曲线直观图形
实数域内的椭圆曲线
y
2
=
x
3
+
7
y^2=x^3+7
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
y 2 = x 3 + A x + 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 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)
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}
m = x 2 − x 1 y 2 − y 1
x
3
=
m
2
−
x
1
−
x
2
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
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
y 2 = x 3 + 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 = 2 2 5 6 − 2 3 2 − 9 7 7
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 = ( 7 9 B E 6 6 7 E F 9 D C B B A C 5 5 A 0 6 2 9 5 C E 8 7 0 B 0 7 0 2 9 B F C D B 2 D C E 2 8 D 9 5 9 F 2 8 1 5 B 1 6 F 8 1 7 9 8 , 4 8 3 A D A 7 7 2 6 A 3 C 4 6 5 5 D A 4 F B F C 0 E 1 1 0 8 A 8 F D 1 7 B 4 4 8 A 6 8 5 5 4 1 9 9 C 4 7 D 0 8 F F B 1 0 D 4 B 8 )
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 = 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 4 8 A 0 3 B B F D 2 5 E 8 C D 0 3 6 4 1 4 1
2
256
2^{256}
2 2 5 6 是个非常大的数,约等于
1
0
77
10^{77}
1 0 7 7 ,而整个银河系的原子数大约有
1
0
57
10^{57}
1 0 5 7 个。一万亿台计算机每皮秒(
1
0
−
12
10^{-12}
1 0 − 1 2 秒)执行一万亿次操作,持续运行一万亿年,总操作数仍将小于
1
0
56
10^{56}
1 0 5 6 次。 A trillion computers doing a trillion operations every picosecond (
1
0
−
12
10^{-12}
1 0 − 1 2 seconds) for a trillion years is still less than
1
0
56
10^{56}
1 0 5 6 operations.
P
=
s
G
P=sG
P = s G ,其中
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 ) = ( 5 C B D F 0 6 4 6 E 5 D B 4 E A A 3 9 8 F 3 6 5 F 2 E A 7 A 0 E 3 D 4 1 9 B 7 E 0 3 3 0 E 3 9 C E 9 2 B D D E D C A C 4 F 9 B C , 6 A E B C A 4 0 B A 2 5 5 9 6 0 A 3 1 7 8 D 6 D 8 6 1 A 5 4 D B A 8 1 3 D 0 B 8 1 3 F D E 7 B 5 A 5 0 8 2 6 2 8 0 8 7 2 6 4 D A ) 为例,在实际传输存储时,需要将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
y 2 = x 3 + 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 = 2 2 2 4 − 2 3 2 − 2 1 2 − 2 1 1 − 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)
G = ( A 1 4 5 5 B 3 3 4 D F 0 9 9 D F 3 0 F C 2 8 A 1 6 9 A 4 6 7 E 9 E 4 7 0 7 5 A 9 0 F 7 E 6 5 0 E B 6 B 7 A 4 5 C , 7 E 0 8 9 F E D 7 F B A 3 4 4 2 8 2 C A F B D 6 F 7 E 3 1 9 F 7 C 0 B 0 B D 5 9 E 2 C A 4 B D B 5 5 6 D 6 1 A 5 )
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 = 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 D C E 8 D 2 E C 6 1 8 4 C A F 0 A 9 7 1 7 6 9 F B 1 F 7
以下为《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》