数字签名与数字证书入门级解读

这篇文章不解释具体的概念定义而是以通俗易懂的语言来解读数字签名与数字证书,我们先来理一理需要用到的知识点。

算法基础

摘要算法
摘要算法是单向算法,明文只能转换成密文,密文却无法转换成明文,这种算法也叫HASH算法,如SHA1,MD5,CRC等。可以这样理解,几乎很难找到两个不同的明文能生成同一个摘要。所以摘要算法能够用于验证数据的完整性,防篡改。

一般在软件发布时会同时公布软件的摘要信息,用户下载软件后再自行计算一次摘要,如果和发布者公布的值一致,则认为该软件由发布者发布未经更改过。

对称加密
即加密和解密都用同样的密钥,如 AES,DES。

非对称加密
非对称加密即有两个密钥,一个用于加密(私钥),一个用于解密(公钥),并且是成对出现。用一个加密后需用另一个解密。公钥是公开的(大家都能看到),而私钥只能自己知道。常见的算法是RSA。

RSA算法的原理是基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。即一个大数很难被因式分解。

对称加密和非对称加密的作用都是对明文进行保护,但是他们都面临着一个问题,怎样分发密钥才安全?对称加密需要在网络中传输密钥显然不安全,而非对称加密确没有该问题。由于非对称密钥的公钥是公开的,所以即使在网络中传输也无所谓,所以现在互联网上大多都使用的非对称加密。但是这又产生了新的问题,怎样保证公钥的真实性,如果通信中有中间人存在,并且它伪造了通信呢?带着这些问题,数字签名和数字证书应运而生。

数字签名

数字签名的计算方法:算出内容HASH值,然后用私钥加密,这就是数字签名。
客户收到信息后,用公钥解密数字签名得到HASH值,然后算出内容的HASH值,两者相对比。

数字签名的作用: 不可抵赖与数据完整性
不可抵赖:如果公钥能解密,则内容一定是与该公钥对应的私钥加密而来,即可证明来源。
数据完整性:数字签名的HASH值和自己计算出的HASH值一致,即可证明该内容是完整的未经修改过。

但是数字签名不能确保"公钥"的真实性,第三方可偷换"公钥",达到与伪服务器通信的目的,这样又产生了数字证书。

数字证书

由权威证书中心CA(certificate authority,简称CA)颁发,作用是证明"公钥"的真实信。
数字证书里面包含了服务器的公钥,服务器的域名以及服务器所属的公司信息等内容,并且该信息是用CA的私钥进行加密的。客户请求服务时,服务器会同时发送数字签名和数字证书给客户。证书工作流程如下:

  1. 服务器向CA中心申请证书,CA负责核实服务器的真实性,并在证书里内置服务器域名证书使用者信息
  2. 客户浏览器或操作系统里内置有权威CA的公钥信息(即CA公钥不需要在网络中传输)
  3. 客户请求服务时,服务器把自己申请的数字证书和内容的数字签名一同发给客户
  4. 客户收到信息后在本地CA列表里查找CA公钥对数字证书解密,拿到真正的签名公钥,再用该公钥去解密数字签名,拿到HASH值去对比完整性

数字证书能解密就能证明它确实由CA所颁发,但还不能证明该证书是对应该服务器的(因为如果伪造者也申请有正规的数字证书,并且他通过中间人的方式把真实服务器的证书替换掉,用它的证书给传你呢?)。那么怎么证明呢?证书里是带有服务器域名信息的,只有访问的域名和证书里面授权的域名相匹配,那么该证书才授信。

所以这两点,保证了服务器的公钥的真实性。那么如果有中间人攻击的情况呢?即使中间人截获了请求也没法对内容进行修改,因为他没有私钥,没法对内容进行加密。如果用自己的私钥加密那客户就没法进行解密了。

这里还有一个疑问,万一我通过域名劫持的方式把对方的域名拦截到我的服务器,并在我的服务器中导入对方的证书呢,这种情况是否可行?这样也不行,因为你还是没有对方的私钥,没法对传输的信息进行加密。

综上,所以数字签名能保证服务器公钥的真实性,并且能够防止中间人攻击

漏洞
CA的公钥是存储在本地计算机列表的,如果手动往列表里面导入了不可信的CA公钥,那么CA就可以仿冒,失去了权威性。

浏览器显示授信的站点就一定安全?
不一定!通常用户是通过HTTPS判断真实网站,现在假冒网站也用上了HTTPS,这部分极度依赖CA的可靠性,由于部分CA对申请证书的监管要求不高,导致钓鱼网站也能申请正规的CA证书。
普通用户可能需要警惕,网站使用SSL证书仅表示网站加密传输数据,并不意味着它是一个合法的网站,或者它实际上是它声称的那个网站。需要通过两种方式来识别:
1.访问的域名是否显示为你要访问的服务器域名
2.查看证书详情里的真实身份信息是否为该网站真实的身份信息

参考

图片理解数字签名和验签过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章