RSA加密之小私钥攻击2
共模攻击
共模攻击 推导
共模攻击 例题1
共私钥攻击
-
其实共私钥攻击在强网拟态2026出现过了,早就想写博客了,但是没时间,现在有时间写了,强网拟态2026的模数是多平衡素数的,而我们先来介绍两个平衡素数的情况。
-
共私钥攻击这里我们只介绍正常的RSA加密的共私钥攻击,对于多模数和多幂的RSA情况之后再学习。在这个部分,我们将表明当把
Wiener的小私钥攻击视为一种基于格的启发式攻击时,它可以很容易地被扩展,用来攻击多个RSA实例,只要这些实例共享同一个较小的私钥指数即可。所以这个攻击就被称为是共私钥攻击。 -
当可用的实例数量增加时,该攻击的效果也会随之增强。对于这种攻击的情况,我们定义如下:
- 假设同一个用户使用相同的较小的私钥指数,生成了个RSA实例,并且模数的大小也大致相同。
- 设是有效的RSA公钥对,并且的位数相差不大,是它们对应的私钥,并且比较小。
- 这样我们就考虑如下个密钥等式:
- 其中,根据我们在前面了解RSA密码最开始介绍的有,并且对于每个都有
- 接下来我们要保证所有模数的大小都是相同量级(模数的位数要相同),并且将模数进行按从大到小递增排列使得:
- 此外我们假设每个模数都是由平衡素数生成的,即对于每个都有:
-
这就是共私钥能被攻击的前置条件,共私钥攻击的攻击方式可以在这篇论文中有详细的:IJCSI-9-2-1-311-314.pdf
共私钥攻击 推导
-
我们先来讲解一下这个攻击的结论:
- 任意整数,设是平衡的RSA模数,并且满足。
- 设是有效的RSA公钥对,并且这些公钥对有相同的私钥指数。
- 如果,所有的模数都可以在关于以及的多项式时间内被分解。
-
证明如下:
- 令(取将这些模数中最大的一个开根号),已知这个公钥对。
- 继续考虑个密钥等式,,以及恒等式,我们将这些式子写成如下形式:
- 这个系统中的的个等式可以写成向量矩阵方程:
- 注意:此时目标向量是矩阵的每一行正线性组合而成的向量,因此这个向量是由格所创造(或者说目标向量在我们所造的格上),其中格基为是矩阵每一行构成的一个基。
- 由于有,并且还有,对于任意都满足。
- 这就是使得目标向量满足:,就满足:
- 而这个格的体积就为,满足:
- 从闵科夫斯基界限可以得到,目标向量是格(该格的维数是)最短向量的必要条件是
- 使用目标向量的范数作为界限,以及上面推导的格的体积,使上面必要条件成立的一个充分条件就是:
- 或者更简单的不等式为,其中
- 一个新的充分条件如下:,通过解这个就可以得到最后的不等式条件:
- 当私钥指数比小的时候,我们就可以知道目标向量满足了必要条件,已经满足了闵科夫斯基界限所施加的必要条件,从而有可能成为格中的最短向量。此外,第二个标准也满足了。
- 具体而言,当,目标向量比基矩阵中的任何一个基向量的大小都要小。因此当私钥指数足够小,并且在格中的假设对格成立,我们就能通过求解格上的
SVP问题从而求解出目标向量。一旦获得了目标向量,我们就能很轻松的分解所有的模数。 - 从密钥等式可以入手:,而目标向量,这时目标向量就会暴露出私钥指数以及。暴露出这些后,我们就可以计算出。有了和从而计算出
- 计算出后,这就是前面的已知分解的知识点了,两个素数的情况解方程就行了。
-
这里也将书上的例子给出:
- 下面有三对RSA公私钥对,它们有相同的私钥指数
- 令,我们构造出基矩阵:
- 使用LLL算法对基矩阵进行格基规约,则规约出来的最短向量为
- 如果攻击成功,我们预期b的第一个分量满足,我们有,这个其实就是公共的私钥指数。
- 在这个例子中,注意到攻击的使用条件:满足条件,因为,那就满足了:
共私钥攻击 例题1
-
题目来源:
nssCTF格密码工坊 -
题目附件如下:
1 | from Crypto.Util.number import * |
- 这个就不赘述了,就是与推导的过程一样的,用我后面写的板子就可以一把梭了。
1 | import gmpy2 |
共私钥攻击 板子
- 自己写了一个板子:
1 | import gmpy2 |
共私钥攻击 实际效果
- 共私钥攻击仅仅是启发式的,它的正确价值在于它在实践中的有效性。在图
7.1中和7.2中,展示了这样一种攻击效率:在1024位模数的随机RSA实例中,多个不同模数共享同一个较小的私钥指数,其中参数范围为,成功率以为自变量给出,其中表示私钥指数的大小,而是攻击中给出的界限。 - 当时,对应于私钥指数小于的情况;当时,则对应于私钥指数大于的情况。图中的每一个数据点表示在若干次独立随机实例上重复实验后得到的平均成功率。
- 对于每个数据点,实验次数时的
1500次此时格基规约所花费的时间很短,到时的150次(此时规约时间显著增加)。 - 从图
7.1和图7.2的数据可以看出如下规律:- 在之前,该攻击的效果非常理想,接近完美。
- 一旦,攻击的成功率便迅速下降,以及趋近于
0。 - 随着实例数量的增加(即的增大),当接近或大于0时,攻击有效性的下降趋势显得更加明显
- 与实例无关的是,在所有实验中,当时,攻击均能够成功。
- 基于这些实验结果,可以认为:格中的假设,对共私钥攻击所使用的格是成立的,并且该攻击在实践中使用
1024位模数的多实例RSA具有良好效果。


- 下图
7.3,我们展示了当三个RSA实例共享同一个较小的私钥指数即时,该攻击在不同模数位数下的有效性。- 从实验数据构成的图表可以看出,对于所考虑的每一种模数规模,该攻击都保持了较高的有效性。
- 随着模数位数的增加,成功攻击与攻击失败之间的临界点切换变得更加陡峭,其形态似乎逐渐趋近于阶跃函数
- 图中的每个数据点均表示在
1500次实验中得到的平均攻击成功率,基于这些实验结果,可以明确的认为:对于模数位数介于512~4096位之间、且存在三个实例共享小私钥指数的RSA,该共私钥攻击在实践中有非常好的效果。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!

