1. 椭圆曲线加密算法
椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。
椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和Victor Miller分别独立提出的。
2. 理论基础
2.1 有限域
2.1.1 域
在一个整数集合中,里面的整数进行加法,减法,乘法,除法产生的结果都在这个集合中,则称这个集合为域
2.1.2 有限域
椭圆曲线是连续的,并不适合用于加密;所以必须把椭圆曲线变成离散的点,要把椭圆曲线定义在有限域上。而椭圆曲线密码所使用的椭圆曲线是定义在有限域内,有限域最常见的例子是有限域GFppp,指给定某质数p,由0,1,2...p-1共p个元素组成的整数集合中加法、二倍运算。例如$GF_{233}$就是
$$ y^{2}=(x^{3}+7)\ mod \quad 233 $$
2.2 定义椭圆曲线的运算规则
2.2.1 加法
过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A+B,即为加法。如下图所示:A + B = C
2.2.2 二倍运算
上述方法无法解释A + A,即两点重合的情况。因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A + A,即2A,即为二倍运算。
2.2.3 正负取反
将A关于x轴对称位置的点定义为-A,即椭圆曲线的正负取反运算。如下图所示:
2.2.4 无穷远点
如果将A与-A相加,过A与-A的直线平行于y轴,可以认为直线与椭圆曲线相交于无穷远点。
综上,定义了A+B、2A运算,因此给定椭圆曲线的某一点G,可以求出2G、3G(即G + 2G)、4G......。即:当给定G点时,已知x,求xG点并不困难。反之,已知xG点,求x则非常困难。此即为椭圆曲线加密算法背后的数学原理。
2.3 有限域上的椭圆曲线运算
椭圆曲线要形成一条光滑的曲线,要求x,y取值均为实数,即实数域上的椭圆曲线。但椭圆曲线加密算法,并非使用实数域,而是使用有限域。按数论定义,有限域GFppp指给定某个质数p,由0、1、2......p-1共p个元素组成的整数集合中定义的加减乘除运算。
假设椭圆曲线为y² = x³ + x + 1,其在有限域$GF_{23}$上时,写作:
$$ y2 ≡ x3 +x + 1 mod 23 \\ y^{2}\ \equiv \ x^{3}\ +x\ +\ 1\ mod 23 $$
此时,椭圆曲线不再是一条光滑曲线,而是一些不连续的点,如下图所示。以点(1,7)为例,7² ≡ 1³ + 1 + 1 ≡ 3 (mod 23)。如此还有如下点:
(0,1) (0,22) (1,7) (1,16) (3,10) (3,13) (4,0) (5,4) (5,19) (6,4) (6,19) (7,11) (7,12) (9,7) (9,16) (11,3) (11,20) 等等。
另外,如果P(x,y)为椭圆曲线上的点,则-P即(x,-y)也为椭圆曲线上的点。如点P(0,1),-P=(0,-1)=(0,22)也为椭圆曲线上的点。
2.3.1 计算xG
相关公式如下:
有限域GF(p)上的椭圆曲线y² = x³ + ax + b,若P(Xp, Yp), Q(Xq, Yq),且P≠-Q,则R(Xr,Yr) = P+Q 由如下规则确定:
$$ Xr\quad =\quad (λ^{2}\ -\ Xp\ -\ Xq)\ mod \quad p $$
$$ Yr \quad = \quad (λ(Xp\ -\ Xr)\ -\ Yp)\ mod\quad p $$
其中 :
$$ λ = \frac{Yq - Yp} {Xq - Xp} (mod \quad p)(若P≠Q) $$
$$ λ = \frac{3Xp^{2} + a} {2Yp} (mod \quad p)(若P=Q) $$
因此,有限域GF(23)上的椭圆曲线y² ≡ x³ + x + 1 (mod 23),假设以(0,1)为G点,计算2G、3G、4G...xG等等,方法如下:
计算2G:λ = (3x0² + 1)/2x1 mod 23 = (1/2) mod 23 = 12 Xr = (12² - 0 - 0) mod 23 = 6 Yr = (12(0 - 6) - 1) mod 23 = 19 即2G为点(6,19)
计算3G: 3G = G + 2G,即(0,1) + (6,19) λ = (19 - 1)/(6 - 0) mod 23 = 3 Xr = (3² - 0 - 6) mod 23 = 3 Yr = (3(0 - 3) - 1) mod 23 = 13 即3G为点(3, 13)
同理计算4G、5G...xG,分布如下图:
2.3.2 关于标量乘法的计算方法
根据以上,计算kG,即GF(k)很麻烦,这个时候如果用标量乘法的计算方法的话,就很简单,只需要先做倍数再做加法就可以得到结果。
假设k=152,其对应的二进制是10010111,而二进制数字可以转化为:
$$ 151 = 1*2^{7} + 0*2^{6} + 0*2^{5} + 1*2^{4} + 0*2^{3} + 1*2^{2} + 1*2^{1} + 1*2^{0} $$
$$ 151P = 1*2^{7}P + 1*2^{4}P + 1*2^{2}P + 1*2^{1}P + 1*2^{0}P $$
3. 椭圆曲线加解密算法原理
- 选一条椭圆曲线Ep(a,b),并取椭圆曲线上一点作为基点P
- 选定一个大数k作为私钥,并生成公钥:$Q=kP$
- 加密:选择随机数r,将消息M生成密文,密文是一个点对,即:$C=(rP,M+rQ)$
- 解密:$M=k(rP)+M+rQ $
评论 (0)