+ ], z3 T% J8 `' U! D: Z
ECC英文全称"Ellipse Curve Cryptography"
2 n- J7 V# \% B2 ~8 `9 v
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。
从射影平面讲起
古希腊数学家欧几里得的《几何原本》提出了五条公设。" f; [: n3 m1 r9 D8 b& T
5 W; O+ R! \5 I" `% u
1.由任意一点到任意一点可作直线。# h/ Q: @: M$ o
/ B/ Y/ E7 R2 j( ~3 J
2.一条有限直线可以继续延长。
( s; R$ q m7 ?- N" F
3.以任意点为心及任意的距离可以画圆。
4.凡直角都相等。
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
% w {/ T. o4 d2 B/ P0 {; l6 x3 C
《几何原本》只有在第29个命题
. e( f! `5 ?% f: t
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角2 h2 ?! ?* F! H# k- l5 V
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论
8 q) v/ p. M( M; T
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。
$ g: [8 D0 X* I+ [, L) u6 @6 M
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:' S# b" j2 Q: W1 q" K2 ?: b
1.坚持第五公设,引出欧几里得几何。
' B* M1 b9 u" e/ n
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。
X& j2 V1 o( }7 k) ~1 s% f
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)
: \. D/ q& ^" ]2 o/ w2 P9 {
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
了解非欧式几何,就可以理解平行线的交点。5 v) ^( w- n) R, f
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点
" `. l0 R% p# \: z+ Z$ R# s
性质:- Q' Y. M$ p; b3 N6 R: ]. p% A
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点7 Q W: n. K9 @# V H" i! O o8 Q0 Z
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)7 C3 p0 b6 {. b W# i" A' y7 l
+ {* n3 j1 x. h7 E* N& @
3.平面上全体无穷远点构成一条无穷远直线# r8 M$ \3 D0 e9 e) r. l6 D
射影平面:平面上全体无穷远点与全体平常点构成射影平面
射影平面点的定义
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)/ {* d+ L. K& ^+ c9 O) a; m* {0 a, F
求点(1,2)在新的坐标体系下的坐标9 x d1 C$ K( S$ v
: {2 _3 P/ U; P8 ^
∵X/Z=1 ,Y/Z=2(Z≠0)
∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠0
即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标都是(1,2)在新的坐标体系下的坐标: q: c" z3 v- P- o, g$ j5 `) s! e0 K0 U
! [& I4 c- h; y7 y9 W
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点
∵ L1∥L2 所以有Z=0, X+2Y=0, R7 g6 V2 ]7 z# E
A( F3 C( \/ a9 T# |$ z
∴坐标为(-2Y:Y:0),Y≠0
. R3 F) b$ w% Y. v' V
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
椭圆曲线
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合
+ ?( W# f+ Z4 _
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
/ c9 T3 k% Z( |% ?
1椭圆曲线方程是一个齐次方程2 L8 b8 X5 K( o+ @/ |# J2 B" l v& i
3 v( p( X' J6 H2 O7 A' {$ e0 j
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名6 f/ M5 }, r. i0 ^
% S7 C B& f: h! w+ V
椭圆曲线示例
非椭圆曲线示例
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),/ i/ C! ^8 @% q5 Z+ \' f$ F( b
% |8 i s0 c9 C8 ]
椭圆曲线普通方程# W6 j* S8 @8 H9 k2 q
1 ?, j+ z( Q' B. Z; b; }4 g' M
椭圆曲线普通方程:
无穷远点 (0, Y, 0)
% Q, f( E# {; u O1 a2 D; k0 K1 j
平常点(x,y)斜率k:% n7 l8 Z- l9 \0 c5 o. f& d4 o. J
椭圆曲线阿贝尔群
' v* ?2 D6 a6 l
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。
. X* i1 q! D% p4 S4 t( r3 _
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
! o0 L% j2 o6 q! P1 i: A9 H& |
封闭性:?a,b∈G,a*b ∈ G' |4 e( [# Y* n/ k6 k
, N! H {1 V; D, i) a' Y( d
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)7 P7 _1 g: Y! U1 |# O
1 W1 F3 x) ?* E' \
单位元:ョe∈G, ?a ∈G,有ea = ae = a
. {" y+ s0 H1 S+ K$ s) v* B% Y
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e- b9 }% ^ R/ ?1 P$ H/ g( C
" y2 h8 c$ V! s2 q6 P
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a
同样在椭圆曲线也可以定义阿贝尔群。% |9 J; d$ X& g
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律% D; ^+ ^5 J3 s; W2 ]$ \8 T9 U
同点加法 b) l1 r3 }2 T, W4 t$ ?3 H% J) |
若有k个相同的点P相加,记作kP, j* Q' ~9 x( M( K
0 o6 Q, d/ }# {( h6 f4 C5 @
P+P+P=2P+P=3P2 _4 s& a' Q2 b) p# c. F+ s
有限域椭圆曲线
, `$ Q4 [% ~1 Z1 i3 [( p
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
我们给出一个有限域Fp; R5 h2 y! q4 U3 l4 y4 u8 P
b% ? b- k& j' p+ l2 q
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1, A; U2 {( U j; D
1 r3 m, M# k% }+ ?
Fp的加法是a+b≡c(mod p)
Fp的乘法是a×b≡c(mod p)7 \4 ?# q _+ B+ f+ [: h% z [
" Y% Z) F9 ^( `8 \3 z1 ^8 c9 J" U
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)
Fp的单位元是1,零元是 0
Fp域内运算满足交换律、结合律、分配律( _1 y, D8 A& W
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]4 P0 i4 U3 Y' U
选择两个满足下列约束条件的小于p的非负整数a、b( F: x' H7 p4 I$ }
Fp上的椭圆曲线同样有加法- n& O) B! m) L" a# d! K
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P* ~8 g2 k# `+ K4 D% ^
, z# x+ q7 |+ d7 p4 J7 }8 ^* k
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞" j1 p8 t, G8 U. |+ k
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:
x3≡k2-x1-x2(mod p)6 ]' N8 M5 ]0 u: J- u
0 ^. L' E4 c2 H" P0 R* T; V9 K
y3≡k(x1-x3)-y1(mod p)
若P=Q 则 k=(3x2+a)/2y1mod p' a1 h0 r$ k1 Q4 s/ Y+ O
若P≠Q,则k=(y2-y1)/(x2-x1) mod p
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P
补充:' n6 U) e$ A8 K$ v8 C& h& m
-2^(-1) mod 23 进行两部分计算
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元
6 w5 T9 E: _ F) g8 X% I0 O
(2) 再算-A mod 23' B9 D; U: N9 @, r7 L
. l* D# X; r9 o9 @4 s" u5 k7 _
(1) 计算第一步
根据有限域除法规则 2 * 2^(-1) = 1 mod 233 d- P: H/ W- t/ c, n
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12
(2) 计算第二步
, ?# P, A6 [( P5 Z* q) e
-A mod 23 ==> -12 mod 23 即 23 -12 = 11, O- [$ h5 D$ T" B
8 ]) P2 j7 Z' g: \0 ~; k3 M6 s
所以有
1 F# Y* s3 Z2 ?* J; R
-2^(-1) mod 23 = 11
有限域椭圆曲线点的阶
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶: A8 L4 o2 v5 d$ E3 E9 s. Y
若n不存在,则P是无限阶的
+ s5 y* y+ K+ m& k+ i
计算可得27P=-P=(3,13)
# Q2 A8 x- e0 a E, h6 {' ]% P. m
所以28P=O ∞ P的阶为28$ j$ B& ^/ K: D/ \% j* N; d3 }
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章
. p# j8 s& ]- k! t
椭圆曲线加密6 A# k4 ~" B, [8 O" P
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据7 j; X6 p9 }: N4 i- ~
* c2 ~+ C) w+ _$ \
点G称为基点(base point)+ j# o3 S) A5 p# C% D2 m
0 ]5 k# N/ @6 }
k(k: C9 h# {9 r4 l( W1 q7 D
K为公开密钥(public key)* v; g: \. \# q7 i) q
ECC保密通信算法
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37* n0 t/ r u& N* R, N: c
& R: [" l6 ^% m8 I+ `
2.Alice选择一个私有密钥k(k
3.Alice将E和点K、G传给Bob
% G9 T: |! I" w1 N# W) |
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r
% O5 G9 g, ]- H2 Z3 D- `
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
2 J0 ?; B" z; I2 s. O$ I
6.Bob将C1、C2传给Alice5 b( V( [- C: @( L5 x7 D; E
o/ g5 L, ^. B+ U
7.Alice收到信息后,计算C1-kC2,结果就应该是点M C1-kC2 =(6,12)-25C2 =(6,12)-25*6G =(6,12)-2G =(6,12)-(27,27) =(6,12)+(27,2) =(3,28)2 v* C4 Y; A- q7 l# f1 q) n
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M5 p' ]# u4 ]7 y# M' x7 F) [( I
ECC技术要求# ?% F; C0 p7 [) O: x
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分7 x0 S2 S0 L( w& s T2 U+ ?
参量选择要求:- t4 a8 P/ J1 _
2 q$ v/ j' C+ f! P3 c
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p), y D2 v' i3 p3 \; D
8 {) ?0 m1 s. O l( n
ECC的应用* s5 M( Q1 x9 t
% E4 I7 N' j, p
比特币系统选用的secp256k1中,参数为
& P5 @4 T! G a5 l7 ` Z4 c
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 ? 2^32 ? 2^9 ? 2^8 ? 2^7 ? 2^6 ? 2^4 ? 1
a = 0, b = 7
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8); K! ^: v6 o% A, R+ `3 h& W
/ R6 l: J/ a- B7 n( w, @
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01
ECC vs. RSA - 优缺点' l* H5 _( S! |/ T* b
优点
) u8 f% W: b9 K% Q+ x
安全性能更高9 k7 J- d, U1 V/ a6 F) G' i
160位ECC与1024位RSA、DSA有相同的安全强度
处理速度更快
在私钥的处理速度上,ECC远 比RSA、DSA快得多% m% X6 A" t. L2 s( C$ ~3 f/ x2 |
& l' `4 S( w/ L, Z/ _* j
带宽要求更低
* l$ z. i) \% d
存储空间更小 h) e1 a) Y4 ^& e/ O4 {0 r$ ^
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多# @8 `+ _( d4 [* i
4 Q* Z$ c* Y/ _0 ~. n8 B9 R# i9 T" n
缺点; [4 u, v5 V* Z) A4 l! {3 S/ _
设计困难,实现复杂
如果序列号设计过短,那么安全性并没有想象中的完善
$ v+ `/ m1 K# N
成为第一个吐槽的人