密钥、签名和证书的作用
密钥
公私钥为非对称加密,它们都可以解密用对方加密的文件,但无法还原对方密钥本身。所以公钥可以随意散发,妥善保管私钥即可。
公钥加密报文(防窃听)
用公钥来给报文加密,只有私钥拥有者才能解密,这样既然报文在传输过程中被人窃听,也不会泄露内容。
私钥加密摘要|数字签名(防抵赖/篡改)
所谓抵赖也就是否认曾经发送过某内容,比如要发借条,就可用数字签名。
数字签名先对报文进行HASH摘要,再对摘要结果用私钥进行加密,作为报文附件。对方收到后,用公钥解密摘要(证明是私钥加密的),再和接收到报文的HASH比对,验证了报文的完整性(没有被篡改)。
因为私钥是别人没有的,而摘要是不同报文不一样的,这两点足以证明内容是你发的,且没有被更改。
数字证书(保证公钥安全)
有公私钥以后,还有一个问题,因为公钥是随意散布的(网络传输),那么如何保证这是甲的公钥而不是乙的公钥。如果别人替换了你的公钥而之后又被不知情的人下载使用了,那么他就能冒充你给人发报文了。
于是就有了Certificate Authority,简称CA,它是可信的权威机构,将公钥和一些必要的基本信息提交CA审核之后,CA用自己的这公钥+基本信息进行摘要和签名,这就是你的证书了。
发送报文时,签名之后再加上证书,对方收到后用CA的公钥解密得到发信者公钥。
根CA的公钥默认是合法的, 且是为大多数浏览器所知的, 甚至内嵌的. 例如firefox的证书管理器中就内嵌了已知的根CA的公钥.
其它
- 加密和签名是两个概念,分别解决不同的问题(窃听和篡改),即可组合,也可单独使用。
- 通常公开钥算法用于相互验证,之后会建立session key(比如128位AES key)。后续交互的信息都是用session key和对称加密算法(比如AES)来加解密的,已经与证书本身和公钥密钥无关。因为公开密钥算法比对称密钥算法开销大很多。例如HTTPS(ssl)就是如此(以下为单向认证流程)。