【网络安全技术】消息认证技术
一、哈希函数
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. 定义 为充分利用向量空间,克服假溢出现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储…...

elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内闭坑指南)
es自2020年的8.x版本以来,就提供了机器学习的能力。我们可以使用es官方提供的工具eland,将hugging face上的NLP模型,上传到es集群中。利用es的机器学习模块,来运维部署管理模型。配合es的管道处理,来更加便捷的处理数据…...

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

MATLAB 模型参考自适应控制 - Model Reference Adaptive Control
系列文章目录 文章目录 系列文章目录前言一、参考模型二、扰动与不确定性模型三、直接 MRAC名义模型参数更新间接 MRAC估计器模型和控制器增益参数更新学习修正参考文献 前言 模型参考自适应控制模块计算控制动作,使不确定的受控系统跟踪给定参考被控对象模型的行为…...
【如何用批处理文件实现自动编译Keil工程和C# Visual Studio工程】
如何用批处理文件实现自动编译Keil工程和C# Visual Studio工程 写个Bat 批处理文件,现自动编译Keil工程和C# Visual Studio工程。这样可以结合Python 实现复杂的操作。 编译Keil工程: 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是开源的。我们选择可扩展的开源工具,使其易于使用。 Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能,但我们不会以同样的方式进行: 我们的技术选择大不相同;我们使用的一切都是开源的&#…...
前端开启gzip优化页面加载速度
生成gizp的打包资源,可以优化页面加载速度 打包的时候开启gzip可以很大程度减少包的大小,页面大小可以变为原来的30%甚至更小,非常适合线上部署, 但还记得需要服务端支持 1、前端配置compression-webpack-plugin 先安装:npm install compres…...

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

应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案
传统金融营业厅存在运营管理模式落后、资源投放不平衡、从业人员培训效果不达预期、客户体验割裂等普遍现象; 部署英码数字金融解决方案,将助力企业从传统金融模式快速向数字金融模式转变,可针对每一个客户定制个性化“一对一”服务ÿ…...

目标检测——Faster R-CNN算法解读
论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接:https://arxiv.org/abs/1506.01497 代码:https://github.com/rbgirsh…...
Wireshark (一)安装入门 —— 软件介绍
文章目录 Wireshark是什么?为什么要使用Wireshark?相关网络分析工具软件对比 Wireshark是什么? Wireshark是一种开源网络协议分析器,它可以捕获和分析网络中传输的数据包。 用户可以使用Wireshark来诊断网络问题、了解网络协议的…...

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

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

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...