当前位置: 首页 > news >正文

抽象的https原理简介

前言

小明和小美是一对好朋友,他们分隔两地,平时经常写信沟通,但是偶然被小明发现他回给小美的信好像被人拆开看过,甚至偷偷被篡改过。

对称加密算法

开头的通信过程比较像HTTP服务器与客户端的通信过程,全明文传输,第三方比较容易在传输线路的任何节点上抓包获取到传输内容,甚至篡改。

遇到这种事情,小明立刻就想到了要把写信的内容加密再传输,这样就安全了,常见的对称加密算法有好多种:AES、DES、ChaCha20等,他们的共同特点就是加密解密用的是同一个密钥。

剩下的就是得把加密写信的想法以及密钥告诉小美了,但这里就尴尬了,因为小明和小美只能写信沟通,如果小明把密钥放信里寄过去,哪个邪恶的邮递员拆开看了,那么也就拿到了密钥,后续的所有信件他都可以解密查看甚至一样可以篡改。

非对称加密算法

小明意识到只用这种对称加密算法是行不通的,但是聪明的小明马上就想到了可以用非对称加密算法,常见的非对称加密算法:RSA、DSA等,他们的共同特点就是加密解密用的是不同的密钥,俗称公钥和私钥。

公钥加密的内容,只有私钥可以解密出来,私钥加密的内容,也只有公钥可以解密出来。但是这种加密算法很复杂,加解密效率很低,特别是加密内容很长的时候,所以不能用非对称加密算法加密整个信件内容,于是想到让小美每次回信都生成随机的对称密钥,非对称加密算法只用来加解密这个比较短的对称密钥,加解密信件内容还是用效率比较高的对称加密算法。

虽然开始有点绕了,但是这也难不倒小明,他立刻生成了一对公私钥,私钥自己留着,公钥写信寄给小美,并且告诉小美让她随机生成一个对称加密算法密钥,信件内容用这个对称加密算法加密,然后密钥本身再用公钥加密,一起写回信寄回来。

邪恶的邮递员小黑再次截获到了这封信,拆开一看马上就意识到不妙,这封信一旦寄到小美手中,小美按照信中提到的方案加密回信的话,那么世界上就只有具有私钥的小明能解密看懂信件了,这可不行,所以小黑一不做二不休直接自己生成了一对公私钥对,拿自己的公钥替换掉了这封信里的公钥,然后寄给小美。

小美也确实按照这套加密方案加密回信了,但是用的是小黑替换过的公钥,所以小黑可以用他的私钥解密成功了,但是这样的回信肯定不能直接转给小明了,因为公钥被换过小明是解不了的,所以小黑再用之前小明的公钥加密 他已经解密后的内容,再寄给小明,虽然来回的加解密很麻烦,但是总算神不知鬼不觉的完成了信息截获。

数字证书

小明也是马上意识到了这其中的漏洞,冥思苦想还是觉得这个公私钥对不能由自己生成,自己生成的公钥小美完全没办法判断是不是真的。
这时一个权威的第三方大佬大壮出现了,小明可以去大壮那里申请公私钥对,但是这个公钥就不是单纯的公钥了,而是放在一个叫做数字证书的函件里面,函件的内容包含以下信息:

  1. 公钥
  2. 证书归属者:小明
  3. 证书签发者:大壮
  4. 证书签名:以上信息哈希摘要后,用大壮的顶级私钥加密生成的

以上4个信息打包放一起,称之为数字证书。
但是大壮又是如何保证数字证书里的公钥不能被替换呢?这里就的靠证书里的另外3个信息,以及大壮大佬的身份了,大壮和所有的房地产开发商都是合作关系,所有房屋建造完后都内置了大壮的顶级证书,里面包含了大壮的顶级公钥。

之后小明写信直接把从大壮那申请的数字证书带上,同样是要求小美用上一节的方案生成密钥加密传输。这时邪恶的小黑同样拦截到了这封信,并且把证书里的公钥换掉了,再发给小美,小美拆开信首先做的就是把数字证书拿出来,把前三个信息:公钥、证书归属者、证书签发者哈希摘要,然后拿出证书签名用自己家里内置的顶级公钥解密这个签名也得到了一个哈希摘要值,对比两个值居然不一样!说明证书已经被人篡改了,说明有内鬼交易终止!

虽然小黑也可以去大壮那里申请数字证书,但是拿到的数字证书证书归属者会写着小黑,这样就算替换证书,小美一眼就看出来这不是小明的证书了。

至此小黑再也没法偷看小明小美之间的信件了,除非他直接冲到小美家里把她家内置的顶级公钥给换了,或者直接去把大壮的顶级私钥搞到手,当然他是没这个胆子和能力的。

相关文章:

  • React JSX 语法深度解析与最佳实践
  • 第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?
  • React 开放封闭原则详解,构建可扩展的应用
  • React Native 0.79 稳定版发布,更快的工具、更多改进
  • 6、事件处理法典:魔杖交互艺术——React 19 交互实现
  • MySQL数据库安装配置详细教程
  • AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer
  • 网络层IP协议知识大梳理
  • 探寻Gson解析遇到不存在键值时引发的Kotlin的空指针异常的原因
  • docker Windows 存放位置
  • k8s 手动续订证书
  • LoRA个关键超参数:`LoRA_rank`(通常简称为 `rank` 或 `r`)和 `LoRA_alpha`(通常简称为 `alpha`)
  • 从EOF到REOF:如何用旋转经验正交函数提升时空数据分析精度?
  • 万向死锁的发生
  • k8s 下 java 服务出现 OOM 后获取 dump 文件
  • pytest自动化中关于使用fixture是否影响用例的独立性
  • 基于PAI+专属网关+私网连接:构建全链路 Deepseek 云上私有化部署与模型调用架构
  • 【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(三)
  • mvccc
  • 零服务器免备案!用Gitee代理+GitHub Pages搭建个人博客:绕过443端口封锁实战记录
  • 泰安公司网站开发/如何注册百度账号