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

【网络安全技术】消息认证技术

一、哈希函数

1.安全性质

1)抗第一原像攻击(Preimage Resistance

给定哈希后的值,很难找到哈希前的原消息。这很好理解,需要哈希函数具有单向性。

一个简单的例子就是密码存储系统,用户登录服务器需要密码匹配,服务器出于安全考虑不会存储用户密码,会存储用户密码的哈希值,这样,每次用户发来密码,进行哈希来看是否一致。这样的话,即使黑客获得了用户密码的哈希值,也没办法登录系统。

2)抗第二原像攻击(Second Preimage Resistance

给定消息m和哈希后的值,很难找到另一个消息n,使得n哈希后的值和m哈希后的值一样。

一个简单的例子是软件下载时使用哈希来校验文件的integrity,用户下载软件后,使用哈希函数得到值,来和开发者提供的哈希值对比,如果一致就认为下载的文件没有被篡改。这里如果黑客可以通过开发者提供的哈希值和文件,找到一个哈希值一样的文件,那么他就可以替换掉这个文件。

3)碰撞避免(Collision Resistance

对于一个哈希函数,对于找到两个具有相同哈希值的消息m,n是计算上不可能的。尽管哈希是理论上无限的域向固定域的映射,总会碰撞,但是要保证计算上找不到这个碰撞。

一个简单的例子是,发送信息的人本来就是黑客。例如b找到了两个相同哈希值的文件,他让a签署,文件1只需要a付出很小的代价,而文件2需要a付出很大的代价。那么b就将文件1发给a签,签完之后说a签的是文件2。

2.SHA-1

任意长比特串-->160bits哈希值

1)padding

先在后面补1,然后补0直到长度L%512=(512-64),因为sha-1每次对512bit做处理,所以整体长度一定是512的倍数,那么为什么要512-64呢,因为最后64位要留着指示消息的长度,注意这里消息的长度指的是padding前的初始长度。

2)然后就是计算了,取第一个512bit和初始值做计算,计算结果160bit作为初始值和下一512bit做计算,这样一直下去最后产生160bit的哈希值。

看看每512bit这个计算具体是如何做的。

首先512bit下来了将他扩展成80个w,每个w是32bit。前16个w直接照抄原来的512bit,之后每个wt都通过以下式子计算得出,s几就是循环左移几位。

得到80个w之后开始计算,先拿初始值填充abcde,然后每个w进行一轮计算。

这是前20个w进行的前20轮计算的例子,总共的80轮只有f和w不一样,f是每20轮有一个f,而80轮的w对应先前生成的80个w。

这个计算就是把先前的abcde分别做一些移位、置换之类的操作,生成新的abcde。

80轮之后,把最后生成的abcde和一开始的初始值分别相加,生成这一阶段的最终的160bit值,如果还有下一阶段,那么这160bit值就是下一阶段的初始值。

注意这里所有的+都是模(2的32次方)加。

3.SHA们

不同版本的sha的参数的对比

4.生日攻击

根据生日悖论,一个群体中有两个人生日是同一天的概率比直觉要大。

对于一个大小为2的n次方的哈希输出空间,找到两个同样哈希值的输入,在尝试2的n/2次方次时,概率为50%。

那么这里有一个攻击的例子,a产生消息给b签字。

a产生2的n/2次方种同一正常消息的变种(就类似于我是老师/老师是我)这样的变种,就对应2的n/2次方个哈希值。然后再产生2的n/2次方种个诈骗q消息。这样,正常消息和诈骗消息中有很大概率有相同哈希值的,这样他就找到了一组相同哈希值的消息,只用了2的(n/2+1)次方次尝试,这比正常的暴力破解平均2的n-1次方要快了不少。

二、消息摘要(Message Digest

很多时候消息并不在意confidentiality,比如一些广播包,亦或者刚才提到的软件下载。只需要保证消息的integrity就好了,那么如果还是对消息加密的话,尽管可以保证integrity(因为加密之后别人没法篡改,篡改了解密出来就是乱码了),但会有很大的不必要的开销,相当于做了额外的工作,那么这个时候可以采用一种简单的模式,那就是把消息哈希之后,把哈希值附在消息后面传。收包的收到之后对消息哈希,然后比对自己哈希出来的和对方传来的,一致就认为没问题。

但是如果有人在途中同时改了消息和消息摘要,就不行了。

三、MAC(Message Authentication Code)消息认证码

双方共享一个秘密(一串数,一个密钥),发送方将这个秘密和消息m链接,然后哈希,将哈希附在消息后面一起发送,接收方收到之后,将秘密和消息m链接,然后哈希,发现得到的值和发送方发来的一致,那么就认为消息未被篡改。

这里就是通过双方共享密钥来做了认证。

但是这里还有一个问题,他不能抗否认,就是这个key是双方都有的,他会耍赖说这个消息不是我发的,是你发的。要做抗否认(Non-repudiation),就需要下面讲的数字签名技术。

这里再介绍一个MAC算法,HMAC。这个的设计理念就很OCP,他想直接套现有的哈希函数,并且让以后的哈希函数亦可以直接套进来。

首先把密钥用0padding成哈希的分组长度,然后在和ipad做异或,作为进入哈希的第一个块,然后进哈希函数,出来哈希函数对应的n比特哈希值。

然后还要走第二轮,第一个块还是密钥用0padding成哈希的分组长度异或上另一个op,第二块就是刚才生成的n比特哈希,这里注意sha是有自己的padding机制的,所以这里不用padding。这两个块再过一遍哈希,得到的就是消息认证码。

四、数字签名

要做抗否认(Non-repudiation),那就不能使用双方的共同秘密,就要用到只有一个人有的,且别人都不知道的,那就是公钥技术。

所以这样就可以先把消息哈希,然后用自己的私钥签名,然后再把这个结果附在消息后面传输。对面收到后,对消息哈希得到哈希值,然后再拿你的公钥解你附在后面的签名后的哈希值,这样匹配了,就达到了(integrity),且这是拿你的私钥签名的,没法抵赖(Non-repudiation)。

相关文章:

【网络安全技术】消息认证技术

一、哈希函数 1.安全性质 1)抗第一原像攻击(Preimage Resistance) 给定哈希后的值,很难找到哈希前的原消息。这很好理解,需要哈希函数具有单向性。 一个简单的例子就是密码存储系统,用户登录服务器需要…...

智慧安防三大信息技术:云计算、大数据及人工智能在视频监控EasyCVR中的应用

说到三大信息技术大家都很清楚,指的是云计算、大数据和人工智能,在人工智能(AI)快速发展的当下,例如常见的大数据分析、人工智能芯片生产的智能机器人等等,在工作、生活、教育、金融、科技、工业、农业、娱…...

接口测试基础知识

一、接口测试简介 什么是接口测试? 接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点: 检查数据的交换,传递和控制管理过程;检查系统间的相互…...

C++多线程之通过成员函数作为线程入口

说明: 通过类里面的函数作为线程入口,我个人难理解的地方在于给线程传递参数的时候,怎么找到Main函数。后面会做分析。 首先创建类:创建MyThread类,其中公有函数Main作为入口。这个类的传教比较简单,成员…...

word、excel文件转PDF(documents4j方式,简单)

1 documents4j方式 引入pom <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.1.12</version></dependency><dependency><groupId>com.documents4j</g…...

【Linux】:信号(三)捕捉

信号捕捉 一.sigaction1.基本使用2.sa_mask字段 二.可重入函数三.volatile四.SIGCHLD信号 承接上文 果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信…...

数据结构 / 队列 / 循环队列 / 概念

1. 定义 为充分利用向量空间&#xff0c;克服假溢出现象的方法是&#xff1a;将向量空间想象为一个首尾相接的圆环&#xff0c;并称这种向量为循环向量。存储在其中的队列称为循环队列&#xff08;Circular Queue&#xff09;。循环队列是把顺序队列首尾相连&#xff0c;把存储…...

elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内闭坑指南)

es自2020年的8.x版本以来&#xff0c;就提供了机器学习的能力。我们可以使用es官方提供的工具eland&#xff0c;将hugging face上的NLP模型&#xff0c;上传到es集群中。利用es的机器学习模块&#xff0c;来运维部署管理模型。配合es的管道处理&#xff0c;来更加便捷的处理数据…...

vue中中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…...

MATLAB 模型参考自适应控制 - Model Reference Adaptive Control

系列文章目录 文章目录 系列文章目录前言一、参考模型二、扰动与不确定性模型三、直接 MRAC名义模型参数更新间接 MRAC估计器模型和控制器增益参数更新学习修正参考文献 前言 模型参考自适应控制模块计算控制动作&#xff0c;使不确定的受控系统跟踪给定参考被控对象模型的行为…...

【如何用批处理文件实现自动编译Keil工程和C# Visual Studio工程】

如何用批处理文件实现自动编译Keil工程和C# Visual Studio工程 写个Bat 批处理文件&#xff0c;现自动编译Keil工程和C# Visual Studio工程。这样可以结合Python 实现复杂的操作。 编译Keil工程&#xff1a; echo off set UVC:\Keil_v5\UV4\UV4.exe set UV_PRO_PATHD:\worksp…...

大模型的实践应用11-“书生”通用大模型的搭建与模型代码详细介绍,以及快速使用方法

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用11-“书生”通用大模型的搭建与模型代码详细介绍,以及快速使用方法。“书生” 通用大模型是上海人工智能实验室研制的大模型,并且已经开源了“书生浦语”大模型70亿参数的轻量级版本InternLM-7B。InternLM-7B模型主要…...

【开发PaaS】基于Postgresql的开发平台Supabase

Supadase是开源的。我们选择可扩展的开源工具&#xff0c;使其易于使用。 Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能&#xff0c;但我们不会以同样的方式进行&#xff1a; 我们的技术选择大不相同&#xff1b;我们使用的一切都是开源的&#…...

前端开启gzip优化页面加载速度

生成gizp的打包资源&#xff0c;可以优化页面加载速度 打包的时候开启gzip可以很大程度减少包的大小&#xff0c;页面大小可以变为原来的30%甚至更小,非常适合线上部署, 但还记得需要服务端支持 1、前端配置compression-webpack-plugin 先安装&#xff1a;npm install compres…...

用Java写一个俄罗斯方块

目录 游戏规则 小方块类&#xff1a;Cell 七种图形类&#xff1a;I、J、L、O、S、T、Z J L O S T Z 俄罗斯方块游戏主类&#xff1a;Tetris 效果展示 游戏规则 由小方块组成的不同形状的板块陆续从屏幕上方落下来&#xff0c;玩家通过调整板块的位置和方向&#xff0c;使它…...

应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案

传统金融营业厅存在运营管理模式落后、资源投放不平衡、从业人员培训效果不达预期、客户体验割裂等普遍现象&#xff1b; 部署英码数字金融解决方案&#xff0c;将助力企业从传统金融模式快速向数字金融模式转变&#xff0c;可针对每一个客户定制个性化“一对一”服务&#xff…...

目标检测——Faster R-CNN算法解读

论文&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者&#xff1a;Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接&#xff1a;https://arxiv.org/abs/1506.01497 代码&#xff1a;https://github.com/rbgirsh…...

Wireshark (一)安装入门 —— 软件介绍

文章目录 Wireshark是什么&#xff1f;为什么要使用Wireshark&#xff1f;相关网络分析工具软件对比 Wireshark是什么&#xff1f; Wireshark是一种开源网络协议分析器&#xff0c;它可以捕获和分析网络中传输的数据包。 用户可以使用Wireshark来诊断网络问题、了解网络协议的…...

Web框架与Django路由层

Web框架 一 web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&…...

什么是CAS, 什么是AQS

文章目录 什么是CAS, 什么是AQSCASAQS 什么是CAS, 什么是AQS CAS AQS AQS 全称是AbstractQueuedSynchronizer&#xff0c; 是juc 下一个核心的抽象类&#xff0c;用于构建各种同步器和锁 比如我们熟悉的 ReentrantLock、ReadWriteLock、CountDownLatch等等是基于AQS. 首先在…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...