相信大家在学习非对称密钥的时候,作者肯定会给出非对称密钥的两种使用场合,或者说是非对称密钥的两个作用:
 
一、非对称密钥和加密
场景描述:
在这种情况下,设备首先建立一个公钥/私钥对。这台设备,假如是路由器A,把该公钥给远端的对等体,比如是路由器B。路由器B使用A的公钥PubA来加密它发送给路由器的任何数据。使用非对称密钥,只有相关的私钥才能解密这个数据。因此,路由器A将使用它的私钥PriA来解密数据。
同样的,为了使路由器A发送给路由器B,路由器B会产生一个公钥/私钥对,并且将公钥PubB与路由器A共享。路由器A将使用这第二个公钥来加密发送给路由器B的数据,路由器B将会使用相关的私钥PriB来解密这个数据。
针对这种场景,勤于思考的朋友会问:为何不用私钥加密,公钥解密?如:A发送消息给B,A先产生公钥/私钥对,A和B共享自己的公钥PubA.B收到A的消息后,用PubA解密消息。但是假设在共享公钥的过程中,如果有***者在窃听,获取了A的公钥PubA,那么***者就可以解密A发功给B的消息了。所以在用非对称密钥加密数据时, 需要用接受者 B 的公钥加密发送的数据,用接受者B 的私钥解密发给它的数据。
二、非对称密钥和验证
场景描述:

除了用于加密外,非对称密钥也可用于执行验证功能。图1说明了非对称密钥如何用于验证,在这里,路由器A需要向路由器B提供验证。

 

 

 

正如在图1中所发生的,下面的事情发生了:
1、 路由器A产生了一个公钥/私钥对。
2、 路由器A和路由器B共享了其公钥。
3、 路由器A取出其自己的身份信息,比如它的名字,并使用自己的 私钥进行加密。
4、 路由器A将身份信息和加密后的身份信息发功给路由器B。
5、 路由器B解密了加密的身份信息,并将解密后的身份信息和路由器A发送过来的明文身份信息进行对比。
6、 如果解密后的身份信息和明文身份是相同的,那么路由器B可以确认确实是路由器A做的加密。
在图1中,私钥和加密有关,永远都不会被共享(私下存放)。公钥可以共享,并用于检验加密的身份信息,通常这个加密的身份信息被称为数字签名,它是用相关的私钥创建的。
使用这种方法进行验证的一个担忧就是中间人***,在这里,有些人而不是路由器A,他们会产生公钥/私钥对并且假装是路由器A。这可以通过带外的和路由器B预共享这个公钥来解决该问题。(因为即使***者用自己的私钥加密,B此时认为***者就是A。B接收到“A”发过来的消息后,会用预先共享的A的公钥PubA来解密”A”发送过来的信息,但是解密不成功,因为”A”不是A,此时B就知道“A”是假冒的。)更具有扩展性的方法是“数字证书”,请有兴趣的读者自行研究。
在这个场景中,有朋友可能会问:非对称密钥用于验证时,为何路由器A不用接受者路由器B的公钥PubB加密发送给路由器B的身份信息?
设想情形,路由器A向路由器B提供验证,执行下述步骤:
1、 路由器B产生了一个公钥/私钥对
2、 路由器B和路由器A共享了其公钥PubB
3、 路由器A取出自己的身份信息,比如它的名字,并使用 路由器 B公钥 PubB加密
4、 路由器A将身份信息和加密后的身份信息发功给路由器B。
5、 路由器B用自己的 私钥 PriA 解密了加密的身份信息,并将解密后的身份信息和路由器A发送过来的明文身份信息进行对比。
6、 如果解密后的身份信息和明文身份是相同的,那么路由器B可以确认确实是路由器A做的加密。
假设在B与A共享PubB的过程中,***者获取到了PubB,此时假冒的***者用PubB加密发送给B的身份信息,当然这个身份信息实质是假冒***者的身份信息,就算此时B认为假冒者就是A,但是当B接收到假冒***者发给B的信息后,一旦B用私钥PriB解密,就会自然而然发现接收到的身份信息上显示的B的身份,这样假冒的***者就会被识破,相当于假冒的***者自己把自己的虚假身份告诉B,这样傻瓜的做法相信没有哪个***会做的。

所以,在非对称密钥用于验证过程中,要用发送者路由器A的私钥加密身份信息。