密码学-06-针对离散对数的攻击
许多公钥密码系统都依赖于离散对数计算十分困难的特性,离散对数越难计算,那么密码系统就越安全。离散对数的安全性跟它所基于的群关系非常大,通常来说群的阶越高,计算离散对数越困难。但是除了阶的大小,群本身的结构也会影响离散对数的安全性。
为了安全性,离散对数通常定义在模
暴力破解法
将
看起来
大步小步法
大步小步法(Baby-Step Giant-Step)是对暴力破解法的一个改进,是算法如下:
- 计算
。 - 假设
,其中 , 。 - 因此有
,有 。 - 对于在
范围内的每个 ,计算 ,并且存储起来。 - 计算
的值。 - 将
从 到 循环,计算 ,每计算一次,就查找第 4 步中有没有相等的 。如果找到,则退出循环,离散对数的解为 。
该算法的时间复杂度和空间复杂度为
算法中对
Pohlig-Hellman 算法
前面两种算法对群的阶没有要求,适用于任何群,但是效率不高,对于阶太大的群不适用。密码学家 Pohlig 与 Hellman 在 1978 年发明一种算法,可以用于破解群的阶为光滑数的离散对数,这个算法以两位作者的名字命名为 Pohlig-Hellman 算法。
在理解这个算法之前,先要理解什么是光滑数(Smooth Integer)。
光滑数
在数论中,如果一个数的所有质因数都小于等于 B,就称这个数为B-光滑数(B-Smooth Integer)。例如
需要注意的是,一个数被称作是B-光滑数,并不需要 B 是这个数的质因数,只需要 B 大于或等于这个数的每一个质因数就行。例如上面的 15750 也可以被叫做 8-光滑数、9-光滑数、11-光滑数,等等。
算法思想
设群
对如下等式:
我们将两边同时求
交换一下右边的指数得到:
设
因为
对于
利用中国剩余定理,可以求得满足上诉线性方程组的解,方程组的每个解都模所有
通过这种方式我们就求得了
在求解
好在对于阶为一个质数的幂的情况,有一个效率很高的算法。为了简化符号,令
其中任意
令
其中
由此我们可以看到
下面我们对
最终我们得到如下等式
其中
对于
从这个复杂度可以看出,只要
防范针对离散对数的攻击
要使离散对数是安全的,首先要保证
安全质数
对于
使用安全质数的群
因此使用非常大的安全质数(通常大于1024比特位)将会使离散对数变得十分安全。
参考文献
[1] Baby-step giant-step: https://en.wikipedia.org/wiki/Baby-step_giant-step
[2] An Improved Algorithm for Computing Logarithms over GP(p) and Its Cryptographic Significance: https://ee.stanford.edu/~hellman/publications/28.pdf
[3] Smooth number: https://en.wikipedia.org/wiki/Smooth_number
[4] The Pohlig-Hellman Algorithm: http://anh.cs.luc.edu/331/notes/PohligHellmanp_k2p.pdf
[5] Safe and Sophie Germain primes: https://en.wikipedia.org/wiki/Safe_and_Sophie_Germain_primes
[6] How to Backdoor Diffie-Hellman: https://eprint.iacr.org/2016/644.pdf