2 F. w+ j/ s2 E% Z1 I" V
ECC英文全称"Ellipse Curve Cryptography"4 B0 e2 Z5 o; t+ j" {
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥& |3 s6 K# T) [4 }- O1 t5 n
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。
从射影平面讲起
古希腊数学家欧几里得的《几何原本》提出了五条公设。
7 S7 E! R! }$ w$ ]" H+ {1 c
1.由任意一点到任意一点可作直线。
' Z v4 k( D8 D
2.一条有限直线可以继续延长。3 X" h! k [9 o4 N; o
8 i, J$ Q( i# m: d" [+ |
3.以任意点为心及任意的距离可以画圆。
3 v1 \ p: j6 @. `6 N1 L* j
4.凡直角都相等。8 I) ]8 C+ c( }
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
《几何原本》只有在第29个命题
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论( r. K2 x- g" G# w" j% [6 a4 ]
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:
' u% P' D* O; N5 V$ y
1.坚持第五公设,引出欧几里得几何。
& O/ n3 t6 N) d
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)4 j E! A: J# I( P. @
2 {- S. Q0 i w2 v
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
+ t, ?# G! @# @' Z
了解非欧式几何,就可以理解平行线的交点。. j! {! M) y- V3 g) a5 O
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点( t7 g. G7 |/ f( b2 T9 m9 L
性质:" p' b- C d0 \# k9 W; f0 M% a8 V
" w6 T) t0 V4 a M+ e, \
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点: g6 f4 I7 b2 A! \+ ~4 B: h& f
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)" ~ `- U& ?5 p( _3 Y
3.平面上全体无穷远点构成一条无穷远直线
射影平面:平面上全体无穷远点与全体平常点构成射影平面( E* S6 J' l7 a7 Q1 b7 V# E5 @
' A2 ] z* M! j# H5 U7 E9 @5 B
射影平面点的定义
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)8 N. S7 G2 ~" [
求点(1,2)在新的坐标体系下的坐标. {- p: S) M: u' J0 X3 T
/ J/ Y: p, I2 e$ ^# A# D
∵X/Z=1 ,Y/Z=2(Z≠0)
* z( O1 H6 P- D1 S! n5 ^) O# d
∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠03 E% k- s, l# V# F
即(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 相交的无穷远点
$ B$ D, v0 x: f* @1 x
∵ L1∥L2 所以有Z=0, X+2Y=0' v2 H# ^0 w2 c9 f- J/ j
* ?, ^! T# a2 J# h. @* K# g
∴坐标为(-2Y:Y:0),Y≠0
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
& D/ d' G' B8 }- ]
椭圆曲线* E" X" _( ?9 R8 s, A4 @
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合/ d% y( H9 y1 u9 h
2 X# u/ h* G& s) H6 P4 R4 w
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
[* o+ m$ W+ @4 z# ^. k+ p$ g: R6 D
1椭圆曲线方程是一个齐次方程
3 T" D# }! y" {) N" W
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为08 g8 c8 Q0 k3 }5 B
" Z5 E* \' G: T3 L: ^, Z
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名" n( l U, w/ g! B+ q/ {; q( v% R
椭圆曲线示例" k. q: _* f2 b% {
9 a* u5 l2 b! S# u% t3 N
非椭圆曲线示例2 F& C, C# g' u8 C
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),6 k6 H" \' ]7 K! w7 k i- G$ V
椭圆曲线普通方程
/ M% H) {7 y' G) {+ Q+ z6 }5 s
椭圆曲线普通方程: r5 \! V* K' E. z8 c7 @
无穷远点 (0, Y, 0)
* ]: E+ Z: S4 Z- G" O$ I
平常点(x,y)斜率k:
椭圆曲线阿贝尔群
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。, l- O5 A3 @3 \: p8 _: c
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
5 w& @: R) Z; j
封闭性:?a,b∈G,a*b ∈ G6 w W$ n8 d) a1 Y' |
$ d; y( \* R0 W6 p! W
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)
$ _, S3 q, n) s. a+ e2 F6 k! }
单位元:ョe∈G, ?a ∈G,有ea = ae = a: A z8 g3 t2 h1 c; p T( s6 T% r
" Y% N0 T4 _/ u: B
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a
同样在椭圆曲线也可以定义阿贝尔群。
+ a2 m8 B/ b( c& d; e
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律, P0 k8 w9 m, L3 G
同点加法# V4 g# d% Y: r; E7 h9 U
若有k个相同的点P相加,记作kP! L# D X2 n, T5 A7 Y
8 H6 h8 y" g% J w- a& c/ x
P+P+P=2P+P=3P( T- h S# d1 k9 {; t
有限域椭圆曲线
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
C2 x% C/ ?5 W' u: @& E1 x' C; p
我们给出一个有限域Fp$ I+ j+ C J0 h5 `" a/ g
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
Fp的加法是a+b≡c(mod p)
Fp的乘法是a×b≡c(mod p)6 U& }; ~& h& Z# y3 v
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)* x; T" K: m! s. t
Fp的单位元是1,零元是 0
+ O; T+ \8 x( J* B+ `: R B- D
Fp域内运算满足交换律、结合律、分配律7 C! p5 r8 s+ G4 {9 ^ l% o% ?
) O% ]- x+ Y1 U) d( D& Q7 e
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
选择两个满足下列约束条件的小于p的非负整数a、b) ?7 S0 q. r/ o( j- v3 q+ S8 @- g
# n) ^9 V$ x) u$ V' a: s- }. p
Fp上的椭圆曲线同样有加法% N) w+ e& t6 M+ p8 Y' A. A0 e
! y8 w) m( m' G: C
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:
x3≡k2-x1-x2(mod p)- c2 T! v! L- U* g
8 a# T4 X% E# x2 Q$ y: X
y3≡k(x1-x3)-y1(mod p)& x' R( z J2 K' E: G! {" i
若P=Q 则 k=(3x2+a)/2y1mod p1 k8 S, Q9 y* d
, F% V: O" D, K2 j( H n6 f
若P≠Q,则k=(y2-y1)/(x2-x1) mod p/ ?4 |6 C4 |1 `" ~! K- j
+ q! |9 r @- H. g8 ?7 H8 u
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P9 w5 p0 g9 I" k1 s8 z1 j2 w
: O9 m: r N& }; Q
补充:
- _7 w" y2 t2 H( I; q. }: @
-2^(-1) mod 23 进行两部分计算
5 R- t; D: k n) |1 l9 p: H
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元
9 T' l& X d! }; C* l* }) C: Q* t
(2) 再算-A mod 23
(1) 计算第一步
" C6 Y% _6 `3 J, v8 q ]# e0 N8 l8 [
根据有限域除法规则 2 * 2^(-1) = 1 mod 23
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12
# W6 z; p" q3 H h A% K' `
(2) 计算第二步3 n. V- V- t w: n$ n
1 P3 [ I- m t1 }( i. O/ w: `
-A mod 23 ==> -12 mod 23 即 23 -12 = 116 ]5 P) q. t& N* D
4 j, k/ a, S. A% j
所以有
6 q1 z% @7 w4 y( s( h, Y d
-2^(-1) mod 23 = 11( u9 J4 j+ v# G* ]9 q
4 c3 J5 X0 k6 ? j1 o! e
有限域椭圆曲线点的阶$ e1 D" a% w/ D2 ^
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶% @" ?1 r2 U8 E: |, m
若n不存在,则P是无限阶的
& q: x$ Y" g4 @ u; M; c. {& }
计算可得27P=-P=(3,13)
- @ s' F ^2 J0 I8 K5 O
所以28P=O ∞ P的阶为28
" B O8 m% q0 b1 g$ v( W
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章6 {# V7 E0 G# |/ Z' b; D
椭圆曲线加密
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据
! ?5 }; Y/ L4 h9 q c, }% r
点G称为基点(base point), `" d! J# \! Q; @* I5 Q( |+ j
/ @' X) A7 L% v; U! N
k(k7 B0 S. j! [( G: r, K
K为公开密钥(public key)
ECC保密通信算法* u1 _) O9 u, p
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37( u/ c- m' k9 d
& S" Q) Y) b0 x4 V. ^ |
2.Alice选择一个私有密钥k(k
3.Alice将E和点K、G传给Bob
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r2 B! h* l, h5 j* l8 t- B7 M
8 I) p' G1 E# b
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7), x! w! @6 {: }9 c& d
6.Bob将C1、C2传给Alice1 ?' X7 p+ I- f
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)
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M( `6 ]6 [1 F0 }4 s# c# Z
ECC技术要求$ l0 i; V7 M% U' ^1 u: \
* U. K+ k- B0 \, V4 A3 a
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
参量选择要求:9 }! f1 A: X5 C* ~/ n5 C5 e
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p), c% v# W% r7 C9 o: w2 \
ECC的应用
1 v- `! A( d* p/ v; j
比特币系统选用的secp256k1中,参数为3 y" d# f0 R- E, ^& f6 L+ e7 Q+ ~' ]
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 ? 2^32 ? 2^9 ? 2^8 ? 2^7 ? 2^6 ? 2^4 ? 1) h2 R" m7 n. c6 Z# L, N
a = 0, b = 76 P0 y* P/ H# l/ l
! e8 T; c3 [. {
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
" x7 f ?5 d4 Y; ^+ q7 {! E
h = 01& Z% O& `9 A# F2 y" @
% j" @5 F; `; a( r, N
ECC vs. RSA - 优缺点! n, v( R3 V: Y0 [1 g
5 G/ R8 u x* l/ \/ N
优点
j' `" k! J K& P
安全性能更高/ L+ h( }" H2 |* K
160位ECC与1024位RSA、DSA有相同的安全强度
( V! i& A0 m/ R* N0 u0 W) |
处理速度更快
4 C' j% d8 c( L3 L% b$ b$ i- _3 f
在私钥的处理速度上,ECC远 比RSA、DSA快得多+ y# @. v2 @+ L. I1 p
. M4 k: r: c$ {$ v3 {6 N
带宽要求更低& K; @3 W7 y4 K C. k
1 `( g2 p3 f5 @4 K; _
存储空间更小
- P R' h" C( y/ J' F+ ~# R* \
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多/ E1 T& n& d/ P7 M ~( B0 E
缺点
设计困难,实现复杂
+ p( s2 A [( p9 C
如果序列号设计过短,那么安全性并没有想象中的完善( z* v5 d3 y8 ]6 ^
成为第一个吐槽的人