ECC英文全称"Ellipse Curve Cryptography": n- e; V4 L9 ?: o* H8 A1 w
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥9 W1 P0 a9 ?( b; R7 Z9 U
4 F3 @5 b& N3 K4 @6 X! ^7 y
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。
( s8 H) i+ @2 E( o. Q0 c7 _
从射影平面讲起
2 f! S7 W K* U9 D5 Z- c! c x% L
古希腊数学家欧几里得的《几何原本》提出了五条公设。
% |# \( B- ]3 X: O7 L
1.由任意一点到任意一点可作直线。
+ T- [. ]# z7 g' l; D
2.一条有限直线可以继续延长。
3.以任意点为心及任意的距离可以画圆。: n7 J" ^$ @( B
4.凡直角都相等。
$ ?8 {+ {. w, f- C7 X, A& J
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
《几何原本》只有在第29个命题
+ ^# k6 V3 x+ \9 B/ R+ n
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角* k1 ^! w0 `7 J. J
/ m9 {* l& ]% A7 r
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论
" O) ~6 P) S8 C) q' q
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。) I$ o0 C( F; i0 H8 |* r
- l! z7 K) }$ B3 P2 w
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:
1.坚持第五公设,引出欧几里得几何。8 r$ m0 I/ A8 a* Z& V; i
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)6 u9 }" p" I/ h# }- j
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
了解非欧式几何,就可以理解平行线的交点。, C$ d: J+ R8 e% w9 ]
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点
7 m) V" l7 C8 g& ]2 e+ ?+ \
性质:& q. ~7 P) h2 b! c7 q8 L
8 f& u+ p' |1 h0 {
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点6 X# T% y$ ]) T) \
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点) N# ~, `. n1 t4 F" R& p
) J# k4 ~0 _- P' j' n6 E
3.平面上全体无穷远点构成一条无穷远直线
射影平面:平面上全体无穷远点与全体平常点构成射影平面
射影平面点的定义1 J0 |1 C+ ~; u. r6 [/ p5 E: I
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)
求点(1,2)在新的坐标体系下的坐标
1 ?2 H8 g, y3 y3 j* P) y
∵X/Z=1 ,Y/Z=2(Z≠0)9 c/ |8 Q5 E5 `& ]' B. ?
; V. c% ^2 n( a$ }6 w. p
∴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)在新的坐标体系下的坐标. `7 B V* N2 C3 Z( E
! b. H9 T# [; X5 i
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点
∵ L1∥L2 所以有Z=0, X+2Y=0
$ n. y# C+ G# T# K/ F j% t
∴坐标为(-2Y:Y:0),Y≠02 _& c, E1 C( P! g' S, e+ z
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0
椭圆曲线
# ]$ k% Z1 ^% t j0 Q" n, M) d$ O4 A0 _$ s
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合 w. @1 S6 v- i1 ~' S1 @
% h/ Z" ^2 v& T& S8 c: A+ d
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
" A0 v/ o% I2 f0 p# x
1椭圆曲线方程是一个齐次方程
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0
) j2 t6 v+ c3 v' p8 d0 z. a+ W9 |
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名
+ N* U% a' g5 J( k# _) Q3 D" |
椭圆曲线示例4 q$ ~8 ^3 H( }8 k: `
( v( g8 d! m# A9 e, }
非椭圆曲线示例 K0 v* R. M! e$ {# a6 d
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的)," E( A) c5 c9 m1 Z4 Q8 W
椭圆曲线普通方程$ Q% D8 ]4 F- _1 p T! x2 ^/ B
椭圆曲线普通方程:5 G8 q) G) l2 ?+ B S; l+ z8 P
无穷远点 (0, Y, 0)3 Z& V6 |6 Y* ]# `
平常点(x,y)斜率k:
椭圆曲线阿贝尔群! ^' b; ?' {9 F2 w0 |' m& w
: |7 I1 o, G0 l. m ?; N, F, B$ h
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。0 U( t$ l: L: a6 N8 u( K
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
封闭性:?a,b∈G,a*b ∈ G. F; }% |8 v& H: U5 S, @
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)
单位元:ョe∈G, ?a ∈G,有ea = ae = a' T5 }, O6 O& ~! M/ S" X4 Y; \
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a2 ]8 T3 I6 s; _& {$ s
/ y- y1 X5 n* A3 @( {! c& B
同样在椭圆曲线也可以定义阿贝尔群。
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律
同点加法4 j' r) U. f u8 G' P* G, p
若有k个相同的点P相加,记作kP
0 F, E, I. i- P; M! W* ] P
P+P+P=2P+P=3P
& k; I. z* n. b6 f% l# ~! N: U
有限域椭圆曲线
( t% I0 `( t& Z+ C& u q# r2 k6 x
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
我们给出一个有限域Fp u2 s3 P; {' w2 n: x9 q
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1. t3 ~7 y1 j1 m) H2 S$ G b
+ J3 f* H' l" r% @1 d7 [6 J
Fp的加法是a+b≡c(mod p)
1 u: g: |" N" W; p A8 s! l
Fp的乘法是a×b≡c(mod p)
' K V/ D8 V. m8 q7 p
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)
2 S- J+ V( V( `2 q; u# D
Fp的单位元是1,零元是 0. ?1 N3 _0 W l& b* N
9 N% Z9 o6 g' j3 D- i
Fp域内运算满足交换律、结合律、分配律
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
选择两个满足下列约束条件的小于p的非负整数a、b
$ ^7 x3 A" K. I$ l2 _* Q8 @4 z' E4 L
Fp上的椭圆曲线同样有加法
1.无穷远点 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
* F$ d- d# k5 r+ X u
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞
* p' [) C/ o8 O9 h4 v: l4 e8 G
3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:- N2 a4 p% \) O5 C. p4 ^6 P, G/ X
x3≡k2-x1-x2(mod p) W5 U* R0 A) m9 f1 ^: H2 l" ]0 h
y3≡k(x1-x3)-y1(mod p)6 K' Y1 e; Q' `
! Z s! Y* f; V
若P=Q 则 k=(3x2+a)/2y1mod p
; R; G4 x `; J" ?: P
若P≠Q,则k=(y2-y1)/(x2-x1) mod p0 N% X6 N. _7 ~: o$ y
6 w8 ]. ^8 L' g: }+ F$ h/ ?8 T
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P! p" M. `' ]! p% C
补充:
-2^(-1) mod 23 进行两部分计算2 U2 R: {4 e7 d/ [2 T1 b& Z
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元/ ~9 N) W4 N' ~, g
(2) 再算-A mod 23
(1) 计算第一步5 Q6 d" a7 r# q" v" e6 U. z: C
# @* y5 W* o1 y* W+ F
根据有限域除法规则 2 * 2^(-1) = 1 mod 23 R S! W* [$ H: C# K! {4 n: s& N! r
4 f W# y5 N8 i% H5 e2 g5 j
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12
(2) 计算第二步" Y( l2 N+ G# a( c% A0 N
/ H3 E+ _" N! d7 X* i" Q
-A mod 23 ==> -12 mod 23 即 23 -12 = 11* u s$ S" B" d2 ]' f* e2 O
, D6 `* u# X8 E% F# ]6 R
所以有+ A& [7 y0 h$ t
-2^(-1) mod 23 = 11
有限域椭圆曲线点的阶
2 |+ c9 t$ ~% U6 e: W3 [8 T7 o
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶
若n不存在,则P是无限阶的
6 b9 Z5 L% m5 k
计算可得27P=-P=(3,13)% p5 R! V C' p1 h5 |
所以28P=O ∞ P的阶为28* L1 k% u- Z0 l. J" s5 `% T4 ^
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章' \) q% B }: I, @4 g
椭圆曲线加密
4 x4 t% l e& u) l! y4 F
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据
点G称为基点(base point)
& d# j- P, W) a6 d
k(k) d! `2 }7 }3 Q& c; j3 e+ D( J
K为公开密钥(public key)' c3 b* f4 {" a0 ]7 L
ECC保密通信算法
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37. S( ]7 z# L0 G* X9 A- g2 `; ]
2.Alice选择一个私有密钥k(k2 a$ m9 o! ~4 M9 U0 Z; e
3.Alice将E和点K、G传给Bob
$ `' T" j0 F% b6 R
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r0 |2 @( p2 U2 W# S
! f) G2 X+ O0 n6 z+ P0 @/ G V
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7) [% G9 f" P- u% U' Z- C3 y% H8 s
6.Bob将C1、C2传给Alice
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)% r0 F3 j& ]% P0 v* M3 u/ |
# D, v- ]7 |& c) W! x
数学原来上能解密是因为:C1-kC2=M+rK-krG=M+rkG-krG-M# B8 ?1 U. k6 ~" R; |" ]) {
' E# w0 S C) u+ _! E: ]( c
ECC技术要求
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
- N# R1 Y) r6 q: s2 l4 @3 T- R, X
参量选择要求:6 G- v; Z& o7 J" e, j
( H7 z% l9 }3 L& m
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p)7 p) A, D. W8 v! _& m1 C) {( `
" ]. g3 P6 Y0 ?# L
ECC的应用
比特币系统选用的secp256k1中,参数为
9 V9 X* f0 v7 d& ^- ?0 d( |" M3 [
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 ? 2^32 ? 2^9 ? 2^8 ? 2^7 ? 2^6 ? 2^4 ? 1/ |% r3 U1 a4 Q, x& H
8 `. M; |3 Z7 j' S' F4 T/ y
a = 0, b = 77 R: A, j9 c5 Y" W1 y/ ]2 U v. N0 }
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
3 c& {9 O2 n/ v) g9 k% ~$ f
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
2 k# t! u1 d( y1 G& L1 E
h = 01
ECC vs. RSA - 优缺点) g) @# M% {- p. k) ^# [7 h! ?& G$ L
$ c3 o7 G, {( L. e0 E d# e% m
优点
安全性能更高
160位ECC与1024位RSA、DSA有相同的安全强度
处理速度更快
. O2 h7 \1 Z; X) l$ a
在私钥的处理速度上,ECC远 比RSA、DSA快得多
带宽要求更低
存储空间更小
. z# O! z( z- C# _
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多/ u: v$ D1 K/ W
; v. C+ W$ n3 M
缺点/ r0 `9 o- J4 j, i
! M7 Y5 S2 l+ q$ Z A
设计困难,实现复杂
/ q, g3 f, q/ B5 l. |! V
如果序列号设计过短,那么安全性并没有想象中的完善/ o$ ?/ O; Y* L) @5 I
成为第一个吐槽的人