基本概念
密钥密码学(即对称密码学)是指加密解密使用相同的钥匙,钥匙需要保密。
公钥密码学(即非对称密码学)是指加密解密使用不同的钥匙,通常一个是公开的,叫公钥,另一个保密,叫私钥。他们有下面的特点:
- 公钥是公开的,密钥是不公开的。
- 公钥和私钥不可以(很难)相互推导。
- 公钥加密后的数据只能用对应的私钥解密,反之亦然。
由于非对称加密的公钥是公开的,所以非对称加密不能用来对通信内容进行加密,一般仅仅用来确认身份和传输会话密钥。会话密钥由持有公钥的一方来指定,并使用公钥加密后发送给另一方。通信内容使用对称加密。
对称加密运算比非对称加密速度要快。
Hash函数用于对一段信息生成一个指纹,它有如下特性:
- 可以用于任意长度的信息。
- 对任意长得信息产生定长的Hash值。
- 得到Hash值后要得到原文在计算上是不可行的。
- 对于不同的原文一定得到不同的Hash值。
数字签名
数字签名用于保证发送数据的完整性。数字签名具有不可否认性(不可抵赖曾发过该信息),具有法律效力。
- 生成:发送者对一段要发送的数据使用Hash函数计算出摘要(Digest),之后再用自己的私钥加密,得到数字签名。
- 验证:接收者用发送者的公钥解密,再比对摘要(Digest),如果吻合,即说明
- 数据没有被篡改。
- 在公钥可信的情况下,可以认定是由发送者本人发出的。
为了确保公钥的可信,就要使用数字证书。
数字证书
由证书中心(CA)颁发,用于证明证书中列出的用户合法拥有证书中列出的公开密钥。
- 生成:数字证书主要包括三方面的内容:证书所有者的信息、证书所有者的公开密钥和证书颁发机构的签名。
- 验证:当接收者使用CA的公钥解密后得到数字证书的指纹与用指纹算法计算出的证书指纹吻合时(即验签成功),就可以确保数字证书的确是由CA颁发,并且没有被篡改。
辣么,我们只需要保证所使用的CA的公钥是正确的。
CA给别人颁发证书的同时,也有自己的证书。这些证书通常预装在操作系统中。
一个栗子
一个客户端(C)和安全服务器(S)通信:
- S把自己的数字证书发给C,数字证书中包含S的公钥和S的名称等相关信息。
- C用证书中心的公钥对证书进行解密,得到证书的指纹,再与用指纹算法对证书计算出来的指纹进行对比,两者吻合,即说明证书中S的公钥是可信的。如果不吻合,则给出警告。
- S发送一条明文信息给C,并附上用自己的私钥加密的密文版本。
- C用证书中S的公钥对密文解密后,比对明文,如果吻合,说明对方确实是S本人。
- C生成一个会话密钥,并指定一个算法,用S的公钥加密后发送给S。
- S使用自己的私钥解密,得到会话密钥(对称加密密钥)和指定算法。
- S和C使用会话密钥进行后续通信。