原根与指标(指标也被称为离散对数(#^.^#))
原根我们清楚了。
啥是指标呢?
对于模13,2是它的原根,则2x mod 132x mod 13会取遍[1,12][1,12],x∈[1,12]x∈[1,12]
比如24=16≡3 mod( 13)24=16≡3 mod( 13)
则I(3)=4I(3)=4
这就是指标函数II
显然,指标函数是双射函数
指标法则 指标满足下述法则:
- 乘积法则
- I(ak)≡kI(a) (mod p−1)I(ak)≡kI(a) (mod p−1) 幂法则
证明: gI(ab)≡ab≡gI(a)gI(b)≡gI(a)+I(b)(mod p)gI(ab)≡ab≡gI(a)gI(b)≡gI(a)+I(b)(mod p)
这意味着gI(ab)−I(a)−I(b)≡1 (mod p)gI(ab)−I(a)−I(b)≡1 (mod p)
又gg是原根,则是p−1p−1的倍数
所以乘积法则得证。
幂法则同理。
如果我们现在已经有了指标表(p−1p−1对映射),则可以通过指标法则求模和简化解同余式
比如求2914 mod372914 mod37 ,你可以使用快速幂
也可以用指标法则。I(2914)≡14∗I(29)≡14∗21≡6 mod 36I(2914)≡14∗I(29)≡14∗21≡6 mod 36
又I(27)=6I(27)=6,所以2914≡27 (mod 37)2914≡27 (mod 37)
指标法则也可以用来求同余式
考虑同余式19x≡23(mod37)19x≡23(mod37)
则I(19)+I(x)≡I(23) (mod 36)I(19)+I(x)≡I(23) (mod 36)
35+I(x)≡15 (mod 36)35+I(x)≡15 (mod 36)
I(x)≡16 (mod 36)I(x)≡16 (mod 36)
x≡9 (mod 37)x≡9 (mod 37)
不过还是用欧几里得算法方便,因为使用指标你需要知道指标表
再来看一个式子
求同余式3x30≡4 (mod 37)3x30≡4 (mod 37)
使用乘积法则与幂法则:
对于最后一个式子,是一个同余方程,由于gcd(30,36)=6|12gcd(30,36)=6|12,则其有解,且有6个解
我们求得
I(x)≡4,10,16,22,28,34(mod 36)I(x)≡4,10,16,22,28,34(mod 36)
再由表得到对应的值,有6个解16,25,9,21,12,28可以看到指标法的优点在于将幂运算转为乘法,将乘法转为加法。
这一点和对数函数很像:
log(ab)=log(a)+log(b)log(ak)=klog(a)log(ab)=log(a)+log(b)log(ak)=klog(a)
因此,指标也被称为离散对数。离散对数在现代密码学中扮演着重要的角色。假设给一个大素数pp,以及模的两个数aa和。
离散对数问题(DLP)(DLP),是指求指数kk使得
这个值在pp很大时很难求解。因此可用这种方法构造公钥密码体制,它类似于前面所提到的密码体制。