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