博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字签名和数字证书
阅读量:5291 次
发布时间:2019-06-14

本文共 1466 字,大约阅读时间需要 4 分钟。

理解数字签名和数字证书前需要了解其所用到的加密算法。

加密算法

    加密算法分为:对称加密和非对称加密。

1、对称加密

    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

常见的对称加密算法有:DES算法、3DES算法。

2、非对称加密

    非对称加密算法有两个密钥:公钥和私钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

例:小A和小B都生成一对公私密钥,想在他俩将公钥通过网络发给对方(注意:因为这两个公钥都是在网络上传播,可能会被C获取),A跟B通信,A将原文用B给的公钥进行加密生成密文,这段密文只能用B的私钥解密,所以即使C获取密文和A/B的公钥也不能解密。

数字签名(Digital Signature)

上图为A和B的通信过程。前提是 A和B都以获取对方的公钥

A将原文加工生成发送内容:

1、A用哈希算法(如MD5)计算要发送内容的Hash值(摘要)。

2、用非对称加密算法(如RSA算法)加密摘要,生成数字签名。

3、将原文加数字签名作为发送内容。

B收到数据,进行解密验证内容:

1、首先对原文进行同样的哈希计算,算出原文的Hash值(摘要1)。

2、用A的公钥解密签名,得到摘要2。

3、比对两个摘要是否相等。如果不相等,证明原文或者签名被修改过。

    为什么要通过哈希算法计算发送内容的Hash值?就是防止在发送过程中,内容被修改,如果内容被修改,那么修改后的内容的Hash值就不是之前的了。这时你可能会问,那在传输过程中如果同时修改内容,并将对应的Hash值也修改了,不就行了。这里要注意的是:Hash值已经被A用私钥加密了,就算你计算出修改后内容的Hash值,但是没法用A的私钥加密得到数字签名。

但是这里有一个Bug:C也有自己的公钥私钥,如果C替换了B手中A的公钥,然后C用自己的私钥给B发送数据,这个时候B是不知道他收到的数据时来自C。为了解决这个问题就出现了证书

数字证书(Digital Certificate)

    数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证。颁发证书机构它也有一对公钥和私钥。证书机构用它的私钥将 A的公钥 和 一些A的信息 加密得到数字证书。然后A发送数据给B时,包含了三个部分:原文+数字签名+数字证书  ,注意,现在B不持有A的公钥,B持有的是证书机构的公钥,通过证书机构的公钥解密数字证书拿到A的公钥,然后在重复之前的过程计算数字签名,跟发来的数字签名比对。但是有同样的一个问题:如果B现在持有的证书机构的公钥被别人替换呢?这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。

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

转载于:https://www.cnblogs.com/MicroHeart/p/9057189.html

你可能感兴趣的文章
selinux介绍/状态查看/开启/关闭
查看>>
DockerAPI版本不匹配的问题
查看>>
Leetcode: Ugly Number II
查看>>
项目立项管理
查看>>
(没时间维护,已下架)博客园第三方客户端-i博客园正式发布App Store
查看>>
map使用实例
查看>>
关于ShapeDrawable应用的一些介绍(上)
查看>>
洛谷 P3984 高兴的津津
查看>>
洛谷 P1308 统计单词数
查看>>
使用GitHub
查看>>
1.25回溯 n皇后问题,素数环,困难的串
查看>>
大量界面刷新时手动Dispose也是有必要的
查看>>
机电传动控制第三周学习笔记
查看>>
删除.gitignore中的在version control中的文件
查看>>
java精确计算、精确计算工具类
查看>>
操作系统实验零——操作系统实验环境准备
查看>>
centos服务器搭建javaweb项目步骤
查看>>
Docker入坑指南之EXEC
查看>>
XmlNode和XmlElement(转)
查看>>
python3+ros+telnet+telnetlib
查看>>