一小部分人在学习RSA原理之后仍不清楚其使用的方式,在使用时将其理论讲错。本文厘清其使用方式,避免大家的误解。
加密方式
非对称加密的使用是非常环境下传输安全信息。换句话来说,加密方式的使用场景就是我想给你说句话,但别人不知道内容。
经常举例Alice和Bob的通信息过程,如果是Alice想通知Bob一个信息,那么必须使用Bob的公钥对信息加密,此时由于只有私钥能解,也就意味着只有Bob能拿到这个信息的真正明文。
但是,这里很多人都以为Bob知道Alice的身份,或者说知道是Alice发送的。根据这种理解是错误的,Bob只有知道有人给他了一段信息,是谁根据不知道。任何人都可以说自己是Alice的。本身公钥是公开的,每个人都可以得到Bob的公钥。
一部分人错误的理解就是因为这个例子中使用了Alice这个明确的发送方。其实这个Alice匿名也是可以的。这个例子只能说明Bob收到了一段发给自己的密文。其他的任何信息都是错误的。
比如Alex也使用Bob的公钥发送一段信息给Bob,Bob同时接收到可以解码,如果Alex说自己是Alice,那么Bob是根本无法分辨的。
所以加密过程其实一句话可以概括,在非安全网络下,有人给私钥持有者发送了信息。
解密方式
解密方式就是密钥持有者将发送给自己的密文进行解密,得到相应的明文。
解密方式其实只有一个问题要说明。除了私钥持有者,其他人都无法解密,解密的过程也没有确定是谁发送的信息。并不是有些人说解密时,先得到Alice的公钥什么什么的。这个与签名与验证混淆了!
解密只是解密而已,就是私钥持有者将密文计算出正确的明文。
签名方式
严格来说签名方式常用于通知,表明言论的出处或发行者这类似的场景。
仍然以Alice和Bob发送信息为主,Alice使用自己的私钥签名了发送信息的内容。Bob接收到后,验证这个签名确实是来源于Alice。但是这里要说明的是,Alice只是向Bob表明了身份,以搏得Bob的信任。但是这里教科书式的举例同时让人产生了一个误解,其实任何人都可以验证是Alice发布的信息,因为所有人都有Alice的公钥都可以进行验证。并不仅仅是Bob。
所以签名方式只是向所有人表明自己的身份,并不是只有Bob能验证身份的。验证身份使用的也不是Bob的公钥,而是表明身份人的公钥。
验签(检验签名)
验签只是使用表明身份人的公钥来验证是否为该人所发送/发布而已。其他任何人因为没有表明身份人的私钥,所以无法发送出相同的签名的。
所以此时,Bob只是验证发送/发布者的身份而已。
总结
关于加解密与签名验签的过程
方式 | 发送者 | 接收者 | 备注 |
---|---|---|---|
加密 | Alice 使用Bob的公钥加密 | Bob | 所有人都能接到密文信息 |
解密 | Alice | Bob 使用自己(Bob)的私钥解密 | 只有Bob能将接收到密文转换成正确的明文 |
– | 以上只是Alice发信息发给Bob | ||
签名 | Alice 使用自己(alice)私钥摘要内容 同时发送的内容进行发送 | Bob | 所有人都能接到Alice发送的内容与签名数据 |
验签 | Alice | Bob 看到Alice信息的内容 使用Alice的公钥验证内容 | 所有人都可以看到信息内容 所有人都可以使用Alice的公钥验证内容 |
模拟的双方可信通信过程中的流程:
- 用户A跟另一个用户B建立连接
- 用户A向用户B发送信息"我是Alice“,并使用Alice的私钥对内容签名。
- 用户B使用Alice的公钥进行验签,确认Alice的身份。
- 用户B向用户A发送信息"我是Bob",并使用Bob的私钥对内容签名。
- 用户A使用Bob的公钥进行验签,确认Bob的身份。
- 用户A(Alice)向用户B发送一个对称密码,使用Bob的公钥加密。
- 用户B(Bob)使用自己(Bob)的私钥进行解密,保存解密后的密码。
- 用户A(Alice)和用户B(Bob)所有通信均使用对称密码进行加密和解密。
说明
在通信双方有一个问题,用户A公开了自己的公钥,有一个不怀好意的用户B也公开发自己的公钥,但它却是B的身份?其他人如何确定哪个公钥是正确的?也就是说我们无法确定谁才是真正的公钥。
这就用到一个能给你证明谁才是真正用户的机构CA。严格来说它是一个证书服务器,这个证书服务器会向你保证谁是真的用户。
有这么一个证书机构是必须的重要的。它保证了所有用户的公钥,用户B说明自己是A时,我们通过证书机构拿出A的公钥来验证B的信息肯定是不对的。
可能你还在想,谁又能证明这个证书机构不是假冒的呢?答案非常简单,是另一个更有权威的证书机构。那么谁又能证明你这个更有权威的机构是真实的呢?当然是还有一个权威机构…最后的那个叫根机构。根机构不需要证明,它把自己的证书直接安装在你的系统中。因此你的计算机中的证书根机构被更改你就完了。否则这所有的验证都可以最终验证到根机构上来,而根机构的证书可以验证你的根机构是否正确。而这个验证的链条叫做证书链。
为了防止链书链过长,所以有些不是根证书,但在证书链上被验证过的CA可以直接添加到可信机构中。那么证书链验证到可信机构就可以了。除非可信机构的证书过期或被吊销。