数字证书和签名

数据传输过程中的四个问题

  • 窃听(加密)

  • 假冒(消息认证码,数字签名)

  • 篡改(消息认证码,数字签名)

  • 事后否认(数字签名)

但是因为数字签名无法确认公开密钥的制作者,要想解决这个问题,可以使用数字证书技术

加密的基础知识

哈希函数

哈希函数可以把给定的数据转换成固定长度的无规律数值。转换后的无规律数字可以作为 数据摘要,应用于各种各样的场景。

哈希函数的特征

  1. 输出的 hash 值数据长度不变。

  2. 如果输入的数据相同,那么输出的 hash 值也必定相同

  3. 如果输入的数据相似,哪怕它们有一比特的差别,他们输出的hash 值也会有很大的差异。输入相似的数据并不会导致输出的hash值也相似。

  4. 即使输入的两个数据完全不同,输出的 hash 值也有可能是相同的。虽然这种情况下的概率比较低。这种情况叫做 hash 冲突

  5. 不可能从 hash 值反向推算出本来的数据。

比较有代表性的算法是 md5、sha-1、sha-2。

能够为网络提供通信安全的 SSL 协议也应用了混合加密方法。SSL是 Secure Sockets Layer 安全套接字的简写。后来该协议经过版本升级以后,现在正式被命名为TLS,但是 SSL 这个名字已经在人们心中根深蒂固,因此该协议也常被称为是 SSL 协议。

消息认证码 (防止密文被篡改)

  1. 客户端先生成一个密钥,然后通过安全的方式传送给服务器。

  2. 客户端使用密文和密钥生成一个hash值,那么这个 hash 值就是 消息认证码。

  3. 客户端将密文和消息验证码一起发送给服务器端。

  4. 服务器端同样使用密钥和密文 来生成 消息认证码 然后看这个消息认证码和客服端发过来的是否一样。

数字签名

数字签名不仅可以实现消息认证码的功能,还能防止事后否认的问题。因为数字签名只有发信人才能生成。

在非对称加密的过程中,任何人都可以使用公钥对数据进行加密,但是只有持有私钥的人才能进行解密。然后数字签名却恰恰相反。

数字签名的过程

  1. 客户端准备好发送的消息、公钥、私钥,公钥和私钥都是由发送者来准备的,这一点和非对称加密恰恰相反。

  2. 客户端将公钥发送给服务器端。

  3. 客户端使用私钥进行加密,加密后的消息就是数字签名,比如加密的消息内容是 我叫小王。

  4. 客户端将消息和签名都发送给服务器端。

  5. 服务器用公钥对签名进行解密。

数字证书

之所有出现数字证书,是因为 数字签名 和 对称加密 都无法保证公钥是来自发送者的。

CA证书授权中心 Certificate Authority。

具体的过程

客户端持有公钥和私钥,现在想把公钥发送给服务器端

  1. 客户端首先要向认证中心申请发行证书,证明公钥是自己生成的。

  2. 客户端将公钥 和包含邮箱等个人信息的资料发送给认证中心。

  3. 认证中心(CA)对收到的资料进行确认以后,使用自己的私钥对 客户端资料生成数字签名。

  4. 认证中心(CA)把生成的 数字签名 和 资料 放进同一个文件中。返还给客户端。这个文件就是 数字证书

  5. 服务端收到数字证书以后,确认证书里的邮件地址的确是 客户端的地址.

  6. 接着服务器端获得认证中心的公钥。然后通过认证中心的公钥,对证书中的签名进行认证,看他是否是认证中心给出的签名。

  7. 服务器确认了整数是认证中心发行的以后,就从证书中获得客户端的公钥。

数字证书的内容

  • 公钥的内容

  • 签发者的 ID

  • 主题(Subject) 证书的持有者

  • 有效期

  • 可扩展内容


我们对以上的明文进行hash计算,得到 hash 值 H,然后使用签名机构的私钥对 H 进行签名,得到了 P,将后将 P + S + 明文 连成一个文件,这就是所谓的 数字证书了。

posted @ 2021-09-19 16:01  沧海一声笑rush  阅读(379)  评论(0)    收藏  举报