ECC英文全称"Ellipse Curve Cryptography"
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥, v0 u+ J! C) U$ d
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。" Q! F" R5 q; k: ~' n+ `! {' W
从射影平面讲起
古希腊数学家欧几里得的《几何原本》提出了五条公设。! ?6 d5 g: v" S7 U. h' `
1.由任意一点到任意一点可作直线。
6 j! @8 V- r& m! L
2.一条有限直线可以继续延长。
3.以任意点为心及任意的距离可以画圆。
' d3 F% i$ Q. ~7 D/ ^' `
4.凡直角都相等。
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
" b* A* O a- s) \4 Y6 C* e- X: K
《几何原本》只有在第29个命题
% M2 m$ i2 j8 }
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角3 k7 @$ t3 k" i
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论- b Q# H& f9 b: i" N
2 C& W# K: `- I! I/ p' Z6 d% Q
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。9 c' Z3 R& g& {! C. m
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:9 w n0 O$ T* }. Z L% f
1.坚持第五公设,引出欧几里得几何。
* I6 [ j A E6 K5 v# D
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。$ T, d, B. d3 M* x7 t8 s3 Z- Q+ ^5 T+ I
( ?' e) J# m6 i6 ^0 s4 n* l
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)
* t0 a! t/ W" z# X: P [
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
1 @3 U5 T9 k5 E
了解非欧式几何,就可以理解平行线的交点。
$ F9 |* m3 p F/ P, Z `
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点
, n" ], z8 L* s4 R* z. t x
性质:# x% y* S" E0 r& o
; n X8 y) E5 X. A1 a2 M$ N7 e8 I
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)" r$ f7 N0 i6 k# G' F
3.平面上全体无穷远点构成一条无穷远直线
射影平面:平面上全体无穷远点与全体平常点构成射影平面" g+ L6 V" `/ y- b4 \: A) @( B
射影平面点的定义
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)$ I9 S# c4 s% J6 F7 ~
求点(1,2)在新的坐标体系下的坐标
∵X/Z=1 ,Y/Z=2(Z≠0)' E6 a! C( Y* a1 }9 [7 C( n
- R% N3 x$ \' B: `
∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠0
+ p" n9 D1 Q! ~+ t, D( m
即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标都是(1,2)在新的坐标体系下的坐标
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点
0 R5 h+ n6 R" q, k
∵ L1∥L2 所以有Z=0, X+2Y=0; P- I8 b5 s4 {/ n; U2 H
% Y2 S: P) i# P5 {
∴坐标为(-2Y:Y:0),Y≠0
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
! m! b; ]3 ^& Y$ K+ z; v7 k
椭圆曲线1 A$ }. u+ }6 e0 O6 j+ [" i
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合* h7 r- ]) f" i" Y E1 \
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z35 R" ?, Q5 }/ t3 u' N w4 q
1椭圆曲线方程是一个齐次方程
' M! i) y4 P" I, R+ D0 F
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0& p3 i' X y5 I
$ ^0 t' S4 m6 H, n/ @
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名
椭圆曲线示例" N$ H, L! a i! o; E& b2 i
非椭圆曲线示例
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),; L: ^8 O5 f6 L; }' w# e' X
椭圆曲线普通方程7 s6 C: `3 e" ]# g, z" v' g
椭圆曲线普通方程:
无穷远点 (0, Y, 0)/ ^, \3 b Q* T5 F. a5 b0 ^$ ]
8 a) N% D% C( J$ {' {5 f" f* p
平常点(x,y)斜率k:6 o: Z2 S7 `/ Q9 D1 }
椭圆曲线阿贝尔群: `& o3 R2 b, V% ~8 u
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
封闭性:?a,b∈G,a*b ∈ G
2 j- w/ [. ^% L; s# {) D
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)2 N5 M6 Y' y# V$ k) X
* a7 N2 ]: E* f" Y4 ~! o, p% f
单位元:ョe∈G, ?a ∈G,有ea = ae = a
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a
0 o8 A: \2 w6 X. N, G
同样在椭圆曲线也可以定义阿贝尔群。; n e+ Z1 L7 E0 Q5 W" E3 y
' ~' i3 U# W3 f
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律
同点加法2 T8 q) V$ y3 \
若有k个相同的点P相加,记作kP) ?; V) G2 I+ i( q% z% M5 [
! m' e- |* ]1 y! G' _' M2 T
P+P+P=2P+P=3P6 b9 @# j5 t* Z! u8 M# b
0 T9 b7 @8 _6 w8 A& V) P
有限域椭圆曲线 v3 w/ C, d* T& x
" ^# l7 B* i! D0 f0 ?/ j! n
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。9 ?8 X5 I6 P7 l4 |! S
我们给出一个有限域Fp
' r4 Y- K/ C" R R; a0 {% f6 Z& T
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-15 `/ w. A Q8 y% h& k
Fp的加法是a+b≡c(mod p)
! a; n P# E- a; i6 L5 m8 C5 K* q$ Q
Fp的乘法是a×b≡c(mod p)3 H0 `, @4 z# j+ z2 J: F3 ^
, Z! E- Y6 {# S8 G) d
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)" L1 f" W( p/ \
$ S5 o0 R* b( R4 C, _1 b
Fp的单位元是1,零元是 0
* O- _- U7 Y; [: s
Fp域内运算满足交换律、结合律、分配律8 O6 e" p* x* m
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]% H6 g2 S B7 ~# K1 K' v+ n
选择两个满足下列约束条件的小于p的非负整数a、b
5 W5 N& A5 ]! s, v# ?
Fp上的椭圆曲线同样有加法
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
# t2 O7 n4 Q1 L: R' M, \
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞, \. `+ x5 k$ \% [! E& B
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:+ Q9 H, l1 |# w& Q' v% u: g
9 Y e* \ ^- y+ ~7 m( w
x3≡k2-x1-x2(mod p)
y3≡k(x1-x3)-y1(mod p)' Y0 C! e& F. I) C/ Q9 q( ]) G
若P=Q 则 k=(3x2+a)/2y1mod p
! a" `/ ?8 `+ h. I
若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
补充:( O5 M6 B n/ q# c" K1 G9 \
-2^(-1) mod 23 进行两部分计算) Y$ e! V& F( p
- ~! r" A) |7 o) m& k
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元
. j/ q1 x+ M- M2 s; |9 t* Q
(2) 再算-A mod 23
(1) 计算第一步& L$ K% b3 g7 D) q# X0 U
4 B/ z/ z/ w# _! k/ x% _
根据有限域除法规则 2 * 2^(-1) = 1 mod 23
' u+ D! B$ R& u2 X* d0 y6 P
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12* m; S& \! X5 q3 u S4 M5 J* K# a
E' |5 P7 R# c) B, ~
(2) 计算第二步
-A mod 23 ==> -12 mod 23 即 23 -12 = 11
所以有
-2^(-1) mod 23 = 11" m. g$ y/ B8 B C X
有限域椭圆曲线点的阶
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶
若n不存在,则P是无限阶的
" c0 s g# c. h+ ^
计算可得27P=-P=(3,13), Y. P2 k& F7 F5 G: N
" S1 `3 L& X# z2 N3 ?
所以28P=O ∞ P的阶为28
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章
椭圆曲线加密
& Y: b+ W# Q( P7 l
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据; i) A0 ^: `8 M+ [
点G称为基点(base point)8 B) K. Q. M' `% O& M9 [; N. q
3 P. ^: s) L& ]* h
k(k# F" M7 \) i. w
% ~0 v+ @2 b% n P2 p
K为公开密钥(public key)) ~1 T4 Q: K) n3 w3 T
ECC保密通信算法; t4 K! N8 @" R# \& v( b
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=375 [& b! o2 S# U- m
2.Alice选择一个私有密钥k(k9 B0 D4 j" }, o+ f. ~' A2 s. t
- Q) r1 p* H5 F- U8 u
3.Alice将E和点K、G传给Bob( Y% H% O; G9 k f
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r9 r2 v3 H& J+ ], \, g( A
; O8 ?- t; q! |3 o {/ p$ E
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
6.Bob将C1、C2传给Alice/ {0 B$ e; j2 ?% {9 s. e
5 f' @* q# v/ v5 X% }; |
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)
5 s/ f$ U! ~; ~2 B/ m
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M
' ?# g) X1 P J
ECC技术要求, g9 `3 B9 p' Q7 z
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
参量选择要求:
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p)6 c; @( T2 b# h; H( C: v; Z1 w! A
ECC的应用& y" q) O& Z& c& n# O) N8 y
, M* S1 d! W U- P) c! J: v/ u
比特币系统选用的secp256k1中,参数为
" C0 g( o& n6 n2 w! |
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 ? 2^32 ? 2^9 ? 2^8 ? 2^7 ? 2^6 ? 2^4 ? 1
5 b; j/ I b0 O8 K; [. G& A% g
a = 0, b = 7
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
7 u8 w: C" c. O) e; H
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01" L B# {, w0 K+ u1 k9 z
+ W7 s' J h; T
ECC vs. RSA - 优缺点
% _# H, \5 E1 P
优点
( J1 i) j, |% m/ m2 S! ?4 {
安全性能更高2 V6 Z, J3 c( [% ^
160位ECC与1024位RSA、DSA有相同的安全强度1 O B0 M2 s9 @& t
' h9 T" {' _/ Q" V& L5 _
处理速度更快5 r8 z8 |' E# {# E! g8 q$ w
2 ?* F6 t6 y1 H1 I# x1 h1 m' ]7 U
在私钥的处理速度上,ECC远 比RSA、DSA快得多
带宽要求更低) l2 B3 O; b! t5 F+ t8 v
存储空间更小! d) g5 \2 c" `, k
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多
, u8 W2 i) P/ }9 ]# I# I" B
缺点
设计困难,实现复杂0 F3 P" P( U# j h$ ~, h3 f
/ t3 w5 T3 U2 c( u
如果序列号设计过短,那么安全性并没有想象中的完善% N6 p( C3 z+ N7 _# W" _
$ h8 I/ ^, g5 b/ @
成为第一个吐槽的人