椭圆曲线密码体制
安全性基于椭圆曲线离散对数问题的难解性
1.椭圆曲线
- 一般的椭圆曲线
一般地,椭圆曲线是一个具有两个变元 x 和 y 的三次方程,它是满足
y
2
+
a
x
y
+
b
y
=
x
3
+
c
x
2
+
d
x
+
e
y^2 + axy + by = x^3 + cx^2 +dx + e
y2+axy+by=x3+cx2+dx+e
的所有点 (x, y) 的集合,外加一个无穷远点 O (认为其 y 坐标无限大)
- 实数域上的椭圆曲线
实数域上的椭圆曲线是对于固定的 a、b 值,满足形如方程
y
2
=
x
3
+
a
x
+
b
y^2 = x^3 + ax + b
y2=x3+ax+b
的所有点 (x , y) 的集合,外加一个无穷远点 O 。其中 a、b 是实数,且满足
4
a
2
+
27
b
3
≠
0
4a^2 + 27b^3 \neq 0
4a2+27b3=0 ; x 和 y 在实数域上取值。
- 有限域 GF§上的椭圆曲线
有限域 GF(p) 上的椭圆曲线是对于固定的 a、b 值,满足形如方程
y
2
≡
x
3
+
a
x
+
b
(
m
o
d
p
)
y^2 \equiv x^3 + ax + b(mod \ p)
y2≡x3+ax+b(mod p)
的所有点 (x, y) 的集合,外加一个无穷远点 O。其中 a、b 、x 和 y 均在实有限域 GF(p) 即 {0,1, … ,p-1}上取值,且满足
4
a
2
+
27
b
3
≠
0
4a^2 + 27b^3 \neq 0
4a2+27b3=0 。 p 是素数(p 大于3)。这类椭圆曲线通常也可以用
E
p
(
a
,
b
)
E_p(a,b)
Ep(a,b) 来表示。
该类椭圆曲线只有有限个点数 N (称为椭圆曲线的阶,它包括无穷远点),它与安全性相关,N 越大,安全性越高。粗略估计时, N近似等于 p; N的更精确的范围由Hasse定理确定。
Hasse定理:如果 E 时定义在域 GF(q) 上的椭圆曲线, N 是 E 上点的个数,则
∣
N
−
(
p
+
1
)
∣
≤
2
q
。
区
间
[
p
+
1
−
2
p
,
p
+
1
+
2
q
]
|N - (p+1)| \leq 2 \sqrt q。区间[p + 1 - 2 \sqrt p \ ,\ p + 1 + 2 \sqrt q ]
∣N−(p+1)∣≤2q。区间[p+1−2p , p+1+2q] 称为Hasse区间。
- 有限域 G F ( 2 m ) GF(2^m) GF(2m) 上的椭圆曲线
有限域
G
F
(
2
m
)
GF(2^m)
GF(2m) 上的椭圆曲线是对于固定的 a、b 值,满足形如方程
y
2
+
x
y
=
x
3
+
a
x
2
+
b
y^2 + xy = x^3 + ax^2 + b
y2+xy=x3+ax2+b
的所有点 (x , y) 的集合,外加一个无穷远点 O 。其中 a、b 、 x和 y 均在实有限域
G
F
(
2
m
)
GF(2^m)
GF(2m) 上取值。这类椭圆曲线通常也可用
E
2
m
(
a
,
b
)
E_{2^m}(a, b)
E2m(a,b) 来表示。该椭圆曲线只有有限个点。域
G
F
(
2
m
)
GF(2^m)
GF(2m) 上的元素是 m 位的二进制串。
2.加法规则
(1)O + O = O (O为无穷远点)
(2)对于曲线上的所有点 P 满足 P + O =P
(3)对于每一个点 P 有一个特殊点 Q 满足 P + Q = O ,这个特殊点为 -P (即点 P 与 Q 互逆)。再次基础上可以定义减法规则:R - S = R + (-S) 。如果 P = (x, y) ,即 -P= (x, -y) ,即互逆的两点有相同的 x 坐标、相反的 y 坐标。
(4)对于所有的点 P 和 Q ,满足加法交换律, 即 P + Q = Q + P。
(5)对于所有的点P、Q 和 R,满足加法结合律,即 P + (Q + R) = (P + Q) + R。
(6)两个不同且不互逆的点
P
(
x
1
,
y
1
)
与
Q
(
x
2
,
y
2
)
(
x
1
≠
x
2
)
P(x_1, y_1) 与 Q(x_2, y_2) \ (x_1 \neq x_2)
P(x1,y1)与Q(x2,y2) (x1=x2) 的加法规则为
P
(
x
1
,
y
1
)
+
Q
(
x
2
,
y
2
)
=
S
(
x
3
,
y
3
)
P(x_1, y_1) + Q(x_2, y_2) = S(x_3, y_3)
P(x1,y1)+Q(x2,y2)=S(x3,y3)
其中:
x
3
=
λ
2
−
x
1
−
x
2
y
3
=
λ
(
x
1
−
x
3
)
−
y
1
λ
=
y
2
−
y
1
x
2
−
x
1
x_3= \lambda ^2 - x_1 - x_2 \\ y_3 = \lambda (x_1 - x_3) - y_1 \\ \lambda = \frac {y_2 - y_1}{x_2 - x_1}
x3=λ2−x1−x2y3=λ(x1−x3)−y1λ=x2−x1y2−y1
(7)(倍点规则)
P
(
x
1
,
y
1
)
+
P
(
x
1
,
y
1
)
=
2
P
(
x
1
,
y
1
)
=
Q
(
x
3
,
y
3
)
(
y
1
≠
0
)
P(x_1, y_1) + P(x_1, y_1) = 2P(x_1, y_1) = Q(x_3, y_3)\ (y_1 \neq 0)
P(x1,y1)+P(x1,y1)=2P(x1,y1)=Q(x3,y3) (y1=0)
其中:
x
3
=
λ
2
−
2
x
1
y
3
=
λ
(
x
1
−
x
3
)
−
y
1
λ
=
3
x
1
2
+
a
2
y
1
(
a
为
椭
圆
曲
线
方
程
中
的
一
次
项
系
数
)
x_3= \lambda ^2 - 2x_1 \\ y_3 = \lambda (x_1 - x_3) - y_1 \\ \lambda = \frac {3x_1^2 + a}{2y_1}\ (a为椭圆曲线方程中的一次项系数)
x3=λ2−2x1y3=λ(x1−x3)−y1λ=2y13x12+a (a为椭圆曲线方程中的一次项系数)
以上七条加法规则在复数、实数、有理数和有限域 GF§ 上均有效。对有限域 GF§ 的情形,上述加法规则取得的应是 mod p的结果。 对于有限域
G
F
(
2
m
)
GF(2^m)
GF(2m) ,由于所用椭圆曲线形式发生变化,因此上述3、6、7 应作以下修改:
(3)如果P = (x, y) ,则 -P= (x, x+y) ,即某点的逆与该店有相同的 x 坐标,逆的 y 坐标则是该点的 x、y 坐标之和。
(6)两个不同且不互逆的点
P
(
x
1
,
y
1
)
与
Q
(
x
2
,
y
2
)
(
x
1
≠
x
2
)
P(x_1, y_1) 与 Q(x_2, y_2) \ (x_1 \neq x_2)
P(x1,y1)与Q(x2,y2) (x1=x2) 的加法规则为
P
(
x
1
,
y
1
)
+
Q
(
x
2
,
y
2
)
=
S
(
x
3
,
y
3
)
P(x_1, y_1) + Q(x_2, y_2) = S(x_3, y_3)
P(x1,y1)+Q(x2,y2)=S(x3,y3)
其中:
x
3
=
λ
2
+
λ
+
x
1
+
x
2
+
a
y
3
=
λ
(
x
1
+
x
3
)
+
x
3
+
y
1
λ
=
y
2
+
y
1
x
2
+
x
1
x_3= \lambda ^2 + \lambda + x_1 + x_2 + a \\ y_3 = \lambda (x_1 + x_3) + x_3 + y_1 \\ \lambda = \frac {y_2 + y_1}{x_2 + x_1}
x3=λ2+λ+x1+x2+ay3=λ(x1+x3)+x3+y1λ=x2+x1y2+y1
(7)
P
(
x
1
,
y
1
)
+
P
(
x
1
,
y
1
)
=
2
P
(
x
1
,
y
1
)
=
Q
(
x
3
,
y
3
)
P(x_1, y_1) + P(x_1, y_1) = 2P(x_1, y_1) = Q(x_3, y_3)
P(x1,y1)+P(x1,y1)=2P(x1,y1)=Q(x3,y3)
其中:
x
3
=
λ
2
+
λ
+
a
y
3
=
x
1
2
+
(
λ
+
1
)
x
3
λ
=
x
1
2
+
y
1
x
1
x_3= \lambda ^2 + \lambda + a \\ y_3 = x_1^2 + (\lambda +1) x_3 \\ \lambda = \frac {x_1^2 + y_1}{x_1}
x3=λ2+λ+ay3=x12+(λ+1)x3λ=x1x12+y1
对于有限域
G
F
(
2
m
)
GF(2^m)
GF(2m) ,设生成元为 g ,则所有的加法运算应是 g 的幂指数
x
m
o
d
(
2
m
−
1
)
x mod \ (2^m - 1)
xmod (2m−1) 的结果,即当 g 的幂指数大于
2
m
−
1
2^m - 1
2m−1 时,需要进行
g
x
m
o
d
(
2
m
−
1
)
g ^ {x mod (2^m -1)}
gxmod(2m−1) 运算。
3.密码体制
椭圆曲线离散对数问题
已知椭圆曲线 E 和点 G ,随机选择一个整数 d ,容易计算 Q = d x G ,但给定 Q 和 G 计算 d 就相对困难。
椭圆曲线密码体制的依据就是定义在椭圆曲线点群上的离散对数问题的难解性。
(1)系统的建立
选取一个基域 GF§ 和定义在该基域上的椭圆曲线 E p ( a , b ) E_p(a, b) Ep(a,b) 及其上的一个拥有素数阶 n 的点 G ( x G , y G ) G(x_G, y_G) G(xG,yG) ,这一套椭圆曲线的域参数可用 T = ( p , a , b , G , n , h ) T=(p,a,b,G,n,h) T=(p,a,b,G,n,h) 来表示,这里 h = N/n,即椭圆曲线的阶 N 与点 G ( x G , y G ) G(x_G, y_G) G(xG,yG) 的阶 n 之比。其中有限域 GF§ ,椭圆曲线参数 a,b ,点 G ( x G , y G ) G(x_G, y_G) G(xG,yG) 和阶 n 都是公开信息。
建立系统时,在选定椭圆曲线参数的过程中,确定有用素数阶 n 的点 G ( x G , y G ) G(x_G, y_G) G(xG,yG) 通常是最困难,最耗时的工作。可以预先计算出一些满足条件的椭圆曲线供选用,或者使用一些标准中推荐的椭圆曲线。
(2)密钥的生成
系统建立后,每个参与的实体进行下列计算:
- 在区间 [1, n-1] 中随机选取一个整数 d 作为私钥。
- 计算 Q = d × g Q = d \times g Q=d×g ,即由私钥计算出公钥。
- 实体的公钥为点 Q,实体的私钥是整数 d。 离散对数的难解性保证了在已知公钥 Q的情况下不能计算出私钥 d 。
(3)加密过程
当实体 B 发送消息 M 给实体 A 时,实体 B 执行下列步骤:
a. 查找 A 的公钥 Q。
b. 将消息 M 表示成一个域元素 m ∈ G F ( p ) m \in GF(p) m∈GF(p) 。
c. (选定 B 的私钥)在区间 [1, n-1] 中随机选取一个整数 k 。
d. (计算 B 的公钥)计算点 ( x 1 , y 1 ) = k × G (x_1, y_1) = k \times G (x1,y1)=k×G 。
e. 计算点 ( x 2 , y 2 ) = k × Q (x_2, y_2) = k \times Q (x2,y2)=k×Q ,如果 x 2 = 0 x_2 = 0 x2=0, 则返回步骤c。
f. 计算 c = m x 2 c = mx_2 c=mx2 。
g. 传送加密数据 ( x 1 , y 1 , c ) (x_1, y_1, c) (x1,y1,c) 给 A 。这里 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 实际上是 B 的公钥。
(4)解密过程
当实体 A 解密来自 B 的密文 ( x 1 , y 1 , c ) (x_1, y_1, c) (x1,y1,c) 时, A 执行下列步骤:
a. 使用自己的私钥 d ,计算点 ( x 2 , y 2 ) = d × ( x 1 , y 1 ) (x_2, y_2) = d \times (x_1, y_1) (x2,y2)=d×(x1,y1) 。因为 ( x 2 , y 2 ) = k × Q = k × d × G = d × k × G = d × ( x 1 , y 1 ) (x_2, y_2) = k \times Q = k \times d \times G = d \times k \times G = d \times (x_1, y_1) (x2,y2)=k×Q=k×d×G=d×k×G=d×(x1,y1)
b. 通过计算 m = c x 2 − 1 m = c x_2^{-1} m=cx2−1 ,恢复出消息 m 。