ECC椭圆曲线加解密原理详解(配图)
椭圆曲线加解密原理详解本文主要参照:ECC椭圆曲线详解(有具体实例)[1]前言: 椭圆曲线(ECC)加密原理跟RSA加解密原理比起来,可真是晦涩难懂。拜读了大神Kalafinaian文章“ECC椭圆曲线详解(有具体实例)”,终于看到了参透的曙光。 由于原文中有微小的瑕疵,也为了便于阅读起来更加流畅,我重新整理了一下这篇文章。为什么使用椭圆曲线加密算法?RSA的解决分解整数问题需要亚指数...
ECC椭圆曲线加解密原理详解(配图)
本文主要参照:ECC加密算法入门介绍及 ECC椭圆曲线详解(有具体实例)
前言: 椭圆曲线(ECC)加密原理跟RSA加解密原理比起来,可真是晦涩难懂。拜读了Kalafinaian的文章“ECC椭圆曲线详解(有具体实例)”,终于看到了参透的曙光。 由于原文中有微小的瑕疵,也为了便于阅读起来更加流畅,我重新整理了一下这篇文章。
为什么使用椭圆曲线加密算法?
RSA的解决分解整数问题需要亚指数时间复杂度的算法,而目前已知计算椭圆曲线离散对数问题(ECDLP)的最好方法都需要全指数时间复杂度。这意味着在椭圆曲线系统中我们只需要使用相对于RSA 短得多的密钥就可以达到与其相同的安全强度。例如,一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。使用短的密钥的好处在于加解密速度快、节省能源、节省带宽、存储空间。
比特币以及中国的二代身份证都使用了256 比特的椭圆曲线密码算法。
实数椭圆曲线
什么是椭圆曲线,想必大家都会首先想到的是高中时学到的标准椭圆曲线方程。
x
2
a
2
+
y
2
b
2
=
1
(
a
>
b
,
焦
点
在
x
轴
,
a
<
b
,
焦
点
在
y
轴
)
\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1 (a>b,焦点在x轴,a<b,焦点在y轴)
a2x2+b2y2=1(a>b,焦点在x轴,a<b,焦点在y轴)
其实本文提到的椭圆曲线,跟这个高中时代的椭圆曲线方程基本无关。椭圆曲线的椭圆一词来源于椭圆周长积分公式。(这个命名深究起来比较复杂,了解一下就可以了1)
一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合,
Y
2
Z
+
a
1
X
Y
Z
+
a
3
Y
Z
2
=
X
3
+
a
2
X
2
Z
+
a
4
X
Z
2
+
a
6
Z
3
Y^2Z+a_1XYZ+a_3YZ^2=X^3+a_2X^2Z+a_4XZ^2+a_6Z^3
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3
对普通平面上点(x,y),令x=X/Z,y=Y/Z,Z≠0,得到如下方程
y
2
Z
3
+
a
1
x
y
Z
3
+
a
3
y
Z
3
=
x
3
Z
3
+
a
2
x
2
Z
3
+
a
4
x
Z
3
+
a
6
Z
3
y^2Z^3+a_1xyZ^3+a_3yZ^3=x^3Z^3+a_2x^2Z^3+a_4xZ^3+a_6Z^3
y2Z3+a1xyZ3+a3yZ3=x3Z3+a2x2Z3+a4xZ3+a6Z3
约掉
Z
3
Z^3
Z3可以得到:
y
2
+
a
1
x
y
+
a
3
y
=
x
3
+
a
2
x
2
+
a
4
x
+
a
6
y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6
y2+a1xy+a3y=x3+a2x2+a4x+a6
简化版的Weierstrass方程:
E
:
y
2
=
x
3
+
a
x
+
b
E: y^2= x^3+ax+b
E:y2=x3+ax+b
其中,
(1)
Δ
=
−
16
(
4
a
3
+
27
b
)
≠
0
\Delta= -16(4a^3+27b) \neq 0
Δ=−16(4a3+27b)=0 ,用来保证曲线是光滑的,即曲线的所有点都没有两个或者两个以上的不同的切线。
(2)
a
,
b
∈
K
,
K
为
E
的
基
础
域
。
a,b\in K, K为E的基础域。
a,b∈K,K为E的基础域。
(3) 点
O
∞
O_\infty
O∞ 是曲线的唯一的无穷远点。
椭圆曲线示例
非椭圆曲线示例
这两个方程都不是椭圆曲线,因为他们在(0:0:1)点处(即原点)没有切线,不满足椭圆曲线每个点都必须是非奇异的(光滑的)
椭圆曲线阿贝尔群
我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。我们能不能建立一个类似于在实数轴上加法的运算法则呢?这就要定义椭圆曲线的加法群,这里需要用到近世代数中的阿贝尔群。
在数学中,群是一种代数结构,由一个集合以及一个二元运算所组成。已知集合和运算(G,*)如果是群则必须满足如下要求。
封闭性: ∀a,b∈G,ab ∈ G
结合性: ∀a,b,c∈G ,有 (ab)c = a (b*c)
单位元: ョe∈G, ∀a ∈G,有ea = ae = a
逆元: ∀a ∈G ,ョb∈G 使得 ab = ba = e
交换性: ∀a,b∈G,ab = ba
同样在椭圆曲线也可以定义阿贝尔群。
任意取椭圆曲线上两点P、Q(若P、Q两点重合,则作P点的切线),作直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R,定义P+Q=R。这样,加法的和也在椭圆曲线上,并同样具备加法的交换律、结合律。
同点加法
若有k个相同的点P相加,记作kP 。 P+P=2P
P+P+P=2P+P=3P
有限域椭圆曲线
椭圆曲线是连续的,并不适合用于加密;所以,我们必须把椭圆曲线变成离散的点,我们要把椭圆曲线定义在有限域上。
我们给出一个有限域Fp
- Fp中有p(p为质数)个元素0,1,2,…, p-2,p-1
- Fp的加法是 a + b ≡ c ( m o d p ) a+b\equiv c \pmod p a+b≡c(modp)
- Fp的乘法是 a × b ≡ c ( m o d p ) a×b \equiv c \pmod p a×b≡c(modp)
- Fp的除法是 a ÷ b ≡ c ( m o d p ) , 即 a × b − 1 ≡ c ( m o d p ) , b − 1 也 是 一 个 0 到 p − 1 之 间 的 整 数 , 但 满 足 b × b − 1 ≡ 1 ( m o d p ) a÷b \equiv c \pmod p,即 a×b^{-1} \equiv c \pmod p,b^{-1}也是一个0到p-1之间的整数,但满足b×b^{-1}\equiv 1 \pmod p a÷b≡c(modp),即a×b−1≡c(modp),b−1也是一个0到p−1之间的整数,但满足b×b−1≡1(modp)
- Fp的单位元是1,零元是 0
- Fp域内运算满足交换律、结合律、分配律
- 椭圆曲线Ep(a,b),p为质数,x,y∈[0,p-1]
y 2 = x 3 + a x + b ( m o d p ) y^2=x^3+ax+b \pmod p y2=x3+ax+b(modp)
选择两个满足下列约束条件的小于p的非负整数a、b :
4
a
3
+
27
b
2
≠
0
(
m
o
d
p
)
4a^3 + 27b^2 \neq 0 \pmod p
4a3+27b2=0(modp)
Fp上的椭圆曲线同样有加法
1.无穷远点
O
∞
是
零
元
,
有
O
∞
+
O
∞
=
O
∞
,
O
∞
+
P
=
P
O_∞是零元,有O_∞+ O_∞= O_∞,O_∞+P=P
O∞是零元,有O∞+O∞=O∞,O∞+P=P
2.P(x,y)的负元是 (x,-y mod p)= (x,p-y) ,有
P
+
(
−
P
)
=
O
∞
P+(-P)= O_∞
P+(−P)=O∞
3.
P
(
x
1
,
y
1
)
,
Q
(
x
2
,
y
2
)
的
和
R
(
x
3
,
y
3
)
P(x_1,y_1),Q(x_2,y_2)的和R(x_3,y_3)
P(x1,y1),Q(x2,y2)的和R(x3,y3) 有如下关系:
x
3
≡
k
2
−
x
1
−
x
2
(
m
o
d
p
)
y
3
≡
k
(
x
1
−
x
3
)
−
y
1
(
m
o
d
p
)
若
P
=
Q
,
则
k
=
3
x
1
2
+
a
2
y
1
(
m
o
d
p
)
若
P
≠
Q
,
则
k
=
y
2
−
y
1
x
2
−
x
1
(
m
o
d
p
)
\begin{aligned} x_3 & \equiv k^2-x_1-x_2 \pmod p \\ y_3 & \equiv k(x_1-x_3)-y_1 \pmod p \\ & 若P=Q, 则k=\frac{3x_1^2+a}{2y_1} \pmod p \\ & 若P≠Q, 则k=\frac{y_2-y_1}{x_2-x_1} \pmod p \end{aligned}
x3y3≡k2−x1−x2(modp)≡k(x1−x3)−y1(modp)若P=Q,则k=2y13x12+a(modp)若P=Q,则k=x2−x1y2−y1(modp)
例题椭圆曲线已知E23(1,1)上两点P(3,10),Q(9,7),求
(1) -P
(2) P+Q
(3) 2P
(1) 计算-P
−
P
=
(
3
,
−
10
(
m
o
d
23
)
)
=
(
3
,
13
)
-P = (3, -10 \pmod {23}) = (3,13)
−P=(3,−10(mod23))=(3,13)
(2) 计算P+Q
k
=
7
−
10
9
−
3
=
−
2
−
1
(
m
o
d
23
)
2
×
2
−
1
=
1
(
m
o
d
23
)
⇒
2
−
1
=
12
⇒
k
=
−
12
(
m
o
d
23
)
=
11
∴
P
+
Q
=
(
1
1
2
−
3
−
9
(
m
o
d
23
)
,
11
×
(
3
−
x
3
)
−
10
(
m
o
d
23
)
)
=
(
17
,
11
×
(
3
−
17
)
−
10
(
m
o
d
23
)
)
=
(
17
,
20
)
\begin{aligned} k & =\frac{7-10}{9-3} = - 2^{-1} \pmod {23} \\ & 2\times2^{-1} = 1 \pmod {23} \\ & \Rightarrow 2^{-1} = 12 \\ & \Rightarrow k = -12 \pmod {23} = 11 \\ \therefore P+Q & = (11^2-3-9\pmod {23}, 11\times (3-x_3) - 10 \pmod {23}) \\ & = (17, 11\times(3-17) -10 \pmod {23}) \\ & = (17,20) \end{aligned}
k∴P+Q=9−37−10=−2−1(mod23)2×2−1=1(mod23)⇒2−1=12⇒k=−12(mod23)=11=(112−3−9(mod23),11×(3−x3)−10(mod23))=(17,11×(3−17)−10(mod23))=(17,20)
(3) 计算2P
k
=
3
×
3
2
+
1
2
×
10
(
m
o
d
23
)
=
7
×
5
−
1
(
m
o
d
23
)
5
×
5
−
1
=
1
(
m
o
d
23
)
⇒
5
−
1
=
14
⇒
k
=
7
×
14
(
m
o
d
23
)
=
6
∴
2
P
=
(
6
2
−
3
−
3
(
m
o
d
23
)
,
6
×
(
3
−
x
3
)
−
10
(
m
o
d
23
)
)
=
(
7
,
6
×
(
3
−
7
)
−
10
(
m
o
d
23
)
)
=
(
7
,
12
)
\begin{aligned} k & =\frac{3\times3^2 +1}{2\times10} \pmod {23} = 7\times5^{-1} \pmod {23} \\ & 5\times5^{-1} = 1 \pmod {23} \\ & \Rightarrow 5^{-1} = 14 \\ & \Rightarrow k = 7\times14 \pmod {23} = 6 \\ \therefore 2P & = (6^2-3-3\pmod {23}, 6\times (3-x_3) - 10 \pmod {23}) \\ & = (7, 6\times(3-7) -10 \pmod {23}) \\ & = (7,12) \end{aligned}
k∴2P=2×103×32+1(mod23)=7×5−1(mod23)5×5−1=1(mod23)⇒5−1=14⇒k=7×14(mod23)=6=(62−3−3(mod23),6×(3−x3)−10(mod23))=(7,6×(3−7)−10(mod23))=(7,12)
有限域椭圆曲线点的阶
如果椭圆曲线上一点P,存在最小的正整数n使得数乘
n
P
=
O
∞
nP=O_∞
nP=O∞ ,则将n称为P的阶
若n不存在,则P是无限阶的.
计算可得
27
P
=
−
P
=
(
3
,
13
)
27P=-P=(3,13)
27P=−P=(3,13) , 所以
28
P
=
O
∞
28P=O_∞
28P=O∞ P的阶为28
这些点做成了一个循环阿贝尔群,其中生成元为P,阶数为28。显然点的分布与顺序都是杂乱无章。
椭圆曲线加密
考虑 K = k G K=kG K=kG ,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶( n G = O ∞ nG=O_∞ nG=O∞ ),k为小于n的整数。则给定k和G,根据加法法则,计算K很容易但反过来,给定K和G,求k就非常困难。因为实际使用中的ECC原则上把p取得相当大,n也相当大,要把n个解点逐一算出来列成上表是不可能的。这就是椭圆曲线加密算法的数学依据 。
- 点G称为基点(base point)
- k ( k < n ) k(k<n) k(k<n)为私有密钥(private key)
- K为公开密钥(public key)
下面是利用椭圆曲线进行加密通信的过程:
1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(a,b)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。
5、用户B计算点 C 1 = M + r K C_1=M+rK C1=M+rK和 C 2 = r G C_2=rG C2=rG。
6、用户B将 C 1 、 C 2 C_1、C_2 C1、C2传给用户A。
7、用户A接到信息后,计算 C 1 − k C 2 C_1-kC_2 C1−kC2,结果就是点M。再对点M进行解码就可以得到明文。
因为 C 1 − k C 2 = M + r K − k ( r G ) = M + r k G − k r G = M C_1-kC_2=M+rK-k(rG)=M+rkG-krG=M C1−kC2=M+rK−k(rG)=M+rkG−krG=M
ECC保密通信算法例子
- Alice选定一条椭圆曲线E,并取椭圆曲线上一点作为基点G 假设选定E29(4,20),基点G(13,23) , 基点G的阶数n=37
- Alice选择一个私有密钥k(k<n)比如25,并生成公开密钥K=kG = 25G = (14,6)
- Alice将E和点K、G传给Bob
- Bob收到信息后,将待传输的明文编码到E上的一点M,并产生一个随机整数r(r<n,n为G的阶数) 假设r=6 要加密的信息为3,因为M也要在E29(4,20) 上,所以M=(3,28)
- Bob计算点 C 1 C_1 C1和 C 2 C_2 C2 C 1 = M + r K = M + 6 K = M + 6 G = ( 3 , 28 ) + 6 × ( 14 , 6 ) = ( 3 , 28 ) + ( 27 , 27 ) = ( 6 , 12 ) C 2 = r G = 6 G = ( 5 , 7 ) \begin{aligned} C_1 & =M+rK = M+6K= M+6G=(3,28)+6\times(14,6) = (3,28)+(27,27)=(6,12) \\ C_2 & =rG = 6G =(5,7) \end{aligned} C1C2=M+rK=M+6K=M+6G=(3,28)+6×(14,6)=(3,28)+(27,27)=(6,12)=rG=6G=(5,7)
- Bob将 C 1 、 C 2 C_1、C_2 C1、C2传给Alice
- Alice收到信息后,计算 C 1 − k C 2 C_1-kC_2 C1−kC2,结果就是 M = C 1 − k C 2 = ( 6 , 12 ) − 25 C 2 = ( 6 , 12 ) − 25 × ( 5 , 7 ) = ( 6 , 12 ) − ( 27 , 27 ) = ( 6 , 12 ) + ( 27 , 2 ) = ( 3 , 28 ) M = C_1-kC_2 =(6,12)-25C_2 =(6,12)-25\times(5,7) =(6,12)-(27,27) =(6,12)+(27,2) =(3,28) M=C1−kC2=(6,12)−25C2=(6,12)−25×(5,7)=(6,12)−(27,27)=(6,12)+(27,2)=(3,28)
ECC技术要求
通常将Fp上的一条椭圆曲线描述为T=(p,a,b,G,n,h)p、a、b确定一条椭圆曲线(p为质数,(mod p)运算)G为基点,n为点G的阶,h是椭圆曲线上所有点的个数m与n相除的商的整数部分
参量选择要求:
- p越大安全性越好,但会导致计算速度变慢
- 200bit左右可满足一般安全要求
- n应为质数 h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)
- 4 a 3 + 27 b 2 ≠ 0 ( m o d p ) 4a^3 + 27b^2 \neq 0 \pmod p 4a3+27b2=0(modp)
ECC的应用(比特币)
比特币系统选用的secp256k1中,参数为
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F=
2
256
−
2
32
−
2
9
−
2
8
−
2
7
−
2
6
−
2
4
−
1
2^{256} − 2^{32} − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1
2256−232−29−28−27−26−24−1
a = 0, b = 7
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01
ECC vs. RSA – ECC的优缺点
优点 | 缺点 |
---|---|
安全性能更高:160位ECC与1024位RSA、DSA有相同的安全强度 | 设计困难,实现复杂 |
处理速度更快:在私钥的处理速度上,ECC远 比RSA、DSA快得多 | 如果序列号设计过短,那么安全性并没有想象中的完善 |
带宽要求更低 | |
存储空间更小:ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多 |
更多推荐
所有评论(0)