声明:原创文章,转载请备注来源:https://shuwoom.com/?p=672

问题:如何验证公钥持有者身份?


        在《区块链的密码学基础》中,我们在数字签名和验证部分提出一个疑问:如果一个黑客,将发送者的私钥和接收者手上拥有的发送者的公钥都替换成黑客自己的私钥和公钥。接收者要怎么才知道这个公钥究竟是不是发送者本人呢?

下面我就从讲解数字证书的原理来回答这个问题。

CA机构(证书授权中心、证书发布机构)


        我们知道,在现实生活中,要识别、确认一个人的身份,往往时通过身份证来确认,而这个身份证之所以有效,被全国人认可,是因为背后依靠政府这个权威机关来背书、证明。

同样的,我们要确认一个公钥持有者的身份,也需要类似一个政府的权威角色来认证。那在网络世界里,这个角色就是CA机构,也称为证书授权中心(Certificate Authority)。

1.什么是CA机构

        CA机构作为电子交易中受信任的第三方,承担着公钥体系中公钥合法性检验的责任。CA中心会给每个使用公开秘钥的个人、企业发放数字证书。这个数字证书可以证明证书中列出的用户合法拥有证书中所列出的公开密钥。也就是说CA机构的数字签名使得攻击者无法伪造、篡改证书。

        那么这里就有一个问题,谁可以成为证书发布机构呢?

        其实,每个人都可以成立CA机构,但是需要一些安全认证,同时这些机构是要为它发布的证书负有法律责任的。但是很明显,我们自己专门发布证书的CA机构时不会被国际上的权威机构认可的。而只有哪些被国际认可的权威CA结构发布的证书,才会得到主流软件厂商的认可,如微软、谷歌等。而这些厂商生成的软件,如我们使用微软的Windows系统就会预先安装好哪些权威的CA机构,而不会轻易信任我们自己成立的CA机构。

这也是为什么我们在用chrome浏览器打开一些待https的网站时,返回下面界面。它会提示说我们的操作系统不信任这个网站使用的证书。

2.如何查看数字证书

        那么,怎么查看我们自己的操作系统信任了哪些第三方的CA结构呢?

在开始菜单中 => 运行 => 输入certmgr.msc =>回车,返回如下的界面就可以看到我们系统信任的一些第三方权威CA机构。  

而本人的博客也使用了数字证书:

点击绿色的锁,可以看到该证书的发布机构:Let’s Encrypt Authority X3也属于操作系统预先安装的中间证书发布结构,所以才不会返回不安全连接。

数字证书的构成


        那么一个数字证书是由哪些东西构成呢?上一节中我们看到了颁发给我个人博客(shuwoom.com)的证书构成。

一个标准的数字证书(X.509数字证书)会包含以下内容:

  • 版本信息

  • 序列号

每个证书都有一个唯一的证书序列号;

  • 签名算法

这个是CA机构在该证书中进行数字签名时所使用的加密算法,这样可以使用CA机构发布的证书里面的公钥,然后根据这个签名算法对指纹进行解密。指纹的加密结果就是CA机构使用自己私钥进行的数字签名。

  • 签名哈希算法

CA机构在进行数字签名之前,对证书的主体部分进行哈希计算,然后才对这哈希后的内容进行签名

  • 发行机构

说明时哪个CA机构发布这个证书

  • 证书有效期

如果过了有效期,证书作废,不能使用;

  • 证书所有人

说明这个证书发布给谁,一般是个人、公司名称、机构名称或者网站地址等,例如我的个人博客:shuwoom.com就是证书的所有者。

  • 证书所有人的公钥

这里是证书拥有者的公钥,也就是个人、公司、机构、网站等所有者的公钥。

  • 认证机构的数字签名

这个是CA机构用私钥生成的签名,用于确保证书没有被篡改过。

  • 指纹以及指纹算法

这个主要用来保证证书的完整性。指纹算法,是对签名后的证书文件计算哈希值生成指纹,用于检测证书是否被篡改,类似于我们网上下载一个文件后要校验md5值。

数字证书生成过程


        首先CA权威机构会事先生成一个密钥对(公钥、私钥),私钥自己藏起来,公钥公开。然后首先用哈希签名算法对明文内容(用户的公钥、用户姓名、证书发布机构、证书有效期等)进行哈希计算,得到一个哈希值,然后在通过CA自己的秘钥进行加密,得到签名后的文件,这个步骤称为签名。

然后将签名后的文件和明文内容放在一起,生成一个文件,这个文件就是数字签名。

数字证书验证过程


        那么接收者在收到某个人的证书以后,要如何进行确认呢?

首先将证书中的明文内容通过对应的哈希签名算法计算出信息摘要A,然后通过CA的公钥对数字签名进行解密,得到信息摘要B,对比两个摘要是否相等,就可以确认用户是否假冒。

关注我的微信公众号(shuwoom的博客),每周定期推送文章:

参考

https://blog.csdn.net/wzzvictory/article/details/9015155

http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

http://www.enkichen.com/2016/04/12/certification-and-pki/

https://blog.csdn.net/preyta/article/details/57101236

 

发表评论

电子邮件地址不会被公开。