----------------------------------------------------------------------------------------------
一个加密解密,公钥私钥,数字签名的问题:
服务器:私钥
客户端:公钥
1、客户端发消息给服务端通过公钥加密,服务端拿到消息私钥解密。
2、服务端回复客户端消息,用私钥加密,客服端获得消息通过公钥解密。
问题1:以上描述正确吗?
问题2:服务器给了三个客户端A、B、C公钥,如果服务器端发给A的消息,B拿到了是不是也可以解密?
-----------------------------------------------------------------------------------------------
对面上面的问题答如下:
1、可以这样描述,当然服务端也可以是公钥的。
2、私钥加密,公钥解密不安全问题,可以使用两套密钥。
比如A、B两端,A有自己私钥,提供给B公钥;B有自己私钥,B提供给A公钥。
现在发消息:
A发给B:A用B的公钥加密明文后给B,B收到,通过B的私钥解密。
B发给A:B用A的公钥加密明文后给A,A收到,通过A的私钥解密。
-----------------------------------------------------------------------------------------------
问题来了:如果在发送过程中,有人修改了里面密文消息(为什么能修改?因为公钥是可以公开的),B拿
到的密文,解密之后得到明文,并非A所发送的,信息不正确。
那么这个时候就要用到数字签名了:
签名解决两个问题:
1、证明发送人身份问题;
2、消息内容完整些问题。
那么再次A给B发消息:
A方数字签名:
1、明文用B公钥加密成密文;
2、摘要运算得到摘要信息再通过A的私钥加密。
发送给B方,B方的处理:
1、通过B的私钥解密密文成明文;
2、通过A的公钥解密摘要信息得到A明文的摘要;
3、B得到密钥通过摘要运算得到摘要信息与2的摘要信息对比是否一致。
注:
1、因为摘要信息不逆,所以私钥加密公钥解密也是安全的;
2、服务端客户端都可以是私钥或者公钥。
------------------------------------------------------------------------------------------------
虽然问题解决了,但还是有个疑问:为什么摘要不直接使用B的公钥加密而是使用A的私钥加密?
2018/05/17