导航:首页 > 源码编译 > rsa算法漏洞

rsa算法漏洞

发布时间:2023-03-19 18:39:43

Ⅰ 品味数学之美-RSA原理浅析

在探究RSA算法的原理之前,我们先来学习一点有趣的数论知识(数学分支之一,主要研究整数的性质)。你会发现一些简单的数学知识竟然背后有如此神奇的魔力。

说起质数,想必大家不陌生了,一个大于1的整数除了其本身和1之外,不存在因数则被称为质数或者是素数。比如2、3、5、7等。在小学课堂里,我们可能只是记住了这个概念,但是这里我谈下自己的一些思考帮助大家理解,质数就好比是构成数字的基本元素,想想看,氢分子仅由两个氢原子(组成一个氢分子)构成,那么一个非质数的6=3*2 即表示为6是由两个“3”元素或3个“2”元素构成。其中“3”或者“2”是不可以继续拆分的元素(3,2都是质数)。所以对一个非质数进行因式分解过程就好比对一个物体进行深入解剖,拆分至不可拆分的元素为止。这样看来,数学家们提出这些数学概念,其实也是一种对数字世界的认识和思考的概括,和我们日常生活理解周边事物方式也是相似的。

知道了质数,我们再看看互质关系,那么什么是互质呢?就是说两个数没有相同的因数称为互质关系。我们对6进行因数分解,拆分到质数的乘积即6=3* 2而 35=5*7,这两者没有相同的因数则称6与35互质,就好像氢气分子只是由氢原子构成,而氧气分子只是由氧原子构成,这二者这间没有相同的原子就是一种互质的体现。
所以互质只是一个数和数之间有没有相同的因数关系的体现(公约数也称公因数),和两者是不是质数是没有关系的。当然质数之间必然是互质关系,因为它们都是构成数字的不同元素。数学上来表示a,b互质一般用gcd(a,b)=1来表示。即a和b的最大公约数是1.

质数和互质的关系是不是很容易理解?但是大数学家欧拉先生可绝不仅仅停步于此,数学家嘛总爱问一下抽象概括性的问题,希望找寻规律比如

如果能找到规律,无论数字如何千变万化10位数还是100000位数,我们都能根据准则轻易计算数互质关系的数量。你发现了没有,数字也是一片世界,真是一花一世界一叶一如来啊!好了回归正传,对于这个问题欧拉先生给出了他的答案。他是这样作答的:
首先呢上述问题可以简化为一个函数来描述即: Phi(n)
这也是数学家老毛病在他们看来任何问题就是对函数的求解。既然这个函数由欧拉提出来的,那么我们就称他为 欧拉函数 .还好这个函数简单只有一个变量,即给定的正整数n。接下来就要分析这个n

n=1的时候这个问题极其简单:
Phi(n)=1
因为1与任何数包含他自身都构成互质关系。1本身也是质数且不作为其他数的因数,因为任何数乘以1都是其本身

大家想想看n是质数,其自身就不存在因数了,而那些与他非互质关系(存在公约数)的数进行因式分解后一定都会有一个因数与n相等。比如n=3为一个质数,那么6=3*2与3是非互质关系,因为存在公约数3。所以我们发现与n非互质关系的数都是n的倍数即(kn),因为kn>=n所以与n互质的数都小于n即
Phi(n)=n-1

还记得我们前面提到的质数吗,他可是构成数字的元素呀,所以如果n不是质数,那么他一定可以被因式分解拆分成多个质数的乘积。比如24=6*4=3*8=2*2*2*3 比如6=2*3,这些质数因数相互乘积也可以形成如下情况:

我们把相同质数因数进行相乘,很容易将一个非质数分解为两个互质关系的数的乘积,比如24=6*4=2*2*2*3=3*8
从简单的情况来考虑,即n被拆分为两个互质关系的数的乘积:

n=p*q
p与q互质,那么根据剩余定理:

Phi left( pq ight) =Phi(p)*Phi(q)

至于如何证明呢?说实话我也不清楚。在我理解看来,与24互质的数都有这样一个特点:他进行因式分解后其因数不包含有3与2(因为8=2*2*2)。所以与3互质的数定义为集合A,且个数为
Phi left( 3 ight)
与8互质的数定义为集合B,且个数为
Phi left( 8 ight)
这AB两组的数字可以在组与组间两两进行组合乘积,构成与24互质的数。所以两组数字个数相乘就可以知道乘积的组合个数,也就知道与24互质的个数了。这样的证明并不严谨但姑且可以先记住。
另外还需要记住欧拉函数是一个 积性函数 ,也就是n如果为多个互质的数构成即(n=a*b*c*d.... ),那么
Phi left( n ight)=Phi left( a ight) *Phi left( b ight)....

也就是n为某一个质数的倍数,比如27=3*3*3=3^3 27就是3的倍数。那么小于27且存在非互质关系的数一定都是3的倍数也就是:1*3、2*3,3*3...9*3 共计9个, 所以3^3 - 9 =3^3 - 3^2 .所以归纳一下也就是说如果p是质数,求与p^n 互质的数的个数,只要将如下的数
(1*p)、(2*p)、(3*p)、....(p^n-1 *p) 进行剔除,剩余的都将与p^n (切记p是质数)互质所以我们得出:

Phi left( p^{k} ight)=p^{k}-p^{k-1}=p^{k}(1-dfrac {1}{p} )

当k=1的时候即
Phi left( p ight)=p-1
又回到了之前n为质数的情况下的表达式。这里我们也看到数学追求简洁和普适性的思想,再繁杂的规律都可以变成一个简洁抽象的表达式。

比如24=6*4=3*8=2*2*2*3,因为质数之间就是互质关系而且质数的多次方也是互质关系所以
我们把24演变一下:24=2^3 * 3即把相同的质数进行合并为质数的多次方。这样2^3 与3是互质关系( 质数的多次方之间也都是互质关系 ),于是当我们求与24互质的数的个数时候,就可以套用之前公式即:

Phi left(24 ight)=Phi left( 2^{3}*3 ight)=Phi left(2^3 ight)*Phi left(3 ight)=(2^{3}-2^{3-1})(3-1) =8

再进一步归纳因为p1、 p2...pm等都是质数且
n = p_{1}^{k_{1}}p_{2}^{k_{2}}p_{3}^{k_{3}}...p_{m}^{k_{m}}

则由于欧拉函数是积性函数,那么:
Phi left(n ight)=Phi left( p_{1}^{k_{1}}p_{2}^{k_{2}}p_{3}^{k_{3}}...p_{m}^{k_{m}} ight) =Phi left( p_{1}^{k_{1}} ight)* Phi left( p_{2}^{k_{2}} ight)*...Phi left( p_{m}^{k_{m}} ight)
由上一小节n为质数的多次方的结论
Phi left( p^{k} ight)=p^{k}-p^{k-1}=p^{k}(1-dfrac {1}{p} )
可以得出:
Phi left( p_{1}^{k_{1}} ight)* Phi left( p_{2}^{k_{2}} ight)*...Phi left( p_{m}^{k_{m}} ight)=p_{1}^{k_{1}}p_{2}^{k_{2}}...p_{m}^{k_{m}}*(1-dfrac {1}{p_{1}} )*(1-dfrac {1}{p_{2}})...(1-dfrac {1}{p_{m}} )


Phi left(n ight)=n*(1-dfrac {1}{p_{1}} )*(1-dfrac {1}{p_{2}})...(1-dfrac {1}{p_{m}})
此时我们仍然计算24互质个数则
Phi left(24 ight)=Phi left( 2^{3}*3 ight)=Phi left(2^3 ight)*Phi left(3 ight)=24*(1-dfrac {1}{2})(1-dfrac {1}{3})=8

上面说的那么多其实归结起来就是这样一个道理:当我们去求小于某个数范围内与其互质的数的个数时候,无非就是把n分为质数还是非质数。

知道了欧拉函数,接下来我们再理解一个同余概念,简单来说也就是25除以3的余数为1,而1除以2的余数为1,则我们称25与1对于模3同余数,用人话来说就是25和1 除以2得到的余数都一样。求余数的过程在数学里的黑话叫取模。所以才有上面那么拗口的说法。但是不要紧,数学喜欢简单不啰嗦,于是搞出了如下的表达式来表达上述说法:
25equiv 1left( mod 3 ight)
也就是说
25 \% 3 = 1\%3=1
注意到了吗?上述表达式也可以这样表述,即25除以3得到的余数为1.围绕着同余这个概念,欧拉大师结合他的欧拉函数活脱脱就搞出了个欧拉定理,我们来看看他有什么发现?

另外根据取模运算的规则:
a^{b}\%p = ((a \% p)^{b}) \% p
我们还可以得出
(a^{Phi left(n ight)})^{k}equiv 1left( mod n ight)
因为
(a^{Phi left(n ight)})^{k} \% n=(a^{Phi left(n ight)}\%n)^{k}\%n=1^k\%n =1
我们举个例子:比如
{Phi left(10 ight)}={Phi left(2*5 ight)}={Phi left(2 ight)}*{Phi left(5 ight)}=(2-1)*(5-1)=4

所以根据欧拉定理:因为9与10互质所以
9^{Phi left(10 ight)}=9^4equiv 1left( mod 10 ight)
于是(9^4 )^k 除以10都余1。

如果a与n互质,则必然能够找到一个数使得
abequiv 1left( mod n ight)
则b称为a的模反元素,我们可以通过欧拉定理来给予证明
a^{Phi left(n ight)}=1left( mod n ight)
a^{Phi left(n ight)}= a*a^{Phi left(n ight)-1}equiv 1left( mod n ight)

模反元素的概念对后续在已知道公钥情况下,计算合适的私钥是有很重要的意义的。
掌握了这些数学知识,你可能觉得这些东西似乎很孤立,看不到任何作用和价值,不过接下来我们来看看RSA是怎么运作的,你就会发现这些看似毫无作用的东西是如何产生价值的。

从加解密的表达式可以看出在,数学原理上公钥和私钥其实并没有什么差异。你可以用公钥加密、私钥解密,也可以用私钥加密,公钥进行解密。但是对于密码学来说,对公钥和私钥会有不同的要求。
另外需要注意的是这里 明文数值不能大于等于N ,否则解密的结果并不会等于明文。

因为加密的公式为:
x^e mod n = y
而解密公式为
y^d mod n = x
从上面表达式可以看出在数学原理上公钥和私钥其实并没有什么差异。你可以用公钥加密、私钥解密,也可以用私钥加密,公钥进行解密。
所以根据:
y=x^e - kn
且因为Y^D mod N = x 所以
y^D equiv x (mod n)
所以确定能否加解密的过程本质就是证明:
(x^e - kn)^d equiv x (mod n) (1.1)
而根据二项式定理
[图片上传失败...(image-ca75c7-1530364603810)]

(x^e - kn)^d 展开后演变为
x^ed-m_{1}x^{e(d-1)}kn+m_{2}x^{e(d-2)}(kn)^2...m_{n}(kn)^{d}
你会发现二项式展开后,唯有x^ed 没有包含n,因此结合模运算加法运算规则(a + b) % p = (a % p + b % p) % p ,要想证明1.1的表达式,则必然证明:
x^{ed} equiv x (mod n)
由于
ed equiv 1 (mod {Phi left(n ight)})
所以
ed=h{Phi left(n ight)})+1
则从证明
x^{ed} equiv x (mod n) 演变为证明
x^{h{Phi left(n ight)}}*xequiv x (mod n)
如果x与n 互质则根据欧拉定理
x^{{Phi left(n ight)}}equiv 1 (mod n)
基于在欧拉定理中提及的,根据取模运算规则可以得出
x^{h{Phi left(n ight)}}equiv 1 (mod n)
仍然是基于取模运算乘法规则,我们又可以得出
x^{h{Phi left(n ight)}}xequiv x (mod n)
这样原式得到证明。
那么如果x与n不互质的情况下,因为n=p*q且p和q都是质数,所以n的因数只有p和q了,因为x与n不互质,那么我们可以认为:
x=k_{1}p 0 < u< q
或者
x=k_{2}q 0 < k

请注意k值的取值范围,这里要牢记一点明文值必须大于0且小于n值。
这里我们先姑且定义
x=kq
0 < k< p

那么因为p与q都是质数,根据k<p 我们可以认为k与p是互质的,而p本身就是质数,所以根据费尔马小定理(n
为质数,a与n互质,如果有所遗忘可以回到前面查看相关说明。)
a^{n-1}equiv 1left( mod n ight)
那么
(kq)^{p-1}equiv 1left( mod p ight)
根据费尔马定理我们推得出来的表达式
a^{Phi left(n ight)}equiv 1left( mod n ight)
得出
((kq)^{p-1})^{h*(q-1)}equiv 1left( mod p ight)
也就是
(kq)^{h*(q-1)(p-1)}equiv 1left( mod p ight)
根据取模运算的运算定义:

得出

(kq)^{h*(q-1)(p-1)} = 1+u*p
这里的u为任意整数,这时候两边都乘以kq
(kq)^{h*(q-1)(p-1)}*kq = 1+u*k*q*p
因为n=pq x=kq那么
(x)^{Phi left(n ight)+1} = x+u*k*n
还是根据之前取模运算定义得出
(x)^{hPhi left(n ight)+1}equiv xleft( mod n ight)
即原式得到了证明。

之所以RSA是安全的,很大程度取决于n值是否足够大以至于在已知公钥e和模数n的情况下仍然难以找出d。根据之前的谈及的密钥对计算方式:
E*D equiv 1(mod M)
要想算出D就必须计算出M 而M = (p-1)(q-1) ,n=p*q则要算出M就需要知道p和q,即从一个庞大的数中分离出两个也很大的质数。大数的素因数分解被认为是一个困难的问题,即使是现代的计算机也非常难于处理,所以许多加密系统的原理都是建基于此。
目前最安全的做法是选择使用rsa-2048,随着2009年12月12日,编号为RSA-768(768 bits, 232 digits)数也被成功分解。这一事件威胁了现通行的1024-bit密钥的安全性。这里的2048表示的是模数N
的二进制位为2048位。而一般公钥世面上普遍选择65535,这是安全性和计算速度之间的综合考虑下选择出来的一个比较妥当的数值。因为加解密函数都是在做大数的指数运算,所以在工程方面会尽量考虑公钥加解密的执行速度,毕竟公钥是被外部使用的。
此外还记得前面提到rsa加密的明文数值大小不能大于N,或者其位数不能超过N的位数的限制。一旦超过密文解密后和原文数据不相匹配,这时候就需要采用分段加密技术。而另一方面明文的值也不能为0或1,-1因为这样导致密文也是0,1或者-1。另外也有一个问题即如果用私钥解密一段非法数据,那么得到是解密失败还是一个毫无意义的解密内容呢?这时候需要采用 rsa padding技术。对这个概念理解可以参考 浅谈RSA Padding 这篇文章。

通过学习一些简单的数论知识即质数、欧拉函数、模反元素等概念后,我们也了解RSA算法大致过程,总的来说公私密钥对需要计算如下几个数据:

RSA的安全性不仅仅建立于大数质因数分解困难这一理论基础上,在工程上如何对上述这些数值的选取也是很大的学问。通过对rsa学习让我对工程和理论之间的关系理解上更进一步。理论确定了方向的可行性,而工程实践则要确保在有限资源下,理论结果是可以应用起来解决特定规模的问题。而在加密算法领域,一旦工程实践出现偏差,往往就容易产生安全漏洞,尽管算法理论证明是安全的。比如rsa中p q值的选择等。这里我罗列几个工程问题有兴趣的童鞋可以再进一步做探索:

Ⅱ RSA算法的安全问题

不安全 虽然没泄露n 但是e d都被知道后 有利于求得n的欧拉函数 进而分解n
这就是所谓的 “共模攻击”

为了防止共模攻击 所以Rsa使用有2个注意
1。私钥泄露,立刻换n
2。同组多用户不能使用同一个n

Ⅲ 常见的几种SSL/TLS漏洞及攻击方式

SSL/TLS漏洞目前还是比较普遍的,首先关闭协议:SSL2、SSL3(比较老的SSL协议)配置完成ATS安全标准就可以避免以下的攻击了,最新的服务器环境都不会有一下问题,当然这种漏洞都是自己部署证书没有配置好导致的。

Export 加密算法

Export是一种老旧的弱加密算法,是被美国法律标示为可出口的加密算法,其限制对称加密最大强度位数为40位,限制密钥交换强度为最大512位。这是一个现今被强制丢弃的算法。

Downgrade(降级攻击)

降级攻击是一种对计算机系统或者通信协议的攻击,在降级攻击中,攻击者故意使系统放弃新式、安全性高的工作方式,反而使用为向下兼容而准备的老式、安全性差的工作方式,降级攻击常被用于中间人攻击,讲加密的通信协议安全性大幅削弱,得以进行原本不可能做到的攻击。 在现代的回退防御中,使用单独的信号套件来指示自愿降级行为,需要理解该信号并支持更高协议版本的服务器来终止协商,该套件是TLS_FALLBACK_SCSV(0x5600)

MITM(中间人攻击)

MITM(Man-in-the-MiddleAttack) ,是指攻击者与通讯的两端分别创建独立的联系,并交换其所有收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个对话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。一个中间人攻击能成功的前提条件是攻击者能够将自己伪装成每个参与会话的终端,并且不被其他终端识破。

BEAST(野兽攻击)

BEAST(CVE-2011-3389) BEAST是一种明文攻击,通过从SSL/TLS加密的会话中获取受害者的COOKIE值(通过进行一次会话劫持攻击),进而篡改一个加密算法的 CBC(密码块链)的模式以实现攻击目录,其主要针对TLS1.0和更早版本的协议中的对称加密算法CBC模式。

RC4 加密算法

由于早期的BEAST野兽攻击而采用的加密算法,RC4算法能减轻野兽攻击的危害,后来随着客户端版本升级,有了客户端缓解方案(Chrome 和 Firefox 提供了缓解方案),野兽攻击就不是什么大问题了。同样这是一个现今被强制丢弃的算法。

CRIME(罪恶攻击)

CRIME(CVE-2012-4929),全称Compression Ratio Info-leak Made Easy,这是一种因SSL压缩造成的安全隐患,通过它可窃取启用数据压缩特性的HTTPS或SPDY协议传输的私密Web Cookie。在成功读取身份验证Cookie后,攻击者可以实行会话劫持和发动进一步攻击。

SSL 压缩在下述版本是默认关闭的: nginx 1.1.6及更高/1.0.9及更高(如果使用了 OpenSSL 1.0.0及更高), nginx 1.3.2及更高/1.2.2及更高(如果使用较旧版本的 OpenSSL)。

如果你使用一个早期版本的 nginx 或 OpenSSL,而且你的发行版没有向后移植该选项,那么你需要重新编译没有一个 ZLIB 支持的 OpenSSL。这会禁止 OpenSSL 使用 DEFLATE 压缩方式。如果你禁用了这个,你仍然可以使用常规的 HTML DEFLATE 压缩。

Heartbleed(心血漏洞)

Heartbleed(CVE-2014-0160) 是一个于2014年4月公布的 OpenSSL 加密库的漏洞,它是一个被广泛使用的传输层安全(TLS)协议的实现。无论是服务器端还是客户端在 TLS 中使用了有缺陷的 OpenSSL,都可以被利用该缺陷。由于它是因 DTLS 心跳扩展(RFC 6520)中的输入验证不正确(缺少了边界检查)而导致的,所以该漏洞根据“心跳”而命名。这个漏洞是一种缓存区超读漏洞,它可以读取到本不应该读取的数据。如果使用带缺陷的Openssl版本,无论是服务器还是客户端,都可能因此受到攻击。

POODLE漏洞(卷毛狗攻击)

2014年10月14号由Google发现的POODLE漏洞,全称是Padding Oracle On Downloaded Legacy Encryption vulnerability,又被称为“贵宾犬攻击”(CVE-2014-3566),POODLE漏洞只对CBC模式的明文进行了身份验证,但是没有对填充字节进行完整性验证,攻击者窃取采用SSL3.0版加密通信过程中的内容,对填充字节修改并且利用预置填充来恢复加密内容,以达到攻击目的。

TLS POODLE(TLS卷毛狗攻击)

TLS POODLE(CVE-2014-8730) 该漏洞的原理和POODLE漏洞的原理一致,但不是SSL3协议。由于TLS填充是SSLv3的一个子集,因此可以重新使用针对TLS的POODLE攻击。TLS对于它的填充格式是非常严格的,但是一些TLS实现在解密之后不执行填充结构的检查。即使使用TLS也不会容易受到POODLE攻击的影响。

CCS

CCS(CVE-2014-0224) 全称openssl MITM CCS injection attack,Openssl 0.9.8za之前的版本、1.0.0m之前的以及1.0.1h之前的openssl没有适当的限制ChangeCipherSpec信息的处理,这允许中间人攻击者在通信之间使用0长度的主密钥。

FREAK

FREAK(CVE-2015-0204) 客户端会在一个全安全强度的RSA握手过程中接受使用弱安全强度的出口RSA密钥,其中关键在于客户端并没有允许协商任何出口级别的RSA密码套件。

Logjam

Logjam(CVE-2015-4000) 使用 Diffie-Hellman 密钥交换协议的 TLS 连接很容易受到攻击,尤其是DH密钥中的公钥强度小于1024bits。中间人攻击者可将有漏洞的 TLS 连接降级至使用 512 字节导出级加密。这种攻击会影响支持 DHE_EXPORT 密码的所有服务器。这个攻击可通过为两组弱 Diffie-Hellman 参数预先计算 512 字节质数完成,特别是 Apache 的 httpd 版本 2.1.5 到 2.4.7,以及 OpenSSL 的所有版本。

DROWN(溺水攻击/溺亡攻击)

2016年3月发现的针对TLS的新漏洞攻击——DROWN(Decrypting RSA with Obsolete and Weakened eNcryption,CVE-2016-0800),也即利用过时的、弱化的一种RSA加密算法来解密破解TLS协议中被该算法加密的会话密钥。 具体说来,DROWN漏洞可以利用过时的SSLv2协议来解密与之共享相同RSA私钥的TLS协议所保护的流量。 DROWN攻击依赖于SSLv2协议的设计缺陷以及知名的Bleichenbacher攻击。

通常检查以下两点服务器的配置

Ⅳ RSA算法的缺点

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。现今,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
(XM)d = Xd *Md mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.
3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。

Ⅳ 4096位RSA算法被侧信道攻击破解,这对当前的IT界安全有什么影响

最近的网络中,4096位RSA算法被侧信道攻击破解,这引起了一阵轰动和不安。安全不是个问题,问题的关键是:投入多少,要求多少安全强度的信道。DES的弱点密钥开始通信的时候必须基于可信信道,如果密钥被截获。那么信息毫无保密可以言。所以可以用diffid-Hellman交换DES的密钥。

所以说,安全问题刻不容缓,我们需要加强对网络安全的监管和维护,促进网络和谐发展。

Ⅵ rsa算法中p,q,n,e,d一般大小都为多少啊

RSA遭受攻击的很多情况是因为算法实现的一些细节上的漏洞所导致的,所以在使用RSA算法构造密码系统时,为保证安全,在生成大素数的基础上,还必须认真仔细选择参数,防止漏洞的形成。根据RSA加解密过程,其主要参数有三个:模数N,加密密钥e,解密密钥d。
3.4.1 模数N的确定
虽然迄今人们无法证明,破解RSA系统等于对N因子分解,但一般相信RSA系统的安全性等同于因子分解,即:若能分解因子N,即能攻破RSA系统,若能攻破RSA系统,即能分解因子Ⅳ。因此,在使用RSA系统时,对于模数N的选择非常重要。在RSA算法中,通过产生的两个大素数p和q相乘得到模数N,而后分别通过对它们的数学运算得到密钥对。由此,分解模数N得到p和q是最显然的攻击方法,当然也是最困难的方法,如果模数N被分解,攻击者利用得到的P和q便可计算出,进而通过公开密钥e由解密密钥d,则RSA体制立刻被攻破。相当一部分的对RSA的攻击就是试图分解模数N,选择合适的N是实现RSA算法并防止漏洞的重要环节。一般地,模数N的确定可以遵循以下几个原则:
①p和q之差要大。
当p和q相差很小时,在已知n的情况下,可假定二者的平均值为,然后利用,若等式右边可开方,则得到及,即N被分解。
②p-1和q-1的最大公因子应很小。
③p和q必须为强素数。
一素数p如果满足:
条件一:存在两个大素数,,使得|p-1且|p+1;
条件二:存在四个大素数,,,使得。则此素数为强素数。其中,,,称为3级的素数,,称为2级的素数,p则称为1级的素数,很明显地,任何素数均为3级的素数。只有两个强素数的积所构成的N,其因子分解才是较难的数学问题。
④p和q应大到使得因子分解N为计算上不可能。
RSA的安全性依赖于大数的因子分解,若能因子分解模数N,则RSA即被攻破,因此模数N必须足够大直至因子分解N在计算上不可行。因子分解问题为密码学最基本的难题之一,如今,因子分解的算法已有长足的进步,但仍不足以说明RSA可破解。为保证安全性,实际应用中所选择的素数P和拿至少应该为300位以上的二进制数,相应的模数N将是600位以上的二进制数。
目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。随着计算能力的提高和分布式运算的发展,安全密钥的长度将是动态增长的。
Jadith Moore给出了使用RSA时有关模数的一些限制:
①若给定模数的一个加/解密密钥指数对已知,攻击者就能分解这个模数。
②若给定模数的一个加/解密密钥指数对已知,攻击者无需分解模数Ⅳ就可以计算出别的加/解密密钥指数对。
③在通信网络中,利用RSA的协议不应该使用公共模数。
④消息应该用随机数填充以避免对加密指数的攻击。
3.4.2 e的选取原则
在RSA算法中,e和互质的条件容易满足,如果选择较小的e,则加、解密的速度加快,也便于存储,但会导致安全问题。
一般地,e的选取有如下原则:
①e不能够太小。在RSA系统中,每人的公开密钥P只要满足即可,也即e可以任意选择,为了减少加密运算时间,很多人采用尽可能小的e值,如3。但是已经证明低指数将会导致安全问题,故此,一般选择e为16位的素数,可以有效防止攻击,又有较快速度。
②e应选择使其在的阶为最大。即存在i,使得,
可以有效抗击攻击。
3.4.3 d的选取原则
一般地,私密密钥d要大于。在许多应用场合,常希望使用位数较短的密钥以降低解密或签名的时间。例如IC卡应用中,IC卡CPU的计算能力远低于计算机主机。长度较短的d可以减少IC卡的解密或签名时间,而让较复杂的加密或验证预算(e长度较长)由快速的计算机主机运行。一个直接的问题就是:解密密钥d的长度减少是否会造成安全性的降低?很明显地,若d的长度太
小,则可以利用已知明文M加密后得,再直接猜测d,求出是否等于M。若是,则猜测J下确,否则继续猜测。若d的长度过小,则猜测的空间变小,猜中的可能性加大,已有证明当时,可以由连分式算法在多项式时间内求出d值。因此其长度不能过小。

Ⅶ RSA算法的安全性

RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。 RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。

阅读全文

与rsa算法漏洞相关的资料

热点内容
谷歌web服务器地址 浏览:892
安卓锁屏图片如何删除 浏览:717
python3多进程编程 浏览:711
证明代码是程序员写的 浏览:392
算法错误发现办法 浏览:407
河南省医院挂号是哪个app 浏览:627
冬日恋歌哪个APP能看 浏览:671
委内瑞拉加密货 浏览:8
程序员写日记哪个软件好 浏览:106
加密机操作手册 浏览:860
dos命令自动关闭 浏览:328
心田花开app在哪里评价 浏览:449
求索记录频道哪个app可以看 浏览:730
金梅瓶pdf下载 浏览:985
机器软件用什么编程 浏览:845
java虚拟机指令 浏览:671
shell编程入门书籍 浏览:946
大连桶装水溯源码售价 浏览:302
php怎么跳转到电脑 浏览:414
如何在电脑上创建新网络连接服务器 浏览:61