❶ RSA密码算法
题目很简单,出现这种问题证明你要好好看下数论了。特别是欧拉定理。根据数论,若x与y互为素数,则x^-1 mod y存在唯一整数解。由此,告诉你一种简洁的求d的方法,该法是根据模的逆运算的原始定义求解,即:ed=k(p-1)(q-1)+1 式中d和k都是整数。因为e与(p-1)(q-1)互为素数,所以存在唯一整数解。这样可以通过搜索法找到d。
由上题:e=5, (p-1)(q-1)=96
带入公式试值得:5d=96*k+1 k=4,d=77 (k与d同时为整数)
c的求法:
由15^5mod119=(((15^2mod119)^2mod119)*15)mod119=36
以上全是手算,当然还可以用计算器,有mod功能的,太简单了。
希望我的回答对你有帮助。
别这么说,什么菜不菜的,大家一起讨论。
mod就是求余,比如:7mod2=1,就是7/2余1
公式:余数=|被除数-商*除数|
❷ 密码学基础(三):非对称加密(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必须成立,所以就有两种加密方法:
对称加密存在虽然快速,但是存在致命的缺点就是秘钥需要传递。非对称加密虽然不需要传递秘钥就可以完成加密和解密,但是其致命缺点是速度不够快,不能用于高频率,高容量的加密场景。所以才有了两者的互补关系,在传递对称加密的秘钥时采用非对称加密,完成秘钥传送之后采用对称加密,如此就可以完美互补。
❸ RSA算法详解
总括: 本文详细讲述了RSA算法详解,包括内部使用数学原理以及产生的过程。
相濡以沫。到底需要爱淡如水。
之前写过一篇文章 SSL协议之数据加密过程 ,里面详细讲述了数据加密的过程以及需要的算法。SSL协议很巧妙的利用对称加密和非对称加密两种算法来对数据进行加密。这篇文章主要是针对一种最常见的非对称加密算法——RSA算法进行讲解。其实也就是对私钥和公钥产生的一种方式进行描述。首先先来了解下这个算法的历史:
RSA是1977年由 罗纳德·李维斯特 (Ron Rivest)、 阿迪·萨莫尔 (Adi Shamir)和 伦纳德·阿德曼 (Leonard Adleman)一起提出的。当时他们三人都在 麻省理工学院 工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
但实际上,在1973年,在英国政府通讯总部工作的数学家 克利福德·柯克斯 (Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。
所以谁是RSA算法的发明人呢?不好说,就好像贝尔并不是第一个发明电话的人但大家都记住的是贝尔一样,这个地方我们作为旁观者倒不用较真,重要的是这个算法的内容:
RSA算法用到的数学知识特别多,所以在中间介绍这个算法生成私钥和公钥的过程中会穿插一些数学知识。生成步骤如下:
随意选择两个大的质数p和q,p不等于q,计算N=p*q;
什么是质数?我想可能会有一部分人已经忘记了,定义如下:
比如2,3,5,7这些都是质数,9就不是了,因为3*3=9了
r = φ(N) = φ(p)φ(q) = (p-1)(q-1) 。
这里的数学概念就是什么是欧拉函数了,什么是欧拉函数呢?
欧拉函数 的定义:
互质 的定义:
例如: φ(8) = 4 ,因为 1,3,5,7 均和 8 互质。
推导欧拉函数:
(1)如果 n = 1 , φ(1) = 1 ;(小于等于1的正整数中唯一和1互质的数就是1本身);
(2)如果 n 为质数, φ(n) = n - 1 ;因为质数和每一个比它小的数字都互质。比如5,比它小的正整数1,2,3,4都和他互质;
(3) 如果 n 是 a 的 k 次幂,则 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1) ;
(4) 若 m , n 互质,则 φ(mn) = φ(m)φ(n)
证明: 设 A , B , C 是跟 m , n , mn 互质的数的集,据 中国剩余定理 (经常看数学典故的童鞋应该了解,剩余定理又叫韩信点兵,也叫孙子定理), A * B 和 C 可建立双射一一对应)的关系。(或者也可以从初等代数角度给出 欧拉函数积性的简单证明 ) 因此的φ(n)值使用 算术基本定理 便知。(来自维基网络)
选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为 d ( ed = 1(mod r) 模反元素存在,当且仅当e与r互质), e 我们通常取65537。
模反元素:
比如 3 和 5 互质, 3 关于 5 的模反元素就可能是2,因为 3*2-1=5 可以被5整除。所以很明显模反元素不止一个,2加减5的整数倍都是3关于5的模反元素 {...-3, 2,7,12…} 放在公式里就是 3*2 = 1 (mod 5)
上面所提到的欧拉函数用处实际上在于欧拉定理:
欧拉定理:
欧拉定理就可以用来证明模反元素必然存在。
由模反元素的定义和欧拉定理我们知道, a 的 φ(n) 次方减去1,可以被n整除。比如,3和5互质,而 5 的欧拉函数 φ(5) 等于4,所以 3 的 4 次方 (81) 减去1,可以被 5 整除( 80/5=16 )。
小费马定理:
此时我们的 (N , e) 是公钥, (N, d) 为私钥,爱丽丝会把公钥 (N, e) 传给鲍勃,然后将 (N, d) 自己藏起来。一对公钥和私钥就产生了,然后具体的使用方法呢?请看: SSL协议之数据加密过程详解
我们知道像RSA这种非对称加密算法很安全,那么到底为啥子安全呢?
我们来看看上面这几个过程产生的几个数字:
N 和 e 我们都会公开使用,最为重要的就是私钥中的 d , d 一旦泄露,加密也就失去了意义。那么得到d的过程是如何的呢?如下:
所以得出了在上篇博客说到的结论,非对称加密的原理:
将a和b相乘得出乘积c很容易,但要是想要通过乘积c推导出a和b极难。即对一个大数进行因式分解极难
目前公开破译的位数是768位,实际使用一般是1024位或是2048位,所以理论上特别的安全。
RSA算法的核心就是欧拉定理,根据它我们才能得到私钥,从而保证整个通信的安全。