[网络] 数字签名和数字证书的原理机制

文章标题

    • 数字签名
    • 数字证书
    • 数字证书的应用场景

数字签名

数字签名是拿来对数据做认证的,帮助接收者确认数据是否真实有效。

就像你在合同上签名,合同生效后,内容就不能再改动了。两者作用是一样的,区别在于认证的原理和方式。

数字签名的实现原理是哈希算法和非对称加密算法。

哈希算法特点:

  1. 给定哈希函数,无论数据多少,计算出的哈希值长度都是一样的。
  2. 根据数据可以计算出哈希值,但是根据哈希值不能反推出数据。
  3. 一个好的哈希算法,计算出来的哈希值,出现碰撞(相同)的概率极低。

非对称加密算法特点:

  1. 密钥有两个,成对存在,不能随意搭配。
  2. 两个密钥都能加密,但是密文只有对方能解,自己解不开。

非对称加密算法进入实际应用领域后,两个密钥分别有了名字:一个叫公钥,一个叫私钥。

至于谁当公钥,谁当私钥,无所谓,随便你定,定好就别再改了,因为起这两个名字是有寓意的。

私钥自己保管好,不要让别人知道,公钥可以满世界分发,谁想要给谁。

如此这般,两个密钥一明一暗,用途就不一样了。

公钥用来加密数据,普天之下,只有自己能解密,因为私钥只有自己有。这种用途可以防止数据内容泄漏,因为即使密文被人窃取,窃取者没有私钥也是无法解密的。

用私钥对数据加密,不能防止数据内容泄露,因为公钥满世界都是,谁都能解密!

私钥用来做数字签名,具体分三个步骤:

  1. 对要签名的数据,用公开的哈希算法计算出哈希值,这个哈希值也叫摘要。
  2. 用私钥对摘要加密,得到的密文就是私钥拥有者的“数字签名”。
  3. 将数据与“数字签名”放在一起,发送给接收者。

接收者收到数据后的认证逻辑:

  1. 用公钥解密“数字签名”,得到发送方给出的数据摘要。
  2. 用发送方采用的哈希算法,自己计算出数据摘要。
  3. 如果发送方给出的摘要和自己计算出的摘要相等,证明数据有效,没有被中途篡改过,反之则否。

计算出摘要后,用公钥加密,也能得到一个数字签名,但是签名只有私钥能认证,显然,这样的认证没有意义。

数字证书

数字签名的认证逻辑存在漏洞。

正常情况下,接收者手上持有着发送者的公钥,发送者用私钥签名,接收者用公钥认证,这样没有问题。

但是,假如有一个窃取者,中途截获了数据,并偷偷做了两件事情:

  1. 偷偷将接收者手上持有的公钥替换成自己的公钥。
  2. 篡改数据,然后用自己的私钥对数据重新签名。

做完这两件事情,窃取者再把数据和签名发送给接收者,接收者用持有的公钥认证数据,能完美的认证通过。

这就是问题,接收者不知道公钥已经被窃取者替换,还以为收到的是发送者给的数据,其实是窃取者的数据。

该问题产生的原因是:接收者不能确认自己持有的公钥是不是发送者的。

这是“中间人攻击”的一种典型应用场景,也是数字证书诞生的背景。

数字证书就是用来防“中间人攻击”的,其原理是对发送者公钥进行权威认证,提供一种方法,让接收者可以确信自己持有的是发送者的公钥。

从单纯的技术角度看,数字证书谁都能做,但是一般人做出来的数字证书没有权威性,不能广泛应用。

所以,基于人类社会的诚信体系,地球上有影响力的组织搞出了具有权威性的认证机构,专门给别人制作颁发数字证书。

这样的机构叫CA中心,或者CA机构。

数字证书的制作过程:

  1. CA机构准备好自己的私钥和公钥,并且向外界提供公开的公钥获取途径。
  2. 需要数字证书的发送者,拿着自己公开的基本信息和公钥,前往CA机构要求认证。
  3. CA机构用自己的私钥对发送者基本信息和公钥一起加密,得到的密文就是数字证书,交给发送者带回去。

发送者有权威机构颁发的数字证书以后,就可以通过数字证书把自己的公钥交给接收者,逻辑如下:

  1. 发送者把数据、数字签名、数字证书三样东西一并发送给接收者。
  2. 接收者通过CA机构提供的公开途径,获取到CA的公钥。
  3. 接收者收到数据以后,用CA的公钥解密数字证书,拿到证书里包含的基本信息和公钥。
  4. 接收者对比基本信息,如果和发送者的一致,则证明公钥是发送者的;如果信息不一致,则说明公钥不是发送者的。

如此这般,接收者认证发送者数据的过程就变成了:

  1. 先通过CA公钥认证数字证书,确定发送者公钥的正确性。
  2. 再通过发送者公钥认证数字签名,确定数据内容的有效性。

社会信用体系,加上技术算法,环环相扣,中间人就没办法再替换发送者公钥了。

原因是中间人没有CA机构的私钥,无法对数字证书造假。

可能有人会说,中间人可以用自己的私钥制作数字证书,然后替换到数字证书,发给接收者。

存在这种可能,但是接收方是通过公开途径获取CA公钥的,CA公钥解密不了中间人的数字证书。

如果中间人神通广大,能欺骗接收者,用自己的公钥替换掉CA的公钥,那么他就还能当中间人,继续窃取数据。

想欺骗接收者,替换CA公钥,不是没有可能,但是实际应用中,难度很大!

通篇讲下来,数字签名和数字证书的原理应该是讲明白了。可能有人注意到另外一个点:发送者发送的数据始终都是明文的,中间人虽然不能篡改数据,但是他可以窃取数据内容。

保护数据内容不泄漏,这不是数字签名、数字证书要解决的问题,这是网络层SSL协议要解决的问题。

如果有兴趣,可以看看我的另一篇博客:

[网络] SSL/TLS协议的原理机制

数字证书的应用场景

数字证书的应用场景非常广泛,通俗的理解,数字证书就是网络环境中的身份证,能起到认证主体的作用。

只要有需要网络身份认证的场景,数字证书基本就都能用的上。

生活中,最常见的应用场景有:

  1. 浏览器采用https协议访问网站
  2. 网上银行的交易业务

根据业务场景和认证要求的严格程度,数字证书的认证模式又可以分为两种:

  1. 单向认证:数据接收者认证发送者即可。
  2. 双向认证:数据接收者和发送者要相互认证。

浏览器和服务器的https交互,不涉及非常重要的信息时,通常都是单向认证,如果涉及信息非常重要,也可以采用双向认证机制增强安全性,但是这么做会牺牲部分效率。

银行系统安全性永远是排在第一位的,所以进行网上银行业务时,银行都会给用户颁发个人数字证书,采用严格的双向认证机制,努力保证绝对的业务安全。

你可能感兴趣的:(网络原理,数字签名,数字证书,单向认证,双向认证,CA认证)