椭圆曲线密码体制具有对带宽和存储空间的需求相对较小以及安全曲线选择丰富等优势,其安全性主要依赖于椭圆曲线离散对数问题的难解性。但如果相关密码系统的曲线参数和加密过程中的随机数发生器选择不当,都有可能使得该系统不安全。对一些特殊的椭圆曲线离散对数问题,存在多项式时间或者亚指数时间算法。但对任意给定椭圆曲线上的离散对数问题,在经典计算机模型下目前仍然没有多项式时间算法,值得深入探究。
有限域中的离散对数问题可用亚指数时间的指标演算法求解。 对于ECDLP 常见的求解算法有大步-小步法、 Pollard’s rho 算法等. 一般来说,当参数 p 较大时,这些算法并不容易求解. 而在参数设定不当时,ECDLP 的困难性会下降; 如 MOV 攻击可以利用双线性对将 ECDLP 求解转为有限域中乘法群的 DLP 求解,而有限域的乘法群中 DLP 存在亚指数时间的算法。
指数积分算法是目前已知最有力的计算离散对数方法,这项技术并不能应用于所有群。
指数积分算法
$$
输入:乘法群Z_p^*的生成元 \alpha 和\beta
$$
$$
输出:离散对数x=log_\alpha \beta
$$
$$
指数积分算法需要选择一个相对较小在Z_p^∗ 中的元集合S=\lbrace p_1,p_2,…..,p_i \rbrace称之为分解基(都是素数)。这种方法中,Z_p^∗ 中大的元可以有效表示为集合S上元的乘积。
$$
首先我们先选择一个分解基S,然后收集关于S上对数元的线性关系
$$
选择一个随机整数k,0\leq k\leq n-1,计算\alpha ^k
$$$$
令\alpha^k为S中元的乘积: \alpha^k \equiv \prod_{i=1}^{t}p_i^{c_i}modP, \quad c_i \geq0
$$$$
if \quad succeed:\quad上式取对数得到一个线性关系:\quad k \equiv \sum _{i=1}^{t}log_\alpha P_i mod(P-1)
$$重复1and2直到得到 t+c 个关系
$$
找出S上元的离散对数,在模p-1意义下,解在第2步中收集到的t+c个线性方程的线性系统得到所有值log_\alpha P_i,\quad 1 \leq i \leq t
$$计算x
$$
选择一个随机整数k,0\leq k\leq n-1,计算\beta ·\alpha ^k
$$$$
令\beta ·\alpha ^k为S中元的乘积: \beta ·\alpha ^k \equiv \prod_{i=1}^{t}p_i^{d_i}modP, \quad d_i \geq0
$$$$
如果不成功则重复第6步,否则,方程两边取对数: \quad log_\alpha \beta=[(\sum_{i=1}^{t}log_\alpha P_i)-k]mod(p-1)=x \quad Return(x)
$$
例如
$$
令p=229.有限乘法群Z_p^*生成元 \alpha=6。\beta=13,使用指数积分算法计算离散对数log_613
$$
参照第七步
$$
x=logα_β≡c_1log_αp1+c_2log_αp2+⋯+c_Blog_αpB-k(modp−1)
$$
利用CRT求x
1 | #g=65537, p=26622572818608571599593915643850055101138771 |
ECDLP
$$
椭圆曲线是secp256k1 \quad
y^2 = x^3 + ax + b,其中 a = 0,b = 7\quad
p = FFFFFFFF \quad FFFFFFFF \quad FFFFFFFF \quad FFFFFFFF \quad FFFFFFFF \quad FFFFFFFF \quad FFFFFFFE \quad FFFFFC2F = 2 ^ {256} - 2 ^ {32} - 2 ^ 9 - 2 ^ 8 - 2 ^ 7 - 2 ^ 6 - 2 ^ 4 - 1
$$
$$
G.x=79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
$$
$$
G.y=483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
$$
1 | ''' |
加以验证一下
总的来说就是求指数x,转换为log进行离散计算
$$
\alpha^x=\beta mod P
$$