⑴ 利用RSA完成数据的加密与解密应用.求详细过程,求原理。
1、已知 p = 19,q = 23,则 n = p * q = 437,phi_n = ( p - 1) * (q - 1) = 396;
2、已知 e = 13,符合 gcd(e, phi_n) = 1,即 e 和 phi_n 互为素数;
3、由 e * d mod phi_n = 1,解出 d = 61;
4、因为Alice向Bob发送的明文为 m = 10;则加密后的密文为 c = m ^ e % n = 222;
5、Bob收到密文 c 后,利用私钥 d 即可得出明文 m = c ^ d % n = 10。
6、我认为题中私钥和公钥的概念你好像搞错了:Alice要向BOB传送数字10,那么Alice用来加密 使用的是Bob的公钥,即e,而Bob用来解密的是他自己的私钥,即d。
7、上面的d我是用了软件Sage算出的,这个软件用来解RSA很好用,有兴趣的话可以试试,当然 它还有很多很强大的功能。
⑵ RAS加密的数学原理
RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法。在了解RSA算法之前,先熟悉下几个术语根据密钥的使用方法,可以将密码分为对称密码和公钥密码
对称加密:加密和解密使用同一种密钥的方式
非对称加密:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码。
好多人都知道RSA加密的数学公式,但是不知道其的内部运作,那么我们以下就详细分析一波!
图1,mod就是取余的意思,上面公式的意思是3的多少次方除以17余数为12。由图2可知道3的13次方的时候就满足图1的公式。由图2的可知,公式后面的余数都是不一样的,而且是1-16。当我们好奇试试3^17%17时候,结果就是3,好明显等于了3^1%17的结果,那么我们称 3为17的原根 。
思考:任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?
计算这个值的方式叫做欧拉函数,使用:Φ(n)表示
计算8的欧拉函数,和8互质的 1 、2、 3 、4、 5 、6、 7 、8 所以 φ(8) = 4
计算7的欧拉函数,和7互质的 1、2、3、4、5、6 、7 所以 φ(7) = 6
计算56的欧拉函数:φ(56) = φ(8)* φ(7) = 4 * 6 = 24
如果两个正整数,除了1以外,没有其他公因数,我们就称这两个数是 互质关系 (coprime)。
一、当n是质数的时候,φ(n)=n-1。
二、如果n可以分解成两个互质的整数之积,如n=A*B则: φ(A*B)=φ(A)*φ(B)
根据以上两点得到:如果N是两个质数P1 和 P2的乘积则:φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)
如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。如图3所示:
我们可以设置互质的数如m=5和n=3,那么φ(3) = 3-1=2,5^2%3=1。所以上面的公式是成立的。(有兴趣的可以试多一点数字,注意是互质的两个数)
欧拉定理的特殊情况:如果两个正整数m和n互质,而且n为质数!那么φ(n)结果就是n-1。如图4所示:
注意:满足第3步的时候,m必须要小于n。
如果两个正整数e和x互质,那么一定可以找到整数d,使得 ed-1 被x整除。那么d就是e对于x的“模反元素”。如图6所示:
公钥: n和e
私钥: n和d
明文: m
密文: c
1、n会非常大,长度一般为1024个二进制位。(目前人类已经分解的最大整数,232个十进制位,768个二进制位)
2、由于需要求出φ(n),所以根据欧函数特点,最简单的方式n ,由两个质数相乘得到:
质数:p1、p2 Φ(n) = (p1 -1) * (p2 - 1)
3、最终由φ(n)得到e 和 d 。
总共生成6个数字:p1、p2、n、φ(n)、e、d
除了公钥用到了n和e其余的4个数字是不公开的。目前破解RSA得到d的方式如下:
1、要想求出私钥 d 。由于e*d = φ(n)*k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必须知道p1和 p2。
3、由于 n=p1*p2。只有将n因数分解才能算出。
⑶ RSA 加密算法(原理篇)
前几天看到一句话,“我们中的很多人把一生中最灿烂的笑容大部分都献给了手机和电脑屏幕”。心中一惊,这说明了什么?手机和电脑已经成为了我们生活中的一部分,所以才会有最懂你的不是你,也不是你男朋友,而是大数据。
如此重要的个人数据,怎样才能保证其在互联网上的安全传输呢?当然要靠各种加密算法。说起加密算法,大家都知道有哈希、对称加密和非对称加密了。哈希是一个散列函数,具有不可逆操作;对称加密即加密和解密使用同一个密钥,而非对称加密加密和解密自然就是两个密钥了。稍微深入一些的,还要说出非对称加密算法有DES、3DES、RC4等,非对称加密算法自然就是RSA了。那么当我们聊起RSA时,我们又在聊些什么呢?今天笔者和大家一起探讨一下,有不足的地方,还望各位朋友多多提意见,共同进步。
RSA简介:1976年由麻省理工学院三位数学家共同提出的,为了纪念这一里程碑式的成就,就用他们三个人的名字首字母作为算法的命名。即 罗纳德·李维斯特 (Ron Rivest)、 阿迪·萨莫尔 (Adi Shamir)和 伦纳德·阿德曼 (Leonard Adleman)。
公钥:用于加密,验签。
私钥:解密,加签。
通常知道了公钥和私钥的用途以后,即可满足基本的聊天需求了。但是我们今天的主要任务是来探究一下RSA加解密的原理。
说起加密算法的原理部分,肯定与数学知识脱不了关系。
我们先来回忆几个数学知识:
φn = φ(A*B)=φ(A)*φ(B)=(A-1)*(B-1)。
这个公式主要是用来计算给定一个任意的正整数n,在小于等于n的正整数中,有多少个与n构成互质的关系。
其中n=A*B,A与B互为质数,但A与B本身并不要求为质数,可以继续展开,直至都为质数。
在最终分解完成后,即 φ(N) = φ(p1)*φ(p2)*φ(p3)... 之后,p1,p2,p3都是质数。又用到了欧拉函数的另一个特点,即当p是质数的时候,φp = p - 1。所以有了上面给出的欧拉定理公式。
举例看一下:
计算15的欧拉函数,因为15比较小,我们可以直接看一下,小于15的正整数有 1、2、3、4、5、6、7、8、9、10、11、12、13、14。和15互质的数有1、2、4、7、8、11、13、14一共四个。
对照我们刚才的欧拉定理: 。
其他感兴趣的,大家可以自己验证。
之所以要在这里介绍欧拉函数,我们在计算公钥和私钥时候,会用到。
如果两个正整数m 和 n 互质,那么m 的 φn 次方减1,可以被n整除。
其中 .
其中当n为质数时,那么 上面看到的公式就变成了
mod n 1.
这个公式也就是着名的 费马小定理 了。
如果两个正整数e和x互为质数,那么一定存在一个整数d,不止一个,使得 e*d - 1 可以被x整除,即 e * d mode x 1。则称 d 是 e 相对于 x的模反元素。
了解了上面所讲的欧拉函数、欧拉定理和模反元素后,就要来一些化学反应了,请看图:
上面这幅图的公式变化有没有没看明白的,没看明白的咱们评论区见哈。
最终我们得到了最重要的第5个公式的变形,即红色箭头后面的:
mod n m。
其中有几个关系,需要搞明白,m 与 n 互为质数,φn = x,d 是e相对于x的模反元素。
有没有看到一些加解密的雏形。
从 m 到 m。 这中间涵盖了从加密到解密的整个过程,但是缺少了我们想要的密文整个过程。
OK,下面引入本文的第四个数学公式:
我们来看一下整个交换流程:
1、客户端有一个数字13,服务端有一个数字15;
2、客户端通过计算 3的13次方 对 17 取余,得到数字12; 将12发送给服务端;同时服务端通过计算3的15次方,对17取余,得到数字6,将6发送给客户端。至此,整个交换过程完成。
3、服务端收到数字12以后,继续计算,12的15次方 对 17取余,得到 数字10。
4、客户端收到数字 6以后,继续计算,6的13次方 对 17 取余,得到数字 10。
有没有发现双方,最终得到了相同的内容10。但是这个数字10从来没有在网络过程中出现过。
好,讲到这里,可能有些人已经恍然大悟,这就是加密过程了,但是也有人会产生疑问,为什么要取数字3 和 17 呢,这里还牵涉到另一个数学知识,原根的问题。即3是17的原根。看图
有没有发现规律,3的1~16次方,对17取余,得到的整数是从1~16。这时我们称3为17的原根。也就是说上面的计算过程中有一组原根的关系。这是最早的迪菲赫尔曼秘钥交换算法。
解决了为什么取3和17的问题后,下面继续来看最终的RSA是如何产生的:
还记得我们上面提到的欧拉定理吗,其中 m 与 n 互为质数,n为质数,d 是 e 相对于 φn的模反元素。
当迪菲赫尔曼密钥交换算法碰上欧拉定理会产生什么呢?
我们得到下面的推论:
好,到这里我们是不是已经看到了整个的加密和解密过程了。
其中 m 是明文;c 是密文; n 和 e 为公钥;d 和 n 为私钥 。
其中几组数字的关系一定要明确:
1、d是e 相对于 φn 的模反元素,φn = n-1,即 e * d mod n = 1.
2、m 小于 n,上面在讲迪菲赫尔曼密钥交换算法时,提到原根的问题,在RSA加密算法中,对m和n并没有原根条件的约束。只要满足m与n互为质数,n为质数,且m < n就可以了。
OK,上面就是RSA加密算法的原理了,经过上面几个数学公式的狂轰乱炸,是不是有点迷乱了,给大家一些时间理一下,后面会和大家一起来验证RSA算法以及RSA为什么安全。
⑷ 公钥密码→RSA详解
在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。用于解密的密钥必须被配送给接收者,这一问题称为 密钥配送问题 ,如果使用公钥密码,则无需向接收者配送用于解密的密钥,这样就解决了密钥配送问题。可以说公钥密码是密码学历史上最伟大的发明。
解决密钥配送问题的方法
在人数很多的情况下,通信所需要的密钥数量会增大,例如:1000名员工中每一个人都可以和另外999个进行通信,则每个人需要999个通信密钥,整个密钥数量:
1000 x 999 ÷ 2 = 499500
很不现实,因此此方法有一定的局限性
在Diffic-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,而这些信息即便被窃听者窃听到也没有问题(后续文章会进行详解)。
在对称密码中,加密密钥和解密密钥是相同的,但公钥密码中,加密密钥和解密密钥却是不同的。只要拥有加密密钥,任何人都可以加密,但没有解密密钥是无法解密的。
公钥密码中,密钥分为加密密钥(公钥)和解密密钥(私钥)两种。
公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对,由公钥进行加密的密文,必须使用与该公钥配对的私钥才能够解密。密钥对中的两个密钥之间具有非常密切的关系——数学上的关系——因此公钥和私钥是不能分别单独生成的。
发送者:Alice 接收者:Bob 窃听者:Eve
通信过程是由接收者Bob来启动的
公钥密码解决了密钥配送的问题,但依然面临着下面的问题
RSA是目前使用最广泛的公钥密码算法,名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的(Rivest-Shamir-Adleman)。RSA可以被使用公钥密码和数字签名(此文只针对公钥密码进行探讨,数字签名后续文章敬请期待)1983年在美国取得了专利,但现在该专利已经过期。
在RSA中,明文、密钥和密文都是数字,RSA加密过程可以用下列公式来表达
密文 = 明文 E mod N
简单的来说,RSA的密文是对代表明文的数字的 E 次方求mod N 的结果,换句话说:将明文和自己做 E 次乘法,然后将结果除以 N 求余数,这个余数就是密文。
RSA解密过程可以用下列公式来表达
明文 = 密文 D mod N
对表示密文的数字的 D 次方求mod N 就可以得到明文,换句话说:将密文和自己做 D 次乘法,在对其结果除以 N 求余数,就可以得到明文
此时使用的数字 N 和加密时使用的数字 N 是相同的,数 D 和数 N 组合起来就是RSA的解密密钥,因此 D 和 N 的组合就是私钥 。只要知道 D 和 N 两个数的人才能够完成解密的运算
根据加密和解密的公式可以看出,需要用到三个数—— E 、 D 和 N 求这三个数就是 生成密钥对 ,RSA密钥对的生成步骤如下:
准备两个很大的质数 p 和 q ,将这两个数相乘,结果就是 N
N = p x q
L 是 p-1 和 q-1 的最小公倍数,如果用lcm( X , Y )来表示 “ X 和 Y 的最小公倍数” 则L可以写成下列形式
L = lcm ( p - 1, q - 1)
E 是一个比1大、比 L 小的数。 E 和 L 的最大公约数必须为1,如果用gcd( X , Y )来表示 X 和 Y 的最大公约数,则 E 和 L 之间存在下列关系:
1 < E < L
gcd( E , L ) = 1 (是为了保证一定存在解密时需要使用的数 D )
1 < D < L
E x D mod L = 1
p = 17
q = 19
N = p x q = 17 x 19 = 323
L = lcm ( p - 1, q - 1) = lcm (16,18) = 144
gcd( E , L ) = 1
满足条件的 E 有很多:5,7,11,13,17,19,23,25,29,31...
这里选择5来作为 E ,到这里我们已经知道 E = 5 N = 323 这就是公钥
E x D mod L = 1
D = 29 可以满足上面的条件,因此:
公钥: E = 5 N = 323
私钥: D = 29 N = 323
要加密的明文必须是小于 N 的数,这是因为在加密运算中需要求 mod N 假设加密的明文是123
明文 E mod N = 123 5 mod 323 = 225(密文)
对密文225进行解密
密文 D mod N = 225 29 mod 323 = 225 10 x 225 10 x 225 9 mod 323 = (225 10 mod 323) x (225 10 mod 323) x (225 9 mod 323) = 16 x 16 x 191 mod 323 = 48896 mod 323 = 123(明文)
如果没有mod N 的话,即:
明文 = 密文 D mod N
通过密文求明文的难度不大,因为这可以看作是一个求对数的问题。
但是,加上mod N 之后,求明文就变成了求离散对数的问题,这是非常困难的,因为人类还没有发现求离散对数的高效算法。
只要知道 D ,就能够对密文进行解密,逐一尝试 D 来暴力破译RSA,暴力破解的难度会随着D的长度增加而加大,当 D 足够长时,就不能再现实的时间内通过暴力破解找出数 D
目前,RSA中所使用的 p 和 q 的长度都是1024比特以上, N 的长度为2048比特以上,由于 E 和 D 的长度可以和N差不多,因此要找出 D ,就需要进行2048比特以上的暴力破解。这样的长度下暴力破解找出 D 是极其困难的
E x D mod L = 1 L = lcm ( p - 1, q - 1)
由 E 计算 D 需要使用 p 和 q ,但是密码破译者并不知道 p 和 q
对于RSA来说,有一点非常重要,那就是 质数 p 和 q 不能被密码破译这知道 。把 p 和 q 交给密码破译者与把私钥交给密码破译者是等价的。
p 和 q 不能被密码破译者知道,但是 N = p x q 而且 N 是公开的, p 和 q 都是质数,因此由 N 求 p 和 q 只能通过 将 N 进行质因数分解 ,所以说:
一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译
这种方法虽然不能破译RSA,但却是一种针对机密性的有效攻击。
所谓中间人攻击,就是主动攻击者Mallory混入发送者和接收者的中间,对发送者伪装成接收者,对接收者伪装成发送者的攻击,在这里,Mallory就是“中间人”
这种攻击不仅针对RSA,而是可以针对任何公钥密码。在这个过程中,公钥密码并没有被破译,所有的密码算法也都正常工作并确保了机密性。然而,所谓的机密性并非在Alice和Bob之间,而是在Alice和Mallory之间,以及Mallory和Bob之间成立的。 仅靠公钥密码本身,是无法防御中间人攻击的。
要防御中间人攻击,还需要一种手段来确认所收到的公钥是否真的属于Bob,这种手段称为认证。在这种情况下,我们可以使用公钥的 证书 (后面会陆续更新文章来进行探讨)
网络上很多服务器在收到格式不正确的数据时都会向通信对象返回错误消息,并提示“这里的数据有问题”,然而,这种看似很贴心的设计却会让攻击者有机可乘。 攻击者可以向服务器反复发送自己生成的伪造密文,然后分析返回的错误消息和响应时间获得一些关于密钥和明文的信息。
为了抵御这种攻击,可以对密文进行“认证”,RSA-OAEP(最优非对称加密填充)正是基于这种思路设计的一种RSA改良算法。
RSA-OAEP在加密时会在明文前面填充一些认证信息,包括明文的散列值以及一定数量的0,然后用RSA进行加密,在解密的过程中,如果解密后的数据的开头没有找到正确的认证信息,则可以判定有问题,并返回固定的错误消息(重点是,不能将具体的错误内容告知开发者)
RSA-OAEP在实际应用中,还会通过随机数使得每次生成的密文呈现不同的排列方式,从而进一步提高安全性。
随着计算机技术的进步等,以前被认为是安全的密码会被破译,这一现象称为 密码劣化 ,针对这一点:
⑸ 密码学基础1:RSA算法原理全面解析
本节内容中可能用到的符号说明如下:
质数和合数: 质数是指除了平凡约数1和自身之外,没有其他约数的大于1的正整数。大于1的正整数中不是素数的则为合数。如 7、11 是质数,而 4、9 是合数。在 RSA 算法中主要用到了质数相关性质,质数可能是上帝留给人类的一把钥匙,许多数学定理和猜想都跟质数有关。
[定理1] 除法定理: 对任意整数 a 和 任意正整数 n,存在唯一的整数 q 和 r,满足 。其中, 称为除法的商,而 称为除法的余数。
整除: 在除法定理中,当余数 时,表示 a 能被 n 整除,或者说 a 是 n 的倍数,用符号 表示。
约数和倍数 : 对于整数 d 和 a,如果 ,且 ,则我们说 d 是 a 的约数,a 是 d 的倍数。
公约数: 对于整数 d,a,b,如果 d 是 a 的约数且 d 也是 b 的约数,则 d 是 a 和 b 的公约数。如 30 的约数有 1,2,3,5,6,10,15,30,而 24 的约数有 1,2,3,4,6,8,12,24,则 30 和 24 的公约数有 1,2,3,6。其中 1 是任意两个整数的公约数。
公约数的性质:
最大公约数: 两个整数最大的公约数称为最大公约数,用 来表示,如 30 和 24 的最大公约数是 6。 有一些显而易见的性质:
[定理2] 最大公约数定理: 如果 a 和 b 是不为0的整数,则 是 a 和 b 的线性组合集合 中的最小正元素。
由定理2可以得到一个推论:
[推论1] 对任意整数 a 和 b,如果 且 ,则 。
互质数: 如果两个整数 a 和 b 只有公因数 1,即 ,则我们就称这两个数是互质数(coprime)。比如 4 和 9 是互质数,但是 15 和 25 不是互质数。
互质数的性质:
欧几里得算法分为朴素欧几里得算法和扩展欧几里得算法,朴素法用于求两个数的最大公约数,而扩展的欧几里得算法则有更多广泛应用,如后面要提到的求一个数对特定模数的模逆元素等。
求两个非负整数的最大公约数最有名的是 辗转相除法,最早出现在伟大的数学家欧几里得在他的经典巨作《几何原本》中。辗转相除法算法求两个非负整数的最大公约数描述如下:
例如, ,在求解过程中,较大的数缩小,持续进行同样的计算可以不断缩小这两个数直至其中一个变成零。
欧几里得算法的python实现如下:
扩展欧几里得算法在 RSA 算法中求模反元素有很重要的应用,定义如下:
定义: 对于不全为 0 的非负整数 ,则必然存在整数对 ,使得
例如,a 为 3,b 为 8,则 。那么,必然存在整数对 ,满足 。简单计算可以得到 满足要求。
扩展欧几里得算法的python实现如下:
同余: 对于正整数 n 和 整数 a,b,如果满足 ,即 a-b 是 n 的倍数,则我们称 a 和 b 对模 n 同余,记号如下: 例如,因为 ,于是有 。
对于正整数 n,整数 ,如果 则我们可以得到如下性质:
譬如,因为 ,则可以推出 。
另外,若 p 和 q 互质,且 ,则可推出:
此外,模的四则运算还有如下一些性质,证明也比较简单,略去。
模逆元素: 对整数 a 和正整数 n,a 对模数 n 的模逆元素是指满足以下条件的整数 b。 a 对 模数 n 的 模逆元素不一定存在,a 对 模数 n 的模逆元素存在的充分必要条件是 a 和 n 互质,这个在后面我们会有证明。若模逆元素存在,也不是唯一的。例如 a=3,n=4,则 a 对模数 n 的模逆元素为 7 + 4k,即 7,11,15,...都是整数 3 对模数 4 的模逆元素。如果 a 和 n 不互质,如 a = 2,n = 4,则不存在模逆元素。
[推论2] 模逆元素存在的充分必要条件是整数 a 和 模数 n 互质。
[定理3] 唯一质数分解定理: 任何一个大于1的正整数 n 都可以 唯一分解 为一组质数的乘积,其中 都是自然数(包括0)。比如 6000 可以唯一分解为 。
由质数唯一分解定理可以得到一个推论: 质数有无穷多个 。
[定理4] 中国剩余定理(Chinese remainder theorem,CRT) ,最早见于《孙子算经》(中国南北朝数学着作,公元420-589年),叫物不知数问题,也叫韩信点兵问题。
翻译过来就是已知一个一元线性同余方程组求 x 的解:
宋朝着名数学家秦九韶在他的着作中给出了物不知数问题的解法,明朝的数学家程大位甚至编了一个《孙子歌诀》:
意思就是:将除以 3 的余数 2 乘以 70,将除以 5 的余数 3 乘以 21,将除以 7 的余数 2 乘以 15,最终将这三个数相加得到 。再将 233 除以 3,5,7 的最小公倍数 105 得到的余数 ,即为符合要求的最小正整数,实际上, 都符合要求。
物不知数问题解法本质
求解通项公式
中国剩余定理相当于给出了以下的一元线性同余方程组的有解的判定条件,并用构造法给出了解的具体形式。
模数 两两互质 ,则对任意的整数: ,方程组 有解,且解可以由如下构造方法得到:
并设 是除 以外的其他 个模数的乘积。
中国剩余定理通项公式证明
⑹ 用RSA对下列数据实现加密和解密:
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
用RSA对下列数据实现加密和解密:
a. p=3,q=11,e=7;M=5
b. p=7,q=11,e=3;M=9
解析:
拜托:老大,你的家庭作业也来问?
你自己学吧:下面是课文^
RSA加密算法
该算法于1977年由美国麻省理工学院MIT(Massachusetts Institute of Technology)的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adlernan命名为RSA算法。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。与Diffie-Hellman算法相比,RSA算法具有明显的优越性,因为它无须收发双方同时参与加密过程,且非常适合于电子函件系统的加密。
RSA算法可以表述如下:
(1) 密钥配制。假设m是想要传送的报文,现任选两个很大的质数p与q,使得:
(12-1);
选择正整数e,使得e与(p-1)(q-1)互质;这里(p-1)(q-1)表示二者相乘。再利用辗转相除法,求得d,使得:
(12-2);
其中x mod y是整数求余运算,其结果是x整除以y后剩余的余数,如5 mod 3 = 2。
这样得:
(e,n),是用于加密的公共密钥,可以公开出去;以及
(d,n),是用于解密的专用钥匙,必须保密。
(2) 加密过程。使用(e,n)对明文m进行加密,算法为:
(12-3);
这里的c即是m加密后的密文。
(3) 解密过程。使用(d,n)对密文c进行解密,算法为:
(12-4);
求得的m即为对应于密文c的明文。
RSA算法实现起来十分简捷,据说英国的一位程序员只塌仔用了3行Perl程序便实现了加密和解密运算。
RSA算法建立在正整数求余运算基础之上,同时还保持了指数运算的性质,这一点我们不难证明。例如:
(12-5);
(12-6)。
RSA公共密钥加密算法的核心是欧拉(Euler)函数ψ。对于正整数n,ψ(n)定义为小于n且与n互质的正整数的个数。例如ψ(6) = 2,这是因为小于6且与6互质的数有1和5共两个数;再如ψ(7) = 6,这是因为互质数有1,2,3,5,6共6个。
欧拉在公元前300多年就发现了ψ函数的一个十分有趣的性质,那就是对于任意小于n且与n互质的正整数m,总有mψ(n) mod n = 1。例如,5ψ(6) mod 6 = 52 mod 6= 25 mod 6 =1。也就是说,在对n求余的运算下,ψ(n)指数具有周期性。
当n很小时,计算ψ(n)并不难,使用穷举法即可求出;但当n很大时,计算ψ(n)就十分困难了,其运算量与判断n是否为质数的情况相当。不过在特殊情况下,利用ψ函数的两个性质,可以极大地减少运算量。
性质1:如果p是质数,则ψ(p) = (p-1)。
性质2:如果p与q均为质数,则ψ(p·q) = ψ(p)·ψ(q) = (p-1)(q-1)。
RSA算法正是注意到这两条性质来设计公共密钥加密系统的,p与q的乘积n可以作为公共密钥公布出来,而n的因子p和q则包含在专用密钥中,可以用来解密。如果解密需要用到ψ(n),衡桐收信方由于知道因子p和q,可以方便地算出ψ(n) = (p-咐衫坦1)(q-1)。如果窃听者窃得了n,但由于不知道它的因子p与q,则很难求出ψ(n)。这时,窃听者要么强行算出ψ(n),要么对n进行因数分解求得p与q。然而,我们知道,在大数范围内作合数分解是十分困难的,因此窃密者很难成功。
有了关于ψ函数的认识,我们再来分析RSA算法的工作原理:
(1) 密钥配制。设m是要加密的信息,任选两个大质数p与q,使得 ;选择正整数e,使得e与ψ(n) = (p-1)(q-1)互质。
利用辗转相除法,计算d,使得ed mod ψ(n) = ,即ed = kψ(n) +1,其中k为某一正整数。
公共密钥为(e,n),其中没有包含任何有关n的因子p和q的信息。
专用密钥为(d,n),其中d隐含有因子p和q的信息。
(2) 加密过程。使用公式(12-3)对明文m进行加密,得密文c。
(3) 解密过程。使用(d,n)对密文c进行解密,计算过程为:
cd mod n = (me mod n)d mod n
= med mod n
= m(kψ(n) + 1) mod n
= (mkψ(n) mod n)·(m mod n)
= m
m即为从密文c中恢复出来的明文。
例如,假设我们需要加密的明文代码信息为m = 14,则:
选择e = 3,p = 5,q = 11;
计算出n = p·q = 55,(p-1)(q-1) = 40,d = 27;
可以验证:(e·d) mod (p-1)(q-1) = 81 mod 40 = 1;
加密:c = me mod n = 143 mod 55 = 49;
解密:m = cd mod n = 4927 mod 55 = 14。
关于RSA算法,还有几点需要进一步说明:
(1) 之所以要求e与(p-1)(q-1)互质,是为了保证 ed mod (p-1)(q-1)有解。
(2) 实际操作时,通常先选定e,再找出并确定质数p和q,使得计算出d后它们能满足公式(12-3)。常用的e有3和65537,这两个数都是费马序列中的数。费马序列是以17世纪法国数学家费马命名的序列。
(3) 破密者主要通过将n分解成p·q的办法来解密,不过目前还没有办法证明这是唯一的办法,也可能有更有效的方法,因为因数分解问题毕竟是一个不断发展的领域,自从RSA算法发明以来,人们已经发现了不少有效的因数分解方法,在一定程度上降低了破译RSA算法的难度,但至今还没有出现动摇RSA算法根基的方法。
(4) 在RSA算法中,n的长度是控制该算法可靠性的重要因素。目前129位、甚至155位的RSA加密勉强可解,但目前大多数加密程序均采用231、308甚至616位的RSA算法,因此RSA加密还是相当安全的。
据专家测算,攻破512位密钥RSA算法大约需要8个月时间;而一个768位密钥RSA算法在2004年之前无法攻破。现在,在技术上还无法预测攻破具有2048位密钥的RSA加密算法需要多少时间。美国Lotus公司悬赏1亿美元,奖励能破译其Domino产品中1024位密钥的RSA算法的人。从这个意义上说,遵照SET协议开发的电子商务系统是绝对安全的。
⑺ RSA 加密算法主要公式 - 草稿
从一道计算题开始了解 RSA 非对称加密算法的轮裤主要公式。
下面是一道关于 RSA 计察桐卖算的问题,比较简单,从这道题来学习和了解关于 RSA 非对称加密算法的相关知识,当然,具体关于 RSA 加密算法的知识不能仅限于以下问题,应该更全面的了解相关的知识。败逗但是下面的问题已经把其中的重点算法的表现出来了。
下面是关于 RSA 的主要数学公式:
n = p * q
ø(n) = (p - 1) * (q - 1)
ed ≡ 1 mod ø(n)
c = m e mod n
m = c d mod n
其中两个 ** 是次方的意思
ed ≡ 1 mod ø(n)
3 * 7 ≡ 1 mod ø(n)
21 ≡ 1 mod ø(n)
ø(n) = 20
ø(n) = 2 * 10 = (p - 1) * (q - 1)
p, q = 3, 11
n = p * q = 3 * 11 = 3
c = m**e mod n = 6 ** 3 mod 33
6 ** 3
3 = 1 * (2 ** 0) + 1 * (2 ** 1)
t0 = 6 mod 33 = 6
t1 = 6 ** 2 mod 33 = 3
t0 * t1 mod n = 6 * 3 mod 33 = 18
因此 明文 6 的密文是 18
m = c ** d mod n = 18 ** 7 mod 33
t0 = 18 mod 33 = 18
t1 = 18 ** 2 mod 33 = 27
t2 = 27 ** 2 mod 33 = 3
t0 * t1 * t2 mod n = 18 * 27 * 3 mod 33 = 6
因此,密文 18 解密后是 6
⑻ 求解计算RSA算法加密的步骤。 用RSA算法加密时,已知公钥是(e=7,n=20)...
加密时用公钥d,解密时用私钥e
公式都一样
要加密或解密的数字做e次方或d次方,得到的数字再和n进行模运算,模运算就是求余数
拿你给的数据来算的话就是
3的7次方等于2187,2187除以20等于109,余数是7
所以得到的密文就是7
解密就是算7的3次方343,343除以20等于340余数3,于是我们又得回原来的明文3了
⑼ rsa加密原理 RSA加密算法原理是什么
1、首先要使用概率算法来验证随机产生的大的整数是否是质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。
2、除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。
3、此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生悉渗随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。
4、此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d<n^(1 n的某一碧猛个渐进分数的分母(这个算法的原理是利用n="pq来逼近phi:=(p-1)(q-1),而算法要求d*e除悔陆桥以phi的余数是1,所以de=kphi+1,e/phi=k/d+1/phi,这说明了e/phi与k/d近似相等,从而可以通过e/N的渐进分数来寻找d(当然更多的,我们也可以更好地估计phi来获得一个更好的估计,但对通常情况(e=65537),RSA算法仍然是安全的))。
5、最后,RSA的原理保证了d和e必须与(p-1)(q-1)的因子互素,因此d,e都不可能为
⑽ 一个RSA算法的加密运算,需要完整的演算过程。
我来回答你可以闭帖了,呵呵
看你题目的意思就是打算把republic这个词按照你的方法装换成数字例如是:X
p=3,q=11
n=p*q=33
t=(p-1)*(q-1)=20
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
我们可以取e=7
要求d*e%t==1(D*e除以t取余等于1),我们可以找到D=3
此时我们就有了三个数
n=33
d=3 公钥
e=7 私钥
设消息为数M (M <n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
我们可以对republic词按照你的方法装换成数字:X一位一位的加密。
加入X的第一位是6(别的同理)
则:M = 6
加密时:(c为加密后的数字)
c=(M**d)%n=(6^3)%33=216%33=18(商6余18),则6加密后就是18了
解密时:
设m=(c**e)%n则 m == M,
(18^7)%33=612220032%33=6(商18552122余6)
到此加密解密完成。
至于怎么把republic装换成X,把X装分成多少部分进行分批加密,你可以自己决定。但是加密的数字M 需要小于n
如果需要给你写个程序,留个Email,我空的时候写个发给你。
我个人给你个方法,因为n=33 >26(26个英文字母),所以可以把republic分成一个字母一个字母的加密。
按你的分发 REP 就分成数字
18 05 16
加密
(18^3)%33=5832%33= 24
(05^3)%33=125%33= 26
(16^3)%33=%33= 4
所以加密后就是
24 26 04 转换成字母就是 XZD
解密
(24^7)%33=4586471424%33=18
(26^7)%33=8031810176%33=05
(4^7)%33=16384%33=16
又变成 18 05 16 转换成字母就是 REP
是不是很简单啊~~
我如果不懂。空间里面有片文章,你可以看看,就知道我上面讲的那些是什么意思了。
RSA算法举例说明
http://hi..com/lsgo/blog/item/5fd0da24d495666834a80fb8.html