Skip to content

第 12 章:重试、运行时间与RSA结论的范围 ​

返回目录

12.1 失败以后重试为什么有效 ​

每次失败后重新独立、均匀选择底数,就得到新的一次尝试。若每次失败概率至多1/2,独立重复k次都失败的概率至多

\left(\frac12\right)^k=2^{-k}.

“独立重复”不能省略。若一直重复同一个失败底数,后续计算完全一样,重复次数增加不会改善成功率。重新抽样让前一次的失败不改变下一次的分布。

算法输出的因子始终可以验证,因此随机性影响的是需要尝试多少次,不影响成功输出是否正确。有限次全失败时,可以继续尝试;它不构成错误的分解结果。

12.2 为什么平均至多两次,不等于两次必成功 ​

设单次成功率为\rho\ge1/2,令N为第一次成功时的尝试总次数。第k次恰好第一次成功,需要前k-1次失败、第k次成功,所以P(N=k)=(1-\rho)^{k-1}\rho。

期望E[N]表示大量独立运行中尝试次数的平均值。其值为1/\rho\le2。这个求和也可以从“第j+1轮是否需要做”理解:第1轮一定需要做,第2轮只有第一次失败才需要做,第3轮只有前两次都失败才需要做。因此

E[N]=\sum_{j=0}^{\infty}P(N>j)
=\sum_{j=0}^{\infty}(1-\rho)^j
=\frac1\rho\le2.

第一等式的依据是:一个恰做k轮的运行,会在N>0,N>1,\ldots,N>k-1这k个条件中各被计一次。对这些轮次指标取平均,再相加,就是平均总轮数。这解释了为什么能用尾概率计算期望。

期望至多2是平均表现,不是每次最多2轮;做很多轮仍有可能,只是尾概率按几何速度减小。

12.3 为什么是期望多项式时间 ​

每次尝试需要求最大公约数、计算a^r\bmod n以及最多s次平方。快速幂按照r的二进制展开进行,使用O(\log r)次模乘法;s\le\log_2K,所以一次尝试的运算次数是O(\log K)量级。

再考虑每个整数运算的位复杂度:中间余数小于n,有O(\log n)位;模乘法与欧几里得算法都有关于这些位长的多项式时间实现。因此单轮耗时是关于\log n,\log K的多项式。期望轮数至多2,所以期望总耗时仍为多项式。

“多项式时间”是按输入的位数衡量,不是按n本身衡量。完整位复杂度说明保留在第17章;本节说明成功概率怎样与运行时间接起来。标准结论的依据见《Handbook of Applied Cryptography》第3章Fact 3.30及第8章Fact 8.6。

12.4 恢复私钥与从密文恢复消息为什么要区分 ​

我们证明了两个方向:分解n可以恢复d;已知满足条件的私钥指数d,可以随机分解n。因此“恢复私钥指数”与“分解模数”具有这里证明的计算联系。

但给定(n,e,c),直接求出满足m^e\equiv c\pmod n的消息,是另一种已知信息和计算任务,称为RSA反演。能还原一个密文,并不意味着已经得到一个对所有消息适用的私钥指数d。上面的随机分解算法必须从d构造已知的K=ed-1,不能从“某条消息已还原”自动得到这个输入。

所以这里没有证明“任意解密能力都能用于分解”。即便一种方法确实会解密,也不能把分解算法需要的私钥信息直接当作它已经提供的信息。RSA反演与整数分解之间的这个逻辑区别,也是第二份原对话的起点。第13章把这种区别写成明确的归约关系,并继续区分原始RSA数值对与现代签名方案。

若已知\varphi(n),则另有直接分解方法。由

\varphi(n)=n-(p+q)+1

得到S=p+q=n-\varphi(n)+1,再利用pq=n,p,q就是x^2-Sx+n=0的两个根:

p,q=\frac{S\pm\sqrt{S^2-4n}}2.

这是因为和与积共同确定这两个因子。它说明欧拉函数与分解密切相关,同样没有证明一切解密方法都必须先知道欧拉函数。

12.5 怎样回查整条证明 ​

若最后的加权平均已经理解,但仍对概率结论不踏实,可以分开检查三个来源:第9章解释为什么不同步就成功、为什么两边独立;第10章解释每个到达时间概率为什么不超过一半;第11章只把这些结论合起来。

若卡在基础定理,第14章补逆元、唯一分解、容斥与CRT;第15章补原根存在性;第16章补群论中的阶与计数;第17章给精确概率、统一指数与复杂度;第18章保留概念辨析和练习。补充章节按疑问查阅,不要求先把所有抽象结论学完再阅读主线。

保留每一次追问,认真走完每一步证明。