rsa算法的理论基础
① rsa加密和解密的理论依据是什么
以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我无关。但是,看了很多关于RSA加密算法原理的资料之后,我发现其实原理并不是我们想象中那么复杂,弄懂之后发现原来就只是这样而已..
学过算法的朋友都知道,计算机中的算法其实就是数学运算。所以,再讲解RSA加密算法之前,有必要了解一下一些必备的数学知识。我们就从数学知识开始讲解。
必备数学知识
RSA加密算法中,只用到素数、互质数、指数运算、模运算等几个简单的数学知识。所以,我们也需要了解这几个概念即可。
素数
素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。这个概念,我们在上初中,甚至小学的时候都学过了,这里就不再过多解释了。
互质数
网络上的解释是:公因数只有1的两个数,叫做互质数。;维基网络上的解释是:互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。
常见的互质数判断方法主要有以下几种:
两个不同的质数一定是互质数。例如,2与7、13与19。
一个质数,另一个不为它的倍数,这两个数为互质数。例如,3与10、5与 26。
相邻的两个自然数是互质数。如 15与 16。
相邻的两个奇数是互质数。如 49与 51。
较大数是质数的两个数是互质数。如97与88。
小数是质数,大数不是小数的倍数的两个数是互质数。例如 7和 16。
2和任何奇数是互质数。例如2和87。
1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
辗转相除法。
指数运算
指数运算又称乘方计算,计算结果称为幂。nm指将n自乘m次。把nm看作乘方的结果,叫做”n的m次幂”或”n的m次方”。其中,n称为“底数”,m称为“指数”。
模运算
模运算即求余运算。“模”是“Mod”的音译。和模运算紧密相关的一个概念是“同余”。数学上,当两个整数除以同一个正整数,若得相同余数,则二整数同余。
两个整数a,b,若它们除以正整数m所得的余数相等,则称a,b对于模m同余,记作: a ≡ b (mod m);读作:a同余于b模m,或者,a与b关于模m同余。例如:26 ≡ 14 (mod 12)。
RSA加密算法
RSA加密算法简史
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
公钥与密钥的产生
假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:
随意选择两个大的质数p和q,p不等于q,计算N=pq。
根据欧拉函数,求得r = (p-1)(q-1)
选择一个小于 r 的整数 e,求得 e 关于模 r 的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)
将 p 和 q 的记录销毁。
(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
加密消息
假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:
ne ≡ c (mod N)
计算c并不复杂。Bob算出c后就可以将它传递给Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
cd ≡ n (mod N)
得到n后,她可以将原来的信息m重新复原。
解码的原理是:
cd ≡ n e·d(mod N)
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由费马小定理可证明(因为p和q是质数)
n e·d ≡ n (mod p) 和 n e·d ≡ n (mod q)
这说明(因为p和q是不同的质数,所以p和q互质)
n e·d ≡ n (mod pq)
签名消息
RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。
RSA加密算法的安全性
当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法。(即依赖于分解大整数困难性的加密算法)
另外,假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。1997年后开发的系统,用户应使用1024位密钥,证书认证机构应用2048位或以上。
RSA加密算法的缺点
虽然RSA加密算法作为目前最优秀的公钥方案之一,在发表三十多年的时间里,经历了各种攻击的考验,逐渐为人们接受。但是,也不是说RSA没有任何缺点。由于没有从理论上证明破译RSA的难度与大数分解难度的等价性。所以,RSA的重大缺陷是无法从理论上把握它的保密性能如何。在实践上,RSA也有一些缺点:
产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密;
分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,。
② 密码学基础(三):非对称加密(RSA算法原理)
加密和解密使用的是两个不同的秘钥,这种算法叫做非对称加密。非对称加密又称为公钥加密,RSA只是公钥加密的一种。
现实生活中有签名,互联网中也存在签名。签名的作用有两个,一个是身份验证,一个是数据完整性验证。数字签名通过摘要算法来确保接收到的数据没有被篡改,再通过签名者的私钥加密,只能使用对应的公钥解密,以此来保证身份的一致性。
数字证书是将个人信息和数字签名放到一起,经由CA机构的私钥加密之后生成。当然,不经过CA机构,由自己完成签名的证书称为自签名证书。CA机构作为互联网密码体系中的基础机构,拥有相当高级的安全防范能力,所有的证书体系中的基本假设或者前提就是CA机构的私钥不被窃取,一旦 CA J机构出事,整个信息链将不再安全。
CA证书的生成过程如下:
证书参与信息传递完成加密和解密的过程如下:
互质关系:互质是公约数只有1的两个整数,1和1互质,13和13就不互质了。
欧拉函数:表示任意给定正整数 n,在小于等于n的正整数之中,有多少个与 n 构成互质关系,其表达式为:
其中,若P为质数,则其表达式可以简写为:
情况一:φ(1)=1
1和任何数都互质,所以φ(1)=1;
情况二:n 是质数, φ(n)=n-1
因为 n 是质数,所以和小于自己的所有数都是互质关系,所以φ(n)=n-1;
情况三:如果 n 是质数的某一个次方,即 n = p^k ( p 为质数,k 为大于等于1的整数),则φ(n)=(p-1)p^(k-1)
因为 p 为质数,所以除了 p 的倍数之外,小于 n 的所有数都是 n 的质数;
情况四:如果 n 可以分解成两个互质的整数之积,n = p1 × p2,则φ(n) = φ(p1p2) = φ(p1)φ(p2)
情况五:基于情况四,如果 p1 和 p2 都是质数,且 n=p1 × p2,则φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)
而 RSA 算法的基本原理就是欧拉函数中的第五种情况,即: φ(n)=(p1-1)(p2-1);
如果两个正整数 a 和 n 互质,那么一定可以找到整数 b,使得 ab-1 被 n 整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。欧拉定理可以用来证明模反元素必然存在。
可以看到,a的 φ(n)-1 次方,就是a对模数n的模反元素。
n=p x q = 3233,3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。
在实际使用中,一般场景下选择1024位长度的数字,更高安全要求的场景下,选择2048位的数字,这里作为演示,选取p=61和q=53;
因为n、p、q都为质数,所以φ(n) = (p-1)(q-1)=60×52= 3120
注意,这里是和φ(n) 互互质而不是n!假设选择的值是17,即 e=17;
模反元素就是指有一个整数 d,可以使得 ed 被 φ(n) 除的余数为1。表示为:(ed-1)=φ(n) y --> 17d=3120y+1,算出一组解为(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。
注意,这里不能选择3119,否则公私钥相同??
公钥:(n,e)=(3233,2753)
私钥:(n,d)=(3233,17)
公钥是公开的,也就是说m=p*q=3233是公开的,那么怎么求e被?e是通过模反函数求得,17d=3120y+1,e是公开的等于17,这时候想要求d就要知道3120,也就是φ(n),也就是φ(3233),说白了,3233是公开的,你能对3233进行因数分解,你就能知道d,也就能破解私钥。
正常情况下,3233我们可以因数分解为61*53,但是对于很大的数字,人类只能通过枚举的方法来因数分解,所以RSA安全性的本质就是:对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
人类已经分解的最大整数是:
这个人类已经分解的最大整数为232个十进制位,768个二进制位,比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。所以实际使用中的1024位秘钥基本安全,2048位秘钥绝对安全。
网上有个段子:
已经得出公私钥的组成:
公钥:(n,e)=(3233,2753)
私钥:(n,d)=(3233,17)
加密的过程就是
解密过程如下:
其中 m 是要被加密的数字,c 是加密之后输出的结果,且 m < n ,其中解密过程一定成立可以证明的,这里省略证明过程。
总而言之,RSA的加密就是使用模反函数对数字进行加密和求解过程,在实际使用中因为 m < n必须成立,所以就有两种加密方法:
对称加密存在虽然快速,但是存在致命的缺点就是秘钥需要传递。非对称加密虽然不需要传递秘钥就可以完成加密和解密,但是其致命缺点是速度不够快,不能用于高频率,高容量的加密场景。所以才有了两者的互补关系,在传递对称加密的秘钥时采用非对称加密,完成秘钥传送之后采用对称加密,如此就可以完美互补。
③ 密码学基础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算法建立的理论基础是大数分解和素数检测 。
RSA是1977年由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
(4)rsa算法的理论基础扩展阅读:
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了着名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式。