最近自己捋顺了一遍RSA加密,记录一下。
RSA是一种非对称**加密算法
RSA由两条数学原理组成:模幂计算与欧拉函数(欧几里得证明)
(本文会直接而用这两条,烦请读者自行百度)
首先我们讲RSA加密的流程:
1.A随机选择两个不相等的质数p和q,值为61和53,乘积为n = 61×53 = 3233。

即:n = p×q………………………………式1;
2.计算n的欧拉函数φ(n)。
φ(3233)=60×52=3120。

即:φ(n) = (p-1)(q-1)…………………………式2;
3.随机选择一个整数e,也就是公钥当中用来加密的那个数字
条件是1< e < φ(n),且e与φ(n) 互质。
A随机选择了17

即:1< e < φ(n)…………………………不是式子;
4.计算e对于φ(n)的模反元素d。
也就是**当中用来解密的那个数字,所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。ed mod φ(n)=1
A找到了2753,即17*2753 mode 3120 = 1

即:ed mod φ(n)=1…………………………式3;

5.将n和e封装成公钥,n和d封装成私钥。

即:A的公钥:(n,e)
私钥:(n,d)(实质是(p,q,d))
好我们总结一下RSA算法的已知量RSA加密详解
A将公钥(n,e)传递给B,并告诉B要用RSA这种算法加密。
B对要传递给A的信息进行加密RSA加密:
首先对明文进行比特串分组,使得每个分组对应的十进制数小于n,然后依次对每个分组m做一次加密
m^e mod n=c;
其中原信息是m 加密变成c进行传递。
RSA解密:
在已经知道n,e,c的情况下**m很难,试着将我们的例子带入一下:
m^17 mod 3120= 1536。
这里我m取了一个随机值,大家可以尝试着求一下,文章末尾给出m的值,如果暴力**的话 (3120*x+1536)=m^17,这里涉及到三层循环 x一层,m一层,m^17次方一层。
正常解密是这样的:
c^d mod n=m;
我之前一直疑惑的是为什么会直接得出这个m。以下是推导:RSA加密详解
为什么安全?
第三方知道的信息:n(公钥) e(公钥) c(密文)
还有这个算法的解法:
n = p×q………………………………式1;
φ(n) = (p-1)(q-1)………………………………式2;
ed mod φ(n)=1………………………………式3;
m^e mod n=c;………………………………式4;
c^d mod n=m;………………………………式5;
要想求得m必须从式子4或5入手:
1.通过式4爆搜,上面我取的m值为6,只是个位数,如果位数增加算不出来的。
2.通过式5求d→通过式3求φ(n)→通过式1求pq→求解大数的质因数
随着pq的位数增长,目前的计算机算力不太现实(有一种空间换时间的方案:彩虹表,只是靠概率碰撞,而且最大也没有多少个G)。

由于小白非密码学专业只是个人兴趣欢迎大佬补充与纠错。
参考链接:
https://www.jianshu.com/p/ff2b538a77e2
https://baijiahao.baidu.com/s?id=1623529588468077807&wfr=spider&for=pc

相关文章: