【网络安全】在网络中如何对报文和发送实体进行鉴别?

目录

1、报文鉴别

(1)使用数字签名进行鉴别

(2)密码散列函数

(3)报文鉴别码

2、实体鉴别


        鉴别(authentication) 是网络安全中一个很重要的问题。

        一是要鉴别发信者,即验证通信的对方的确是自己所要通信的对象,而不是其他的冒充者。这就是实体鉴别。实体可以是发信的人,也可以是一个进程(客户端或服务器)。因此这也常称为端点鉴别。

        二是要鉴别报文的完整性,即对方所传送的报文没有被他人篡改过。

1、报文鉴别

(1)使用数字签名进行鉴别

        我们知道,书信或文件可根据亲笔签名或印章来鉴别其真实性。那么在计算机网络中传送的报文,则可使用数字签名进行鉴别。

      为了进行数字签名,A 用其私钥 SK_{A} 对报文 X 进行 D 运算。D 运算本来叫作解密运算,可是,还没有加密怎么就进行解密呢?其实 D 运算只是把报文变换为某种不可读的密文(扮演了加密角色)。A 把经过 D 运算得到的密文传送给 B。B 为了核实签名,用 A 的公钥进行 E 运算,还原出明文 X。//数字签名原理,只有私钥持有者才能进行签名

        请注意,任何人用 A 的公钥 PK_{A} 进行 E 运算后都可以得出 A 发送的明文。可见上述通信方式并非是为了保密,而是为了进行签名和核实签名,即确认此明文的确是 A 发送的。

        所以,知道为什么数字签名具有不可否认性了吧?

        因为除 A 外没有别人持有 A 的私钥 SK_{A},所以除 A 外没有别人能产生密文 D_{SK_{A}}(X)。这样,B 确信报文 X 是 A 签名发送的。这就鉴别了报文的发送者。同理,其他人如果篡改过报文,但由于无法得到 A 的私钥 SK_{A} 对篡改后的报文进行 D 运算,那么 B 对收到报文后,进行核实签名的 E 运算,将会得出不可读的明文,因而不会被欺骗。这样就保证了报文的完整性。

        不过数字签名仅对报文进行了签名,却未对报文 X 本身保密。因为如果有人截获到密文D_{SK_{A}}(X),并知道发送者身份,若通过某种手段获得了发送者的公钥 PK_{A},就能解出报文的内容。

        那如何才能同时实现保密通信和数字签名呢?

        如上图所示,图中 SK_{A} 和 SK_{B} 分别为 A 和 B 的私钥,而 PK_{A} 和 PK_{B} 分别为 A 和 B 的公钥。

        我们首先用 A 的私钥对明文 X 进行签名,得到 D_{SK_{A}}(X),然后,再用 B 的公钥对此签名内容进行加密,得到 E_{PK_{B}}(SK_{A}(X)),通过这种方式,就同时实现了保密通信和数字签名。

        不过,上图所示的方法虽然在理论上是正确的,但很难用于现实生活中。这是因为要对报文(可能很长的报文)先后要进行两次 D 运算和两次 E 运算,这种运算量太大,要花费非常多的 CPU 时间,这在很多情况下是无法令人接受的。//非对称加密的计算量大

        因此目前对网络上传送的大量报文,普遍都使用开销小得多的对称密钥加密。要实现数字签名当然必须使用公钥密码,但一定要设法减小公钥密码算法的开销,所以就有了密码散列函数报文鉴别码//减少算法开销,提高加密性能

(2)密码散列函数

        散列函数(又称为杂凑函数,或哈希函数)在计算机领域中使用得很广泛。密码学对散列函数有非常高的要求,因此符合密码学要求的散列函数又常称为 密码散列函数(cryptographic hash function)

        散列函数 H(X) 一般具有以下四个特点:

        (1)散列函数采用确定算法,因此相同的输入必定得出相同的输出。

        (2)散列函数的输出不可避免的会产生碰撞现象。因此,精心挑选的密码散列函数应当非常不易发生碰撞,即应具有很好的抗碰撞性//Hash冲突

        (3)若给出散列值 H(X),则无人能找出输入的报文 X。也就是说,散列函数是一种单向函数(one-way function),即逆向变换是不可能的//不可逆

        (4)散列函数输出的每一个比特,都与输入的每一个比特有关;哪怕仅改动输入的一个比特,输出也会相差极大

        目前,比较出名的密码散列函数有 MD5 SHA-1。MD 就是 Message Digest 的缩写,意思是报文摘要,MD5 就是指报文摘要的第 5 个版本。不过随着技术的发展,MD5 的安全性产生了动摇,于是 MD5 最终被 安全散列算法SHA(Secure Hash Algorithm) 的标准所取代。//散列函数的历史

        MD5 算法的大致过程如下:

  1. 先把任意长的报文按模 2^{64} 计算其余数(64位),追加在报文的后面。
  2. 在报文和余数之间填充 1~512 位,使得填充后的总长度是 512 的整数倍。填充的首位是 1,后面都是 0。
  3. 把追加和填充后的报文分割为许多 512 位的数据块,每个 512 位的报文数据再分成 4 个 128 位的数据块依次送到不同的散列函数进行 4 轮计算。每一轮又都按 32 位的小数据块进行复杂的运算。一直到最后计算出 MD5 报文摘要代码(128位)。

        这样得出的 MD5 报文摘要代码中的每一位都与原来报文中的每一位有关。由此可见,像 MD5 这样的密码散列函数实际上已是个相当复杂的算法,而不是简单的函数了。

(3)报文鉴别码

        使用报文鉴别码对报文进行鉴别的一般步骤:

  1. 用户 A 首先根据自己的明文 X 计算出散列 H(X)(例如,使用 MD5)。为简单起见,我们把得出的散列 H(X) 记为 H。//在明文后加散列值,确保内容不被更改
  2. 用户 A 把散列 H 拼接在明文 X 的后面,生成了扩展的报文 (X, H),然后发送给 B。
  3. 用户 B 收到了这个扩展的报文 (X,H)。因为散列的长度 H 是早已知道的固定值,因此很容易把收到的散列 H 和明文 X 分离开。B 通过散列函数的运算,计算出所收到的明文 X 的散列 H(X)。若 H(X) = H,则 B 就认为所收到的明文是 A 发送过来的。//一旦内容更改,散列值就对不上

        但是,以上步骤有一个问题,如果某个入侵者创建了一个伪造的报文 M,然后也用同样的方法计算出其散列 H(M),并且冒充 A 把拼接有散列的扩展报文发送给 B。B 收到扩展的报文 (M,H(M)) 后,按照上面步骤的方法进行验证,发现一切都是正常的,就会误认为所收到的伪造报文就是 A 发送的。//也就是说,不改变部分报文,而是篡改整个报文,上述步骤就验不出来了,缺点就在于简单的散列并没有加入用户A的特有标记

        那如何解决伪造整段报文的问题呢?

        那就是给每一个报文都打上 A 特有的标记,办法可以是:A 把双方共享的密钥 K(K就是一串不太长的字符串)拼接到报文 X 后,进行散列运算。散列运算得出的结果为固定长度的 H(X+K),称为 报文鉴别码 MAC (Message Authentication Code)。A 把报文鉴别码 MAC 拼接在报文 X 后面,得到扩展的报文,发送给 B,如下图所示://加入A的密钥K进行散列

        B 收到扩展的报文后,把报文鉴别码 MAC 与报文 X 进行分离。B 再用同样的密钥 K 与报文 X 拼接,进行散列运算,把得出的结果 H(X+K) 与分离出的报文鉴别码 MAC 进行比较。如相等,就可确认收到的报文 X 的确是 A 发送的。

        所以,只要入侵者不掌握密钥 K,就无法伪造 A 的报文鉴别码 MAC,因而无法伪造 A 发送的报文。像这样的报文鉴别码称为数字签名,或数字指纹

        但是,又怎样安全有效的来分发通信双方共享的密钥 K 呢?

        一种可行的方法是采用公钥系统,具体方式如下图所示:

        用户 A 对报文 X 进行散列运算,得出固定长度的散列 H(X)。用自己的私钥对 H(X) 进行 D 运算(也就是用私钥进行加密),得出已签名的但非固定长度的报文鉴别码 MAC。

        请注意,这里没有对报文 X 进行加密,而是对很短的散列 H(X) 进行 D 运算,因此这种运算仍然是很快的。A 把已签名的非固定长度的报文鉴别码 MAC,拼接在报文 X 后面,构成扩展的报文发送给 B。//原理:A用自己的私钥进行签名,B用A的公钥进行鉴别

        B 收到扩展的报文后,先进行报文分离。虽然 B 不知道已签名的报文鉴别码的长度,但由于报文 X 是明文,其结束处可以设有标记,因此分离出 MAC 不困难。分离后,B 对报文 X 进行散列函数运算,同时用 A 的公钥对分离出的已签名的报文鉴别码 MAC 进行 E 运算(也就是用公钥进行解密)。最后对这两个运算结果 H(X) 进行比较。如相等,就说明一切正确。由于入侵者没有 A 的私钥,因此不可能伪造出 A 发出的报文。

        所以,采用这种方法得到的扩展的报文,不仅是不可伪造的,也是不可否认的。

2、实体鉴别

        实体鉴别和报文鉴别不同。报文鉴别是对每一个收到的报文都要鉴别报文的发送者,而实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次。//需要验证的次数不一样

        简单的实体鉴别过程:

        如下图,A 向远端的 B 发送带有自己身份(例如,A 的姓名)和口令的报文,并且使用双方约定好的共享对称密钥 K_{AB} 进行加密。B 收到此报文后,用共享对称密钥 K_{AB} 进行解密,从而鉴别实体 A 的身份。//给出系统的身份验证信息

        那么问题来了,例如,入侵者 C 可以从网络上截获 A 发给 B 的报文,C 并不需要破译这个报文(因为破译可能很费时间),而是直接把这个由 A 加密的报文发送给 B,使 B 误认为 C 就是 A;然后 B 就向伪装成 A 的 C 发送许多本来应当发给 A 的报文。这就叫作重放攻击(replay attack)。C 甚至还可以截获 A 的 IP 地址,然后把 A 的 IP 地址冒充为自己的 IP 地址(这叫作 IP欺骗),使 B 更加容易受骗。//通信实体被中途替换了

        那么如何应对,重放攻击呢?

        为了对付重放攻击,可以使用 不重数(nonce)。不重数就是一个不重复使用的大随机数,即“一次一数”。在鉴别过程中不重数可以使 B 能够把重复的鉴别请求和新的鉴别请求区分开。

        在上图中,A 首先用明文发送其身份 A 和一个不重数 R_{A} 给 B。接着,B 响应 A 的查问,用共享的密钥 K_{AB} 对 R_{A} 加密后发回给 A,同时也给出了自己的不重数 R_{B}。最后,A 再响应 B 的查问,用共享的密钥 K_{AB} 对 R_{B} 加密后发回给 B。这里很重要的一点是 A 和 B 对不同的会话必须使用不同的不重数集。由于不重数不能重复使用,所以 C 在进行重放攻击时无法重复使用所截获的不重数。//即使C截获了之前的通信内容,也无法直接将其重放来冒充合法用户,所以,不重数的主要作用是使重放记录无法通过完整性检查

        在使用公钥密码体制时,可以对不重数进行签名鉴别。例如,B 用其私钥对不重数 R_{A} 进行签名后发回给 A。A 用 B 的公钥核实签名,如能得出自己原来发送的不重数 R_{A},就核实了和自己通信的对方的确是 B。同样,A 也用自己的私钥对不重数 R_{B} 进行签名后发送给 B。B 用 A 的公钥核实签名,鉴别了 A 的身份。//保证不重数不被篡改

        至此,全文结束。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小扎宣布开放 Meta Horizo​​n OS

日前,Meta以“混合现实的新时代”为题的博文宣布向第三方制造商开放Meta Horizon OS,包括华硕、联想和微软Xbox等等: Meta正在朝着为元宇宙建立一个更开放的计算平台的愿景迈出下一步。Meta正在向第三方硬件制造商开放赋能Meta Quest设备的操…

使用 IPAM 解决方案简化分布式网络管理

随着组织在数字领域的全球扩张,分布式网络是不可避免的,这意味着,随着 IT 基础设施的发展,组织需要适应,这包括在不断增长的系统需求、应用程序堆栈、各种协议和安全防御中监控、现代化和简化流程和资源。在有效管理现…

AJAX——案例

1.商品分类 需求&#xff1a;尽可能同时展示所有商品分类到页面上 步骤&#xff1a; 获取所有的一级分类数据遍历id&#xff0c;创建获取二级分类请求合并所有二级分类Promise对象等待同时成功后&#xff0c;渲染页面 index.html代码 <!DOCTYPE html> <html lang&qu…

Pycharm代码规范与代码格式化插件安装

给大家分享两个PyCharm编辑器的插件&#xff0c;分别是pylint与autopep8&#xff0c;主要用来提高我们在使用python进行自动化测试编写以及性能测试脚本编写过程中的代码质量、可读性与美观性。 pylint&#xff1a; ● 代码检查工具&#xff1a;它可以帮助检查代码中的错误、…

pnpm 安装后 node_modules 是什么结构?为什么 webpack 不识别 pnpm 安装的包?

本篇研究&#xff1a;使用 pnpm 安装依赖时&#xff0c;node_modules 下是什么结构 回顾 npm3 之前&#xff1a;依赖树 缺点&#xff1a; frequently packages were creating too deep dependency trees, which caused long directory paths issue on Windowspackages were c…

明日方舟游戏助手:一键完成日常任务 | 开源日报 No.233

MaaAssistantArknights/MaaAssistantArknights Stars: 11.6k License: AGPL-3.0 MaaAssistantArknights 是一款《明日方舟》游戏的小助手&#xff0c;基于图像识别技术&#xff0c;支持一键完成全部日常任务。 刷理智、掉落识别及上传企鹅物流智能基建换班、自动计算干员效率…

《ElementPlus 与 ElementUI 差异集合》el-select 差异点,如:高、宽、body插入等

宽度 Element UI 父元素不限制宽度时&#xff0c;默认有个宽度 207px&#xff1b; 父元素有固定宽度时&#xff0c;以父元素宽度为准&#xff1b; Element Plus 父元素不限制宽度时&#xff0c;默认100%&#xff1b; 父元素有固定宽度时&#xff0c;以父元素宽度为准&#x…

哪些因素影响了PCB电路板切割精度?

PCB电路板切割是电子制造过程中一个至关重要的环节&#xff0c;其精度对后续工序的质量和效率具有决定性影响。因此&#xff0c;了解影响PCB电路板切割精度的原因&#xff0c;对于提高电子产品的质量和生产效率具有重要意义。 1. PCB分板机稳定性 PCB分板机的性能直接影响到切…

李沐62_序列到序列学习seq2seq——自学笔记

"英&#xff0d;法”数据集来训练这个机器翻译模型。 !pip install --upgrade d2l0.17.5 #d2l需要更新import collections import math import torch from torch import nn from d2l import torch as d2l循环神经网络编码器。 我们使用了嵌入层&#xff08;embedding l…

广东理工学院携手泰迪智能科技成功部署人工智能实验室

广东理工学院是经国家教育部批准设立的全日制普通本科院校&#xff0c;入选全国应用型人才培养工程培养基地、国家级众创空间试点单位、广东省高校电子商务人才孵化基地。开设34个本科专业&#xff0c;涵盖工学、经济学、管理学、文学、艺术学、教育学等6大学科门类&#xff0c…

【docker】拉取人大金仓KingbaseES数据库镜像速度很慢问题

作为一种新兴的虚拟化方式&#xff0c;Docker 跟传统的虚拟化方式相比具有众多的优势。 对于学习新技术、快速搭建实验环境等是很不错的选择。优势大致总结如下&#xff1a; 1.镜像拉取速度对比 速度前后对比&#xff0c;提升10倍不止&#xff0c;很快将镜像文件下载至本地。 …

Java常见面试题总结

文章目录 1. 什么是线程和进程?2. 请简要描述线程与进程的关系,区别及优缺点&#xff1f;3. 什么是堆和方法区&#xff1f;4. 并发与并行的区别5. 同步和异步的区别6.为什么要使用多线程? 优点&#xff1f;&#xff08;重要&#xff09;7. 使用多线程可能带来什么问题?8. 如…

python爬虫 - 爬取html中的script数据(zum.com新闻信息 )

文章目录 1. 分析页面内容数据格式2. 使用re.findall方法&#xff0c;编写爬虫代码3. 使用re.search 方法&#xff0c;编写爬虫代码 1. 分析页面内容数据格式 &#xff08;1&#xff09;打开 https://zum.com/ &#xff08;2&#xff09;按F12&#xff08;或 在网页上右键 --…

SpringCloud Alibaba--nacos简介和配置管理和登录

目录 一.理论基础 二.nacos 2.1 简介 2.2 安装 三.父项目 三.生产者 3.1 配置依赖 3.2 配置文件 3.3 启动类 3.4 控制类 四.消费者 4.1 配置依赖 4.2 配置文件 4.3 启动类 4.4 feign的接口 五.效果 六.负载均衡--权重算法 6.1重启nacos 6.2 设置权重 6.3 设…

SSH Key生成

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

「React Native」为什么要选择 React Native 作为的跨端方案

文章目录 前言一、常见因素二、举个栗子2.1 项目背景2.2 为什么选择 React Native2.3 项目实施2.4 成果总结 前言 没有完美的跨端技术&#xff0c;只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 一、常见因素 共享代码库&#xff1a; React Native 允许开发者编写…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian)

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian) clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 读取图像 image imread(lena.png); % 转换为灰度图像 gray_image rgb2gray(image); % 转换为double类型以进行计算…

Vue3中使用无缝滚动插件vue3-seamless-scroll

官网&#xff1a;https://www.npmjs.com/package/vue-seamless-scroll 1、实现效果文字描述&#xff1a; 表格中的列数据进行横向无缝滚动&#xff0c;某一列进行筛选的时候&#xff0c;重新请求后端的数据&#xff0c;进行刷新 2、安装&#xff1a;npm i vue3-seamless-scrol…

CentOS7/RHEL7 root密码破解

我们知道root是CentOS7/RHEL7系统的管理员用户&#xff0c;一般情况下&#xff0c;我们是不会把其密码忘记的&#xff0c;如果万一忘记了&#xff0c;如果破解root密码呢&#xff0c;今天就为大家详细讲讲。 1.CentOS7/RHEL7 root密码破解 以VMware虚拟机上CentOS7系统为例 …