RSA加密算法及使用公私钥实现数字签名

一, 传统对称加密算法

传统的对称密码算法可以有效地保护小范围内的点对点传输数据的机密性,但是在参与通信的节点数量增多后,密钥管理成为了瓶颈问题。
凯撒密码
在密码学中,恺撒密码,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
在这里插入图片描述
对称加密算法是应用较早的加密算法。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

二,非对称加密算法

在这里插入图片描述
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

三,RSA加密算法

RSA算法是一种非对称密码算法,通常是先生成一对RSA 密钥,其中之一是保密密钥(SK),由用户保存;另一个为公开密钥(PK),可对外公开,甚至可在网络服务器中注册,加密算法和解密算法也是公开的。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位,RSA密钥长度随着保密级别提高,且增加很快。但这会使加密的计算量增大,于是为减少计算量,在传送信息时常采用传统加密方法与公开密钥加密方法相结合的方式。

为了具体了解RSA算法,我们先熟悉下列简单的数学概念:

  1. 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
  2. 互质是公约数只有1的两个整数,叫做互质整数。
  3. 模运算,即求余运算,如5%2=1。
  4. 同余式:正整数a,b对p取模,它们的余数相同,记做 或者a ≡ b (mod p)。
  5. 欧拉函数:对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。为了更直观地知晓原理,这里只说明欧拉函数的特殊情况,即如果n可以分解成两个互质的整数之积,即 n = p *q(其中p,q均为质数) ,则φ(n) = φ(p * q) = φ( p)*φ(q)=(p-1)(q-1)

密钥的生成步骤
在这里插入图片描述
举例讲解RSA算法的加密,解密过程:

1.小明随机选择两个不相等质数,例如61和53(即p=61,q=53)
2. 小明计算出p* q得值,即n=61*53=3233。
3. 小明计算出φ(3233)=60**52,即φ(n)=3120
4. 小明在1到3120之间,选择一个随机数,假设为17,即公钥e=17
5. 小明算出e对于φ(n)的模反元素d为私钥,d=2753
ps:
在这里插入图片描述
6. 至此,公钥为(3233,17),私钥为(3233,2753)

利用公钥,私钥进行密文传递:
1.发送时:
在这里插入图片描述
其中m为待发的信息,即将待发送消息m经过公钥和上述表达式转换后得到c,发送c,即发送的密文c=m^e%φ(n)

2.接收时:
在这里插入图片描述
把收到的消息c利用私钥转换过来,得到实际消息m,即m=c^e%φ(n)

注意
m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。此外,也可用私钥加密,公钥解密,这在下文会有详细说明

下面根据具体实例模拟下密文的传递过程:
1.假设小明想要发送的密文为m=12
2.随后小明随机选取互质的两数p=3,q=5,则n=15, φ(n)=(3-1)*(5-1)=8
3.在1~8中随机选取一个与8互质的数作为公钥e,假设小明选取了e=3,则(15, 3)为公钥
4.那么根据e *d%8=1,可以算出d=19,则(15,3)为公钥,(15,19)为私钥
5.加密时:
实际发送出去的密文为:12^3%15=3
7. 解密时:
收到密文内容为3后,解密文: 3^19%15=12

四,RSA加密算法安全性分析

这里有的同学就有疑问了,既然n都已经公开了那么求φ(n)不是易如反掌吗,我随手就能说几个, φ(35)=24 ,φ(21)=12…,但是这是在n很小的情况下,倘若n很大呢,你还可以易如反掌地算出吗?
对于RSA加密解密算法而言,(e,n)为公开密钥,那么破解RSA最直接的方法就是分解整数n,得到n=p* q中的p与q的值,之后由 φ(n)=(p-1)(q-1) 计算得到 φ(n),再通过 e*d%φ(n)=1,即可求出私钥d,之后使用(d,n)即可得出加密之前的明文。但是如果密钥的大小过大的话,那么就会产生“大整数分解难题”,从而导致解密失败。

五,公私钥与数字签名

那么我们可以利用公钥和私钥做什么呢?
首先,鲍勃有两把钥匙,一把是公钥,另一把是私钥。鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
在这里插入图片描述

苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
在这里插入图片描述

鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
在这里插入图片描述
鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
在这里插入图片描述

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
在这里插入图片描述
鲍勃将这个签名,附在信件下面,一起发给苏珊。
在这里插入图片描述

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
在这里插入图片描述
苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

参考资料:
制作过程中有引用或参考下列优质内容,有问题请联系作者

http://www.youdzone.com/signature.html

https://blog.csdn.net/wjiabin/article/details/85228078

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值