目录
1. 密钥对的使用时机
2.小结
在讲RSA原理时,咱们先来思考非对称算法的几个问题。
- 使用RSA对数据进行加密时,应该使用公钥还是私钥?那解密的时候呢?
- 使用RSA对Hash进行签名时,应该使用公钥还是私钥?那验签的时候呢?
- 做安全启动时,大家是否对RSA验签实现里各种奇奇怪怪的字母感到困惑?例如n、e、d;
那么我们带着问题动手撸撸代码来熟悉RSA。
1. 密钥对的使用时机
非对称算法的特性在于加密过程和解密过程使用的是不同的密钥,其中可以对外公开的密钥叫做公钥,只能自己保管的密钥叫做私钥,这两个密钥共同构成密钥对;
由于RSA算法本身的数学属性(单向陷门原理),密钥对有这样一种巧妙的关联(先记住它):
- 使用公钥加密数据,则只能通过私钥进行解密;
- 使用私钥进行加密,则需通过公钥进行解密。
上述过程我们可以请出老朋友Bob和Alice来进行演示,具体如下图:
Bob想要给Alice写信,但又不想让别人知道信的内容,因此他用Alice给的公钥对信的内容继续加密;Alice拿到加密后的内容后,使用自己的私钥解密,从而得到"Hello Alice”。
这就回答了今天的第1个问题,当想要加密时,应该选择对应公钥进行加密;其他几种情况都不能满足信息安全的要求:
- 如果Bob用自己的公钥加密,那么就只能他自己用私钥解密,Alice拿到密文也没有用;
- 如果Bob用自己的私钥加密,那么所有获得他公钥的人都可以解密。
那么签名又应该如何使用密钥呢?
我们先搞懂什么是签名,一般来说,所谓签名就是用来证明自己身份的机制,具体到细节其实就是用非对称算法对消息摘要做加密。
既然要证明我就是我,思考一下,在非对称算法里什么是私密的呢?毫无疑问就是自己的私钥;
因此在签名过程中,应当使用自己的私钥对消息摘要进行签名,那么所有获得公钥的人都可以验证签名;而由于私钥的私密性,他人基本无法冒充,从而证明了我就是我。
老规矩,Bob要向Alice证明消息就是他发的,如下图:
- Bob使用Hash函数对"Hello Alice"计算出摘要;
- Bob为了证明消息是自己发的,用自己的私钥对摘要进行加密,也即签名;并把消息和签名同时发送给Alice;
- Alice拿到数据后,首先对"Hello Alice”使用同样Hash函数进行摘要计算,得到消息原始Hash值;使用Bob对外公开的公钥,对签名进行解密得到待校验的Hash值;
- 将上述Hash进行比对,如果值一致,则证明是Bob发送的消息。
同样的,如果用其他的密钥进行签名会出现什么情况呢?
- 如果Bob使用自己的公钥签名,那只有自己才能验,Alice不知道是谁发的;
- 如果Bob用Alice的公钥签名,虽然只有Alice能验证,但是由于只要是获得了Alice公钥的人都可以签名,不能证明是Bob发的
2.小结
从上面我们知道了非对称算法的密钥对使用时机,那么接下里我们继续讲解RSA,我们分别从RSA加解密、签名验签以及其原理概述入手。