RSA加密整理

RSA是什么:
RSA加密算法是一种非对称加密算法

核心:
对两个质数相乘容易,而将其合数分解很难的这个特点进行的加密算法;

  1. n=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难。
  2. (m^e) mod n=c,已知m、e、n求c简单,已知e、n、c求m很难

RSA加密实现了公开密钥,非对称加密才能有这种特点;

对称加密算法:加密和解密使用同一套规则。例如:甲使用规则(密钥)A加密明文后传递给乙,乙通过规则A的逆运算完成密文解密,得到明文;

非对称加密算法:可以在不传递密钥的情况下,完成解密。假如甲要和乙通讯,甲使用公钥 A 加密,将密文传递给乙,乙使用私钥 B 解密得到明文。其中公钥在网络上传递,私钥只有乙自己拥有,不在网络上传递,这样即使知道了公钥 A 也无法解密。这被称为 Diffie-Hellman密钥交换算法

RSA算法过程(参考):
第一步,生成密钥对,即公钥和私钥;
1.随机找两个质数 P 和 Q ,并计算他们的乘积;P 与 Q 越大,越安全;
比如 P = 67 ,Q = 71。
计算他们的乘积 n = P * Q = 4757 ,转化为二进为 1001010010101,该加密算法即为 13 位,实际算法是 1024 位 或 2048 位,位数越长,算法越难被破解。

2.计算 n 的欧拉函数 φ(n)
φ(n):表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数
例如:在 1 到 8 之中,与 8 形成互质关系的是1、3、5、7,所以 φ(n) = 4;
因为 n = P * Q,P 与 Q 均为质数,则 φ(n) = φ(P * Q)= φ(P - 1)φ(Q - 1) = (P - 1)(Q - 1) 。 本例中 φ(n) = 66 * 70 = 4620,这里记为 m, m = φ(n) = 4620

3.随机选择一个整数 e,条件:是1< e < m,且 e 与 m 互质。
公约数只有 1 的两个整数,叫做互质整数,这里我们随机选择 e = 101 请注意不要选择 4619,如果选这个,则公钥和私钥将变得相同。

4.有一个整数 d,可以使得 e*d 除以 m 的余数为 1。
即找一个整数 d,使得 (e * d ) % m = 1。 等价于 e * d - 1 = y * m ( y 为整数) 找到 d ,实质就是对下面二元一次方程求解。 e * x - m * y =1 ,其中 e = 101,m = 4620 101x - 4620y =1 这个方程可以用"扩展欧几里得算法"求解,此处省略具体过程。 总之算出一组整数解(x,y )= ( 1601,35),即 d = 1601。 到此密钥对生成完毕。不同的 e 生成不同的 d,因此可以生成多个密钥对。
本例中
公钥为 (n,e) = (4757 , 101)
私钥为 (n,d) = (4757 ,1601) ,仅(n,e) = (4757 , 101) 是公开的,其余数字均不公开。可以想像如果只有 n 和 e,如何推导出 d,目前只能靠暴力破解,位数越长,暴力破解的时间越长。
到此,公钥和私钥生成;

第二步,加密生成密文 ;

甲向乙传输秘密信息,
明文为:“中”;
甲用公钥对明文进行加密,
加密方式,
先把“中”通过编码(utf-8、unicode)转化为数字。
中—utf8 [e4 b8 ad]- --10 进制为 [228,184,173]
使用公钥 (n,e) = (4757 , 101)加密;
a 为明文,b 为密文,则按下列公式计算
a^e % n = b
计算 [228,184,173]的密文:
228^101 % 4757 = 4296
184^101 % 4757 = 2458
173^101 % 4757 = 3263
[228,184,173]加密后得到密文 [4296,2458,3263]

乙用私钥对密文进行解密,
解密公式如下: a 为明文,b 为密文,则按下列公式计算
b^d % n = a
密文 [4296,2458,3263]的明文如下:
4296^1601% 4757 = 228
2458^1601% 4757 = 184
3263^1601% 4757 = 173
即密文 [4296,2458,3263] 解密后得到 [228,184,173] 将[228,184,173] 再按 utf-8 解码为汉字 “中”,至此解密完毕。

术语、公式、变量整理:
P、Q:两个非常大的质数:
n:P和Q的乘积,n=PQ;
m:n欧拉函数,因为n=P
Q,且P、Q为质数,所以m=n=(P-1)*(Q-1);
e : 条件:是1< e < m,且 e 与 m 互质,随机选取一个符合条件的e值;
d: 寻找一个整数d,满足:(e * d )% m = 1
公钥:(n,e)
私钥:(n,d)
公钥加密方式: a^e % n = b
私钥解密方式:b^d % n = a
欧拉函数 φ(n):表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数

e是可以随机选取的,但是在应用中时常选择e=65537

问题:从公钥推出私钥有没有可能?
回顾上面的密钥生成步骤,一共出现六个数字:
p
q
n
m= φ(n)
e
d
那么已知,n、e是否能推出d?
过程如下:
d的产生过程如下,
(e * d )% m = 1
现知道e,要想知道d,必先知道m,
m=φ(n)=(P-1)*(Q-1)
故,如何知道P、Q则能知道d的值,
得到PQ的唯一办法:对n进行因数分解;
大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法,此保证了该RSA算法的可靠性

私钥解密的证明
因为私钥解密的过程并不是公钥加密的逆过程,那么,必须证明我们用这样的私钥进行解密,得到的m为什么是正确的;
证明过程

实际使用时,为什么生成的公钥和私钥分别都是一个字符串文本,一个文本是以什么格式存储两个数字的信息的?

实际使用时,为什么同样的明文会加密得到不同的密文?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值