RSA密码分析中分解大整数的判定算法
第 36 卷 第 15 期 Vol.36 No.15
计算机工程 Computer Engineering
2010 年 8 月 August 2010
·安全技术·
文章编号:1000—3428(2010)15—0142—03 文献标识码:A
中图分类号:TP309
RSA 密码分析中分解大整数的判定算法
孙克泉
Determine Algorithm of Large Integer Decomposition on RSA Cryptanalysis
SUN Ke-quan
(Computer Department, Nankai Community College, Tianjin 300100)
【Abstract】The security of RSA is designed based on the difficulty of large integer decomposition. In the RSA cryptanalysis, according to RSA public key encryption characteristics that the public key n as the product of two large prime numbers, contrary to the form n=pq(in which p, q as large prime numbers) of the large integer n decomposition. A determine algorithm of large integer decomposition on RSA cryptanalysis is given. The decomposition algorithm is proved by mathematical method, the corresponding algorithm design is given, the complexity of the algorithm is made below O(plogn), n prime factor characteristics and the relationship between the effectiveness of the decomposition, as well as RSA safety impacts are analyzed. 【Key words】RSA cryptanalysis; factorization; public-key encryption; complexity
2 RSA密码体制与整数分解算法
2.1 RSA的算法描述及安全性分析 RSA 算法基本思想是,首先选取 2 个大素数 p 与 q,然
后算出 n=pq, φ(n)=(p–1)(q–1),再选取一个正整数 e,使得 满足 gcd(e,φ(n))=1, 1<e<φ(n),再求出正整数 d,使之满足 1<d<φ(n),且使 de≡1 mod φ( n)。用{e, n}作为公钥,用{d, n}
作者简介:孙克泉(1961-),男,副教授、硕士,主研方向:信息
安全
收稿日期:2010-03-01 E-mail:SKQ1000@
和椭圆曲线法等试图用这些方法解决减小 n 的因式分解算法 的复杂度问题。以下是这些算法的时间复杂度[4]:
试除法:O(p(logn)2);
( ) Pollard’s rho 分解法: O p (log n)2 ;
—142—
作为私钥。明文 m 以分组的方式被加密,其中每个分组是一 个小于 n 的二进数,即分组的长度必须小于或等于 lbn;实际 上,分组长度 k 满足 2k<n≤2=me mod n m=cd mod n=(me)d mod n=mcd mod n RSA 算法须满足以下要求: (1)对于所有 m<n,找到 e、d、n,满足 mcd mod n 是可 能的;(2)对于 m<n,求 me、cd 在计算上是容易的;(3)给定 e 和 n,求 d 是计算上不可行的。 RSA 的安全性是基于分解大整数的困难性假定,这种假 定是因为至今还未能证明分解大整数 n 的问题。如果 RSA 的 模数 n 被成功地分解为 p 和 q,则立即获得φ(n)=(p–1)(q–1), 从而能够确定 e 模φ(n)的乘法逆元 d,即 d≡e–1 mod φ(n), 攻击成功。如果给定 n,φ(n)等价于对 n 的分解;在给定 e 和 n 的情况下,确定 d 的计算量至少等价于整数分解问题[3]。 因此,只有分解 n 才能从 c 和 e 中计算出明文 m。 2.2 整数分解算法及复杂度分析 在对 n 的因式分解方法中,通常的方法是采用数论中的 因式分解方法。目前,比较常用的因子分解方法有试除法、 Pollard’s rho 分解法、Pollard’s P-1 分解法、Dixon 分解法、 连分数分解法、二次筛法、多多项式二次筛法、数域筛法(NFS)
理 1,得 p≤ ⎡⎣ n ⎤⎦ ≤ n 。又因为 p≠2,ki=3,5,…, ⎡⎣ n ⎤⎦ 为大 于 3 到 ⎡⎣ n ⎤⎦ 的所有奇数的集合。因此,存在唯一的 kj,使 kj=p。
定理 2 从 ki=3,5,…, ⎡⎣ n ⎤⎦ 集合中任意取一个数,若 n mod ki=0,则 ki=p,并有 q=n/p。
(南开社区学院计算机系,天津 300100)
摘 要:RSA 的安全性是依据大整数分解的困难性而设计的。在 RSA 的密码分析中,根据 RSA 公钥加密体制中的公开密钥 n 为 2 个大素 数乘积的特性,针对形如 n=pq(其中,p、q 为大素数)的大整数 n 分解,提出一种分解 n 的判定算法,并对 n 的素因子特征与该算法的有效 性关系进行分析。经过数学证明和相应算法设计证实,该算法的复杂度低于 O(plogn)。 关键词:RSA 密码分析;因式分解;公钥加密;复杂度
证明:如果 n mod ki=0,可以写成 n =hki,即 ki|n、ki 为 n 的因子。由引理 2,得 ki=p。由 n=pq,得 q=n/p。 3.2 判定算法的基本思想
由定理 1 和定理 2 得出,在小于或等于 ⎡⎣ n ⎤⎦ 的所有奇数 中,必含有 n 的素因子 p。用不大于 ⎡⎣ n ⎤⎦ 的奇数去除 n,只 要 n 能被该数整除,这个数就是 n 的一个素因子 p,进而利 用 q=n/p 求得另一个素因子 q。这就是判定算法的基本思想。 该算法与通常的试除法的区别在于,试除法的思想是先确定 一个数是否为素数,当这个数为素数时,再与 n 试除,判断
Step2 求模运算 r=n mod x,如果 r=0,x 即为 n 的素因 子;否则,再求出 y=(n–r)/x。
这样就构造出 n=xy+r。其中,0<r<x。 Step3 将 x 递减 2,y 递增 2,然后对 r 进行判定,一旦 r 为 0,x 即为 n 的素因子。 为了优化算法,具体说明如下:
Pollard’s P–1 分解法:O(BlogB(logn)2),其中,B 为设 定的光滑界;
椭圆曲线法:O(exp(( 2 + o(1))(lnp)1/ 2(lnlnp)1/ 2)) 基于完全平方数的分解算法(Dixon 分解法、连分数分解 法、二次筛法、多多项式二次筛法、数域筛法(NFS)的最小复 杂度为:O(exp((64/9)1/3(lnp)1/ 3(lnlnp)2/3))。 其中,试除法、Pollard’s rho 分解法、Pollard’s P-1 分解 法和椭圆曲线法对于分解相对较小的素因子效率较高。基于 完全平方数的分解算法对于分解大整数 n 的效率相对较高。 当前使用数域筛法(NFS)分解 n 的最好结果是分解 RSA-200, 该数具有 200 个十进制位,663 个二进位。 实际上,在对这些算法进行相应的算法设计时,对 n 的 素因子特征都有一定的针对性,如 Pollard’s rho 分解法、 Pollard’s P-1 分解法等,如果 n 的素因子是强素数时,就会增 加分解的难度。而其他算法也对 n 的不同素因子特征和不同 类型的 n,分解效率差别也很大。另外,一些算法的构造对 于分解效率具有不确定性,如果构造方法不当,就会影响其 分解效率。 本文给出一种分解 n 的算法——判定算法。对该算法进 行相应的数学证明和算法设计,计算算法的时间复杂度,并 对 n 的不同素因子特征与分解效率的关系进行分析研究。
3 分解n的判定算法
3.1 定理的证明 设 n 为正整数,n=pq,p 和 q 为素数,且 p≤q, p≠2。 定理 1 设 n=pq,p 和 q 为素数,且 p≤q, p≠2, ki=3,5,…,
⎡⎣ n ⎤⎦ 为大于 3 到 ⎡⎣ n ⎤⎦ 的奇数的集合,3≤i≤ ⎡⎣ n ⎤⎦ /2,则存 在一个 j,使 kj=p。
1 概述
RSA 算法是一种用数论构造的、被认为理论上相当成熟 的公钥密码体制,并广泛地应用于密钥管理、数字签名等方 面。基于数论中 2 个大素数乘积所得整数 n 和选取满足一定 条件的整数 e 组成公开密钥(e, n),并选取特定私钥 d 组成私 有密钥对(d, n)。RSA 算法的安全性是基于数论中大整数分解 的困难性[1]。对 RSA 加密体制的攻击来自多方面,主要有因 式分解和旁路攻击方法等[2],而对加密算法的攻击是检验算 法安全性的标志。在对 n 的因式分解方法中,在给定 e 和 n 的情况下,确定 d 的计算量至少等价于整数分解问题[3]。目 前,比较常用的因式分解方法有试除法、Fermat 分解法、 Pollard’s rho 分解法、Pollard’s P-1 分解法、Dixon 分解法、 连分数分解法、二次筛法、多多项式二次筛法、数域筛法(NFS) 和椭圆曲线分解法等。其中,数域筛法被认为是当前最有效 的大数分解算法。在这些算法中,大多是基于求同余式 x2 ≡ y2(mod n) 且 x ≠ ± y(mod n) 所构成的完全平方数 x 和 y,只 要求出 x 和 y,即可通过求 gcd(x+y, n)和 gcd(x–y, n)达到分 解 n 的目的。它们的分解效率取决于构造的算法技巧。而随 着密钥 n 增大到 1 024 位以上,分解难度大大地增大。
RSA算法
RSA算法它是第一个既能用于数据加密也能用于数字签名的算法。
它易于理解和操作,也很流行。
算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。
但RSA的安全性一直未能得到理论上的证明。
它经历了各种攻击,至今未被完全攻破。
一、RSA算法:首先, 找出三个数, p, q, r,其中p, q 是两个相异的质数, r 是与(p-1)(q-1) 互质的数......p, q, r 这三个数便是private key接著, 找出m, 使得rm == 1 mod (p-1)(q-1).....这个m 一定存在, 因为r 与(p-1)(q-1) 互质, 用辗转相除法就可以得到了.....再来, 计算n = pq.......m, n 这两个数便是public key编码过程是, 若资料为a, 将其看成是一个大整数, 假设 a < n....如果a >= n 的话, 就将 a 表成s 进位(s <= n, 通常取s = 2^t),则每一位数均小於n, 然後分段编码......接下来, 计算 b == a^m mod n, (0 <= b < n),b 就是编码後的资料......解码的过程是, 计算c == b^r mod pq (0 <= c < pq),於是乎, 解码完毕...... 等会会证明c 和a 其实是相等的:)如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b......他如果要解码的话, 必须想办法得到r......所以, 他必须先对n 作质因数分解.........要防止他分解, 最有效的方法是找两个非常的大质数p, q,使第三者作因数分解时发生困难.........<定理>若p, q 是相异质数, rm == 1 mod (p-1)(q-1),a 是任意一个正整数,b == a^m mod pq,c == b^r mod pq,则c == a mod pq证明的过程, 会用到费马小定理, 叙述如下:m 是任一质数, n 是任一整数, 则n^m == n mod m(换另一句话说, 如果n 和m 互质, 则n^(m-1) == 1 mod m)运用一些基本的群论的知识, 就可以很容易地证出费马小定理的........<证明>因为rm == 1 mod (p-1)(q-1), 所以rm = k(p-1)(q-1) + 1, 其中k 是整数因为在modulo 中是preserve 乘法的(x == y mod z and u == v mod z => xu == yv mod z),所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq1. 如果a 不是p 的倍数, 也不是q 的倍数时,则a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod pa^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以p, q 均能整除a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1即a^(k(p-1)(q-1)) == 1 mod pq=> c == a^(k(p-1)(q-1)+1) == a mod pq2. 如果a 是p 的倍数, 但不是q 的倍数时,则a^(q-1) == 1 mod q (费马小定理)=> a^(k(p-1)(q-1)) == 1 mod q=> c == a^(k(p-1)(q-1)+1) == a mod q=> q | c - a因p | a=> c == a^(k(p-1)(q-1)+1) == 0 mod p=> p | c - a所以, pq | c - a => c == a mod pq3. 如果a 是q 的倍数, 但不是p 的倍数时, 证明同上4. 如果a 同时是p 和q 的倍数时,则pq | a=> c == a^(k(p-1)(q-1)+1) == 0 mod pq=> pq | c - a=> c == a mod pqQ.E.D.这个定理说明a 经过编码为b 再经过解码为c 时, a == c mod n (n = pq)....但我们在做编码解码时, 限制0 <= a < n, 0 <= c < n,所以这就是说a 等於c, 所以这个过程确实能做到编码解码的功能二、RSA 的安全性RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。
rsa中n的因式分解-概念解析以及定义
rsa中n的因式分解-概述说明以及解释1.引言1.1 概述概述:RSA算法是一种非对称加密算法,其中N的因式分解是RSA算法的核心数学问题之一。
N是RSA算法中的模数,其安全性取决于N的因式分解难度。
因此,研究N的因式分解对于理解RSA算法的安全性具有重要意义。
本文将介绍RSA算法的基本原理,探讨N的因式分解在RSA中的重要性,并对目前N的因式分解的研究现状进行分析和总结。
通过对N 的因式分解的研究,可以更好地理解RSA算法在实际应用中的安全性,为未来的加密算法研究提供借鉴和参考。
文章结构部分内容:1.2 文章结构本文将从RSA算法的基本原理入手,介绍N的因式分解在RSA中的重要性和影响。
首先,将对RSA算法进行简要介绍,包括其加密和解密过程。
然后,将重点探讨N的因式分解在RSA算法中的重要性,以及目前的研究现状。
最后,将提出N的因式分解对RSA的影响,并展望未来的研究方向。
结论部分将对全文进行总结,总结N的因式分解在RSA中的重要性和未来的研究方向。
文章1.3 目的:本文的目的是探讨RSA加密算法中N的因式分解问题。
通过对RSA 算法的简介和N的因式分解在RSA中的重要性进行分析,来帮助读者了解N的因式分解对RSA加密的重要性和影响。
同时,通过梳理目前N的因式分解的研究现状,以及对N的因式分解对RSA的影响和未来的研究方向进行探讨,为读者提供对该问题的深入理解和展望。
最终,通过对N 的因式分解在RSA中的重要性和未来研究方向的探讨,希望能够引起更多学者和研究人员对这一问题的关注,促进相关领域的进一步发展和突破。
2.正文2.1 RSA算法简介RSA算法是一种非对称加密算法,它利用了两个不同的密钥(公钥和私钥)来进行加密和解密操作。
RSA算法的安全性建立在大数因子分解的困难性上,即给定一个大的合数n,要找出它的所有因子。
RSA算法的安全性的基础就是在当前的计算能力下,难以对大的合数进行因式分解,从而找出私钥。
基于大整数分解问题
基于大整数分解问题大整数分解问题是计算机科学中一个重要的问题,它在密码学、信息安全、因式分解等领域具有广泛的应用。
本文将对大整数分解问题进行介绍,并探讨其在密码学中的应用。
一、大整数分解问题的定义大整数分解问题是指将一个大整数N分解为两个较小的素数p和q 的乘积,即N=p*q,其中p和q是素数。
该问题的难度主要在于对大整数的因式分解的复杂性。
二、大整数分解问题的重要性和应用1. 密码学:大整数分解是公钥密码中一个重要的基础问题。
在RSA 加密算法中,安全性基于对大整数N的因式分解的难度。
2. 信息安全:大整数分解问题的难度保证了密码学中的数字签名、身份认证和密钥交换等安全协议的可靠性。
3. 电子商务:大整数分解在电子商务中的应用主要是为了保护交易的安全性和隐私性。
4. 网络通信:大整数分解问题也在网络通信中起着重要作用,保护数据的传输安全和隐私。
三、大整数分解问题的复杂性大整数分解问题被认为是一个复杂的问题,目前还没有找到高效的算法来解决。
最常用的方法是穷举法,即从较小的素数开始,逐个尝试将大整数分解为两个素数的乘积。
这种方法的时间复杂度非常高,随着大整数的位数增加,解决问题所需的时间也呈指数级增长。
四、大整数分解问题的挑战1. 复杂性:大整数分解问题的复杂性使得其解决变得困难,需要耗费大量的计算资源和时间。
2. 安全性:大整数分解的难度是保证密码学和信息安全的关键,如果大整数分解问题被有效解决,将会对密码学和信息安全造成严重威胁。
3. 算法研究:为了解决大整数分解问题,需要深入研究算法和数学理论,寻找更高效的解决方法。
五、大整数分解问题的发展和展望已经有一些针对大整数分解问题的算法被提出,如分解算法、椭圆曲线分解算法等。
这些算法在一定程度上提高了大整数分解的效率,但仍然无法解决大整数分解问题的复杂性。
因此,大整数分解问题仍然是一个具有挑战性的问题,需要进一步的研究和探索。
总结:大整数分解问题是一个重要而复杂的问题,对密码学、信息安全、电子商务和网络通信等领域具有重要的应用价值。
RSA算法
• 解密过程
287 mod 33=19, 217 mod 33=21, 207 mod 33=19, 33=21, 33=26, 33=26, 17 mod 33=1, 57 mod 33=14。 33=1, 33=14。 即明文为19,21,26, 14对应的字母为 对应的字母为SUZAN。 即明文为19,21,26,1,14对应的字母为SUZAN。
C=Me (mod N)
(3)恢复明文:对C解密,即得到明文 解密, 恢复明文:
M=Cd (mod N)
RSA算法举例 RSA算法举例
(1)若Bob选择了p=11和q=13 Bob选择了 选择了p=11和 那么, =10×12=120; (2)那么,n=11 × 13=143, z=10×12=120; 再选取一个与z=120互质的数 例如e=7 互质的数, (3)再选取一个与z=120互质的数,例如e=7 找到一个值d=103满足 一个值d=103满足( (4)找到一个值d=103满足(e×d)mod z =1 103=721除以120余 除以120 (7×103=721除以120余1) (5)(n=143,e=7)为公钥,(n=143,d=103)为私钥。 )(n=143,e=7 为公钥,(n=143,d=103)为私钥。 n=143,e=7) ,(n=143 Bob在一个目录中公开公钥 n=143和 在一个目录中公开公钥: (6)Bob在一个目录中公开公钥:n=143和e=7 现假设Alice想发送明文 给Bob, 想发送明文85 (7)现假设Alice想发送明文85给Bob,她已经从公开媒 体得到了Bob的公开密钥(n,e)=(143,7),于是计算 Bob的公开密钥(n,e)=(143,7),于是计算: 体得到了Bob的公开密钥(n,e)=(143,7),于是计算: 857(mod 143)=123,且在一个信道上发送密文123。 143)=123,且在一个信道上发送密文123。 Bob接收到密文 接收到密文123时 用他的私钥d 103进行解 (8)当Bob接收到密文123时,用他的私钥d=103进行解 密:123103(mod 143)=85
密码学实验-RSA加密算法
密码学平时实验报告一、课题内容和要求1.实验环境实验主机操作系统为Windows 72.实验内容1.给定p,q,e,编写RSA的加解密算法2.调研各个语言的加密算法包二、课题需求分析RSA算法的具体描述如下:(1)任意选取两个不同的大素数p和q计算乘积n = p×q,φ(n) = (p-1)×(q-1)。
(2)任意选取一个大整数e,满足,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用);(3)确定的解密钥d,满足d*e ≡ 1mod φ(n),d为e的乘法逆元(4)公开整数n和e,秘密保存d ;(5)将明文m(m<n是一个整数)加密成密文c,加密算法为C = M^e (mod n)(6)将密文c解密为明文m,解密算法为M = C^d (mod n)然而只根据n和e(注意:不是p和q)要计算出d是不可能的。
因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。
具体的,求逆元采用扩展欧几里德算法和费马小定理+快速幂取模算法结合。
(后者要求模逆元的模为素数,这里φ(n) = (p-1)×(q-1)不适用,但我还是加上了)。
判断是否为质数采用了埃氏筛算法。
1.所谓扩展欧几里德算法,就在求gcd(a,b)的同时,顺带着求出x,y使贝祖等式ax+by= gcd(a,b)成立。
在求模逆元a*x=1 modb时,将原式化为ax+by=1= gcd(a,b)。
运用扩展欧几里德算法即可求出a的模b逆元x。
2.所谓费马小定理/欧拉定理求逆元,就是费马小定理:若p为素数,则有ap−1≡1(modp)ap−1≡1(modp)ap−2∗a≡1(modp)ap−2∗a≡1(modp)ap−2ap−2就是a在mod p意义下的逆元啦。
欧拉定理:若a、p互素,则有aφ(p)≡1(modp)aφ(p)≡1(modp)(费马小定理的一般形式)aφ(p)∗a≡1(modp)aφ(p)∗a≡1(modp)aφ(p)−1aφ(p)−1就是a在mod p意义下的逆元啦。
用数域筛法分解大整数
用数域筛法分解大整数众所周知, 早期的公开密钥RSA 系统之所以流行, 是因为它是建立在大整数的分解极其困难的理论基础之上, 因而使RSA 系统有很大的安全性。
然而, 随着整数分解算法的不断改进和计算机运算速度的加快, 人们对RSA 系统的安全性又产生了怀疑。
在二战期间, 英国间谍运用古老的大型计算机成功地破译了大量的德国军事情报, 为盟军战胜法西斯赢的了主动。
正是由于计算机的迅猛发展, 加密与解密的对抗和数论自身理论的提高, 整数分解的研究也就变得特别地活跃, 算法不断地得到改进。
攻击RSA 加密算法的一种主要手段是大整数分解。
为了校验当前大整数分解的能力(包括算法和计算机的计算能力) ,选择安全的RSA 参数,RSA公司从1991 年初开始,陆续公布了一系列关于大整数分解的挑战。
为此,计算数论专家发展了许多大整数分解算法, 例如: p + 1 方法、p - 1 方法、Pomerance 的二次筛法、Lenstra 的椭圆曲线分解方法、Pollard 和Pomerance 等数域筛法。
其中广义数域筛法是目前最有效的算法。
RSA 挑战的进展情况如表1 所示。
目前国际上最新的大数分解理论与技术,包括多项式选取、筛法、过滤、大规模稀疏线性方程组求解和代数数的平方根求解5 个步骤。
二:RSA算法简介1.RSA算法公钥,私钥产生a) 随机选取的在素数P和Q,还有N ,其中N = P * Q ,P和Q保密,N公开。
b) F(N) = (P-1) * (Q-1)。
c) 随机E,E满足(2=E=F(N)), E作为公钥公开。
d) 计算D, 使E*D=1(mod F(N)),称D为E对模F(N)的逆,D作为私钥保密。
2.RSA算法的加密解密(m为明文,c为密文)Ea) 加密算法c=E(m)=m(mod N) Db) 解密算法m=D(c)=c(mod N)3.RSA算法的特点a) RSA算法的特点是非对称加密算法,通过两个素数P和Q产生公钥(E, N)公开和产生死钥(D, N)保密。
rsa公钥分解
rsa公钥分解RSA公钥分解是一种攻击RSA加密算法的方法,它的目标是从RSA 公钥中推导出私钥,从而可以解密加密过的消息。
本文将介绍RSA公钥分解的原理、攻击方式以及防御措施。
一、RSA加密算法简介RSA是一种非对称加密算法,它由三个步骤组成:密钥生成、加密和解密。
在密钥生成阶段,用户需要选择两个大素数p和q,并计算它们的乘积n=p*q。
然后用户选择一个整数e作为公钥,并确保e与(p-1)*(q-1)互质。
最后用户计算d作为私钥,使得d*e mod (p-1)*(q-1)=1。
在加密阶段,用户将明文m转换为整数M,并使用公钥(n,e)对其进行加密,得到密文C=M^e mod n。
在解密阶段,用户使用私钥(d,n)对密文进行解密,得到明文m=C^d mod n。
二、RSA公钥分解原理RSA公钥分解的目标是从公钥(n,e)中推导出私钥(d,n),以便攻击者可以解密加密过的消息。
这个问题被称为“大整数分解问题”,因为n 通常是一个非常大的数字(几百位或几千位),很难在合理的时间内对其进行因数分解。
然而,RSA公钥分解并不是不可能的。
它依赖于一些数学算法,如Pollard-rho算法、数域筛法、共模攻击等。
这些算法可以在合理的时间内对大整数进行因数分解。
三、RSA公钥分解攻击方式1. Pollard-rho算法Pollard-rho算法是一种基于随机漫步的因数分解算法。
它通过在一个有限群中进行随机游走来寻找两个重复元素,从而找到n的因子。
该算法可以在O(√n)次步骤内找到n的一个非平凡因子。
2. 数域筛法数域筛法是一种基于多项式求解的因子分解算法。
它将大整数映射到一个有限域上,并使用多项式来表示这个有限域上的元素。
然后使用多项式求值和多项式求导等技术来寻找n的因子。
3. 共模攻击共模攻击是一种利用相同模数加密两个不同明文时所产生的信息泄露来推导出私钥d的攻击方式。
具体来说,如果两个明文m1和m2满足gcd(m1-m2,n)=1,则攻击者可以使用扩展欧几里得算法来计算私钥d。
RSA算法
RSA算法非常简单,概述如下:找两素数p和q取n=p*q取t=(p-1)*(q-1)取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)取d*e%t==1这样最终得到三个数:n d e设消息为数M (M <n)设c=(M**d)%n就得到了加密后的消息c设m=(c**e)%n则m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
在对称加密中:n d两个数构成公钥,可以告诉别人;n e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。
rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法求得d。
<二>实践接下来我们来一个实践,看看实际的操作:找两个素数:p=47q=59这样n=p*q=2773t=(p-1)*(q-1)=2668取e=63,满足e<t并且e和t互素用perl简单穷举可以获得满主e*d%t ==1的数d:C:/Temp>perl -e "foreach $i (1..9999){ print($i),last if $i*63%2668==1 }"847即d=847最终我们获得关键的n=2773d=847e=63取消息M=244我们看看加密:c=M**d%n = 244**847%2773用perl的大数计算来算一下:C:/Temp>perl -Mbigint -e "print 244**847%2773"465即用d对M加密后获得加密信息c=465解密:我们可以用e来对加密后的c进行解密,还原M:m=c**e%n=465**63%2773 :C:/Temp>perl -Mbigint -e "print 465**63%2773"244即用e对c解密后获得m=244 , 该值和原始信息M相等。
基于大整数因子分解困难问题--RSA公钥密码算法
基于⼤整数因⼦分解困难问题--RSA公钥密码算法RSA公钥密码算法RSA的安全性依赖于⼤数分解,在RSA私钥和公钥⽣成的过程中,共出现过p,q,n,φ(n),e,d,其中(n,e组成公钥),其他的都不是公开的,⼀旦d泄露,就等于私钥泄露。
那么能不能根据n,e推导出d呢?ed ≡ 1(mod φ(n))。
只有知道e和φ(n),才能算出dφ(n)=(p-1)(q-1)。
只有知道p和q,才能算出φ(n)n=pq,只有将n分解才能算出p和q所以,只有将n质因数分解,才能算出d。
也就意味着私钥破译。
但是,⼤整数的质因数分解是⾮常困难的。
RSA 的⼀些变种算法已被证明等价于⼤数分解。
分解n是最显然的攻击⽅法。
⼈们已能分解多个⼗进制位的⼤素数。
因此,模数n必须选⼤⼀些,因具体适⽤情况⽽定。
⼀:简介RSA是1977年由(Ron Rivest)、(Adi Shamir)和(Leonard Adleman)⼀起提出的。
⼆:算法描述密钥⽣成:选取⼤素数p,q,计算n=pq,以及n的欧拉函数,φ(n)= φ(p)φ(q)=(p-1)(q-1)选取e(1<e<φ(n)),e 与φ(n)互素,计算d,使得ed=1(modφ(n))公钥为(n,e),私钥为(n,d)加密:c=m e mod n解密:e=m d mod n三:涉及到的知识点欧拉函数φ(n)表⽰不⼤于n且与n互素的正整数的个数。
当n是素数,φ(n)=n-1。
n=pq,p,q均为素数时,则φ(n)= φ(p)φ(q)=(p-1)(q-1)。
对于互素的a和n,有a^φ(n)≡1(mod n)如何利⽤计算机程序从公钥e,以及φ(n)求得私钥d?问题可以化为求: e *x +φ(n)* y = 1 类型的⽅程,利⽤扩展欧⼏⾥得算法求解那如何在计算机内验证他们互质呢,此时就要⽤到欧⼏⾥德算法(就是⼩学时候的最⼤公约数),如果e和phi(n)的最⼤公约数为1,他们就互质。
rsa分解n的算法实现
rsa分解n的算法实现RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。
其中,RSA的核心就是大整数的分解,即将一个大整数N分解为两个质数p和q的乘积。
本文将介绍RSA分解N的算法实现。
1. 算法原理RSA分解N的算法基于质因数分解的数学原理。
假设N=p*q,其中p和q是两个大质数。
要分解N,我们需要找到p和q的值。
2. 算法步骤(1)选择一个较小的整数e作为公钥指数,使得e与(p-1)(q-1)互质。
(2)计算e的模反元素d,使得d*e ≡ 1 (mod (p-1)(q-1))。
(3)将N和e作为公钥公开,将N和d作为私钥保密。
(4)对于给定的N,通过公钥e进行加密,得到密文C。
(5)使用私钥d对密文C进行解密,得到明文M。
(6)将明文M转换为整数m。
(7)通过对m进行质因数分解,得到p和q。
3. 算法实现以下是Python代码实现RSA分解N的算法:```pythonimport mathdef is_prime(n):if n <= 1:return Falsefor i in range(2, int(math.sqrt(n)) + 1): if n % i == 0:return Falsereturn Truedef rsa_factorization(n):p = 0q = 0for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0 and is_prime(i):p = iq = n // ibreakreturn p, q# 测试N = 1234567890p, q = rsa_factorization(N)print("p =", p)print("q =", q)```4. 算法分析RSA分解N的算法实现基于质因数分解,其时间复杂度取决于质因数分解的效率。
