news 2026/8/14 6:31:47

数字签名与数字证书

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数字签名与数字证书

在介绍数字签名和数字证书前,先简单了解两个算法:Hash算法和RSA算法。

Hash算法:Hash算法是将可变长度的数据块M作为输入,产生固定长度的Hash值(或者叫做摘要)。可以将Hash算法看作一个非常复杂的CRC算法,例如CRC32。CRC32可以对任意长度的数据块计算出长度为4个字节CRC值。

Hash算法具备这样的特点:对于较大的输入集合使用该算法,产生的输出结果均匀地分布且看起来随机。概括的说,Hash算法的首要目标是保证数据的完整性(类似CRC算法,也是用来保证数据的完整性),对于M任何一位或者几位的改变,都将极大地改变Hash值(摘要)。

Hash函数的特性:

(a)对预先指定的Hash值无法找到对应的数据,即从摘要无法推算出原文;

(b)很难找到两个不同的数据块对应相同的Hash值(即抗碰撞性)。由于Hash函数具备上述特性,所以常被用来判断数据是否被篡改。例如数据通信过程中,数据发送方对传输数据计算Hash值,然后将Hash值附在传输数据后面。数据接收方,收到传输数据后和Hash值后,首先对数据进行Hash值计算,如果计算的Hash值等于接收到的Hash值,则认为数据没有被篡改。

RSA算法: RSA是一种公钥算法,属于非对称加密算法。它包含两个密钥:一个私钥和一个公钥,这个两个密钥中的任何一个都可以用来加密,另外一个用来解密。即公钥加密,只有私钥才可以解密出数据,私钥加密只有公钥才可以解密出数据。它的特点:仅根据加密算法和加密密钥无法推算出解密密钥。其主要步骤如下:

(1)每个用户产生一对密钥(即公钥和私钥),用来加密和解密消息。

(2)每个用户需要安全保存(安全保存,即密钥不能被替换,暴露)自己的私钥,将自己的公钥以某种安全方式传递给需要与其通信的用户。如下图a,b所示,每一个用户可以拥有若干个其他用户的公钥。

(3)若Bob要发消息给Alice,则Bob用Alice的公钥对消息加密;

(4)Alice收到消息后,用其私钥对消息进行解密。由于只有Alice知道自身的私钥,所以其他接收者均无法解密出消息。

(5)若Bob要发送消息给Alice,Bob用自己的私钥对消息进行加密;

(6)Alice收到消息后,用Bob的公钥进行解密。由于只有Bob拥有私钥,所以可以证明此消息是Bob发送的,不可能是其他非法用户发送的。这就类似我们日常生活中的“签名”,人的笔记很难被别人模仿,只有签名者能写出。

下面讲解数字签名

1、 鲍勃有两把钥匙,一把是公钥,和一把是私钥。

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

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

4、鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,在鲍勃的私钥没有泄露的情况下,这封信就是安全的,即使落在别人手里,别人也无法解密出来。

5、鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash算法,生成信件的摘要(即之前讲的Hash值)。

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

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

8、苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。

9、苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信件的内容和数字签名没有被篡改,即信件内容完整,和签名正确(即信件是鲍勃(身份合法)发送的)。如果苏珊计算出来的Hash和公钥解密出来的Hash不一致,则要么数字签名被篡改或者信件内容被篡改。

注:在这个过程中,信件内容是不进行加密的,任何人获取该信件,都是直接读取信件内容。同样拥有公钥的道格,也可以验证信件完整和信件来源。

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

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

注:这里认证可以理解为我们的身份证,CA可以认为某个公认的权威机构,如公安局。只要苏珊拿到CA(公安机关)颁布给鲍勃证书(身份证),那么她就可以确认证书的有效性(最多到公安机关再确认一遍)。

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

13、苏珊收信后,用CA的公钥解开数字证书,如果证书验证有效(证书的验证也和前面苏珊对鲍勃的签名验证过程一样,只不过这里用的是CA的公钥),那么就可以确认证书的内容有效,没有被篡改。既然内容没被篡改,那么证书中的鲍勃的公钥也是有效的。就可以用证书中的鲍勃的公钥对信件签名进行验证,进而验证信件内容是否有效

注:如何安全保存CA公钥不被替换有多种方式,比如在嵌入式系统中可以使用单片机MPU保护或者采用加密等方式。有的小伙伴可能会说,既然CA的公钥可以安全保存确保不被替换,那鲍勃的公钥可以被安全保存。确实如此,那为什么还需要数字证书呢?有证书的好处是,在同一家认证机构使用相同CA公钥认证过的机器之间是可以相互进行身份识别的。如果有0001、0002、……1000一千个人需要和苏珊进行邮件交流,那么苏珊需要安全存储这1000个人的公钥,对于苏珊来说,管理起来不容易。那么他这1000个人都可以向CA申请一个证书,每次发邮件是附上数字证书就可以了。对于苏珊来说只需要存CA的一把公钥就可以了。

在嵌入式系统中的实际应用场景:

1、引导程序通过数字签名方式,对刷入的App应用程序进行签名验证,如果验证通过,说app来源合法,否则认为刷新失败。

2、通过数字证书,对设备进行身份确认,如果验证通过,则与设备进行通信,否则认为设备非法,不进行后续通信。

转自:https://mp.weixin.qq.com/s/MuEGqHoT_tA-bmYt88IRyg

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 10:35:11

Kotaemon客户流失预警:行为模式识别

Kotaemon客户流失预警:行为模式识别 在金融、电信和电商这些高度依赖用户黏性的行业里,一个看似普通的对话——“最近费用怎么突然变高了?”——可能就是客户即将流失的第一道裂缝。传统风控系统往往要等到账单周期结束、服务取消申请提交后才…

作者头像 李华
网站建设 2026/8/13 23:04:43

碳钢高性能蝶阀为何能扛住600℃高温?

碳钢高性能蝶阀是以碳钢(如WCB、Q235等)为主要阀体材料,通过蝶板绕阀轴旋转(0-90度范围)实现启闭和调节的高性能阀门,具有高强度、高性价比的特点,广泛应用于石油化工、电力、冶金、市政等行业的…

作者头像 李华
网站建设 2026/8/13 11:10:40

Linux内核与发行版

Linux内核与发行版 当我们说Linux系统时,其含义往往是指采用Linux内核的操作系统。Linux内核负责控制硬件、 管理文件系统、进程管理、网络通讯等,但它本身并没有给用户提供必要的工具和应用软件。 由于Linux内核本身是开源的,所以一些人和厂商在其规则之下, 基于Linux内…

作者头像 李华
网站建设 2026/8/12 12:39:09

用户、文件及目录

用户、文件及目录 用户及用户组 Linux操作系统同样也是多用户操作系统,其中具有管理其他用户和计算机的全部资源的用户, 称为root。 安卓系统,实质上也是基于Linux,安卓手机上常常提到的root权限, 也就是获取最高的权限,就跟电脑获取超级管理员的权限是一样的。 在Li…

作者头像 李华
网站建设 2026/8/13 20:15:16

【JS】??和?:以及if()三者区别

1. ?? 空值合并运算符 (Nullish Coalescing Operator) 作用:当左侧的操作数为null或undefined时,返回右侧的操作数,否则返回左侧的操作数。 示例: const a null ?? default; // a default const b undefined ?? defa…

作者头像 李华
网站建设 2026/8/14 5:40:58

Codeium如何在vscode中使用

Codeium 在 VS Code 中完全使用指南 📥 安装 Codeium 方法一:VS Code 扩展商店直接安装(推荐) # 步骤: 1. 打开 VS Code 2. 点击左侧扩展图标(或按 CtrlShiftX) 3. 搜索 "Codeium" 4.…

作者头像 李华