简述 index calculus 算法

Posted Zetaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述 index calculus 算法相关的知识,希望对你有一定的参考价值。

前言:仅个人小记。index calculus 本质上还是蛮力计算,不过这个蛮力相对于普通的蛮力更加优雅有效,但仍然是指数级别,可以称之为亚指数时间复杂。本文仅限于素数域进行讨论,还不涉及到多项式形式的素数的幂的扩域的情形,关于多项式形式,可以参看A Course in Number Theory and Cryptography,其内容简洁明了到位。

前提交代

F p F_p Fp,生成元为 b。
b为底数, i n d ( a ) ind(a) ind(a)表示以 b 为的 a 的离散对数。

挑一个值S,找出小于S的所有素数,构成一个基组A

A = p 1 , p 2 , . . . , p k A=\\p_1,p_2,...,p_k\\ A=p1,p2,...,pk
小注:为什么称为基?素数本就是数的基。任意一个数都可以通过素数来进行表达。整个数空间都可以用素数表达出来,而且每个素数之间相互独立,所以完全可以把每个素数视为一个维度,多个素数可以构成一个数的子空间。从基的角度,能够很好地理解,任意一个数能够在基上做分解。当然,如果这个数来自更高维度的空间,显然分解不了。

计算B中素数的离散对数【构建线性方程组来解出小素数的离散对数】

计算 i n d b ( p i ) ind_b(p_i) indb(pi)。具体计算是通过构建线性方程组来完成。
x i = i n d b ( p i ) x_i=ind_b(p_i) xi=indb(pi),则现在的目标是求解 x 1 , x 2 , . . . , x k x_1,x_2,...,x_k x1,x2,...,xk
下面试图构建出一组关于未知数 x 1 , x 2 , . . . , x k x_1,x_2,...,x_k x1,x2,...,xk的线性方程组。
随机选取 t, 计算 b t b^t bt,然后将 b t b^t bt这个数在素数基A上做整数分解。即希望 b t b^t bt写作

b t = p 1 e 1 p 2 e 2 . . . p k e k b^t=p_1^e_1p_2^e_2...p_k^e_k bt=p1e1p2e2...pkek

但是, b t b^t bt可能并不会在基A上完全分解,故而,这里就是一个蛮力的过程,对于 1 ≤ t ≤ p − 1 1\\leq t\\leq p-1 1tp1,挨个计算 b t b^t bt,在A上对 b t b^t bt做分解。对于某个 t,如果 b t b^t bt能被A完全分解,则丢弃分解结果;否则,保留分解结果,即 e 0 , e 1 , . . . , e k e_0,e_1,...,e_k e0,e1,...,ek

直到收集了有效的 k 个分解结果,以上分解行为才会停止。

理论推导

下面给出理论推导 b t = p 1 e 1 p 2 e 2 . . . p k e k = b e 1 x 1 b e 2 x 2 . . . b e k x k = b e 1 x 1 + e 2 x 2 + . . . + e k x k b^t=p_1^e_1p_2^e_2...p_k^e_k=b^e_1x_1b^e_2x_2...b^e_kx_k=b^e_1x_1+e_2x_2+...+e_kx_k bt=p1e1p2e2...pkek=be1x1be2x2...bekxk=be1x1+e2x2+...+ekxk进而得出一个线性方程 t = e 1 x 1 + e 2 x 2 + . . . + e k x k t=e_1x_1+e_2x_2+...+e_kx_k t=e1x1+e2x2+...+ekxk
其中,t 是已知的, e 1 , e 2 , . . . , e k e_1,e_2,...,e_k e1,e2,...,ek是可以在给定了 t 然后对 b t b^t bt做分解得到[这个过程是蛮力的]。故而, t = e 1 x 1 + e 2 x 2 + . . . + e k x k t=e_1x_1+e_2x_2+...+e_kx_k t=e1x1+e2x2+...+以上是关于简述 index calculus 算法的主要内容,如果未能解决你的问题,请参考以下文章

UVa 1374 Power Calculus (IDA*或都打表)

POJ3134 Power Calculus

读《程序员修炼之道--从小工到专家》小注

sizeof(char**),sizeof(char*), sizeof(char)小注

UVA1374-Power Calculus(迭代加深搜索)

POJ 3134 - Power Calculus