ECC英文全称"Ellipse Curve Cryptography"7 z% T' E8 e- b& L+ q- q
与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥
ECC164位的密钥产生一个安全级,相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟货币比特币也选择ECC作为加密算法。' o# P. j- c0 U: K0 r. Q+ q0 j
从射影平面讲起
8 C6 G/ C/ z1 J; }+ c
古希腊数学家欧几里得的《几何原本》提出了五条公设。% m2 e8 S3 s( u! k/ P0 R4 Q! }, H
! X5 j Y+ t; x) j/ C9 [
1.由任意一点到任意一点可作直线。3 V8 m9 W' z M, t2 m+ @
- Y$ T8 ^2 D6 g% Y. K
2.一条有限直线可以继续延长。) Z3 g. ^' J$ ]' ], K4 j
& q3 b: Q, D+ n& h
3.以任意点为心及任意的距离可以画圆。7 i2 {0 ^* x0 y* q6 l y: G
: E& m* K/ K0 ]' j' U
4.凡直角都相等。" p6 b" t' h; X* h9 I
5.同一平面内一条直线a和另外两条直线b.c相交,若在a某一侧的两个内角的和小于两直角,则b.c两直线经无限延长后在该侧相交。
《几何原本》只有在第29个命题
8 p! {3 Z2 @% k! Z" ?/ H$ J* p
一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角6 X9 l% g! V2 B/ E
中才用到第五公设,即《几何原本》中可不依靠第五公设而推出前28命题。因此,一些数学家提出,第五公设能不能不作为公设,而作为定理?能不能依靠前四个公设来证明第五公设?这就是几何发展史上最著名的,争论了长达两千多年的关于“平行线理论”的讨论. ^6 K) y5 a2 J
I! ]. v7 _" r; J7 P4 H& p& q
1820年代,俄国喀山大学罗巴切夫斯基用“至少可以找到两条相异的直线,且都通过P点,并不与直线R相交”代替第五公设,然后与欧氏几何的前四个公设结合成一个公理系统,他经过细致深入的推理过程中,得出了一个又一个在直觉上匪夷所思,但在逻辑上毫无矛盾的几何体系。0 E/ u) B( d! K5 R1 Q
这种几何学被称为罗巴切夫斯基几何,简称罗氏几何。从罗氏几何学中,可以得出这样一个结论:逻辑上不矛盾的一些公理都有可能提供一种几何学。现存非欧几何的类型可以概括如下:
1.坚持第五公设,引出欧几里得几何。
$ @% i' I7 N) @
2.“可以引最少两条平行线”为公设,罗氏几何(双曲几何)。$ `5 L+ S0 _6 N- z4 f
5 T# ^$ K4 }- D5 S2 C0 K7 a' m, U- @
3.“一条平行线也不能引”为公设,黎曼几何(椭圆几何)9 z* H" g! d- v
左:双曲几何,即罗氏几何;中:欧几里德几何;右:椭圆几何,即黎曼几何
3 z8 X7 }7 d O; {. e7 k
了解非欧式几何,就可以理解平行线的交点。
; Y/ U- I: G* W3 H
定义平行线相交于无穷远点P∞,使平面上所有直线都统一为有唯一的交点3 u. z4 G1 n; Y, D4 y
性质:! f e H+ [' b! H/ O
: w6 g% N8 X. |5 u" M U: }
1.一条直线只有一个无穷远点;一对平行线有公共的无穷远点
# T) b! @- F' A; h9 V
2.任何两条不平行的直线有不同的无穷远点(否则会造成有两个交点)
3.平面上全体无穷远点构成一条无穷远直线
5 [ h& B4 T1 |/ U8 I3 d
射影平面:平面上全体无穷远点与全体平常点构成射影平面+ E6 L* G6 j1 v
射影平面点的定义
; c; U- D0 z1 m
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,则投影为射影平面上的点(X:Y:Z)
# S$ t1 {' G5 j2 w
求点(1,2)在新的坐标体系下的坐标0 [' w. D" N% t5 o! P+ p3 Z
7 ]. I. Z7 D3 b5 t
∵X/Z=1 ,Y/Z=2(Z≠0)
& q# ?' c# R% P5 z. X7 H
∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠07 [6 T' M0 J3 w$ c9 z n. E
即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标都是(1,2)在新的坐标体系下的坐标% A! v6 W; b# ?& N' s# n6 t" ]8 Y
8 f1 C: u# A& A* y# H0 `
(2) 求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点
∵ L1∥L2 所以有Z=0, X+2Y=0! D0 \# {; @! X% I$ ]8 C) p6 c
∴坐标为(-2Y:Y:0),Y≠0
4 V/ A) Z; M; o9 k8 a
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0# d4 t g# W% k
7 U; v. J% E* t! U6 M
椭圆曲线) U) V2 t2 e- p2 v7 Q
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合9 G5 q$ O2 S; f( N9 d
. ?; ~! r) M& e5 y" |) _ D8 V7 f
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3' ?! I [- X# M7 Q/ v- ]# x9 [
1椭圆曲线方程是一个齐次方程 X; j. |! f5 {( q
% X% }( L3 F5 ~ u
2曲线上的每个点都必须是非奇异的(光滑的),偏导数FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同为0; a$ \ _. f) o1 S
3圆曲线的形状,并不是椭圆的。只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程故得名1 @6 f) d0 D; l1 Q
* C& Q/ E% X, ~- S& M
椭圆曲线示例
非椭圆曲线示例
$ h. q& ^0 ~, d
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的),
椭圆曲线普通方程
椭圆曲线普通方程:. L2 `: V; K1 V8 b) E
% t" P, I8 O: E H. X
无穷远点 (0, Y, 0)
平常点(x,y)斜率k:- C3 X; z2 Y8 P6 x; }
椭圆曲线阿贝尔群
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中阿贝尔群。, a& W" a1 M# @, P, f, j2 F: S4 T5 y
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求
. a. f- W% `& j7 \/ p
封闭性:?a,b∈G,a*b ∈ G
) N5 k' C9 [3 @
结合性: ?a,b,c∈G ,有 (ab)c = a* (b*c)/ x; D$ L! P) I6 E
' u# R3 C+ S4 M f
单位元:ョe∈G, ?a ∈G,有ea = ae = a
, T+ [4 V' S1 s$ O
逆元: ?a ∈G ,ョb∈G 使得 ab = ba = e
3 E7 K% k, @7 [1 a
阿贝尔群除了上面的性质还满足交换律公理a * b = b * a
+ A; @ J9 E) d# t ]
同样在椭圆曲线也可以定义阿贝尔群。 { Q9 N2 Y% d" N- G2 k, e1 u' j0 P
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律' Y2 p* W! k- \
同点加法3 |; ^4 o/ H: G7 z6 k
6 N. s& H9 o1 U, ?; j; P; o4 M
若有k个相同的点P相加,记作kP% [* o* |- U+ t# N3 @5 _
& Q$ c; k0 ?$ n; }1 Y
P+P+P=2P+P=3P
有限域椭圆曲线
; T, Z* b k8 [) p3 V. Z
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。3 F. Y' U# [% i1 S4 j
我们给出一个有限域Fp
Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
Fp的加法是a+b≡c(mod p)* z+ c) t2 u, Q3 ~) C3 B3 Y' ~
1 t8 c! V7 _" a$ M- p5 q
Fp的乘法是a×b≡c(mod p)- n% F) F, i% b* I5 ?0 @
- c+ H D% C% [: F& X7 e% r% x
Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一个0到p-1之间的整数,但满足b×b-1≡1 (mod p)
: n" h7 p, k/ M. W$ C' A. c, y" H
Fp的单位元是1,零元是 0
Fp域内运算满足交换律、结合律、分配律% q' ~1 d0 U# l: x* N
* M9 K; U: k4 H
椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
: G& a4 W$ ]4 ] V* |% n' z' m
选择两个满足下列约束条件的小于p的非负整数a、b0 L+ [2 c9 }. ], s
) [: l. l; P0 ?8 }
Fp上的椭圆曲线同样有加法
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) 有如下关系:
7 W! B$ b4 |: P
x3≡k2-x1-x2(mod p)
4 }) T; f* Y' H: Y
y3≡k(x1-x3)-y1(mod p)
2 {# ?" P* |- w( A' L# f
若P=Q 则 k=(3x2+a)/2y1mod p- n5 H- p. B$ L- l; _1 ]
若P≠Q,则k=(y2-y1)/(x2-x1) mod p
2 e+ } C7 G# {# E; y" A; O
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P
补充:
-2^(-1) mod 23 进行两部分计算( ] l, }" O* s; C6 e* j. `
(1) 先算 2^(-1) 对应的数A, 在这里2^(-1)不是2的-1次方,而是2的逆元* R/ o( T$ C) Y: l# Q. H7 G
(2) 再算-A mod 233 Q2 g+ k: a b5 |! o
0 W7 E$ ]* Y9 G( i8 q) L
(1) 计算第一步
根据有限域除法规则 2 * 2^(-1) = 1 mod 23
8 v* P! u$ v+ [$ k6 ^
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12# P8 k0 t/ J$ h4 s- v- ~2 a6 I
# e+ f+ [9 p3 L7 u5 \ \2 M( {& D
(2) 计算第二步
' C1 y3 w# E& F! _4 b& T* ?' S# O
-A mod 23 ==> -12 mod 23 即 23 -12 = 11
5 c* ]& P1 H9 A
所以有
/ H T5 l& [5 I3 u5 Q# g* D
-2^(-1) mod 23 = 11! d# T' r$ n2 n! Q. W5 a* C- B1 c
有限域椭圆曲线点的阶
* C; @8 p0 _+ r" _" t5 `
如果椭圆曲线上一点P,存在最小的正整数n使得数乘nP=O∞ ,则将n称为P的阶
若n不存在,则P是无限阶的
计算可得27P=-P=(3,13)
: }$ U0 {9 _* h" w4 J. p% P
所以28P=O ∞ P的阶为28
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为29。显然点的分布与顺序都是杂乱无章
. X- v; v& m7 a* m7 ^4 L. C1 z5 U
椭圆曲线加密
) T( ?# Q& ?% \% s2 f: A0 \
考虑K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶(nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据# Z X% v% P' P ? d H- q# `
2 ]! ?; m9 j L
点G称为基点(base point)9 ?% C2 s6 S$ d' }3 M2 D
' [' r; k5 i$ l6 F
k(k
K为公开密钥(public key)5 S; a* O' w0 Q# v
ECC保密通信算法" f5 Q( \) m( i2 X: [; f z
1.Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37
2.Alice选择一个私有密钥k(k
3.Alice将E和点K、G传给Bob) W; D. n% L4 W9 ] {% l( u
! p5 ^* H) Q. w. r8 E, \
4.Bob收到信息后,将待传输的明文编码到上的一点M(编码方法略),并产生一个随机整数r(r* U" }* w. q5 S5 q( n- R
9 p2 I! B* i& l1 a! f1 ]: Y$ o& I
5.Bob计算点C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7): s+ l/ M5 P7 m: Y' t) X( [, s
6 @. H) s; q* w8 \8 v! S9 U! @3 h
6.Bob将C1、C2传给Alice( i" _; G& d# r; S; Q2 t: K' ]# @
# v! B( i& W) c ]
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
- b5 d5 _/ `. A8 m! u
ECC技术要求6 f4 D: B3 _7 }7 B9 v
' O& Y/ Y# F4 B
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
! L9 o) p2 o( ^" c% t
参量选择要求:8 j1 m4 s2 J! s0 G
% }- p. R2 H$ {7 D1 `
p越大安全性越好,但会导致计算速度变慢200-bit左右可满足一般安全要求n应为质数h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)4a3+27b2≠0 (mod p)
0 }* I0 B" \( a
ECC的应用$ H4 h5 v% N9 D% T, p* z
比特币系统选用的secp256k1中,参数为8 V" W' B% y; y7 x! _
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/ x4 ]$ c3 k' D6 j# q
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 \* e: C2 |0 r( x
h = 01- E5 B3 s* A/ N# D& j4 M
ECC vs. RSA - 优缺点) D6 u" q6 Z4 K5 h! o( ?! q
6 K* |, l* V$ B+ P3 K
优点
' G) L1 Y2 I9 f* j
安全性能更高1 U( I& A# s8 k- Y5 {
; P, }1 z0 ^& W) z
160位ECC与1024位RSA、DSA有相同的安全强度
2 E3 X1 m" f' C5 n1 x& Y) |
处理速度更快5 H. E1 ?3 j" U- P( H
在私钥的处理速度上,ECC远 比RSA、DSA快得多
Z T% }6 r' { d
带宽要求更低
' K+ q& }' |# f$ q- i5 I/ u
存储空间更小
& Z3 }2 ]/ r: g* N
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多) _! X- }9 \# q/ n3 H
缺点8 L/ Q5 ~/ v* y7 B! y- B: ?
. \! a1 i, l: C) r- k, E7 ~6 H
设计困难,实现复杂
如果序列号设计过短,那么安全性并没有想象中的完善
成为第一个吐槽的人