目录
一. 介绍
系列文章:
在以上文章中,我们证明了一个非常重要的定理,此处我们来简单回顾一下该定理想表达的内容。
令N代表一个整数,f代表“首1”且次数为d的多项式,也就是满足:
其中“首1”的含义是最高次数项的系数为1。下标N代表多项式的每个系数均小于N,类似于模N的效果。
如果现在我们想求解一个方程为:
该方程的本质就是求根。本身求一个应该难度不大,但如果需要满足如下两个限制条件的情况下,以上定理告诉我们可以求出对应的整数解x:
将以上过程可以形式化表达为一定定理:
此处的定理很类似网络空间安全中的小整数解问题,我们知道一般求小整数都是很难的。但该定理告诉我们可以求,所以也常被用于攻击RSA公钥密码系统。
在以上过程中,整数N是由两个大素数相乘得到(RSA公钥密码系统的公钥来源),我们是不知道这两个大素数具体等于多少。如果可以找出这两个大素数,那么RSA密码系统则可以直接被攻破,也就是可以利用欧拉定理直接求出私钥,反应在此处的问题上,当然也就会存在更有效的寻找根的算法。
以上问题的本质则是在模数情况下,求根的问题。
二. RSA明文求解算法
2.1 定理解释
假定有k个两个互素的整数,也就是我们把明文传递给了k个不同的人,如下:
其中必定存在一个最小的N,我们将其记为:
N相当于RSA中的公钥,所以都是公开的。
将RSA的加密过程抽象成多项式的运算过程,那么也就是有k个多项式,这些多项式中最大的次数设定为d,如下:
很明显明文M的大小肯定小于所有N的值,也就是可得:
正如刚才所提到的,把RSA的加密过程看成多项式的运算过程,那么也就有k个密文,如下:
我们要求密文的个数要满足:
综合以上在给定如下信息的情况:
我们可以直接攻破RSA密码系统,并获得明文M
将以上过程形式化表达为一个定理,如下:
2.2 定理证明
原多项式为g,所求的值为C,我们将其换个新的多项式,如下:
那么原来的问题,则变为:
不失一般性,也可以假设此处的多项式hi也是“首1”(monic)的多项式。那如果不是怎么办?
那就求mod Ni下的逆,则可以把其系数转变为1.那如果该数没有模逆,怎么办?
没有模逆说明两者不互素,这不就找到形成N的素数了吗!RSA系统直接被攻破。
同样,假设所有的多项式hi的次数均为d,当然如果不够d的话,两边同时乘以x相应的次数即可,该过程不改变多项式的根。
接下来,借助中国剩余定理(Chinese Remainder Theorem)讲这些多项式hi合并成一个多项式h,我们可以将其计算为:
简单分析下此处的中国剩余定理:
以上等式的来源于Ti到底应该怎么选取,我们的原则是当下标相等时,模的结果为1,也就是:
当下标不等时,模完的结果为0,也就是:
借助中国剩余定理的性质,我们总结出最终的多项式h(x)需要满足三个性质:
(1)次数
h(x)的次数与原始的多项式保持一致,均为d
(2)首1
h(x)的最高次数的系数为1,模任何的Ni均为1
(3)根不变
很明显最终的h(M)依旧为0,模最大的相乘结果的N
综上我们可以利用已有的性质证明:
第一个不等式:明文M需要满足的基本条件
第二个不等式:最小的N满足的结论
第三个不等式:来源k>d可得
如果明文M满足如上条件,那么我们可以直接利用已有的求根定理得出最终的结果M。
定理证明完毕。
三. 分析
在数学领域有一个问题,如果我们将自变量的取值限定为:
那么一个多项式的次数为d时,且模N的情况下有多少个根呢?
以上的分析告诉我们,当此处的B限定为:
那么至少可以求出一个根。
当把次数d提高到2d-1时,上限B设定为:
也可以多项式时间内求出一个根x出来。
需要注意的是,本文章分析出的定理所使用B的上限为:
有的时候并不能把所有满足的根全求出来,通常只能求出一部分。比如举一个例子,我们的N可以取:
多项式举一个简单的例子:
那么根据以上的结果,我们求根的范围可以限定成:
那么在这个范围内,该多项式有很多根,其根的个数大约有:
这是一个类似指数个数的空间,大概率不能全部求出来。
四. 推荐文献
(1)攻击RSA密码系统的方法合集
Dan Boneh. Twenty years of attacks on the RSA cryptosystem. Notices of the American Mathematical Society (AMS), 46(2):203–213, 1999.
(2)模多项式根的求解分析
Don Coppersmith. Finding small solutions to small degree polynomials. Lecture Notes in Computer Science, 2146:20–31, 2001.