【网络编程】https协议——加密与窃密的攻防战

news2024/11/15 7:09:33


目录

一、https协议的介绍

二、加密和解密

1、加密和解密的过程

2、为什么需要加密和解密

3、常见的加密方式

3.1对称加密

3.2非对称加密

3.3数据摘要(数据指纹)

3.4数字签名

三、https加密解密的方式选择和中间人攻击的方式

1、只使用对称加密(×)

2、一方使用非对称加密(×)

3、双方都使用非对称加密(×)

4、使用非对称加密+对称加密(×)

5、中间人攻击方式

6、https协议引入数字证书

6.1什么是数字证书

6.2什么是数据签名

7、使用非对称加密+对称加密+数字证书(√)

四、https协议总结


一、https协议的介绍

http协议内容都是按照⽂本的⽅式明⽂进行传输,这就导致在传输过程中信息被轻易窃取、篡改。

https协议属于应用层协议之一,是在http协议的基础上引⼊了⼀个加密层。如果一方是使用https协议进行发送的,那么接收的一方也必定是https协议。https协议保障了数据在网络中的安全。我们可以根据其所绑定的端口号来区分是http协议还是https协议。

二、加密和解密

1、加密和解密的过程

        加密就是把明⽂(要传输的信息)进行⼀系列变换, ⽣成密文;解密就是把密⽂再进⾏⼀系列变换, 还原成明文。

2、为什么需要加密和解密

        因为http的内容是明文传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被对⽅察觉,这就是中间人攻击 ,所以我们才需要对信息进⾏加密。

3、常见的加密方式

3.1对称加密

• 采用单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的。

• 常见对称加密算法(了解一下):DES、3DES、AES、TDEA、Blowfish、RC2等

• 特点:算法公开、计算量⼩、加密速度快、加密效率高

        对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密文, 并且也能把密⽂解密成明文。

        按位异或就是⼀个简单的对称加密,不过HTTPS 中并不是使用按位异或。

3.2非对称加密

        需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

• 常见非对称加密算法(了解):RSA,DSA,ECDSA

• 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。 公钥和私钥是配对的. 最⼤的缺点就是运算速度非常慢,比对称加密要慢很多。公钥可以认为是一把锁,私钥是锁的钥匙,锁给谁都行,但是只有持有私钥的人才能打开。

• 通过公钥对明文加密, 变成密文;通过私钥对密⽂解密, 变成明⽂

当然也可以反着用:

• 通过私钥对明⽂加密, 变成密文;通过公钥对密⽂解密, 变成明⽂

3.3数据摘要(数据指纹)

• 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改,如果对数据某个地方进行小小的改动,重新生成的哈希摘要也和改动前的大不一样。

• 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)

• 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行前后数据的对比,观察数据是否被修改过,也可以用于实现网盘的秒传功能、公司数据库密码存储等

        涉及到用户密码的字段,都是要加密的。一般数据库中的密码字段,长度是固定的(便于设计表结构),会将用户密码生成哈希摘要。每次用户登录时都将转换成哈希摘要与数据库的哈希摘要进行对比,所以数据库泄露也不怕。

3.4数字签名

• 对摘要经过加密,得到的就是数字签名。签名的形成是基于非对称加密算法。

三、https加密解密的方式选择和中间人攻击的方式

网络通信中,需要解决1、数据被监听2、数据被篡改

对称加密解密速度快,非对称加密解密速度慢。

1、只使用对称加密(×)

        如果通信双方只使用一个密钥进行加密通信,那么完全可以实现加密通信,除非密钥被破解。但是一台服务器将来可能会面对多个客户端,每个客户端的密钥肯定得不一样,如果只使用对称加密,那么服务器咋知道每一台客户端的密钥是啥?所以在进行正常的加密数据通信之前,需要先解决密钥如何被对方安全收到的问题。所以仅使用对称加密是行不通的。

2、一方使用非对称加密(×)

        非对称加密既可以使用公钥加密,也可以使用私钥加密。但是使用公钥加密必须使用私钥解密,使用私钥加密必须使用公钥解密。

        只使用非对称加密,可以保证客户端->服务器的通信是安全的,但是服务器返回给客户端响应是不安全的,因为服务器发送响应给客户端时,手里有公钥和私钥,使用公钥加密的密文发给客户端,客户端没有私钥,解不了密;那响应的时候把私钥用传过去行不行?不行的,因为私钥一但暴露到公网中,就可能被劫持,黑客拿到私钥原地破解密文。

3、双方都使用非对称加密(×)

        既然单方使用非对称加密只能保障一个方向的通信安全,那么双方都使用非对称加密不就可以实现通信的安全了吗。

        客户端和服务器各自拥有一对公钥和私钥,开始通信时互相给对方推送明文公钥,后续双方信息将由对方提供的公钥加密后推送至对方,双方使用手中的私钥对密文进行解密。

        但是这种加密方式仍存在问题,第一个问题是通信速度慢,第二个问题是这种加密解密方式仍然存在安全问题。

4、使用非对称加密+对称加密(×)

        使用非对称加密使双方知道对称密钥,后续再使用对称加密的方式进行通信。

        只有首次使用了非对称加密,后续所有的通信都将采用对称加密,大大提高了通信速度。但是这种加密解密的方式也存在安全问题,这个安全问题和本章第三节的安全问题一模一样。因为中间人可能一开始就已经介入了。

5、中间人攻击方式

        细节见图,该场景的本质问题是服务器在返回公钥的时候,被中间人截取并替换了公钥,并且客户端没有能力辨别公钥是否合法。

        所以需要客户端具有判别公钥是否合法的能力。

6、https协议引入数字证书

6.1什么是数字证书

        服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。客户端向服务器请求公钥时,服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如⾝份证,是服务端公钥的身份证明。

        这个证书可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:证书发布机构、证书有效期、公钥、证书所有者、签名等。

        申请证书的时候,需要在特定平台⽣成CSR,同时⽣成公钥和私钥。这对密钥就是用来在⽹络通信中进行明文加密以及数字签名时使用的。

        其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端自己保留,后续用于通信使用(主要就是⽤来交换对称密钥)

6.2什么是数据签名

        当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专门为该⽹站形成数字签名,过程如下:

1. CA机构拥有非对称加密的私钥A和公钥A'

2. CA机构对服务端申请证书的明⽂数据进⾏hash,形成数据摘要

3. 然后对数据摘要用CA私钥A'加密,得到数字签名S

        服务端申请的证书明文和数字签名S 共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了

注意:每一个浏览器都内置了受信任的证书发布机构的公钥。

7、使用非对称加密+对称加密+数字证书(√)

        在客户端和服务器刚⼀建⽴连接的时候, 服务器给客⼾端返回数字证书,证书明文包含了服务端的公钥, 也包含了⽹站的⾝份信息等。

        即使证书被中间人窃取,中间人也做不了什么。例如我现在要访问CSDN首页:

        1、如果中间人修改证书中的明文信息,由于中间人没有CA机构的私钥,无法生成被修改明文的密文。如果直接转交给客户端,客户端用内置的CA公钥对密文进行解密,同时对明文数据进行哈希,两份哈希值一比对就会发现证书信息被篡改。

        2、同样的,如果中间人直接掉包整个CA证书(必须是真的CA证书,假的CA证书无法被浏览器内置公钥解密),客户端一解密,就会发现证书的域名和请求服务器的域名不一致,客户端就会发现服务端给的证书中的信息内容对不上。

        客户端拿到证书也就拿到了服务端的公钥,再使用该公钥对对称密钥进行加密,将密文发送给服务端,中间人同样无法对此密文进行解密(因为该密文私钥在服务端手上),服务端拿到密文后使用私钥对密文进行解密,就获得了对称密钥,后续客户端、服务器双方使用对称密钥进行通信即可。因为引入了CA证书,保证了信息的安全性,整个通信过程中间人只能干瞪眼。

四、https协议总结

https协议通过引入CA证书保证数据传输的安全性。

https整个工作过程中涉及的密钥有三组:

第⼀组(非对称加密): CA机构给的非对称密钥对,⽤于校验证书是否被篡改。

服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥)。

第⼆组(非对称加密):服务端生成的非对称密钥对,用于协商⽣成对称加密的密钥。

第三组(对称加密): 客户端生成的对称密钥,客⼾端和服务器后续传输的数据都通过这个对称密钥进行加密解密。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JUC 高并发编程基础篇

JUC 高并发编程基础篇 • 1、什么是 JUC • 2、Lock 接口 • 3、线程间通信 • 4、集合的线程安全 • 5、多线程锁 • 6、Callable 接口 • 7、JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore • 8、读写锁: ReentrantReadWriteLock • 9、阻塞队列 • 10、ThreadPo…

Android12之MediaMetricsService服务(一百五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

谷歌云 | 你需要知道的关于软件开发中的人工智能

【本文由 Cloud Ace 整理,Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌…

底层课程导学

目录 一、底层导学 1.课程回顾 2.嵌入式系统分层 3.Linux层次结构 二、ARM课该怎么学 1.课程内容 2.学习方法 三、计算机基础知识 1.计算机的进制 2.总线 四、ARM存储模型 1.三级存储结 五、CPU工作原理 1.CPU工作原理 2.指令的执行过程 3.地址空间 六、ARM体系结构 1.ARM处理器…

自动化测试实战项目(二)连连看外挂

自动化测试和做外挂的原理很相似,都是模拟用户的鼠标和键盘操作, 给自己的程序写自动化就是做测试,给别人的程序写自动化就是外挂了。 本文使用的技术也同样适用制作“对对碰”,"找茬" 之类游戏的外挂。 阅读目录 QQ连连看外挂实…

《面试1v1》垃圾回收机制

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官: 小伙子,跟我聊聊垃圾回收机制吧。什么是垃圾?怎么回收? 候选人: 好的面试官,来吧!垃圾就是那些不再被程序使用的对象。Java 通过…

Spring Boot定时任务

目录 1.概述 2.Spring Boot定时任务 2.1.快速使用 2.2.cron表达式 3.业务示例 3.1.业务描述 3.2.业务实现 4.实现原理 5.自定义线程池 1.概述 在某些业务场景中,需要定时执行一些任务,有可能是定时统计然后生成报表,有可能是定时发…

Python自定义函数

目录 1. 语法 2. 常见用法 2.1. 函数的返回值 2.2. 函数互相调用 3. 实战练习 3.1. 定义执行Linux命令的函数 1. 语法 #定义函数 def 函数名(参数1, 参数2):函数体(代码块)......#调用函数(定义函数时使用了参数,调用也必须使用参数) 函数名(参数1, 参数2) 定…

React学习6 路由

SPA的理解 单页Web应用(single page web application,SPA)。整个应用只有一个完整的页面。点击页面中的链接不会刷新页面,只会做页面的局部更新。数据都需要通过ajax请求获取, 并在前端异步展现。 什么是路由? 一个路由就是一个…

网络连接管理除了TCP三次握手,还有TCP四次挥手

网络连接管理除了TCP三次握手,还有TCP四次挥手 TCP三次握手,TCP四次挥手 网络连接管理除了TCP三次握手,还有TCP四次挥手TCP三次握手TCP四次挥手总结 TCP三次握手 网络通信建立连接,TCP会进行三次握手,三次握手主要是两…

【叠高高】叠蛋糕游戏的微信小程序开发流程详解

记得小时候玩过的搭积木游戏吗,和叠高高游戏原理差不多的,与之类似的还有盖高楼游戏,就是看谁盖的(叠的)最高,这里讲一下比较基础的叠高高游戏小程序实现过程,对编程感兴趣的同学可以参考学习一…

Linux Shell 实现一键部署Rust1.69

rust 前言 一门赋予每个人,构建可靠且高效软件能力的语言。 全世界已有数百家公司在生产环境中使用 Rust,以达到快速、跨平台、低资源占用的目的。很多著名且受欢迎的软件,例如 Firefox、 Dropbox 和 Cloudflare 都在使用 Rust。从初创公司…

网络安全工程师的入门学习路径,年薪30W不是梦!

最近看到网上有很多人在问诸如:“怎样成为网络信息安全工程师”等相关问题,这可能与近几年网络安全事件频发,国家对于互联网信息安全和互联网舆情的重视程度不断提升有关,网络信息安全工程师随之成为炙手可热的职业。 首先&#…

Web的基本漏洞--文件包含漏洞

目录 一、文件包含漏洞的介绍 1.文件包含漏洞的原理 2.常见的文件包含函数 3.文件包含漏洞的分类 本地文件包含漏洞 远程文件包含漏洞 3.文件包含漏洞的危害 4.文件包含漏洞的防范措施 5.文件包含漏洞的绕过手法 空字符绕过 超长字符绕过 一、文件包含漏洞的介绍 1…

5年经验之谈:月薪3000到30000,测试工程师的变“行”记

自我介绍下,我是一名转IT测试人,我的专业是化学,去化工厂实习才发现这专业的坑人之处,化学试剂害人不浅,有毒,易燃易爆,实验室经常用丙酮,甲醇,四氯化碳,接触…

你需要知道的 Selenium4 新特性

前言 最近又用到了Selneium,发现已经来到了 4.9 版本了。本篇文章来介绍下它较比 Selenium3 的一些新特性。 记录下,当是做笔记了。 最令人惊喜的是,Selenium4 会自动回收浏览器资源。 本文所使用的 Selenium 版本为 4.9.9 知识点&#x1f4…

开发一个收废品小程序步骤

随着环保意识的提升和可持续发展的迫切需求,废品回收成为了一个重要的议题。预约上门回收小程序的开发为用户提供了方便、快捷的废品回收服务,促进了废品资源的再利用和环保行动的推进。本文将介绍开发预约上门回收小程序的流程,以帮助开发人…

java12--本章作业

1. 第1题 public class Hello{public static void main(String[] args){Person[] persons new Person[3];persons[0] new Person("zsq", 18, "学生");persons[1] new Person("zzq", 19, "大学生");persons[2] new Person("zq…

【leetcode】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 1、问题描述2、解决方案2.1、动态规划2.1.1、问题分析2.1.2、代码实现 2.2、单调栈 1、问题描述 1130. 叶值的最小代价生成树 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。数…

一文3000字实现基于Selenium+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…