计算机网络(四)数字签名和CA认证

什么是数字签名和CA认证?

数字签名

数字签名的过程通常涉及以下几个步骤:

  1. 信息哈希 :首先,发送方使用一个哈希函数(如SHA-256)对要发送的信息(如电子邮件、文件等)生成一个固定长度的哈希值(也称为消息摘要)。哈希函数具有以下特性:
    • 定长输出:无论输入信息的大小,输出都是固定长度的。
    • 单向性:从哈希值很难反推出原始信息。
    • 抗碰撞性:很难找到两个不同的信息具有相同的哈希值。
  2. 私钥加密 :然后,发送方使用其私钥对哈希值进行加密。加密后的哈希值就成为了**数字签名**。
  3. 发送信息:发送方将原始信息和数字签名一起发送给接收方。
  4. 验证签名:接收方收到信息后,使用发送方的公钥对数字签名进行解密,得到哈希值。
  5. 信息哈希比对 :接收方同样对原始信息进行哈希运算,得到一个新的哈希值,并将其与解密后的哈希值进行比对。
    • 如果两个哈希值相同,则说明信息在传输过程中未被篡改,且信息确实是由持有私钥的发送方发送的。
    • 如果哈希值不同,则说明信息可能被篡改,或者发送方不是声称的持有私钥的人。

CA定义

CA是一个可信的第三方组织,负责颁发、管理、和吊销数字证书。数字证书是一种用于在互联网上验证实体(如个人、企业、网站等)身份的电子证明。CA确保证书中的公钥确实属于证书上所声明的实体。

CA的主要职责包括:

  1. 证书颁发:在验证了申请者的身份后,CA会颁发一个包含申请者公钥和身份信息的数字证书。
  2. 证书管理:CA负责跟踪证书的有效期,并在必要时更新或吊销证书。
  3. 信任建立:CA通过在其证书上签名来建立信任链。用户或系统信任CA的证书,因此也信任由该CA签名的任何其他证书。

CA认证过程

  1. 身份验证:申请者必须向CA证明其身份。这通常涉及提供身份证明文件、企业注册信息或其他形式的验证。
  2. 公钥生成:申请者生成一对公钥和私钥。私钥保持秘密,而公钥将包含在证书中。
  3. 证书颁发:CA验证申请者身份后,会创建一个数字证书,将申请者的公钥和身份信息绑定在一起,并使用CA的私钥对证书进行数字签名。
  4. 证书分发:CA将证书分发给申请者,申请者可以将证书安装在服务器上(例如,用于HTTPS的SSL/TLS证书)。

图解数字签名和CA认证

1.鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2.鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

3.苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

4.鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5.鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

6.然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7.鲍勃将这个签名,附在信件下面,一起发给苏珊。

8.苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10.复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

11.后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12.鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13.苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

14.下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。

15.首先,客户端向服务器发出加密请求。

16.服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

17.客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

18.如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

19.如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

20.如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

数字签名和CA认证分别防止了哪些安全问题?

数字签名防止的安全问题:

  1. 篡改:数字签名确保信息在传输过程中未被篡改。通过比较发送方的公钥解密后的哈希值和接收方对原始信息计算出的哈希值,可以验证信息自签名以来是否保持不变。
  2. 伪造:数字签名防止第三方伪造信息。由于只有持有私钥的发送方才能生成有效的签名,因此即使信息被篡改,也无法伪造有效的签名。
  3. 抵赖:数字签名提供了不可抵赖性,即发送方不能否认曾经发送过该信息。因为签名是基于发送方的私钥生成的,接收方可以使用发送方的公钥来验证签名的有效性。

CA认证防止的安全问题:

  1. 中间人攻击:CA认证通过验证公钥的真实性来防止中间人攻击。在中间人攻击中,攻击者可能会拦截通信,并提供自己的公钥(比如说你想访问淘宝,请求发出后,我假装自己是淘宝,给你发一个我的公钥,你收到后你以为是淘宝的,然后开始与我进行交互,我就窃取了你的信息),使通信双方误认为他们正在与对方直接通信。CA颁发的证书保证了公钥确实属于声称的所有者。
  2. 公钥伪造:CA认证确保公钥不是伪造的。没有CA的证书,攻击者很难伪造一个被广泛信任的公钥。
  3. 信任问题:CA认证解决了互联网上陌生双方之间的信任问题。通过信任由知名CA签发的证书,通信双方可以确信对方的身份是经过验证的。

参考:https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

相关推荐
爱吃生蚝的于勒14 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~18 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^43 分钟前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德1 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz1 小时前
STL--哈希
c++·算法·哈希算法
城南vision1 小时前
计算机网络——HTTP篇
网络协议·计算机网络·http
kingmax542120081 小时前
初三数学,最优解问题
算法
一直学习永不止步1 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数
小刘|2 小时前
《Java 实现希尔排序:原理剖析与代码详解》
java·算法·排序算法