石家庄市网站建设_网站建设公司_外包开发_seo优化
2025/12/18 12:09:38 网站建设 项目流程

在介绍数字签名和数字证书前,先简单了解两个算法: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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询