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

一、哈希函数

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.hqwc.cn/news/239599.html

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

相关文章

0Ω电阻最大过流能力及作用用途

0Ω电阻最大过流能力及作用用途 0Ω电阻过流能力0Ω电阻的作用 0Ω电阻过流能力 0Ω电阻不一定是真正的0Ω电阻,0Ω电阻存在一定的阻值偏差,主要看生产电阻厂商做哪种了。厂商都是根据电阻标准文件 EN60115-2, 里头0Ω电阻实际最大阻值有 10…

在mysql的cmd下查看某个命令的帮助信息

在cmd下登录mysql以后,如果要查询某个命令的帮助信息,可以使用help 具体命令来查看该命令的帮助信息。 例如,假设我要查询create table这条命令怎么使用,可以输入 help create table,或者help create table&#xff1…

【数据结构(五)】递归

文章目录 1. 递归的概念2. 递归能解决什么问题3. 递归的规则4. 递归实际应用案例4.1. 迷宫问题4.2. 八皇后问题4.2.1. 思路分析4.2.1. 代码实现 1. 递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题&…

Android 缩减、混淆处理和优化应用

为了尽可能减小应用的大小,您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功…

网站实现验证码功能

一、验证码 一般来说&#xff0c;网站在登录的时候会生成一个验证码来验证是否是人类还是爬虫&#xff0c;还有一个好处是防止恶意人士对密码进行爆破。 二、流程图 三、详细说明 3.1 后端生成验证码 Override public Result<Map<String, String>> getVerifica…

LeetCode | 100. 相同的树

LeetCode | 100. 相同的树 OJ链接 判断两个节点是否等于空&#xff0c;两个都等于空就直接返回true如果一个等于空&#xff0c;另一个不等于空&#xff0c;说明false然后再判断两个树的值是否相等最后递归p的左&#xff0c;q的左&#xff0c;p的右&#xff0c;q的右 bool isS…

计算机网络TCP篇①

目录 一、TCP 基本信息 1.1、TCP 的头格式 1.2、什么是 TCP 1.3、什么是 TCP 连接 1.4、TCP 与 UDP 的区别 1.2、TCP 连接建立 1.2.1、TCP 三次握手的过程 1.2.2、为什么是三次握手&#xff1f;不是两次&#xff1f;四次&#xff1f;&#xff08;这个问题真是典中典&am…

山西电力市场日前价格预测【2023-12-03】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-03&#xff09;山西电力市场全天平均日前电价为360.65元/MWh。其中&#xff0c;最高日前电价为517.29元/MWh&#xff0c;预计出现在00:30。最低日前电价为0.00元/MWh&#xff0c;预计出…

nodejs微信小程序+python+PHP金融产品销售系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

网络通信原理,进制转化总结

来源&#xff0c;做个笔记&#xff0c;讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili ip地址范围

【数据结构】环形队列

环形队列 1. 定义 环形队列就是将队列在逻辑上看作环形结构、物理上仍是数组形式存储的一种数据结构。 其实现主要分为两种情况&#xff1a; 浪费空间法记录空间法 2. 实现 实现要考虑的是成员变量 2.1 记录空间法 使用used标识当前存储了多少元素&#xff0c;如果为空&a…

4个Pycharm高效插件

大家好&#xff0c;Pycharm是Python最受欢迎的集成开发环境之一&#xff0c;它具有良好的代码助手、漂亮的主题和快捷方式&#xff0c;使编写代码变得简单快捷。话虽如此&#xff0c;开发者仍可以通过使用一些插件来提高在Pycharm中编写Python代码的效率和乐趣&#xff0c;在市…