椭圆曲线

前几天 NSA 宣布了用于密钥协商和数字签名的新标准,为 ECDH、ECDAS 和 ECMQV
以前一直没有仔细看过 EC 方面的东西,现在看来需要学习一下了,所以写了一些。


ECDLP = Elliptic Curve Discrete Logarithm Problem


这三种都是以EC,也就是椭圆曲线为基础的算法,具体来说,是有限域上的椭圆曲线,其安全性依赖于:要求出在这个有限域上的椭圆曲线的离散对数非常困难


有限域相关的数学主要涉及到群、环、域的概念以及密码学上使用的两个特殊的有限域


(早就忘光了....复习一下....^^!)


群:如果满足以下条件的一个不空集合 G 对于一个称为乘法的运算构成一个群:
- G 对于乘法来说是封闭的
- 对于任意的 a, b, c,满足结合率 a(bc) = (ab)c
- 至少存在一个左单元 e,对于任意 a 有 ea = a
- 对于任意a,至少存在一个 a-1,有 aa-1 = e


-- 如果对于任意 ab = ba,那么称为交换群
-- 如果G 里面的每一个元素,都可以由 G 的某一个固定元素 a 的乘方来得到,那么 G 是一个循环群,G = (a),a 称为 G 的一个生成元


环:满足以下条件的集合 R 构成一个环:
- R 对于一种称为加法的运算构成一个交换群
- R 对于一种称为乘法的运算是封闭的
- 对于乘法运算,满足结合率 a(bc) = (abc)
- 对于加法和乘法运算,满足分配率 a(b + c) = ab + ac, (b + c)a = ba + ca


-- 含有单位元的环:R内含有乘法单位元 e,使得 ae = ea = a
-- ab = ba 的环称为交换环
-- 含有单位元而无零因子的交换环称为整环(零因子:a != 0, b!= 0, ab = 0,则 a, b 分别为这个环的左右零因子)
-- 如果一个环的非零元素全体对于乘法形成一个群,那么称为除环


域:一个交换除环称为一个域 F


有限域 :Galois field GF


GF 中元素的个数为一个素数,或者一个素数的幂,则记为 GF(P) 或 GFpn


由域的定义可知:对于加法和乘法,有限域中满足交换率、结合率、分配率


椭圆曲线密码中使用的是两个特殊的有限域:Fp, F2m


Fp:
- p 为奇素数
- 拥有 p 个元素的素数有限域
- 域中的元素表现为如下的整数 {0, 1, ..., p-1}
- 这个域上的加法定义为:
a + b = r (mod p)
单位元为0
- 这个域上的乘法定义为:
a*b = r (mod p)
单位元为1
- 减法和除法分别定义为和逆元的加法和乘法:
a + (-a) = 0 (mod p)
a * a -1 = 1 (mode p)


F2m:
- 元素数目为 2m
- 里面的元素是多项式,可以表示为:am-1xm-1 + am-2xm-2 + ... + a1x + a0 : ai = {0, 1}
- 加法定义很简单,就是各项系数相加,取 2 的模
ri = ai + bi (mod 2)
单位元为0
- 乘法定义比较复杂,需要定义一个不可约多项式 f(x),两个元素相乘的结果先对这个多项式取模(结果的次数要小于 f(x))
然后各项系数再对 2 取模,例如:
GF(23) 中,取 f(x) = x3 + x + 1
则:(x2 + x + 1) * (x2 + x) = x4 + 2x3 + 2x2 + x
对 x3 + x + 1,取模,得:x2 - 2x - 2,系数分别取模,得 x2
单位元为1
- 这些多项式一般都表示为 (1101)这样的形式,也就是各个系数
- 减法和除法分别定义为和逆元的加法和乘法:
a + (-a) = 0 (mod p)
a * a -1 = 1 (mode p)


椭圆曲线 E :
- 任意域上的椭圆曲线可以用齐次坐标的形式表示为:
Y2Z + a1XYZ + a3YZ2 = X3 + a2X2Z + a4XZ2 + a6Z3
- 这个曲线上有无穷远点 (0:1:0),用 O 表示,这里也是齐次坐标形式
- 实域上的椭圆曲线为:
y2 + a1xy + a3y = x3 + a2x2 + a4x + a6
- 实域 R 上椭圆曲线的点的加法:
-- 设L 为一条直线因为椭圆曲线的方程是三次的,所以L可与E在P2(R)恰有三个交点记为P,Q,R
如果 L 与 E 相切那么 P, Q, R 可以不是相异的
按照如下方式定义加法:
设P,Q 属于E L 为联接 P,Q 的直线若 P = Q 则L取过 P 点的切线,
设 R 为 L 与 E 的另一个交点再取连接 R 与 O 的直线 L,则L 与 E 的另一个交点定义为 P + Q
-- 由于无穷远点为 (0:1:0),所以任意一个点 (X:Y:Z)和这个点连接的直线 (aX + bY + cZ = 0) 都有:
bY = 0 => aX + cZ = 0
所以这条直线上的点 x 都相同,是不是可以推出???(对吗?):
如果两个点P, Q 属于 E 且 xp = xq,那么 P + Q = O,即 P = -Q
-- 如果 E 上的 P Q R 三点共线,那么 (P + Q) + R = O
P + O = P
P + Q = Q + P
-P 存在,且 P+(-P) = O
(P + Q) + R = P + (Q + R)
所以
E 对 + 构成一个交换群,注意,这里 + 就是群中的"乘法"


Fp 上的椭圆曲线: y2 = x3 + ax + b (mod p)
- (4a3 + 27b2) != 0,否则曲线会退化,导致某些点的逆元不存在(Why?)
- 点的数目为 #E(Fp),具体范围由 Hass 定理确定
- P = (x, y),则 -P = (x, -y)
这时候,P + (-P) = O
- (x1, y1) + (x2, y2) = (x3, y3); x1 != x2 这时候:
x3 = A - x1 - x2 (mod p)
y3 = A * (x1 - x3) - y1 (mod p)
A = (y2 - y1) / (x2 - x1) (mod p)
- (x1, y1) + (x1, y1) = (x3, y3),则:
x3 = A2 - 2 * x1 (mod p)
y3 = A * (x1 - x3) - y1 (mod p)
A = (3 * x12 + a) / (2 * y1) (mod p)


F2m 上的椭圆曲线: y2 +xy = x3 + ax2 + b
- b != 0
- 点的数目为 #E(Fp),具体范围由 Hass 定理确定
- P = (x, y),则 -P = (x, x + y)
这时候,P + (-P) = O
- (x1, y1) + (x2, y2) = (x3, y3); x1 != x2 这时候
x3 = A2 + A + x1 + x2 + a
y3 = A * (x1 + x3) + x3 + y1
A = (y1 + y2) / (x1 + x2)
- (x1, y1) + (x1, y1) = (x3, y3),则:
x3 = A2 + A + a
y3 = x12 + (A + 1) * x3
A = x1 + (y1 / x1)


有限域上的椭圆曲线上的离散对数:
- 已知 E(Fp) 和 E(F2m) 构成了交换群
设 P 属于这个群,如果 P 的周期很大,也就是 t * P = O, t 很大
那么对于 Q = mP
定义:
m = logpQ
这就是椭圆曲线的点形成的群的离散对数


我们知道,DH、DSA 和 MQV 实际上都是基于有限域的离散对数问题,只不过他们是基于 Fp* 上的乘法

所以,只需要类比一下,就可以利用有限域的椭圆曲线上的离散对数问题来进行密钥协商和数字签名了


来源:http://blog.sina.com.cn/s/blog_4e0af14201000a6u.html

你可能感兴趣的:(密码学)