ECC英文全称"Ellipse Curve Cryptography"4 k% K: t1 x- _
" ?5 P& X; i2 {3 q& ]- D- b
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥* y# r, [& q: ~
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。8 L; [7 z/ F0 E8 w0 M2 M
4 }2 U T! k8 @8 v; I5 s( C
从射影平面讲起
古希腊数学家欧几里得的《几何原本》提出了五条公设。; v b: K, v3 ~. E% ]& N
1.由任意一点到任意一点可作直线。
2.一条有限直线可以继续延长。
4 r1 z) h5 S. s! A8 h0 c+ f
3.以任意点为心及任意的距离可以画圆。
* k& o* P0 l$ d4 [4 [
4.凡直角都相等。
. g' w, J" p9 l2 ]" K( X9 K
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
《几何原本》只有在第29个命题
3 ]) h6 J; F% `
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角
0 d; z, `# v+ G* C) H
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论4 P- W: V. l; g: j9 |
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:. x$ s- e& O' N$ f/ V p
& \' ~' R, Y5 `. l- x
1.坚持第五公设,引出欧几里得几何。
0 I U* o) U; _ l4 d; [. i! P
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。: a" L$ C; A. J! v8 s2 ?
2 q! r4 m/ b* F# i! O4 o
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)6 W6 M4 ]$ D9 r
9 i. @: Y) H! ^0 _; f# [
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
了解非欧式几何,就可以理解平行线的交点。
5 ?5 B. a2 s/ T1 v$ }% j
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点
性质:
* a5 V+ [9 D1 w1 |9 z, G
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)
3.平面上全体无穷远点构成一条无穷远直线- e2 w4 B8 g8 S) Q; b6 f
/ i( c1 n5 v+ b& b; q1 G" W$ ~
射影平面:平面上全体无穷远点与全体平常点构成射影平面
射影平面点的定义
& }# }( j2 t5 U6 T% m
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)
! D! n' }7 [5 o/ T. O- U, q
求点(1,2)在新的坐标体系下的坐标
∵X/Z=1 ,Y/Z=2(Z≠0)7 r2 t( z$ T# d3 z/ D) x2 h6 |/ o# R
∴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)在新的坐标体系下的坐标
c+ e$ d$ {( S0 B/ o: u
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点( Q8 V, A3 z" n9 r/ ?! x
; j% s! B5 H% k$ g, z5 }, y: Z& c
∵ L1∥L2 所以有Z=0, X+2Y=08 u! S# B7 [% |/ K% A2 e& J
∴坐标为(-2Y:Y:0),Y≠05 k2 @9 s# T7 j8 L6 X
7 A. v8 z2 E) h: R, t6 u
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
椭圆曲线6 o. w9 z! _ x7 M
3 B& a- M8 q J' s `
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合4 J' p' q9 t) o: Q
; F) F6 }2 |- A8 P/ t
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
1椭圆曲线方程是一个齐次方程
# J4 Z8 S- s& ?9 }
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为04 N7 x& G9 e3 B& q, B* S, {
0 h7 M U( C0 g) m; s" M
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名
$ u7 N6 V6 r+ K* Q: j: n3 ` Y, [
椭圆曲线示例& S' ^2 {' N2 S; y+ A6 u
. K8 r" X0 ?- L
非椭圆曲线示例; e3 l( V, y& H) f/ d" F
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),$ p, \& S7 R& s; `, J6 a# C
+ V& B# K8 V) {* ?4 g! F+ o- P
椭圆曲线普通方程
椭圆曲线普通方程:. n# ^7 f( _+ x% Q
无穷远点 (0, Y, 0)7 y9 m2 ]+ T$ u3 T" g
0 D" c3 ^$ x. R
平常点(x,y)斜率k:
q# x- B- X% K
椭圆曲线阿贝尔群
9 Z* P9 B) q( L+ B
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。9 s" Z( D9 A5 x$ ?0 y7 e; @# f% g
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
封闭性:?a,b∈G,a*b ∈ G
3 [3 n8 J$ s6 `: B5 b) L/ m
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)# S! X! j$ k; K* y2 @
单位元:ョe∈G, ?a ∈G,有ea = ae = a
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e; [3 O2 g. v1 F- q. }( O# @8 H( X
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a$ m; S4 [2 q' ]: k% e3 G/ g5 N7 P
同样在椭圆曲线也可以定义阿贝尔群。
7 `. s" z9 _$ U- c
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律
同点加法
若有k个相同的点P相加,记作kP2 H- J9 `1 s0 _/ @% ]9 S; U! P
P+P+P=2P+P=3P: p* m* Y, Q# k p7 ?
有限域椭圆曲线
) K+ t L% v G0 h) _
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。1 h! {/ H% C9 G. [
我们给出一个有限域Fp1 |! ?0 v* b' R+ {) m
+ p1 S) h, Y: q8 O5 z! W/ U( x- h
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
Fp的加法是a+b≡c(mod p)
6 |! q) n; R6 u, m; z# p" i( o! k
Fp的乘法是a×b≡c(mod p)
4 r+ j/ P0 F2 N0 m
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)
' l' @. I6 A- h5 j" ?9 b) g8 U# ^
Fp的单位元是1,零元是 0
1 M' ?: m2 U' Z1 w! I
Fp域内运算满足交换律、结合律、分配律
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
1 w% S, }' k" M% G) m
选择两个满足下列约束条件的小于p的非负整数a、b
Fp上的椭圆曲线同样有加法
k8 E6 r- Z+ | @- [8 Z! \3 C
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
3 u; Q$ d. ]) o1 a$ O, b7 L8 T
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞1 s: P7 u8 C+ @7 F: e0 Z
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:, \+ Y8 w9 O7 Y: W& f D4 N
x3≡k2-x1-x2(mod p)
8 C2 J# x3 G% V- t
y3≡k(x1-x3)-y1(mod p)
4 m+ r* v) F5 u* @
若P=Q 则 k=(3x2+a)/2y1mod p
5 A ^5 l; V& c# g. G
若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# o8 q8 [# Y2 V9 _9 {! \. ~
) ] V1 v0 z8 u2 h) O
补充:
-2^(-1) mod 23 进行两部分计算! o9 {9 T: H( k9 p8 [
; ?5 e7 X+ H! ~* g
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元
. C# O. W% }% k! e$ k
(2) 再算-A mod 232 a9 m d+ ^* _; {; W, m# C7 j
- s" w O g; N! [" {, @1 X! I% P
(1) 计算第一步) v G& H$ I: I8 I# R1 A& }* k+ Q- e
根据有限域除法规则 2 * 2^(-1) = 1 mod 239 u2 L7 {+ K% i7 v! {% V
% c) m4 R% g* q* \2 n5 X) U
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12
/ N+ w( d: n! n
(2) 计算第二步2 J* H! ^+ u6 L# P: O9 l* M
-A mod 23 ==> -12 mod 23 即 23 -12 = 11
- L+ l: ]; f0 V) j& j; J
所以有
-2^(-1) mod 23 = 11% U# G: P0 N7 u: U: U$ [6 a9 u
有限域椭圆曲线点的阶
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶- R3 \2 @6 b9 r! W* P, m7 x
0 A K/ {0 d, D5 c. K
若n不存在,则P是无限阶的0 d# I+ j. n: f9 m' i$ t6 @
计算可得27P=-P=(3,13)
所以28P=O ∞ P的阶为281 P( K2 F) b: Z4 E0 S8 p
( f6 p S, ^) N+ j$ {/ V7 S
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章* C' C; _/ h9 r3 W! a
椭圆曲线加密; O6 _9 F! Y' e" M5 j$ O& |" `
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据4 Q$ m0 v' K& H) h% k
6 N6 u: u. Z Y/ m
点G称为基点(base point)6 Q1 ]" I, O6 m
( d0 F6 q0 b) `# j4 k. u2 P
k(k7 n; A1 O+ i0 p* [9 }2 u
K为公开密钥(public key)
2 l6 K% [! c C; g9 a: ^1 t$ R, ^, T
ECC保密通信算法
! k6 ]1 ?& l- `' D
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=379 W" D# F0 k1 i3 F
# c. x$ r" [) Q; d- |
2.Alice选择一个私有密钥k(k
( W3 i; r0 s4 c7 {! J4 C1 w) G
3.Alice将E和点K、G传给Bob
; v, M3 }6 e Y
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r- d% P. G/ ~- u, ~( f
7 I; C6 C8 u) Z' q: N! R
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
" W1 x& G* E# d( \& C3 f' O' M \
6.Bob将C1、C2传给Alice
. B9 \# l- B. n% \# c5 |5 e8 Z; ^3 v
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)
) U2 K" a7 J$ ]$ B
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M
ECC技术要求
0 ]" A( ~, M* r7 v4 H5 H& z
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
5 y. W8 o1 W0 J6 W
参量选择要求:, a" g$ R: @1 x8 I J& t" m
4 z2 c$ t0 U" m5 f+ w* m
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p)6 R Q$ ~" x; ^. m; X
ECC的应用
. d. O7 S0 R7 O% X7 }% J- W, @
比特币系统选用的secp256k1中,参数为1 M* S7 H( q+ d) g; `& Z/ w
- m' E$ Y8 q, y6 I5 }- @" g+ V
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' I' Q' W5 J2 Q/ x2 |
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)( c/ v5 [% w6 [ O6 o( z% y$ V
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01, l( c7 |! F' \( A# a) U
ECC vs. RSA - 优缺点" U' L8 L& r7 l) T! E6 P
# A" h* V% `6 p o: d; E p
优点. M' q9 T+ ?( Q& I$ N
安全性能更高- N; H$ y3 a3 z. a
160位ECC与1024位RSA、DSA有相同的安全强度2 {( L6 @6 [. q, O }/ e
处理速度更快
, K+ S: p7 w9 [/ G: t+ Y
在私钥的处理速度上,ECC远 比RSA、DSA快得多, b% U9 g: G5 c1 p5 _
7 \+ D9 d6 D( E. l+ Z. x' B% J
带宽要求更低
' B7 V* v8 P* C/ U9 {$ F
存储空间更小
. ]2 |6 B" g* {1 f5 |4 s0 A1 {3 s
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多
0 \; c) x( C# [) ^$ J
缺点4 Z$ K: S- _0 s
设计困难,实现复杂2 {5 f d! H O7 k
如果序列号设计过短,那么安全性并没有想象中的完善! z$ s2 T: G" y& g' w
' V9 G& z7 ^4 _( a* Q; q
成为第一个吐槽的人



