RSA

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RSA的安全性
随着人类计算能力的不断提高,原来被 认为是不可能分解的大数已被成功分解。 例如RSA-129(即n为129位十进制数, 大约428个比特)已在网络上通过分布式计 算历时8个月于1994年4月被成功分解,RSA130 已于1996年4月被成功分解。 针对RSA最流行的攻击一般是基于大数 因数分解。1999年,RSA-155(512 bits)被成 功分解,2002年,RSA-158也被成功因数分 解。
RSA解密算法证明
下面分两种情况: ① m与n互素,则由Euler定理得
mφ(n)≡1 mod n,mkφ(n)≡1 mod n,mkφ(n)+1≡m mod n 即cd mod n≡m。
② gcd(m,n)≠1,先看gcd(m,n)=1的含义,由 于n=pq,所以gcd(m,n)=1意味着m不是p的倍 数也不是q的倍数。因此gcd(m,n)≠1意味着m 是p的倍数或q的倍数,不妨设m=cp,其中c为 一正整数。此时必有gcd(m,q)=1,否则m也是 q的倍数,从而是pq的倍数,与m<n=pq矛盾。
RSA
RSቤተ መጻሕፍቲ ባይዱ算法
RSA算法是1978年由R.Rivest, A.Shamir 和L.Adleman提出的一种用数论构造的、也 是迄今为止理论上最为成熟完善的公钥密码 体制,该体制已得到广泛的应用。 它既可用于加密、又可用于数字签字。 RSA 算法的安全性基于数论中大整数分 解的困难性。
1 算法描述
RSA的实现问题


需要计算模 300 digits (or 1024+ bits) 的乘 法 计算机不能直接处理这么大的数 (计算速度很慢) 需要考虑其它技术,加速RSA的实现

RSA的快速实现






加密很快,指数小 解密比较慢,指数较大 利用中国剩余定理,中国剩余定理对RSA解密 算法生成两个解密方程(利用M=Cd mod n) 即: M1 = M mod p = (C mod p)d mod (p-1) M2 = M mod q = (C mod q)d mod (q-1) 解方程 M = M1 mod p M = M2 mod q 具有唯一解:
因此 a abk
m


2
a
bk 1
a
2
bk 2
b b1 0 a a
2
2
例如:19=1×24+0×23+0×22+1×21+1×20,所 以a19=((((a1)2a0)2a0)2a1)2a1 从而可得以下快速指数算法:
c=0; d=1; For i=k downto 0 d0 { c=2×c; d=(d×d) mod n; if bi=1 then { c=c+1; d=(d×a) mod n } } return d.
2
c m
e2
2 e e

m
e3
mod n
et
c
et 1
m
t 1 e e

m
mod n
c m
et
t e e

m
et 1
mod n
RSA的安全性
若m
et
et 1
有 m m mod n ,即 c m mod n ,所以 在上述重复加密的倒数第2步就已恢复出明 文m,这种攻击法只有在t较小时才是可行的。 为抵抗这种攻击,p、q的选取应保证使t很大。
RSA 参数选择



需要选择足够大的素数 p, q 通常选择小的加密指数e,且与ø(N) 互素 e 对所有用户可以是相同的 最初建议使用e=3 现在3太小 常使用 e=216-1 = 65535 解密指数比较大
RSA Usage

要加密消息 M, 发送者要得到接收者的公钥 Kr={er,Nr} 计算: C=Mer mod Nr, where 0<=M<N
3 RSA的安全性
RSA的安全性是基于分解大整数的困难 性假定,之所以为假定是因为至今还未能证 明分解大整数就是NP问题,也许有尚未发现 的多项式时间分解算法。 如果RSA的模数n被成功地分解为p×q, 则立即获得φ(n)=(p-1)(q-1),从而能够确定 e模φ(n)的乘法逆元d,即d≡e-1 mod φ(n), 因此攻击成功。
例: 选p=7,q=17。求n=p×q=119, φ(n)=(p-1)(q-1)=96。 取e=5,满足1<e<φ(n),且gcd(φ(n),e)=1。 确定满足d· e=1 mod 96且小于96的d, 因为77×5=385=4×96+1,所以d为77,因 此公开钥为{5,119},秘密钥为{77,119}。 设明文m=19,则由加密过程得密文为 c≡195 mod 119≡2476099 mod 119≡66 解密为6677mod 119≡19
RSA解密算法证明
由gcd(m,q)=1及Euler定理得 mφ(q)≡1 mod q,所以 mkφ(q)≡1 mod q,[mkφ(q)]φ(p)≡1 mod q, mkφ(n)≡1 mod q 因此存在一整数r,使得mkφ(n)=1+rq, 两边同乘以m=cp得mkφ(n)+1=m+rcpq=m+rcn 即mkφ(n)+1≡m mod n,所以cd mod n≡m。 (证毕)
et 1
t
4 对RSA的攻击
RSA存在以下两种攻击,并不是因为算 法本身存在缺陷,而是由于参数选择不当造 成的。 1. 共模攻击 在实现RSA时,为方便起见,可能给每 一用户相同的模数n,虽然加解密密钥不同, 然而这样做是不行的。
RSA加密解密算法描述
2. 加密 加密时首先将明文比特串分组,使得每 个分组对应的十进制数小于n,即分组长度 小于log2n。然后对每个明文分组m,作加密 运算: c≡me mod n
3. 解密 对密文分组的解密运算为:m≡cd mod n
RSA解密算法描述
下面证明RSA算法中解密过程的正确性。 证明: 由加密过程知c≡me mod n,所以 cd mod n≡med mod n≡m1 mod φ(n) mod n≡mkφ(n)+1 mod n



为解密 C, 接收者使用私钥
K-1r={d,p,q}
计算: M=Cd mod Nr
RSA举例
例子: 1. 选素数p=47和q=71,得n=3337, (n)=46×70=3220; 2. 选择e=79,求得私钥d=e -1 1019(mod 3220)。 3. 公开n=3337和e=79. 4. 现要发送明文688,计算: 68879(mod 3337)=1570 5.收到密文1570后,用私钥d=1019进行解密: 15701019(mod 3337)=688
RSA的安全性
为保证算法的安全性,还对p和q提出以下要求: (1) |p-q|要大 由 则
下分解步骤:
p q n p q pq p q ,如果|p-q|小, 4 2 4 4 2 p q 也小,因此 p q 稍大于n。可得n的如 4 4
RSA的安全性
是否有不通过分解大整数的其他攻击途 径?下面证明由n直接确定φ(n)等价于对n的 分解。 设n=p×q中,p>q,由φ(n)=(p-1)(q-1), 则有 p+q=n-φ(n)+1 以及 p q p q 2 4n 由此可见,由p、q确定φ(n)和由φ(n)确 定p、q是等价的。
2 2 2
① 顺序检查大于n的每一整数x,直到找到一个x使得 x2-n是某一整数(记为y)的平方。 ② 由x2-n=y2,得n=(x+y)(x-y)。
RSA的安全性
(2) p-1和q-1都应有大素因子 这是因为RSA算法存在着可能的重复加 密攻击法。设攻击者截获密文c,可如下进行 重复加密: ce me e me mod n
1. 密钥的产生 ① 选两个保密的大素数p和q。 ② 计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的 欧拉函数值。 ③ 选一整数e,满足1<e<φ(n),且gcd(φ(n),e)=1。 ④ 计算d,满足d· e≡1 mod φ(n),即d是e在模φ(n) 下的乘法逆元,因e与φ(n)互素,由模运算可知, 它的乘法逆元一定存在。 ⑤ 以{e,n}为公开钥,{d,n}为秘密钥。
RSA的安全性
对于大整数的威胁除了人类的计算能力外,还 来自分解算法的进一步改进。分解算法过去都采用 二次筛法,如对RSA-129的分解。而对RSA-130的 分解则采用了一个新算法,称为推广的数域筛法, 该算法在分解RSA130时所做的计算仅比分解 RSA-129多10%。 将来也可能还有更好的分解算法,因此在使用 RSA算法时对其密钥的选取要特别注意其大小。估 计在未来一段比较长的时期,密钥长度介于1024比 特至2048比特之间的RSA是安全的。
2 RSA算法中的计算问题
其中d是中间结果,d的终值即为所求结 果。c在这里的作用是表示指数的部分结果, 其终值即为指数m,c对计算结果无任何贡献, 算法中完全可将之去掉。
RSA算法中的计算问题
例: 求7560 mod 561。 将560表示为1000110000,所以7560 mod 561=1。
Miller—Rabin素数测试
20
RSA密钥产生
可见寻找大素数是一个比较繁琐的工作。 然而在RSA体制中,只有在产生新密钥时才 需执行这一工作。 p和q决定出后,下一个需要解决的问题 是如何选取满足1<e<φ(n)和gcd(φ(n),e)=1 的e,并计算满足d· e≡1 mod φ(n)的d。这一 问题可由推广的Euclid算法完成。
RSA密钥产生
2. RSA密钥的产生
产生密钥时,需要考虑两个大素数p、q的选取, 以及e的选取和d的计算。 因为n=pq在体制中是公开的,因此为了防止 敌手通过穷搜索发现p、q,这两个素数应是在一个 足够大的整数集合中选取的大数。如果选取p和q为 10100左右的大素数,那么n的阶为10200,每个明文 分组可以含有664位(10200≈2664),即83个8比特 字节,这比DES的数据分组(8个8比特字节)大得 多,这时就能看出RSA算法的优越性了。因此如何 有效地寻找大素数是第一个需要解决的问题。
RSA密钥产生
寻找大素数时一般是先随机选取一个大 的奇数(例如用伪随机数产生器),然后用 素性检验算法检验这一奇数是否为素数,如 果不是则选取另一大奇数,重复这一过程, 直到找到素数为止。 素性检验算法通常都是概率性的,但如 果算法被多次重复执行,每次执行时输入不 同的参数,算法的检验结果都认为被检验的 数是素数,那么就可以比较有把握地认为被 检验的数是素数。下面介绍Miller-Rabin算法。
RSA算法中的计算问题
1. RSA的加密与解密过程 RSA的加密、解密过程都为求一个整数的整数 次幂,再取模。如果按其含义直接计算,则中间结 果非常大,有可能超出计算机所允许的整数取值范 围。如上例中解密运算6677 mod 119,先求6677再 取模,则中间结果就已远远超出了计算机允许的整 数取值范围。而用模运算的性质: (a×b) mod n=[(a mod n)×(b mod n)] mod n 就可减小中间结果。
再者,考虑如何提高加、解密运算中指数运算
的有效性。例如求x16,直接计算的话需做15次乘
法。然而如果重复对每个部分结果做平方运算即求
x,x2,x4,x8,x16则只需4次乘法。
求am可如下进行,其中a,m是正整数:
将m表示为二进制形式bk bk-1…b0,即
m=bk2k+bk-12k-1+…+b12+b0
et 1
c mod n ,即 m

et
e
c mod n ,则
RSA的安全性
设m在模n下阶为k,由 c m mod n e m 得 m mod n ,所以k|(et-1),即et≡1(mod k), t取为满足上式的最小值(为e在模k下的阶)。 又当e与k互素时t|φ(k)。为使t大,k就应大且 φ(k)应有大的素因子。又由k|φ(n),所以为使 k大,p-1和q-1都应有大的素因子。 此外,研究结果表明,如果e<n且d<n1/4, 则d能被容易地确定。
相关文档
最新文档