数字证书和数字签名

如何证明浏览器收到的公钥一定是该网站的公钥?

现实生活中,若想证明某身份证号一定是小明的,可以看他身份证,而身份证是由政府作证的,这里的“公理”就是“政府机构可信”,这也是社会正常运作的前提。

那能不能类似地有个机构充当互联网世界的“公理”呢?让它作为一切证明的源头,给网站颁发一个“身份证”?

它就是CA(Certificate Authority)机构,CA机构是一个权威机构,负责“证件”印制核发。就像负责颁发身份证的公安局、负责发放行驶证、驾驶证的车管所。它是如今互联网世界正常运作的前提,负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。而CA机构颁发的“身份证”就是数字证书

数字证书

网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。

服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”

但又有一个问题,
“证书本身的传输过程中,如何防止被篡改”?
即如何证明证书本身的真实性?
身份证运用了一些防伪技术,而数字证书怎么防伪呢?
解决这个问题我们就接近胜利了!

如何放防止数字证书被篡改?

我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名

数字签名(解决数据篡改问题)

比如:对一个给定的文件/资料,我们可以算出一个MD5;那么将来这个文件/资料将来就无法篡改一丝一毫,否则算出来的MD5马上就不一样了。这就是所谓的“数字签名”。

重复一遍:数字签名的作用是确保文件内容未经篡改。

哈希算法原理
哈希函数是一种摘要函数,它的目的是从一个不限长度的输入,输出一个固定长度比如32位十六进制数(128bit)的字符串。MD5(x)=y。 其中x是任意长度,y是固定长度。这个过程是信息损失的,你不能凭空制造出信息来。比如你有一个小电影,比如一本三国演义,经过哈希后只有32位十六进制数,你不能根据俩字符串脑补出一本三国演义,同样你也不能脑补一步小电影。数据摘要算法不是压缩/加密算法。几百m的东西摘要一下就一个字符串还能逆向的话
恭喜你发现了二十一世纪最强压缩算法。因为信息量缩小了,你不可能从有限的信息量反推出无限的可能,所以是不可逆的。

在这里插入图片描述
数字签名的制作过程:

  1. 签名者使用哈希函数对要签名的文档进行摘要计算,生成一个固定长度的哈希值。
  2. 签名者使用自己的私钥对哈希值进行加密,生成数字签名。
  3. 数字签名与原文一起传输给接收者。
  4. 接收者使用签名者的公钥对数字签名进行解密,得到原文的哈希值。
  5. 接收者使用相同的哈希函数对接收到的原文进行摘要计算,得到一个新的哈希值。
  6. 如果两个哈希值相等,表示文档的完整性和真实性得到验证,且签名者的身份得到确认。

签名者:(明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。)
哈希函数 + 要签名的文档 = 哈希值
私钥 + 哈希值 = 数字签名

数字签名 + 原文(明文)= 数字证书

接受者:(那浏览器拿到服务器传来的数字证书后,如何验证它是不是真的?即有没有被篡改、掉包)
数字签名 + 公钥 = 原文的哈希值
相同的哈希函数 + 接收到的原文 = 新的哈希值

比对两个哈希值

这里的签名者是CA认证机构。

主要技术:

  1. 非对称密钥加密算法: 数字签名使用非对称密钥加密算法,如RSA(Rivest-Shamir-Adleman)和DSA(Digital Signature Algorithm)。这些算法使用两个密钥,一个用于加密(公钥),一个用于解密(私钥)。
  2. 哈希函数: 数字签名使用哈希函数对文档进行摘要计算,生成固定长度的哈希值。常用的哈希函数包括MD5(Message Digest Algorithm 5)和SHA(Secure Hash Algorithm)系列。

中间人有可能篡改该证书吗?

假设中间人篡改了证书的原文,由于他没有CA机构的私钥,所以无法得到此时加密后签名,无法相应地篡改签名。浏览器收到该证书后会发现原文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
所以信息不可能被篡改。

中间人有可能把证书掉包吗?

假设有另一个网站B也拿到了CA机构认证的证书,它想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,这确实会导致上文“中间人攻击”那里提到的漏洞?
其实这并不会发生,因为证书里包含了网站A的信息,包括域名浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。

为什么制作数字签名时需要hash一次?

似乎数字签名时hash有点多余,把hash过程去掉也能保证证书没有被篡改。
最显然的是性能问题,但是非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多。

总结

数字签名是一种加密技术,用于验证数字文档的完整性、真实性和身份。
它使用了公钥密码学的原理和技术,以及哈希函数来实现。

数字签名基于公钥密码学的原理,使用了非对称密钥加密算法。它使用了两个密钥:私钥(私有密钥)和公钥(公共密钥)。
私钥只有文档的签名者(CA机构)拥有,并且必须保密保存。公钥可以被任何人访问。
签名通过使用公钥密码学和哈希函数的组合,实现了对数字文档的完整性、真实性和身份的验证。

其它:私钥,公钥,数字签名的区别
公钥是公开的,私钥是私有的,所以Alice给Bob发消息,就要使用Bob公开的公钥来做加密,Bob再用自己的私钥进行解密即可。简单来说,公钥加密,私钥解密。
数字签名刚好相反,比如大家想对Alice的签名进行验证,那么大家能获取的就是Alice公开的公钥,而签名则由Alice用自己的私钥进行签名。简单来说,私钥签名,公钥验证

参考文档1
参考文档2
参考3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/411651.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端(html+css+javascript)作业--展现家乡的网页

期末期间,老师布置了前端作业,现在放到这里,给各位同志参考。 桂平市是广西壮族自治区的一个美丽的城市,拥有丰富的历史文化和自然景观,属于贵港市管辖,那为什么是看起来是市级而不是县级,其实他…

Java Springboot SSE如何判断客户端能否正常接收消息

目录 背景解决方案思路代码代码解释 Java反射知识点补充 背景 当新建一个 emitter 对象的时候, 它的默认超时时间是 30s. SseEmitter emitter new SseEmitter(); 但是很多情况下, 默认30s的时间太短, 需要把 emitter 对象的超时时间设置成不超时, 也就是永久有效. private …

@PostConstruct 注解分析

一、简介 如果需要在生成对象时就完成某些初始化操作,而且这些初始化操作又依赖于依赖注入Autowired,那么就无法在构造函数中实现。为此,可以使用PostConstruct注解一个方法来完成初始化。PostConstruct注解的方法将会在依赖注入完成后被自动…

lenovo联想笔记本电脑拯救者Legion Y7000 2019 PG0(81T0)原装出厂Windows10系统

链接:https://pan.baidu.com/s/1fn0aStc4sfAfgyOKtMiCCA?pwdas1l 提取码:as1l 联想拯救者原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:…

【AIGC】IP-Adapter:文本兼容图像提示适配器,用于文本到图像扩散模型

前言 IPAdapter能够通过图像给Stable Diffusion模型以内容提示,让其生成参考该图像画风,可以免去Lora的训练,达到参考画风人物的生成效果。 摘要 通过文本提示词生成的图像,往往需要设置复杂的提示词,通常设计提示词变…

Python多线程爬虫——数据分析项目实现详解

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CSDN爬虫爬虫启动将爬取内容存到文件中 多线程爬虫选择要爬取的用户 线程池 爬虫 爬虫是指一种自动化程序,能够模…

【动态规划】23子数组系列_等差数列划分_C++

题目链接:等差数列划分 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求数组 nums 中所有为等差数组的 子数组 个数。 由题可得: 一个等差数列 至少…

mybatis分页、延迟加载、立即加载、一级缓存、二级缓存

mybatis分页、延迟加载、立即加载、一级缓存、二级缓存 分页延迟加载和立即加载缓存一级缓存二级缓存 分页 分类: 使用Limit,来进行分页;物理分页使用RowBounds集合来保存分页需要数据,来进行分页;逻辑分页;本质是全…

【ArcGIS微课1000例】0088:计算城市建筑物朝向(矩形角度)

文章目录 一、实验描述二、实验数据三、角度计算1. 添加字段2. 计算角度四、方向计算一、实验描述 矩形要素具有长轴和短轴,其长轴方向也称为矩形面的主角度,可用于确定面要素的走向趋势。根据该方向参数,可以对具有矩形特征的地理对象进行方向分析,且适用于很多应用场景,…

Chrome 开发者工具

Chrome 开发者工具 介绍控制面板时间线下载信息概要请求列表单个请求时间线优化时间线上耗时项 lighthouse 插件Performance(性能指标)Accessibility(可访问性)Best Practices(最佳实践)SEO(搜索…

hanlp,pkuseg,jieba,cutword分词实践

总结:只有jieba,cutword,baidu lac成功将色盲色弱成功分对,这两个库字典应该是最全的 hanlp[持续更新中] https://github.com/hankcs/HanLP/blob/doc-zh/plugins/hanlp_demo/hanlp_demo/zh/tok_stl.ipynb import hanlp # hanlp.pretrained.tok.ALL # 语种见名称最…

【计算机网络】TCP原理 | 可靠性机制分析(四)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 这里写目录标题 &#x1…