哈工大计算机网络课程网络安全基本原理之:身份认证

news2024/11/19 13:38:32

哈工大计算机网络课程网络安全基本原理之:身份认证

在日常生活中,在很多场景下我们都需要对当前身份做认证,比如使用密码、人脸识别、指纹识别等,这些都是身份认证的常用方式。本节介绍的身份认证,是在计算机网络安全中的身份认证,从端到端之间通信的角度来看,通信双方的两个实体如何来确认另一方通信实体的真实身份。

身份认证(Authentication)

在介绍身份认证时,我们以一个网络安全的拟人模型,模拟一个场景来讨论一下身份认证的基本原理。为此,假设:

目标:Bob希望Alice“证明”她的身份。(是不是真的Alice还是其他假扮的)

为了讨论身份认证的一般性原理和过程,这里我们假设去设计几个身份认证的协议,来形象化地区分不同协议间在认证过程中的区别,并反映身份认证协议的演进。这里假设的协议我们称为AP。

AP 1.0

这里我们首先观察一个最简单的场景,在这个场景下,Alice为了向Bob证实自己的身份,直接向Bob发送一段信息:“I am Alice”

在这里插入图片描述

作为这样简单的认证方式,显然我们很容易想出可能的认证失效场景:

在这里插入图片描述

在网络中任何另一方Trudy都可以简单的声明自己是“Alice“,因为在网络中,Bob实际上是看不到Alice的。因此,这种简单直接声明的方式是非常不可靠的,要进行身份认证,还需要一些其他的信息。

AP2.0

为此,我们对上述协议做个改进:

AP2.0:Alice在IP分组中声明“I am Alice“,IP分组包含Alice的源IP地址。

在这里插入图片描述

然而在现在的Internet网络中,上述方式仍然是非常不可靠的,因为实际上IP地址也可以有很多方式来伪装和篡改的。

在这里插入图片描述

Trudy可以构造一个IP分组,来伪装成Alice的IP地址,向Bob发送IP分组。

为此,再进一步升级协议。

AP3.0

在AP3.0的改进中,我们借助于日常生活中分辨对方身份的常用方式之一,口令。比如在潜伏者或者间谍对接时,都会有一个密令,两个人分别有密令的上句和下句。如果碰头时,两句话对上了,则能够成功辨别对方身份,碰头成功。

因此在AP3.0中,我们也加入口令这个概念:

AP3.0:Alice声明“I am Alice"的同时,发送她的秘密口令进行“证明”

在这里插入图片描述

在现在网络使用中,我们实际上也会经常用到以上场景,比如登陆网站时需要输入用户名和密码等。

但这种方式,在一些更严苛的场景来说,事实上仍然存在风险。其中最典型的一种失效场景就是嗅探。

在这里插入图片描述

比如说Trudy可以利用嗅探工具,在Alice或Bob端的网络进行嗅探,嗅探Alice给Bob发送的分组。通过对这个分组的分析,如果这个口令包含在分组中,就可以把口令提取出来。之后,Trudy就可以假扮成Alice向Bob发送带有口令的IP分组。

从更简单的结果来说,就比如账号被盗这样的结果,就是一种上述口令身份认证失效的场景。

为了避免嗅探,通常可以不在传输的IP分组中使用明文的口令,而是把该口令进行加密再传输(Alice与Bob之间共享对称密钥,然后按照某个加密算法进行加密)。因此,基于上面的思想,我们对AP3.0协议再改进一下。

AP3.1

协议AP3.1:Alice声明“I am Alice“的同时,发送她的加密的秘密口令进行“证明”。

在这里插入图片描述

在AP3.1中,Alice向Bob发送的IP分组中,就包含了加密的口令,Bob收到后,利用对称密钥进行解密后进行身份认证。那么这种方式是否就是绝对安全的了呢?

实际上,这种方式也无法绝对安全,尤其在网络中存在很多攻击,其中一种就是所谓的回放攻击(playback attack),即第三方Trudy可以使用工具截获Alice与Bob间通信的分组。虽然Trudy无法对加密的口令进行解密,但是它可以把加密的口令原封不动记录下来。之后,它只需要把这个加密的口令放到分组中发送给Bob即可,相当于把这个截获的分组“回放”给Bob,此时Bob端也会认为这个分组是Alice发送的。

因此,即使AP3.1中,对口令进行了加密,也仍然存在被攻击的漏洞和风险。因此,我们还需要进一步地进行改进。而改进的方向来说,在协议3.1中之所以会被攻克,是因为没有办法预防“回放攻击”,为此在改进的协议中,就是要找到一种机制能够避免“回放攻击”。

AP4.0

目标:避免“回放攻击”

解决方案:即使第三方记录了某次传输分组中的加密口令,但在将来再次使用时是无效的。换句话说,口令只在当前传输分组中有效,下次同样的口令就无效了。

为此在协议AP4.0中引入这样 “一次性随机数(nonce)“概念:一个生命期内只用一次的数R。

协议AP4.0:为了证明是“真实的”Alice,Bob向Alice发送一个随机数R,Alice必须返回R,并利用共享密钥进行加密。过程如下所示:

在这里插入图片描述

  • Alice向Bob声明自己的身份,发送“I am Alice“。
  • 但是Bob仅以此无法判断Alice身份,在AP4.0协议中,Bob会返回一个不重复的随机数R
  • Alice在接收到返回的随机数R后,为了证明她是真实的Alice,会利用Alice与Bob间共享的对称密钥,对随机数R进行加密,然后返回给Bob
  • Bob接收到这个加密随机数R后,会利用共享的对称密钥进行解密,解密后与之前发送给Alice的明文随机数R进行比对,如果匹配成功,则Bob可以确认Alice的真实身份。

上述流程的关键在于,只有Alice和Bob之间才拥有一对共享的对称密钥,并以此来对随机数R进行加解密。

但这也正是AP4.0协议仍然存在的不足,其实也是对称加密方法的不足。在对称加密方法中,两端之间需要一个共享密钥,而这个共享密钥在网络传输中是可能被截获的,一旦这个密钥被截获,那剩下的通信过程一定都是不再安全的。

为此,更进一步的自然会想到,在对称加密的方式上进行改进,使用非对称加密方式,利用公钥技术来进行加密。

AP 5.0

协议AP5.0:利用一次性随机数以及公钥加密技术。

使用公钥加密技术后,认证过程变成以下过程:

  • Alice向Bob发送身份认证:“I am Alice“
  • Bob为了证实Alice的真实身份,且不是“回放攻击”的,会向Alice返回一个随机数R
  • Alice会利用自己的私钥对收到的随机数R进行加密,将密文发送给Bob
  • Bob接收到后,需要再次向Alice发送请求,申请获取Alice的公钥
  • Alice将公钥返回给Bob
  • Bob根据该公钥,对加密的随机数R进行解密,再与之前的明文随机数R进行比对,如果匹配,则能够证实Alice的身份。

在这里插入图片描述

上述方式,私钥是唯一保存在Alice身上的,其他第三方是没有该私钥的,因而也就无法构成出相同的使用该私钥加密的密文。而私钥是不会在网络中进行传输的,减轻了被截获的风险。

但但是…,是的,即使如此,协议AP5.0还是仍然存在风险(悲伤…),这个风险漏洞就是中间人攻击(man in the middle attach)

什么是中间人攻击问题呢?

假设Alice与Bob之间进行通信,作为第三方入侵者Trudy介入两者通信之间,对于Alice她扮演Bob,对于Bob她扮演Alice。所有Alice和Bob之间的通信,全部被Trudy进行截获,使得Alice和Bob分别都以为他们实际上是与对方在通信。

在这里插入图片描述

中间人攻击这整个过程可以如上图所示,过程大致如下:

  • Alice在向Bob声明自己身份时,发送“I am Alice“,然后被中间人Trudy截获了,Trudy把这个信息转发给Bob。

  • 按照协议AP5.0,Bob会返回一个随机数R给Alice,同样被Trudy截获。

  • 此时,Trudy会用它自己的私钥对随机数R加密后,返回给Bob。同时,Trudy又会把R发送给Alice。

  • Alice会用自己的私钥加密后,返回给Bob,同样被Trudy截获。

  • 由于Bob收到的加密随机数R是由Trudy返回的,Trudy可能通过修改包含R的IP分组的源IP地址等方式,让Bob把Trudy的IP地址当成了Alice,因为Bob会向Trudy请求公钥来解密。

  • 作为Trudy,会把她自己的公钥返回给Bob。同时,由于上面Alice用自己的私钥加密后被Trudy截获,所以Trudy也会向Alice所要公钥。

  • Alice把公钥返回给Trudy。

  • 由于Bob利用Trudy返回的公钥解密后,与之前发送的明文随机数R比对后发现匹配,则通过认证。此时,Bob就完全认为Trudy就是Alice了。

  • 此后,如果Bob和Alice之间通信的话,Bob就会用之前Trudy的公钥(Bob以为是Alice的公钥,实际上是Trudy的公钥)加密数据后发送。Bob以为发送给Alice,实际上发送给了Trudy。

  • Trudy用自己的私钥解密后获取了明文,再用之前Alice返回的公钥进行加密,再返回给Alice。

这一过程我们看到,Bob和Alice之间的所有通信信息,都已经被一个中间入侵者Trudy截获了,而且Bob和Alice还无法感知,仍然以为是与对方在安全通信。因此,事实上这种中间人攻击也确实存在着很难被检测的问题。

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

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

相关文章

flask处理表单数据

flask处理表单数据 处理表单数据在任何 web 应用开发中都是一个常见的需求。在 Flask 中,你可以使用 request 对象来获取通过 HTTP 请求发送的数据。对于 POST 请求,可以通过 request.form 访问表单数据。例如: from flask import Flask, r…

设置Fiddler来抓取Android接口数据

1.下载安装fiddler,安装包可自行百度。安装完成打开fiddler 2.将Fiddler设置远程访问PC 选择Fiddler->Tools->Fiddler Option 3.选择Connection,在Fiddler listen on port后输入8888,表示允许远程PC连接。 4.在电脑运行窗口中&#xf…

Leetcode145. 二叉树的后序遍历

题目描述 题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-postorder-traversal/description/ 代码实现 class Solution {List<Integer> tree new ArrayList<>();public List<Integer> postorderTraversal(TreeNode root) {postorder(ro…

深度学习实践——卷积神经网络实践:裂缝识别

深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 深度学习实践——卷积神经网络实践&#xff…

Android SDK 上手指南||第一章 环境需求||第二章 IDE:Eclipse速览

第一章 环境需求 这是我们系列教程的第一篇&#xff0c;让我们来安装Android的开发环境并且把Android SDK运行起来&#xff01; 介绍 欢迎来到Android SDK入门指南系列文章&#xff0c;如果你想开始开发Android App&#xff0c;这个系列将从头开始教你所须的技能。我们假定你…

NOSQL之Redis配置及优化

目录 一、关系型数据库 二、非关系型数据库 三、关系型数据库和非关系型数据库区别 1、数据存储方式不同 2、扩展方式不同 3、对事务性的支持不同 四、Redis简介 五、Redis优点 &#xff08;1&#xff09;具有极高的数据读写速度 &#xff08;2&#xff09;支持丰富的…

软件架构师——1、计算机组成与体系结构

计算机结构 &#xff08;★&#xff09; 运算器&#xff1a; 算术逻辑单元ALU&#xff1a;数据的算术运算和逻辑运算累加寄存器AC&#xff1a;通用寄存器&#xff0c;为ALU提供一个工作区&#xff0c;用于暂存数据数据缓冲寄存器DR&#xff1a;写内存时&#xff0c;暂存指令或…

Nginx 如何根据swagger关键字屏蔽页面

目录 一、知识回顾1.什么是 location2.location 语法3.location 的匹配规则4.优先级排序 二、如何根据关键字筛选请求1.实现方案2.测试结果 一、知识回顾 1.什么是 location Nginx 中通过根据 location 块的规则来将匹配到的 URL 请求进行一系列操作&#xff0c;最常见的就是…

【C++】STL——stack的介绍和使用、stack的push和pop函数介绍和使用、stack的其他成员函数

文章目录 1.stack的介绍2.stack的使用2.1stack构造函数2.1stack成员函数&#xff08;1&#xff09;empty() 检测stack是否为空&#xff08;2&#xff09;size() 返回stack中元素的个数&#xff08;3&#xff09;top() 返回栈顶元素的引用&#xff08;4&#xff09;push() 将元素…

QT数据库编程

ui界面 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QButtonGroup> #include <QFileDialog> #include <QMessageBox> MainWindow::MainWindow(QWidget* parent): QMainWindow(parent), ui(new Ui::M…

递归算法判断是否是“平衡二叉树”

题目&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true 解…

【Unity2D】粒子特效

为什么要使用粒子特效 Unity 的粒子系统是一种非常强大的工具&#xff0c;可以用来创建各种各样的游戏特效&#xff0c;如火焰、烟雾、水流、爆炸等等。使用粒子特效可以使一些游戏动画更加真实或者使游戏效果更加丰富。 粒子特效的使用 在Hierarchy界面右键添加Effects->…

ICASSP 2023 | Cough Detection Using Millimeter-Wave FMCW Radar

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486540&idx1&sn6ebd9f58e9f08a369904f9c48e12d136&chksmcf51beb5f82637a3c65cf6fa53e8aa136021e35f63a58fdd7154fc486a285ecde8b8521fa499#rd ICASSP 2023 | Cough Detection Usi…

【Golang 接口自动化01】使用标准库net/http发送Get请求

目录 发送Get请求 响应信息 拓展 资料获取方法 发送Get请求 使用Golang发送get请求很容易&#xff0c;我们还是使用http://httpbin.org作为服务端来进行演示。 package mainimport ("bytes""fmt""log""net/http""net/url&qu…

vue基础-key的作用

vue基础-key的作用 1、无key2、有key&#xff0c;值为索引3、有key&#xff0c;值为id 1、无key 最大限度尝试就地修改/复用相同类型元素 2、有key&#xff0c;值为索引 有key属性&#xff0c;基于key来比较新旧虚拟DOM&#xff0c;移除key不存在的元素 3、有key&#xf…

学习笔记——压力测试案例,监控平台

测试案例 # 最简单的部署方式直接单机启动 nohup java -jar lesson-one-0.0.1-SNAPSHOT.jar > ./server.log 2>&1 &然后配置执行计划&#xff1a; 新建一个执行计划 配置请求路径 配置断言配置响应持续时间断言 然后配置一些查看结果的统计报表或者图形 然后我…

一篇文章彻底搞懂TCP协议!

文章目录 1. TCP协议的引入2. TCP协议的特点3. TCP协议格式3.1 序号与确认序号3.2 发送缓冲区与接收缓冲区3.3 窗口大小3.4 六个标志位 4. 确认应答机制5. 超时重传机制6. 连接管理机制6.1 三次握手6.2 四次挥手 7. 流量控制8. 滑动窗口9. 拥塞控制10. 延迟应答11. 捎带应答12.…

FFmpeg5.0源码阅读——av_interleaved_write_frame

摘要&#xff1a;本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数av_interleaved_write_frame的实现。   关键字&#xff1a;av_interleaved_write_frame   读者须知&#xff1a;读者需要熟悉ffmpeg的基本使用。 1 基本调用流程 av_interleaved_write_frame的基本…

python文件处理方式

python文件处理方式 file open(D:\pythonText.txt, r, encodingUTF-8) print(file) # <_io.TextIOWrapper nameD:\\pythonText.txt moder encodingUTF-8> print(type(file)) # <class _io.TextIOWrapper>读取文件 file open(D:\pythonText.txt, r, encodingU…