加解密、签名、验签、数字签名、数字证书 | 您所在的位置:网站首页 › 简述用非对称加密算法进行数字签名和验证的过程 › 加解密、签名、验签、数字签名、数字证书 |
说明:本文属于学习笔记,借鉴了很多经典网文,已记不清出处,如有侵权,请告知。 前言:嵌入式开发时,绕不开数据安全问题。最近又在做OTA升级相关工作,因此,借此机会学习了加解密、签名、数字证书等知识,并做此笔记。 一、加密、解密 1、对称加密对称加密是指加密和解密时使用同一个密钥。 非对称加密是指加密和解密使用不同的密钥,这两个密钥分别叫做公钥、私钥。 公钥是可以公开给所有人的,而私钥需要自己保密的。 发送方使用接收方公钥加密的数据只能用接收方私钥解密:![]() ![]() 数字签名(Digital Signature)也叫作数字指纹(Digital Fingerprint),它是消息摘要算法和非对称加密算法的结合体,能够验证数据的完整性,并且认证数据的来源。 怎么生成摘要??? 使用hash运算将明文生成摘要,常用的hash算法是SHA-1、MD5、MD2等。 1、验证完整性数据签名算法的模型分为两个主要阶段: 签名(加签): 先计算数据的 摘要,再使用私钥对 摘要 进行加密生成 数字签名,将 [数据 + 签名] 一并发送给接收方;验证(验签): 先使用相同的摘要算法计算接收数据的 摘要,再使用预先得到的公钥解密 签名,对比 解密的签名 和 计算的摘要 是否一致。若一致,则说明数据没有被篡改。![]() 为什么摘要还需要加密???非安全信道中,数据和摘要都存在篡改风险,攻击者在篡改数据时也可以篡改摘要。因此,摘要算法需要配合加密算法才能严格验证完整性。 2、认证数据来源 发送方:使用私钥对摘要加密,生成数字签名接收方:使用发送方的公钥解密数字签名,成功生成摘要,说明认证数据来源于发送方。数字签名的加解密过程示意图 1)甲使用乙的公钥对明文进行加密,生成密文信息。 2)甲使用HASH算法对明文进行HASH运算,生成数字指纹。 3)甲使用自己的私钥对数字指纹进行加密,生成数字签名。 4)甲将密文信息和数字签名一起发送给乙。 5)乙使用甲的公钥对数字签名进行解密,得到数字指纹。 6)乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。 7)乙使用HASH算法对还原出的明文用与甲所使用的相同HASH算法进行HASH运算,生成数字指纹。然后乙将生成的数字指纹与从甲得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文。 优点:数字签名技术不但证明了信息未被篡改,还证明了发送方的身份。 缺点:数字签名技术也还有一个问题,获取到对方的公钥可能被篡改,并且无法发现。引入数字证书。 三、数字证书接收方需要使用发送方的公钥来验证数据真实性。那么,接收方怎样才能安全地获得发送方公钥呢?这就需要数字证书来保证。 数字签名和数字证书总是成对出现,二者不可分离。数字签名主要用来验证数据完整性和认证数据来源,而数字证书主要用来安全地发放公钥。 数字证书主要包含三个部分:用户的信息、用户的公钥和 CA 对该证书实体信息的签名。 数字证书的模型主要分为两个步骤: 1、颁发证书 申请者将签名算法、公钥、有效时间等信息发送给 CA 机构(certifcation authroity, CA);CA 机构验证申请者身份后,将申请者发送的信息打成一个实体,并计算摘要;CA 机构使用自己的私钥对摘要进行加密,生成证书签名(Certificate Signature);CA 机构将证书签名添加在数字证书上,构成完整的数字生出。 2、验证证书 验证方使用相同的摘要算法计算证书实体的摘要;使用 CA 机构的公钥(浏览器和操作系统中集成了 CA 的公钥信息)解密证书签名;对比解密后的数据与计算的摘要是否一致,如果一致则是可信任的证书。完整的证书文件,如下:
上面介绍了很多概念,那么代码中如何实现加解密?答案是OpenSSL,openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。点到为止,网上openssl资料很多,不再赘述。 |
CopyRight 2018-2019 实验室设备网 版权所有 |