RSA加密算法数学推导
参考博客:
https://blog.csdn.net/qq_25847123/article/details/103141321
RSA算法取名于三位开发者姓名的首字母,作为最出名的公钥加密算法,其形式非常简洁,构造非常简单。
但是初学者可能会出现一些疑问,我在初学时的两个疑问最近又学了一遍才完全理解。
我们先看一下RSA的具体构造过程:
1、选择两个大质数 \(p,q\),两个数的数量级大概是 \(2\) 的几百次方,计算模数 \(n=p*q\);
2、计算 \(L=(p-1)(q-1)\);(有的版本是 \(lcm(p-1,q-1)\),两个版本都对,先按前一个)
3、找到小于 \(L\) 且 \(gcd(e,L)=1\) 的数 \(e\) ,数对 \({e,n}\) 作为公钥;
4、求模 \(L\) 意义下 \(e\) 的逆元 \(d\) ,数对 \({d,n}\) 作为私钥。
RSA对原数据的要求:消息 \(m\) 的取值范围是 \((0,n)\),注意到是开区间,大于等于 \(n\) 在模 \(n\) 后无法恢复原消息,因此位数较多的消息会按 \(n\) 的位数进行分块。\(m\) 也不能取 \(0\),否则得到的密文也为 \(0\)。
RSA的核心在于 \(m^{ed}\equiv m^{kL+1}\equiv m(\mod n)\),那么就要求 \(m^{kL+1}\equiv m(\mod n)\),网上一个普遍的解释是依据欧拉定理,\(m^{\varphi(n)}\equiv 1(\mod n)\),而此时的 \(L\) 就是 \(\varphi(n)\) ,因此 \(m^{kL}\equiv 1(\mod n)\)。
那么,我们的第一个疑问就来了,我们前面所说的 \(m\) 取值范围是小于 \(n\) 的正整数,没说必须和 \(p,q\) 互质,但是欧拉定理的使用条件是 \(m\perp n\),当 \(m\) 和 \(n\) 有公因子 \(p\) 时( \(q\) 同理),取模的结果肯定也是 \(p\) 的倍数,怎么可能是 \(1\) 呢。
所以我们要在数论上推导RSA的正确性时,也要把 \(m\not\perp n\) 的情况拓展进来。
我们设 \(m=kp\) (\(q\) 等价);
此时 \(m\) 与 \(q\) 互质,可以使用欧拉定理,\(m^{q-1}\equiv 1(\mod q)\);
设 \(m^{q-1}=hq+1\);
那么 \(m^{(p-1)(q-1)+1}=(hq+1)^{p-1}*m\);
考虑在模 \(n\) 意义下,\(m^{(p-1)(q-1)+1}\equiv(hq+1)^{p-1}*m\equiv m(\mod n)\);
最后一步是怎么消掉的,因为 \((hq+1)^{p-1}\) 展开后,除了最后一项是 \(1\) ,其他项都有 \(q\) ,那么 \(mq\) 相乘是 \(n\) 的倍数,取模完就只剩下 \(1\) 乘以 \(m\) 了。
所以RSA的核心并不是 \(m^{kL}\equiv 1(\mod n)\),而是 \(m^{kL+1}\equiv m(\mod n)\),后者是更普遍的性质,可以容许 \(m\not\perp n\)。
但是还是有一点需要保证,就是 \(m\) 只能和 \(n\) 有一个共同的质因子,比如 \(m=10\),\(n=25\) 就不满足上式。在RSA中,\(n\) 只有两个质因子,\(m\) 小于 \(n\) ,最多和 \(n\) 共享一个质因子,因此一定满足上式。
另一个疑问就是为什么网上有的版本是 \(L=lcm(p-1,q-1)\),这样就不能用欧拉定理的 \(m^{\varphi(n)+1}\equiv m(\mod n)\) 来解释了,但是由于 \(p\) 和 \(q\) 是互质的这一特殊性,\(m^{kL+1}\equiv m(\mod n)\) 仍然是成立的,推导方式和上面类似。
首先是 \(m\perp n\) ,设 \(L=s(q-1)=t(p-1)\);
则 \(m^{p-1}\equiv 1(\mod p)\);
\(m^{q-1}\equiv 1(\mod q)\);
\((m^{p-1})^t\equiv m^L\equiv 1(\mod p)\);
\((m^{q-1})^s\equiv m^L\equiv 1(\mod q)\)
\(m^L\) 在模 \(p\) 和 \(q\) 意义下都是 \(1\) ,由中国剩余定理可得 \(m^L\equiv 1(\mod n)\)。
然后是 \(m\not\perp n\),这个情况下,其实和 \(L=(p-1)(q-1)\) 差不多;
我们得到了 \(m^{q-1}=hq+1\);
\(m^{s(q-1)+1}\equiv m^{L}\equiv (hq+1)^{s}*m\equiv m(\mod n)\);
这个推导方式只关心 \(L\) 是不是 \(q-1\) 的倍数,不用考虑 \(L\) 的具体值,因此 \(L=lcm(p-1,q-1)\) 时依然适用。