数字证书和签名

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

  • 窃听(加密)

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

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

  • 事后否认(数字签名)

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

加密的基础知识

哈希函数

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

哈希函数的特征

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

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

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

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

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

比较有代表性的算法是 md5sha-1sha-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计算,得到 hashH,然后使用签名机构的私钥对 H 进行签名,得到了 P,将后将 P + S + 明文 连成一个文件,这就是所谓的 数字证书了

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