私钥,即私人的钥匙,是唯一的,所以可以用来证明来源是特定的人。
公钥,即公用的钥匙,我可以将它给很多人。既然那么多人都知道,所以公钥不能证明来源一定是特定的人。
加密:用于防止信息外泄(泄露给不相关的人)
签名:用于确认身份(可以类比下生活中的签名)
3.1 当情景是签名、验签时:
3.1.1. A 想使用我的服务,为了安全,我不希望 A 以外的人可以使用这些服务
创建:
此时,我会要求 A 创建 一对 公私钥,私钥他自行保留(用于证明他自己的身份),公钥给我(用于验签–验证签名)
拥有:
此时我拥有 A 的公钥,A 拥有自己的私钥
使用:
A 请求我的服务时,使用私钥签名
我收到请求后,用 A 给我的公钥验签,验签通过即证明的确是A发送的请求,验证不通过就拒绝访问
3.1.2. 那如果 A 调用我的服务之后,需要我返回请求结果,但又要保证一定是我返回的请求结果呢?
创建:
此时,我 创建一对公私钥,私钥自行保留(用于证明我的身份),公钥给 A(用于验签–验证签名)
拥有:
此时 我拥有 自己的私钥,A 拥有我的公钥
使用:
我返回结果时,使用私钥签名
A 收到请求结果后,用我给A的公钥 验签,验签通过即证明的确是我返回的结果,验证不通过当然是拒绝访问
3.2.当情景是加密/解密时:
如果 A 要和 B 进行通讯:
A在发送消息时:A使用B的公钥进行加密;
B在接收信息时:使用自己的私钥 进行解密;
为什么不使用私钥加密?
因为使用私钥加密之后,拥有公钥的人都可以进行解密,那岂不是泄露了 A 和 B 之间的消息了。而使用对方的公钥加密,那么就只有对方的私钥可以解密,也就是说不会有第三方可以解密内容。
虽然对称密钥算法使用公钥加密,则使用私钥就可以解密;
使用私钥加密,则使用公钥就可以解密,但是不可以乱用。
签名、验签场景使用私钥签名,公钥验签确认发送者身份、报文是否被篡改。
加密、解密场景使用公钥加密、私钥解密保证数据安全。