zoukankan      html  css  js  c++  java
  • 公钥,私钥,数字签名,数字证书的相互关系

    我们经常听到数字证书,数字签名这些词。
    这些证书,签名到底是什么?
    他们又起到什么样的作用? 其原理是什么?
    了解这些我们需要先了解加密方式,以及什么是公钥?什么是私钥?
     
    1. 加密方式
    先解释一下2种常用的加密方式。
     
    ◆ 对称加密
    加密的传统方法是对称加密。发出讯息者用一把钥匙对讯息加密。
    接收讯息者需用这把钥匙将加密了的讯息解密。
    这把钥匙必须以一种其他人没有机会得到它的方式给予接收讯息者。
    如果其他人得到了这把钥匙,这种加密方式就没用了。
     
    ◆ 非对称加密算法
    非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
    公开密钥与私有密钥是一对,可以相互加密和解密。
    如果用公钥对数据进行加密,只有用对应的密钥才能解密。
    如果用密钥对数据进行加密,那么只有用对应的公钥才能解密。
     
    因为非对称加密算法安全性比较高,所以下面的数字签名,数字证书都是用了非对称加密算法。
     
    2. 数字签名digital signature
     
    在现实生活中,签名是为了表示这是签名者写的。计算机中,数字签名也是相同的含义。
    举一个例子如果A,B两台计算机相互通讯:
    A计算机传输给B计算机信息的时候,A计算机会在消息的最后写上去自己的签名,以代表这些信息是A计算机的。
    B计算机接到消息后,先看签名是不是A计算机判断不是别人冒充A计算机发送不安全或是无效的信息(有效性)。
    除此之外,数字签名还能证明消息传输过程中没有被篡改(完整性)。
     
    ◆ 原理
    简单的说的话其实就是:
    A计算机给B计算机传输信息的时候,
    A计算机在信息后面加自己的签名(字符串),用自己的私钥(privatekey)加密。
    B计算机接到数据后,用A计算机的公钥(publickey)解密,确认来源是不是A计算机。
    这样确保了`完整性`,而且A计算机也`不可抵赖`
    (因为用A计算机公钥解密的信息只能是A计算机的私钥加密的信息)
     
    3. 数字证书
     
    先预想一个场景,如果有10台计算机,10台计算机需要记住相互之间的公钥(publickey),
    那有100台计算机,1000台呢? 他们之间都需要记住相互的公钥吗?
    答案肯定是不能,那如何解决这些问题呢?
    其实很简单,有个第三方中介机构。记住了这些1000台的公钥相对应的资料。
    这种机构称为认证机构(Certification Authority, CA)。
    CA开一个证明这是计算机A的信息,发给B计算机。
    B计算机通过CA的证明,可以确认这是A计算机的信息。
     
    ◆ 如何生成证书?
    A计算机将自己的【公钥A】给CA
    CA用自己的【私钥CA】给【公钥A】加密,生成【数字签名A】
    CA把【公钥A】,【数字签名A】,附加一些【A计算机的信息】整合在一起,生成证书,发给A计算机。
    ◆ 如何验证证书?
    A计算机发信息给B计算机的时候,会附加【数字签名A】
    B计算机通过CA的公钥解密【数字签名A】,既可以确认这是A计算机发的信息。
    (其实详细原理不是这样,是解证书得到哈希值,通过算法比较这个哈希值的。)
     
    总结
     
    两台计算机相互通讯的时候,为了确保有效性和完整性。需要签名证明是自己(数字签名)。
    这签名不能随便公开,所以需要加密。
    加密的时候使用的是非对称加密算法。(公钥私钥)
    相互通讯的计算机多了后,需要一个中介公司来证明这个签名是合法的(数字证书)。
    这中介机构叫(Certification Authority, CA)。
    以后通讯的时候,A计算机拿着CA开的数字证书一起发送给对应的B计算机。
    接受信息的B计算机是可以通过CA的证明书,确认是A计算机发送的信息是合法的。
    ----------------------------------------------
    欢迎大家的意见和交流
    email: li_mingxie@163.com
  • 相关阅读:
    android widgets控件
    android test控件
    android layout
    android build.gradle
    android studio AndroidManifest
    android studio settings
    (2)git本地生成SSH关联github
    (1)git
    bzoj2286 (sdoi2011)消耗战(虚树)
    Tree 树(树形期望dp)
  • 原文地址:https://www.cnblogs.com/limingxie/p/9202496.html
Copyright © 2011-2022 走看看