对于数字证书的内容,可能很多同学没有仔细了解过,我之前了解过,但是已经忘记得差不多了,所以这里准备写一些文章回忆一下。
数字证书的内容非常复杂,但是,有一些是我们日常开发中常用的以及简单的概念,例如公私钥,加密密码这些简单的内容,以及对应的非对称加密和对称加密等。这里就从普通的加密说起,假设我们要通过一个密码来加密信息从而达到不被别人知道我们交流的内容的目的。
密钥配送问题
那么问题就来了,假设我们两个是互联网上互不认识的人,由于特殊的需求需要进行秘密通信,例如我们要进行一个二手交易,假设就交易一款不用的手机,因为涉及到资金问题,所以就需要额外的注重安全了。那么,很明显,我们需要先预定好我们加密的密码是什么,因为我们赖于它进行加密通信内容。
所以,为了解决这种密钥配送问题,有人提出了一些解决方法:
- 通过事先共享密钥
- 通过密钥分配中心
- 通过 DH 密钥交换
- 通过公钥密码
通过事先共享密钥
这种方式最容易理解啦,那就是大家线下或者通过安全的方式互相交换一下公钥,那么就不存在中间传输的问题啦。
通过密钥分配中心
这种方式是假设我们都是从一个密钥配置中心分离出来的,例如我去电信办宽带的时候,电信分配给我一对密钥,告诉我要保管好,这是我的以后加密要用的关键密钥,当我想和你进行安全通信的时候,需要这么操作:
- 我通过加密方式(电信分给我的密钥)跟电信服务器联系,说希望和你加密通信,然后电信服务器根据我们的密钥信息,给我们常见出一对临时密钥
- 电信服务器将临时密钥通过我们的密钥加密之后,发给我们双方
- 我通过这个临时密钥加密信息发给你
- 你通过这个临时密钥解密信息获取我的内容
这就解决了中间的问题,但是,从这里可以看到,这里其实还是通过事先共享密钥的方式解决,只不过是我们找了一个中间人。这个中间人也是危险所在,假设他要作恶了,那么,毫无疑问,我们肯定都是危险的。
公钥密码
这就是本文的重点了,那就是公钥密码,既然大家使用同样的密码行不通,那么为什么不使用对称加密呢,更上层一些就是所谓的公钥密码。在公钥密码中,密钥分为 加密密钥和 解密密钥 两种,发送者用加密密钥对消息进行加密,而接收者用解密密钥对密文进行解密。
公钥密码中,加密密钥一般是公开的。正是由于加密密钥可以任意公开,因此该密钥被称为公钥。相对地,解密密钥绝对不能公开,只能由自己使用,所以称为 私钥。
公钥私钥是一一对应的,一对公钥和私钥统称为密钥对。
通过公钥密码解决密钥分配问题
通过公钥密码,我们就可以很随意得将我们的公钥发出去了,任何人都可以通过我的公钥加密信息,然然后发给我,我再通过我自己的私钥解密查看内容,其他人即使看到了公钥,也无法解开加密后的内容。
这似乎解决了我们的问题,但是,事实上,这并没有完全解决。例如,我把公钥散播出去了,每个人都可以拿到我的公钥,于是张三加密给我说他是李四,李四也加密给我说他是李四,那么谁才是真的李四?这个问题我将在下一篇文章介绍数字签名中解答。