密码学笔记(4)——RSA的其他攻击
上一篇详细分析了几种分解因子的算法,这是攻击RSA密码最为明显的算法,这一篇中我们考虑是否有不用分解模数n就可以解密RSA的密文的方法,这是因为前面也提到,当n比较大的时候进行分解成素数的乘积是非常困难的。
一、计算$\phi (n)$
首先要说明的是计算$\phi (n)$并不比分解n容易,但是,如果n和$\phi (n)$都已知,通过求解$$n=pq$$ $$\phi (n) = (p-1)(q-1)$$,这就很容易得到一个二元方程完成破解。但实际上,计算$\phi (n)$并不比分解n容易。
二、计算解密指数a
如果解密指数$a$是已知,那么$n$可以通过一个随机算法在多项式时间内分解。但是,计算$a$也是不比分解n容易的。只是它提醒我们,一旦$a$被泄露,Bob重新选择一个加密指数是不够的,还需要重新选择一个模数$n$。
通过已知解密指数$a$分解$n$的算法是一个Las Vegas型的随机算法,它最坏情形成功的概率至少为$1-\epsilon$,因此,对于任何一个问题实例,算法不能给出一个答案的概率至多为$\epsilon$。
如果我们有了这样一个Las Vegas算法,只需要一次又一次运行它,知道找到答案为止,算法连续m次返回“没有答案”的概率为$\epsilon ^{m}$,为了得到一个答案,必须运行算法的平均次数是$\frac {1}{1-\epsilon}$。因此,在给定的值$a,b$和$n$作为输入,以至少$\frac{1}{2}$的概率分解$n$的Las Vegas算法在运行$m$次时,$n$被分解的概率至少为$1-(\frac{1}{2})^{m}$。
算法基于当$n=pq$是两个不同奇素数的乘积时与1模n的平方根相关的一些事实。若$x^{2} \equiv 1 (mod \, p)$,前面的定理告诉我们,一共有4个根,其中两个根为$\pm 1 (mod \, n)$,称为平凡平方根,另外两个根为非平凡的,它们模n互为相反数。
Alg1 RSA-FACTOR(n,a,b)
Comment:假定$ab \equiv 1 (mod \, n)$
记$ab - 1 = 2^{s}r$,r为奇数
随机选择$w$使得$1 \leq w \leq n-1$
$x \leftarrow gcd(w,n)$
if $1 < x < n$
then return(x)
Comment:x是n的一个因子
$v \leftarrow w^{r} (mod \, n)$
if $v \equiv 1 (mod \, n)$
then return("failure")
while $v \neq 1(mod \, n)$
$v_{0} \leftarrow v$
$v \leftarrow v^{2} (mod \, n)$
if $v_{0} \equiv -1(mod \, n)$
then return("failure")
else
$x \leftarrow gcd(v_{0}+1 , n)$(也有可能是 $x \leftarrow gcd(v_{0}-1,n)$)
return(x)
Comment:x是n的一个因子
这个算法分析起来比较的长,逐一来看,下面假定如果$n$可分解,其形式为$n=pq$
算法的第一步计算出$s$和$r$,都是常数,接着开始选取一个$w$,需要计算$w$和$n$的最大公约数。如果我们幸运地选取到$w$为$p$或$q$的倍数,那么可以直接分解$n$,如果$w$与$n$互素,那么可以通过连续的平方运算$w^{r},w^{2r},w^{4r}…$直到某个$t$,有$$w^{2^{t}r} \equiv 1 (mod \, n)$$由于$ab -1 = 2^{s}r \equiv 0 (mod \, \phi (n))$
又因为$w^{2^{s}r} \equiv 1 (mod \, n)$,因此while循环至多运行$s$次就会终止,在while循环结束时,我们可以找到一个值$v_{0}$,使得$(v_{0})^{2} \equiv 1 (mod \, n)$,但有$v_{0} \neq 1 (mod \, n)$,再根据下面的条件语句判断,$v_{0} \neq -1 (mod \, n)$,这说明$v_{0}$是1模$n$的一个非平凡平方根,我们能够分解$n$。
接下来需要证明的是,这个Las Vegas算法的成功概率至少为$\frac {1}{2}$,观察算法,有两种地方使得算法失败,第一处是$w^{r} \equiv 1 (mod \, n)$,第二处是$w^{2^{t}r} \equiv -1 (mod \, n)$,对于某个$t, 0 \leq t \leq s-1$。
我们需要考虑$s+1$个同余方程,如果$w$是这$s+1$个同余方程中至少一个的解,那么它是一个"坏"选择,下面讨论其中每一个同余方程的解的个数。
考虑同余方程$w^{r} \equiv 1 (mod \, n)$,利用中国剩余定理,分析方程的解的方法是分别考虑模p和模q的解,这个同余方程有解当且仅当$w^{r} \equiv 1 (mod \, p)$和$w^{r} \equiv 1 (mod \, q)$。当p为一个素数时,$Z_{p}^{\star}$是一个循环群,设$g$为$Z_{p}^{\star}$的生成元,可以记$w = g^{u}$,其中$0 \leq u \leq p-2$,于是有$$w^{r} \equiv 1 (mod \, p)$$ $$g^{ur} \equiv 1 (mod \, p)$$因此有$(p-1) | ur$。记$p-1 = 2^{i}p_{1}$,其中$p_{1}$是一个奇数,同理记$q-1 = 2^{j}q_{1}$,其中$q_{1}$是一个奇数。由于$$\phi (n) = (p-1)(q-1) | (ab-1) = 2^{s}r$$得到$$2^{i+j}p_{1}q_{1} | 2^{s}r$$
因此$i+j \leq s$,且$p_{1}q_{1} | r$,现在条件$(p-1) | ur$变成了$2^{i}p_{1} | ur$。由于$p_{1} | r$且$r$为奇数,因此充要条件为$2^{i} | u$,得到$u=k2^{i} , 0 \leq k \leq p_{1} -1$,且同余方程$w^{r} \equiv 1 (mod \, p)$的解的个数为$p_{1}$。同理可以得到$w^{r} \equiv 1 (mod \, q)$恰好有$q_{1}$个解,把任一模p的解和模q的解组合起来,利用中国剩余定理,就可以得到模n的解,个数为$p_{1}q_{1}$。
下一步是对固定的$t(0 \leq t \leq s-1)$考虑同余方程$w^{2^{t}r} \equiv -1 (mod \, n)$的解,同理也是考虑模$p$和模$q$的解,类似的也记$w = g^{u}$,有$$g^{u2^{t}r} \equiv -1 (mod \, p)$$由于$g^{\frac {p-1}{2}} \equiv -1 (mod \, p)$有$$u2^{t}r \equiv \frac{p-1}{2} (mod \, p-1)$$ $$(p-1) | (u2^{t}r - \frac{p-1}{2})$$ $$2(p-1) | (u2^{t+1}r - (p-1))$$由于$p-1 = 2^{i}p_{1}$,可以得到$$2^{i+1}p_{1} | (u2^{t+1}r-2^{i}p_{1})$$取出公因子$p_{1}$,上式变为$$2^{i+1} | (\frac{u2^{t+1}r}{p_{1}}-2^{i})$$现在,如果$t \geq i$,因为此时$2^{i+1} | 2^{t+1}$,但$2^{i+1} 不能整除2^{i}$,另一方面,如果$t \leq i-1$,那么$u$是一个解,当且仅当$u$是$2^{i-t-1}$的奇数倍,这种情况下解的个数为$$\frac {p-1}{2^{i-t-1}}× \frac{1}{2} = 2^{t}p_{1}$$
通过类似的推理,同余方程$w^{2^tr} \equiv -1 (mod \, q)$当$t \geq j$时没有解,当$t \geq j$时没有解,当$t \leq j-1$时有$2^{t}q_{1}$个解,利用中国剩余定理,可以知道$w^{2^tr} \equiv -1 (mod \, n)$的解的个数为$$\begin{align} 0 & \quad t \geq min\{ i,j \} \\ 2^{2t}p_{1}q_{1} & \quad t \leq min \{ i,j \}-1 \\ \end{align}$$
现在,$t$可以从$0$到$s-1$取值。不失一般性,假定$i \leq j$;那么当$t \geq i$时解的个数为0,对于$w$的“坏”选择的总数最多为$$\begin{align} p_{1}q_{1}+p_{1}q_{1}(1+2^{2}+2^{4}+…+2^{2i-2}) =& p_{1}q_{1}(1+\frac{2^{2i}-1}{3}) \\ =& p_{1}q_{1}(\frac{2}{3} + \frac{2^{2i}}{3}) \\ \end{align}$$
前面已知$p-1 = 2^{i}p_{1}$,且$q-1 =2^{j}q_{1}$,现在有$j \geq i \geq 1$,所以$p_{1}q_{1} < \frac {n}{4}$,得到$$2^{2i}p_{1}q_{1} \leq 2^{i+j}p_{1}q_{1} \leq (p-1)(q-1) < n$$因此,可以得到$$\begin{align} p_{1}q_{1}(\frac{2}{3} + \frac{2^{2i}}{3})<& \frac{n}{6}+\frac{n}{3}\\ =& \frac{n}{2} \\ \end{align}$$
由于至多$\frac{n-1}{2}$个$w$的选择是“坏”的,容易知道至少有$\frac{n-1}{2}$个选择是“好”的,算法的成功概率至少为\frac{1}{2}。
三、Wiener的低解密指数攻击
和前面一样假定$n=pq$,其中$p$和$q$为素数,那么$\phi (n)=(p-1)(q-1)$。由M.Wiener提出的一种攻击,当满足以下条件时可以成功地计算解密指数a。$$3a<n^{\frac{1}{4}} 且 q<p<2q$$如果$n$的二进制表示有$l$比特,那么当$a$的二进制表示位数小于$\frac{l}{4}-1$,$p$和$q$相距离不太远时有效。
由于$ab \equiv 1 (mod \phi (n))$,可知存在一个整数$t$使得$$ab-t \phi(n) = 1$$
由于$n=pq > q^{2}$,我们有$q < \sqrt{n}$,因此得到$$0 < n-\phi (n) = p+q-1 < 2q+q-1<3q<3 \sqrt{n}$$
现在考虑$$ \begin{align} |\frac{b}{n} - \frac{t}{a}| =& |\frac{ba-tn}{an}| \\ =& |\frac{1+t(\phi (n)-n)}{an}| \\ <& \frac{3t \sqrt{n}}{an} \\ =& \frac{3t}{a \sqrt{n}} \\ \end{align}$$
由于$t<a$,我们有$3t<3a<n^{\frac{1}{4}}$,因此有$$|\frac{b}{n} - \frac{t}{a}| < \frac{1}{an^{\frac{1}{4}}}$$
最后,由于$3a<n^{\frac{1}{4}}$,我们有$$|\frac{b}{n} - \frac{t}{a}| < \frac{1}{3a^{2}}$$
因此,分数$\frac{t}{a}$是分数$\frac{b}{n}$的一个很接近的近似,从连分数理论可知,这样接近的近似值是$\frac{b}{n}$的连分数展开的一个收敛子,这种扩展可以用Euclidean算法得到。
Def2 (有限连分数)一个有限连分数是非负整数的m组,即[$q_{1},…,q_{m}$],它是下面表达式的简写形式:$$q_{1}+\cfrac{1}{q_{2}+\cfrac{1}{q_{3}+\dotsb + \cfrac{1}{q_{m}}}}$$
假定$a$和$b$为满足$gcd(a,b)=1$的正整数,且假定Euclidean算法的输出为m组$(q_{1},…,q_{m})$,容易看到$\frac{a}{b} = [q_{1},…,q_{m}]$,称$[q_{1},…,q_{m}]$是$a/b$在这种情形下的连分数展开。现在,对$1 \leq j \leq m$,定义$C_{j} = [q_{1},…,q_{j}]$,称$C_{j}$为$[q_{1},…,q_{m}]$的第$j$个收敛子。于是每一个$C_{j}$可以写成有理数形式$\frac{c_{j}}{d_{j}}$,其中$c_{j}$和$d_{j}$满足如下的递推关系:$$ c_{j} = \begin{cases} 1 & \quad \text{j=0} \\ q_{1} & \quad \text{j=1} \\ q_{j}c_{j-1}+c_{j-2} & \quad \text {$j \geq 2$} \\ \end{cases}$$ $$d_{j} = \begin{cases} 0 & \quad \text{j=0} \\ 1 & \quad \text{j=1} \\ q_{j}d_{j-1}+d_{j-2} & \quad \text {$j \geq 2$} \\ \end{cases}$$
对于有理数的连分数,它的收敛子满足很多有趣的性质,下面是其中一个定理。
Thm3 假定$gcd(a,b) = gcd(c,d) = 1$且$$|\frac{a}{b} - \frac{c}{d}| < \frac{1}{2d^{2}}$$那么$\frac{c}{d}$是$\frac{a}{b}$连分数展开的一个收敛子。
在前面的数学推导过程中,未知分数$\frac{t}{a}$是$\frac{b}{n}$的一个很接近的近似,上面的定理告诉我们,$\frac{t}{a}$一定是$\frac{b}{n}$的连分数展开的一个收敛子,既然$\frac{b}{n}$是公开信息,很容易计算出它的收敛子,我们所需要的仅仅是测试它们中间哪一个是正确的方法。
这并不难做到,如果$\frac{t}{a}$和$\frac{b}{n}$的一个收敛子,那么就能够计算得$\phi (n) = \frac{ab-1}{t}$,一旦$n$和$\phi (n)$已知,就可以根据二次方程解出$p$值来分解$n$值,但我们事先不知道$\frac{b}{n}$的哪个收敛子能得到$n$的分解,所以要依次试验直到找到$n$的分解为止。否则不能用这种方法分解$n$。
下面我们可以详细看看Wiener算法的伪代码。
Alg4 Wiener Algorithm(n,b)
$(q_{1},…,q_{m};r_{m}) \leftarrow Euclidean Algorithm(n,b)$
$c_{0} \leftarrow 1$
$c_{1} \leftarrow q_{1}$
$d_{0} \leftarrow 0$
$d_{1} \leftarrow 1$
for $j \leftarrow 2 $ to $m$
$c_{j} \leftarrow q_{j}c_{j-1} + c_{j-2}$
$d_{j} \leftarrow q_{j}d_{j-1} + d_{j-2}$
$n^{'} \leftarrow \frac{d_{j}b-1}{c_{j}}$
Comment:$n^{'} = \phi (n)$,如果$\frac{c_{j}}{d_{j}}$是正确的收敛子。
if $n^{'}$是一个整数
设p和q为方程$x^{2}-(n-n^{'}+1)x+n=0$的根
if p和q为小于n的整数
return (p,q)
return ("failure")
最后有趣的一点是,条件$3a<n^{\frac{1}{4}}$可以在算法运行前预先估计解密指数是否满足要求。
本篇到此结束,关于RSA密码体制我应该还会有一篇读书笔记,主要讲述Rabin密码体制以及RSA的语义安全性。
密码学笔记(4)——RSA的其他攻击的更多相关文章
- 密码学笔记(2)——RSA密码
上一篇笔记中讲述了大量的代数知识,这一篇中我们看看如何将这些代数知识应用到RSA密码体制中. 一.公钥密码学简介 在经典密码学的研究模型中,我们根据已选择的秘钥K得到一条加密规则$e_{k}$和一条解 ...
- RSA共模攻击
在安恒月赛中碰到一道密码学方向的ctf题 附上源码 from flag import flag from Crypto.Util.number import * p=getPrime(1024) q= ...
- 密码学笔记——eval(function(p,a,c,k,e,d) 加密破解
密码学笔记——eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} ...
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- 密码学笔记(5)——Rabin密码体制和语义安全性
一.Rabin密码体制 Rabin密码体制是RSA密码体制的一种,假定模数$n=pq$不能被分解,该类体制对于选择明文攻击是计算安全的.因此,Rabin密码体制提供了一个可证明安全的密码体制的例子:假 ...
- [CTF] RSA共模攻击
from gmpy2 import * import libnum n = 0x00b0bee5e3e9e5a7e8d00b493355c618fc8c7d7d03b82e409951c182f398 ...
- Memcached理解笔记4---应对高并发攻击
近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意攻击,不停的刷新产品各个服务入口,制造垃圾数据,消耗资源.他们的最好成绩,1秒钟可以并发6次,赶在Database入库前,Cache进行Mis ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- 密码学笔记——zip明文攻击
明文攻击(Known plaintext attack):是一种攻击模式,指攻击者已知明文.密文及算法,求密钥的过程. 例题: 这就是一个坑 密码是十位大小写字母.数字.特殊符号组成的,你爆破的开么? ...
随机推荐
- 【ARC072E】Alice in linear land
题目 瑟瑟发抖,这竟然只是个蓝题 题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\).当收到一条指令\(x\)后,如果向\(D\)方向走\( ...
- Java面试(2)
包含的模块 本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...
- swing 托盘
直接上方法, 不过有些问题要注意,最后会说明! private void systemTray() { if (SystemTray.isSupported()) { // 判断系统是否支持托盘功能. ...
- 【模板篇】A* 寻路算法
上次在做k短路的时候说到了A*, 但是并没有仔细的研究A*寻路, 毕竟k短路中的A*也不怎么标准… A*寻路的过程网上还是有很多的, 讲得也很清楚, 不妨跟着里面的图示自己动手操作一下, 基本一遍就能 ...
- linux 下使用scp命令传输文件
scp -P 1234 /home/wakasann/test.txt wakasann@192.168.1.30:/var/www/html/ 使用 1234端口,将 test.txt文件传输到服务 ...
- 手写代码注意点 -- int[]
int[].length char[] 的数组长度,是小写的l开头: char[].length; 不是:char[].Length int[] 没有.contains(), .indexOf() . ...
- 挂载U盘
.fdisk -l 查看当前系统存储盘 (sdaX一般是系统自带, sdbX则是外接) .mount /dev/sdbX /mnt/usb/ (如果usb目录不存在可创建新目录) .umount /m ...
- 大数据之hadoop小文件存档
hadoop小文件存档1.HDFS存档小文件弊端 每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效.因为大量的小文件会耗尽NameNode中的大部分内 ...
- nginx的配置:目的是使用nginx反向代理后,应用程序获取用户真实ip
一.了解nginx Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HT ...
- System.Collections.IDictionary.cs
ylbtech-System.Collections.IDictionary.cs 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKe ...