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

恋爱通信史之完整性

在前面的章节中,介绍了对通信消息的加密,可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容,但是可以篡改通信的消息。在接受者视角来看,是无法识别通信消息是否被篡改。因此,必须引入一种机制,保证消息的完整性。

单向散列函数

单向散列函数将任意长度的数据通过一个hash散列函数,转换成具有固定长度的值,即为hash值。单向散列函数,有多个别称,比如Hash算法,消息摘要算法(Message Digest Algorithms)。

请添加图片描述

特点:

  • 相同的数据计算的hash摘要值相等。
  • 整个hash过程是一个单向的,很难从hash值逆向推导出数据的内容,摘要值是不可逆的。
  • 原始数据中只要有1个bit变化,两份数据计算的hash值也不同。

应用场景:

  • 文件比较:比如在网站上下载文件时,与该文件对应的有其摘要值。为了避免文件在传输过程中被篡改,客户端文件下载完成后,可以通过hash算法计算该文件的hash值是否与网站提供的相等,即可确定文件是否被篡改。再比如平时软件调试时,为了确认运行环境的二进制文件是否升级成功,可以计算编译环境和运行环境中的同名文件的hash值来判定。

  • 通信消息摘要:在通信过程中,为了确定消息是否被中间人篡改,也需要对通信的内容计算摘要。
    请添加图片描述

  • 身份校验:大家所熟知使用的微信,QQ和支付宝,以及我们的PC登录密码,在系统中存储的是用户密码的hash值,而非用户的原始密码。如果存储的是用户的原始密码,系统一旦出现漏洞,黑客就可能获取到所有用户的原始密码,这是相当严重的网络安全问题。

常见的Hash算法

  • MD5:MD5是一种比较常见的Hash算法,摘要值长度固定是128bits。目前已经被证实不安全了。通过彩虹表,对不同的消息组合进行迭代运算,如果运算的Hash值匹配,那么就猜出原文数据了。
  • SHA1:SHA1算法的摘要值长度是160bits,在安全性上已经受到质疑。因此,不建议继续使用SHA1算法计算摘要。
  • SHA2:SHA2算法目前来说是安全的,且也是目前推荐的Hash算法。主要有四种SHA-256, SHA-224, SHA-384, SHA-512,分别输出256bits, 224bit, 384bits, 512bits。
  • SHA3:SHA3算法并不是为了取代SHA2,而是完全不同的算法。主要有四种SHA3-256, SHA3-224, SHA3-384, SHA3-512,分别输出256bits, 224bit, 384bits, 512bits。

消息验证码(Message Authentication Code, MAC)

单向散列函数(Hash算法),只能避免消息被篡改,如果摘要值也被篡改,那么就无法保证数据的完整性了。

请添加图片描述

因此,需要新引入带秘钥的消息验证码的机制。在对消息计算消息摘要时,连同秘钥一起作为MAC运算的输入,计算得到的MAC值与消息一并发给接受者。接受者接收到的消息与秘钥输入到MAC运算算法,将计算后的MAC值与接收的MAC进行比较,即可确定消息的完整性。

请添加图片描述

特点:

  • 证明消息没有被篡改,保证完整性。
  • 证明消息是秘钥拥有者发送。

应用场景:

  • 在通信内容无敏感信息时,只是为了保证信息的完整性,防止被篡改,可以使用MAC算法来保证。
  • 在加密通信中,可以先基于明文计算MAC值,也可以基于密文计算MAC值,保证消息的完整性。

即便在通信过程中MAC值同样被修改了,那么接收方就无法比较成功。如果需要修改成匹配的MAC值,必须还要获取到通信双方中所使用的秘钥。

请添加图片描述

常见的MAC算法

  • CBC-MAC: 由块密码算法的CBC模式演化而来,最后一个密文的分组的值就是MAC值。在OPENSSL中未直接提供该算法。
  • HMAC: 使用Hash算法作为加密基元。常见的有HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512。

相关文章:

恋爱通信史之完整性

在前面的章节中,介绍了对通信消息的加密,可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容,但是可以篡改通信的消息。在接受者视角来看,是无法识别通信消息是否被篡改。因此,必须引入一种机制,保…...

Docker 容器的初始化设置

虽然现在Conntainerd 大有取代Docker作为容器运行时的趋势,但是docker还是有自己的优势在。尤其是对于开发者来讲,使用Docker 比使用 containerd 方便很多,尤其是在Docker Desktop等工具的加持下。 本文主要面向Docker的初、中级学者&#xf…...

密码编码学与网络安全(第五版)答案

2.4题: 通过如下代码分别统计一个字符的频率和三个字符的频率,"8"——"e",“;48”——“the”,英文字母的相对使用频率,猜测频率比较高的依此为),t,*,5&#xf…...

C++初阶(十四)--STL--vector的模拟实现

文章目录 一、vector的基本结构 二、默认成员函数的实现 1.构造函数 2.拷贝构造函数 3.赋值运算符重载 4. 析构函数 三、迭代器相关函数 begin和end 四、容量和大小相关函数 size capacity reserve resize empty 五、修改容器的函数 push_back pop_back insert…...

贴代码框架PasteForm特性介绍之query,linkquery

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...

高防IP如何构建安全高效的数字政务新生态

随着数字化转型浪潮的日渐汹涌,政务行业也在朝着智慧政务的方向高速迈进,提升了为民服务的整体效率。然而,凡事都有双面性,随着政务服务线上化的深入发展,网络安全威胁也日益严峻。黑客攻击、DDoS攻击、CC攻击等安全事…...

数据结构与算法——1122—复杂度总结检测相同元素

1、复杂度总结 1、时间复杂度计算遵循的原则 1、复杂度与其具体的常系数无关(即:常数项的系数不要) 2、多项式级复杂度相加的时候,把其高项作为结果(即:多项式只保留最大项) 3、O(1)含义为&…...

HTML通过JavaScript获取访问连接,IP和端口

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Get IP Address</title> <script> function displayURL() { var url window.location.href; // 获取当…...

自动化测试过程操作细节

一、软件与框架介绍 1. Postman 读音&#xff1a;[pəʊstmən]&#xff08;剖斯特曼&#xff09; 介绍&#xff1a;API开发与测试的得力助手&#xff0c;通过直观界面发送HTTP请求&#xff0c;查看响应数据。支持环境变量、集合、脚本等功能。 主要特点&#xff1a;易于使用…...

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案

AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响&#xff0c;因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能&#xff0c;并解决多种技术挑战。例如&#xff0c;采用联发科八核2.0GHz处理器&#xff0c;结合12nm制程工艺&#xff0c;这种低…...

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…...

实验室管理技术革新:Spring Boot系统

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

C语言 蓝桥杯某例题解决方案(查找完数)

蓝桥杯原题&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。例如6 1 2 3.编程找出1000以内的所有完数。 这个题没有很大的难点&#xff0c;与我们上一个解决的问题“质因数分解”不同&#xff0c;它不需要判断因数是否是质数&#xff0c;因此…...

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务&#xff1a; 综述 论文地址&#xff1a;https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见&#xff0c;这体现在大型科技公司的投资以及媒体和在线社…...

C++ 编程指南05 - 编译时检查优于运行时检查

一&#xff1a;概述 编译时错误检查是C编程中一条非常重要的原则&#xff0c;它强调了在可能的情况下&#xff0c;应该优先依赖编译时检查&#xff08;静态检查&#xff09;而不是运行时检查。这样做的主要目的是提高程序的性能、安全性和可维护性。 编译时检查&#xff0c;即在…...

【优先算法】专题——双指针

1.移动零 移动零 题目描述&#xff1a; 思路&#xff1a; 本题我们把数组分块&#xff0c;将非零元素移动到左边&#xff0c;为零元素移动右边。 我们使用双指针算法&#xff08;利用数组下标来充当指针&#xff09; 两个指针的作用&#xff1a; cur&#xff1a;从左往右…...

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练&#xff08;23&#xff09;&#xff1a;洛谷P1217&#xff1a;[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 …...

C语言练习.if.else语句.strstr

今天在做题之前&#xff0c;先介绍一下&#xff0c;新学到的库函数strstr 想要使用它&#xff0c;要先给它一个头文件<string.h> char *strstr(const char*str1,const char*str2); 首先&#xff1a;1.strstr的返回值是char&#xff0c;字符类型的。 2.两个实参&#xff…...

利用浏览器录屏

以下内容参考自网络 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <div class"left"> <di…...

python中的map、split、join函数的作用 => ACM输入输出流

map(func,iter) lst_str ["1", "2", "3"] # 得到lst_num为[1, 2, 3] lst_num list(map(int, lst_str))如果想把一个列表里的所有元素批量地调用某一个函数&#xff0c;并映射得到一个新的列表&#xff08;原列表中元素相对位置不变&#xff0…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...