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

一、哈希函数

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)。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用dirmap命令行时报错,提示缺少gevent模块

记得以前是可以的,可能是时间长了重装了系统,引起的。 修复方法。升级pip,然后重新下载安装gevent模块。 具体: 使用下面命令解决下载慢的问题。 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple …

python中,or、not的用法

or的用法 在python中,or运算符是一个逻辑运算符,用于在多个条件中选择至少一个为真(True)的情况。 如果条件中的任意一个为真,整个表达式的结果就为真 如: 示例1: 检查两个数字中至少有一个正数 示例2: x True y …

使用系统ProgressBar实现三色进度条

使用系统ProgressBar实现如图三色进度条&#xff1a; //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…

Linux 权限管理

1 Linux 安全模型 AAA认证资源分派&#xff1a; 当用户登录时&#xff0c;系统会自动分配令牌 token&#xff0c;包括用户标识和组成员等等信息 1.1 用户 Linux 中每个用户是通过 User ID&#xff08;UID&#xff09;来唯一标识的。 1.2 用户组 Linux 中可以将一个或者多个…

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

通过增加虚拟内存来提高内存使用 本文解决的实际问题&#xff1a; 当我们物理内存小的时候&#xff0c;会出现OOM&#xff0c;然后服务自动死掉的情况。因为物理内存大小是固定的&#xff0c;有没有其他好的办法来解决呢&#xff1f;这里我们可以适当调整Linux的虚拟内存来协作…

spring cloud gateway源码分析,一个请求进来的默认处理流程

1.前言 spring cloud gateway的基本组成和作用就不细赘述&#xff0c;此篇适合对此有一定了解的人阅读。 spring cloud gateway版本: Hoxton.SR1 spring cloud gateway的配置使用yml配置&#xff1a; server:port: 9527y#根据微服务名称进行动态路由的配置 spring:applicati…

【Amazon】通过代理连接的方式导入 AWS EKS集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 二、在主集群中设置代理服务地址方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一&#xff1a;使用 Web 控制台…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区&#xff1a;先写一个.c文件如下&#xff1a; 我们执行一下这个程序时&…

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类

有时候我们在MFC项目开发过程中&#xff0c;需要用到一些微软已经提供的功能&#xff0c;如VC使用EXCEL功能&#xff0c;这时候我们就能直接通过VS2019到如EXCEL.EXE方式&#xff0c;生成对应的OLE头文件&#xff0c;然后直接使用功能&#xff0c;那么&#xff0c;我们上篇文章…

索尼PMW580视频帧EC碎片重组开启方法

索尼PMW580视频帧EC碎片重组开启方法 索尼PMW-580摄像机生成的MXF文件存在严重的碎片化&#xff0c;目前CHS零壹视频恢复程序MXF版、专业版、高级版已经支持重组结构体正常的碎片&#xff0c;同时也支持对于结构体破坏或者覆盖后仅存在音视频帧EC数据的重组&#xff0c;需要注…

次世代建模纹理贴图怎么做?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模&#xff1f; "次世代建模"是一个术语&#xff0c;通常用来描述…

边缘数据中心和5G的融合彻底改变数据传输和物联网

伴随着数字化时代的飞速发展&#xff0c;边缘数据中心和5G技术的联袂崛起&#xff0c;正深刻塑造着人们对数据的创造、传输和处理方式。据Gartner公司的预测&#xff0c;到2025年&#xff0c;企业数据的三分之二将在边缘计算设施中涌现&#xff0c;而非传统的集中式数据中心。这…

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

【数据结构】循环链表和双向链表

【循环链表】 (有头结点) pR1->next; R1->nextR2->next->next; free(R2->next); R2->nextp; 例&#xff1a;对于两个单循环链表a&#xff0c;b&#xff0c;将其连接起来&#xff0c;变成一个单循环链表 #include<stdio.h> #include<stdlib.h> …

【动态规划】LeetCode-62.不同路径

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

目录 一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的关键字节点 删除所有关键字节点 节点的查找 链表的清空 链表的长度 前言&#xff1a;在上一篇文章中&#xff0c;我们认识了线性数据结构中的顺序表&#xff0…

K8s 中 Pod OOMKilled 原因

目录 Exit Code 137 解决方案 JVM 感知 cgroup 限制 使用 JDK9 的容器感知机制尝试 问题分析 容器内部感知 CGroup 资源限制 在 Java10 中&#xff0c;改进了容器集成 JVM 参数 MaxDirectMemorySize -XX:MaxDirectMemorySize 的默认值是什么&#xff1f; 其他获取 ma…

SQL server 2016安装

1、关系数据库的基本概念。 行&#xff1a;每行成为一条“记录”或“元组”&#xff0c;用于描述一个对象的信息。 列&#xff1a;每列称为一个“字段”或“属性”&#xff0c;用于描述对象的一个属性。 2、主键与外键。 主键&#xff1a;键&#xff0c;即关键字。主键由一个或…

【高效开发工具系列】驼峰下划线互转

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

微信小程序自定义tabBar简易实现

文章目录 1.app.json设置custom为true开启自定义2.根目录创建自定义的tab文件3.app.js全局封装一个设置tabbar选中的方法4.在onshow中使用选中方法最终效果预览 1.app.json设置custom为true开启自定义 2.根目录创建自定义的tab文件 index.wxml <view class"tab-bar&quo…