认证篇——消息认证码

article/2025/8/30 8:17:14

目录

一、消息认证码介绍

1)消息认证码的使用步骤:

2)消息认证码的密钥配送问题:

3)消息认证码的实例:

4)消息认证码的实现:

二、HMAC(可忽略)

三、对消息认证码的攻击

四、消息认证码无法解决的问题


一、消息认证码介绍

消息认证码(Message authentication code)是一种确认完整性并进行认证的一种技术,简称MAC

消息认证码在输入包括任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为MAC值

 

1)消息认证码的使用步骤:

1)发送者与接收者事先共享密钥

2)发送者根据消息计算MAC值(使用共享密钥)

3)发送者将消息和MAC发送给接收者

4)接收者根据收到的消息计算MAC(使用共享密钥)

5)接收者将自己计算出的MAC与从发送者收到的MAC比对

6)如果MAC一致,接收者可以判定消息的确来自接收者(认证成功);如果不一致,可判断消息不是来自发送方(认证失败)
 

2)消息认证码的密钥配送问题

在认证过程中,需要发送者和接收者共享密钥,且密钥不能被获取;如果密钥落入第三方,第三方可以计算出MAC值,从而能轻易进行篡改和伪装攻击,使得消息认证码没有发挥作用

 

3)消息认证码的实例:

1)SWIFT(环球银行金融电信协会):银行与银行之间通过SWIFT来传递交易信息。为了对消息进行验证和确定消息完整性,SWIFT使用了消息认证码,并使用公钥密码进行密钥交换

2)IPsec:对互联网基本通信协议——IP协议增加安全性的方式之一。在IPsec中,对内容和完整性校验都采用消息认证码

3)SSL/TLS:自网上购物时,使用此类协议。对通信内容认证和完整性校验使用了消息认证码

 

4)消息认证码的实现:

1)使用单向散列函数实现(HMAC)

2)使用分组密码实现(将分组密码的密钥作为消息认证码的共享密钥来使用,并使用CBC模式进行加密)

3)使用流密码或公钥密码来实现

 

二、HMAC(可忽略)

HMAC:是一种使用单向散列函数来构造消息认证码的方法

HMAC的步骤:

1)密钥填充:当密钥短于单向散列函数的分组长度时,就在末尾填充0,直到与单向散列函数的分组成都相同为止;如果长于散列函数的分组时,就是用单向散列函数求出密钥的散列值,将这个散列值用作HMAC的密钥

2)将填充后的密钥与ipad进行XOR:ipad就是将00110110这一比特序列不断重复达到分组长度所形成的比特序列;进行XOR后,就是一个和单向散列函数的分组长度相同,并和密钥相关的比特序列(ipadkey)

3)和消息组合:将ipadkey附加在消息开头

4)计算散列值:将上一部的结果输入单向散列函数后计算散列值

5)将填充后的密钥与opad进行XOR:opad就是将01011100这一比特序列不断重复达到分组长度所形成的比特序列;进行XOR后,就是一个和单向散列函数的分组长度相同,并和密钥相关的比特序列(opadkey)

6)将散列值组合:将4)中计算出的散列值放到opadkey后

7)计算散列值:将6)输入单向散列函数计算散列值,该散列值就是MAC值

 

三、对消息认证码的攻击

1)重放攻击:把以前窃听到的数据原封不动地重新发送给接收方,主要用于身份认证过程,破坏认证的正确性

防御方法:

  • 序号:将每次发送的消息都赋予一个递增编号,并且在计算MAC值时将序号也包含在消息中,第三方无法计算出递增之后的MAC值;缺点:必须要记录每个通信对象的最后一个消息的序列号
  • 时间戳:在发送消息时,附带当前时间,即便收到过去的消息,MAC也能正确将其当作错误消息来处理;缺点:必须要求收发双方的时钟一致
  • nonce:接收者先向发送者发送一个一次性随机数(该随机数称为nonce),发送消息时将nonce包含在消息中计算MAC值,每次通信的nonce都会变化;缺点:通信时的数据量会增加

2)密钥推测攻击:消息认证码也可以使用暴力破解生日攻击,如果可以从MAC值反算出密钥,就可以进行篡改、伪装等攻击;所以对于密钥推测攻击来说,要保证不能根据MAC值推测出通信双方使用的密钥

 

四、消息认证码无法解决的问题

由于收发双方共享相同的密钥,因此无法解决以下问题:

1)对第三方证明

2)防止否认

 

 

 


http://chatgpt.dhexx.cn/article/e2HlY6NT.shtml

相关文章

获得验证信息

用的最多的验证信息为URL,TEXT,TITLE 以百度为例 from selenium import webdriverurl "https://www.baidu.com/" driver webdriver.Chrome() driver.get(url) driver.maximize_window() ### 获取当前页面的title title driver.title prin…

密码框验证信息

效果展示&#xff1a; 代码展示 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><link rel"stylesheet" type"text/css" href"fontss2/iconfont.css" /><style&g…

信息认证技术

这个章节会介绍一些比较有意思的东西&#xff0c;例如哈希函数&#xff0c;数字签名&#xff0c;身份认证等&#xff01; 1.一个安全的认证 系统应满足什么样的条件&#xff1f; 合法的接受者能够检验所接受消息的合法性和真实性 合法的发送方对所发送的消息无法进行否认 除了合…

验证登录信息

验证登录信息 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术&#xff1a;Visual Studio 作者&#xff1a;李继金 撰写时间&#xff1a;2019年 5月24日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 每个项目都会有登录页面&#xff0c;…

如何识别验证码

http://www.jianblog.com/2009/02/09/574/ 周俭 Blog 基于OpenCV的PHP图像人脸识别技术 二月 9, 2009 at 10:13 上午 由 catch Filed under PHP, 编程 今天无意中发现用OpenCV可以实现人脸识别。找个时间研究下用来识别验证码看可行不&#xff1f;呵呵。。 安装测试了一下&am…

功能验证流程

下图显示了功能验证流程&#xff1a; 这个验证过程可以被分解成三个主要阶段&#xff1a; 制定验证策略和验证计划&#xff1b; 创建验证平台&#xff0c; 运行和调试&#xff1b; 覆盖率分析和回归测试&#xff1b; &#xff11; 制定验证策略和验证计划阶段 制定验证策略和验…

Javascript正则表达式实现输入框验证信息

1.了解正则表达式可以: 测试字符串的某个模式。例如&#xff0c;可以对一个输入字符串进行测试&#xff0c;看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证替换文本。可以在文档中使用一个正则表达式来标识特定文字&#xff0c;然后可以全部…

JS输入框验证信息提示

描述&#xff1a; 1、首先输入框默认显示手机号&#xff0c;下面提示&#xff1a;请输入你的手机号 2、光标放上去的时候开始填写&#xff0c;填写完毕后&#xff08;那么就要先提取鼠标失去光标这个事件&#xff09;如果手机号码不正确&#xff1a; 文本框变红&#xff0c;并…

什么是消息验证码

在信息安全领域中&#xff0c;常见的信息保护方法分为加密和认证两大类。认证技术又分为对用户的认证和对消息的认证两种方式。用户认证用于鉴别用户的身份是否是合法用户&#xff1b;消息认证就是验证所收到的消息确实是来自真实的发送方且未被修改的消息&#xff0c;可以验证…

登录信息验证

登录信息验证 本次挑战内容为设计一个登录验证程序&#xff0c;要求用户从控制台录入用户名和密码&#xff0c;若用户输入的信息正确则提示登录成功&#xff0c;反之则提示登录失败。 本次挑战内容为设计一个登录验证程序&#xff0c;要求用户从控制台录入用户名和密码&#x…

各种信息验证

开发工具与关键技术:VS 各种信息验证 作者:赖文扬 撰写时间:2019年6月25日在项目里面有很多信息要验证的,例如姓名验证(不能是数据)、电话信息验 证(7位数)、手机号信息验证(11位数)、身份证信息验证(15到18为身份 证号码验证)。一般项目里面就有这几种验证。现…

验证信息格式

验证&#xff1a;一、RequiredFieldValidator&#xff1a;非空验证ErrorMessage&#xff1a;验证出错时显示的错误信息ControlToValidate&#xff1a;要验证的控件IDDisplay&#xff1a;呈现模式。Static-静止&#xff0c;不显示也会占空间。Dynamic-动态&#xff0c;不显示不占…

正则表达式——验证信息

本文编写于 146 天前&#xff0c;最后修改于 146 天前&#xff0c;其中某些信息可能已经过时。 正则表达式&#xff1a; 正则表达式&#xff0c;又称规则表达式。(英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE)&#xff0c;计算机科学的一…

Sigrity 中Node Placement 和Via Placement Warning 问题的处理

Speed2000在导入PCB设计文件后&#xff0c;把PCB文件转换为SPD文件&#xff0c;转换成SPD文件之后&#xff0c;我们需要通过CC确认是否有短路等问题&#xff0c;如下图&#xff0c;可以在tool--》options--》edit options--》error checking 中找到这个窗口。 sigrity CC 文件检…

OpenStack Victoria搭建(七)安装并验证 Placement

介绍 ✔ 笔记 在 Stein 发布之前&#xff0c;放置代码与计算 REST API 代码 (nova-api) 一起在 Nova 中。确保本文档的发布版本与您要部署的发布版本匹配。 步骤概述 部署API服务 Placement 提供了一个placement-apiWSGI 脚本&#xff0c;用于使用 Apache、nginx 或其他支持 WS…

ICC2 user guide(二)Placement and Optimization

目录 一 Specifying Coarse Placement Constraints and Settings 1 Defining Keepout Margins 2 Defining Area-Based Placement Blockages 2.1 Defining a Placement Blockage 2.2 Define a Blockage of a Predefined Category

超详细Openstack核心组件——Placement部署

目录 OpenStack-Placement组件部署创建数据库实例和数据库用户创建Placement服务用户和API的endpoint 总结 OpenStack-Placement组件部署 继之前glance部署之后&#xff0c;继续部署Placement 创建数据库实例和数据库用户 [rootct ~]# mysql -uroot -p MariaDB [(none)]>…

OpenStack | Placement组件

&#x1f43c; Placement组件部署创建数据库实例和用户创建Placement服务用户和API的endpoint Placement 的安装与配置修改Apache配置文件 验证 Placement组件部署 openstack部署遵循以下顺序 创建数据库实例和用户 mysql -u root -p密码 create database placement;grant …

operator new与placement new

通常讲的new指的是new operator&#xff0c;使用new operator的时候&#xff0c;实际上执行了三个步骤: 1&#xff09;调用operator new分配内存 &#xff1b;2&#xff09;调用构造函数生成类对象&#xff1b;3&#xff09;返回相应指针。 分配内存这一操作是由operator new…

ICC II 2 placement

整个笔记比较长 建议搜索食用 placement的关键步骤 #mermaid-svg-gdanrmmgqcQiRsLU .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-gdanrmmgqcQiRsLU .label text{fill:#333}#mermaid-svg-gdanr…