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

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC

SHA-256

SHA-2是广泛应用的哈希函数,并且有不同的版本,这篇博客主要介绍SHA-256。

SHA-256算法满足了哈希函数的三个安全属性:

  • 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。
  • 抗第二原像性 - 给定一个输入和它的哈希值,无法找到一个不同于该输入的新输入,使得这两个输入产生一样的哈希值。
  • 抗碰撞性 - 这个性质保证不能够产生哈希值相同的两个不同的输入。

SHA-2是一种采用Merkle–Damgård结构来构造的哈希函数。

密码学学习笔记(十三):哈希函数 - Merkle–Damgård结构_kingofyb的博客-CSDN博客

首先,我们对需要进行哈希运算的输入做填充,然后将填充后的输入划分为等长的分组,每个分组的长度等于压缩函数的输入长度。SHA-256算法输入的分组大小为512比特。

然后,将压缩函数应用于消息的所有分组,在每次迭代过程中,都将上一轮的输出作为压缩函数的第二个输入参数,而将消息的某个分组作为它的第一个输入参数。将压缩函数最终的输出作为消息的摘要。

在第一次调用压缩函数时,它的第二个参数通常是固定的,且标准文件中将其指定为特定的值。具体来说,SHA-256使用第一个素数的平方根来生成这个初始值。

MAC 

什么是MAC消息认证码?

密码学学习笔记(三):MAC - 消息认证码_mac消息认证码_kingofyb的博客-CSDN博客

HMAC(Hash-based MAC)

RFC 2104: HMAC: Keyed-Hashing for Message Authentication (rfc-editor.org)

由于长度扩展攻击,SHA-2不能被直接用来计算秘密消息的哈希值。HMAC可以将哈希函数转换为密钥算法。

  1. 由主密钥生成两个密钥:k1 = k ⊕ ipad,k2 = k ⊕ opad。其中,ipad(内部填充)以及opad(外部填充)是常量,⊕表示异或操作。
  2. 将密钥k1和message串联在一起,计算串联结果的哈希值。
  3. 将密钥k2与第2步的输出串联在一起后,再次计算串联结果的哈希值。
  4. 将第3步输出的哈希值作为最终的认证标签。

HMAC的好处在于,其设计者可以证明嵌入的散列函数的强度与HMAC的强度之间的联系。如果嵌入的散列函数的安全受到威胁,只需要用更安全的散列函数替换嵌入的散列函数,这样仍可以保持HMAC的安全性。

H = 嵌入的散列函数比如SHA。

M = HMAC的消息输入,包括嵌入到散列函数中定义的填充位。

Yi = M的第i个分组, 0≤i≤L-1。

L = M中的分组数。

b = 每一分组中所含的位数。

n = 嵌入的散列函数所产生的散列码长度

K = 秘密密钥。如果密钥的长度大于b,则将密钥作为散列函数的输入来产生一个n位数的密钥。建议密钥长度≥n。

K+ = 为使K为b位长而在K左边填充0后所得的结果。

ipad = 00110110(十六进制36)重复b/8次。

opad = 01011100(十六进制5C)重复b/8次。

HMAC(K,M) = H[(K+ ⊕ opad) || H[(K+ ⊕ ipad) || M]]

NMAC(Nested MAC)

NMAC算法(Nested MAC)类似于之前描述的CBC-MAC算法。它使用稍微不同的伪随机函数F。函数F返回的数字是密钥的正确值。CBC-MAC可以看我之前的博客。

密码学学习笔记(三):MAC - 消息认证码_mac消息认证码_kingofyb的博客-CSDN博客

与CBC-MAC的一样,在对最后的数据块进行加密之后,使用第二秘密加密密钥对结果进行一次附加加密。由于最后一个数据块的先前加密结果由与密钥相同数量的比特组成,因此应附加额外的比特序列,以确保结果与数据块具有相同的大小。NMAC通常用于数据块长度远大于密钥大小的系统。 

如果没有算法的最后一步(没有使用第二个密钥进行加密),入侵者将能够使用正确计算的身份验证码将任意数量的块附加到拦截的消息中。然后,他可以计算一个新的身份验证码,并将其附加到修改后的消息中。作为第一个新添加的函数F的输入,攻击者将使用原始消息的原始身份验证代码。

KMAC(KECCAK MAC)

KMAC使用SHA-3-256(key||message)。KMAC算法使用了CSHAKE来构造消息认证码算法,其中cSHAKE是SHAKE可扩展输出函数的自定义版本。KMAC算法对密钥、输入以及输出的长度进行编码,并将其作为cSHAKE的输入。

KMAC算法只是cSHAKE函数的包装器。

相关文章:

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC

SHA-256 SHA-2是广泛应用的哈希函数,并且有不同的版本,这篇博客主要介绍SHA-256。 SHA-256算法满足了哈希函数的三个安全属性: 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。抗第二原像性 - 给定一个输入和它的哈希值&#xf…...

操作系统-笔记-第四章-文件管理

目录 四、第四章——文件管理 1、文件管理——基础概念 (1)文件结构 (2)操作系统提供的接口 (3)总结 2、文件的逻辑结构 (1)有结构文件(类似SQL表文件&#xff09…...

【MiniGUI】文字颜色实现透明度变化

在MiniGUi中,输出文字时有时候希望文字带有透明度信息, 即文字能够透出下面的图像来。 很自然地想到,设置颜色时,将颜色设置为带有透明度的颜色: SelectFont(hdc, mg_font);SetTextColor(hdc, RGBA2Pixel(HDC_SCREEN, …...

css中元素加定位之后到一定距离元素会变小

css中元素加定位之后到一定距离元素会变小 主要原因:元素没有加宽高 .swiperWrapper .active{bottom: 380px;left: 215px;z-index: 10; } .swiperWrapper .next{bottom: 170px;left: 7%;z-index: 20; } .swiperWrapper .prev{bottom: 360px;left: 0%;z-index: 30;…...

Java 语言实现冒泡排序

Java 语言实现冒泡排序 介绍 冒泡排序是一种简单直观的排序算法,它重复地比较相邻的两个元素,如果顺序错误就交换它们,直到没有需要交换的元素为止。冒泡排序的思路是通过每一轮的比较将最大(或最小)的元素逐渐“冒泡…...

面向对象单选题

下列选项中不属于面向对象的特征的是(B) A、封装性 B、安全性 C、继承性 D、多态性 在Java中,关于继承,类只支持(A) A、单继承 B、多继承 C、两个都可以 D、两个都不可以 用于定义成员的访问控制权的一组关键字…...

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差,编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…...

[oneAPI] 使用字符级 RNN 生成名称

[oneAPI] 使用字符级 RNN 生成名称 oneAPI特殊写法使用字符级 RNN 生成名称Intel Optimization for PyTorch数据下载加载数据并对数据进行处理创建网络训练过程准备训练训练网络 结果 参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517…...

【ROS】参数服务器--理论模型与参数操作(C++)

一、概念介绍 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。 作用:存储一些多节点…...

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…...

【洛谷】P1163 银行贷款

原题链接:https://www.luogu.com.cn/problem/P1163 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 这题需要注意的是利率按月累计这句话,也就是相当于“利滚利”。 我们定义sum变量表示贷款原值,money表示每月支付…...

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em

​ 鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工…...

kafka--技术文档--基本docker中安装<单机>-linux

安装zookeeper 阿丹小科普: Kafka在0.11.0.0版本之后不再依赖Zookeeper,而是使用基于Raft协议的Kafka自身的仲裁机制来替代Zookeeper。具体来说,Kafka 2.8.0版本是第一个不需要Zookeeper就可以运行Kafka的版本,这被称为Kafka Raf…...

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)效果一览…...

Linux系统安全——NAT(SNAT、DNAT)

目录 NAT SNAT SNAT实际操作 DNAT DNAT实际操作 NAT NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链 请求报文:修改源/目标IP, 响应报文:修改源/目标…...

uniapp项目添加人脸识别功能,可用作登录,付款,流程审批前的安全校验

本案例使用了hbuilder插件商城中的活体检验插件,可自行前往作者处下载查看, 效果图如下 此插件需要在manifest.json中勾选 实现流程 1:前往hbuilder插件市场下载插件 2:在页面中导入import face from "/uni_modules/mcc-…...

SpringBoot面试题

Spring Boot的启动流程主要分为以下几个步骤: 加载Spring Boot配置文件,初始化Spring Boot环境和核心组件,如ApplicationContext上下文环境、自动装配机制等。 执行SpringApplication.run()方法,执行所有Spring Boot自动配置的Be…...

Git相关命令

SSH密钥文件 Github里面S设置SH公钥有两者选择方式 账号下的每个仓库都设置一个公钥,因为GitHub官方要求每个仓库的公钥都不能相同,所以每个账号都要搞一个密钥(很麻烦)给账号分配一个公钥,然后这个公钥就可以在这个…...

《HeadFirst设计模式(第二版)》第八章代码——模板方法模式

代码文件目录: CaffeineBeverage package Chapter8_TemplateMethodPattern;/*** Author 竹心* Date 2023/8/17**/public abstract class CaffeineBeverage {final void prepareRecipe(){boilWater();brew();pourInCup();//这里使用钩子customerWantsCondiments()来…...

RESTful API,以及如何使用它构建 web 应用程序

RESTful API是一种基于HTTP协议的API设计风格,它的核心思想是将资源作为 API 的核心,使用 HTTP 的 GET、POST、PUT、DELETE 等方法对这些资源进行操作,并通过 URL 来定位资源。 RESTful API的特点包括: 资源是 API 的核心使用 H…...

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep作为开源AIOps告警管理平台,采用现代化的微服…...

如何快速掌握ComfyUI-WanVideoWrapper:AI视频生成从入门到精通

如何快速掌握ComfyUI-WanVideoWrapper:AI视频生成从入门到精通 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper ComfyUI-WanVideoWrapper 是一款专为ComfyUI设计的强大AI视频生成插件…...

【最新v2.7.1 版本安装包】OpenClaw 新手部署全攻略,无需命令零代码一键安装保姆级

Windows 一键部署 OpenClaw 教程|5 分钟搞定本地 AI 智能体,告别复杂配置 核心亮点 零代码门槛|全程可视化|无需手动配置运行环境|内置全部运行依赖|28 万 Tokens 额度 前言 2026 年开源圈热度居高不下…...

谷歌seo搜索引擎优化教程有吗?资深SEO总结的15个高效提速工具

很多企业主每年在独立站开发上投入超过 10 万人民币,但网站上线半年,每天的自然访问量依然是个位数。面对“谷歌seo搜索引擎优化教程有吗?”这种疑问,行业内的真实情况是:绝大部分公开课都在讲十年前的套路&#xff0c…...

一键批量下载网易云音乐FLAC无损音乐:Golang高效解决方案

一键批量下载网易云音乐FLAC无损音乐:Golang高效解决方案 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 你是否曾梦想拥有一个完整的无损…...

Anaconda 安装与配置 的所有核心步骤

下载:去官网或靠谱的镜像源(如清华镜像)下载 2025.06版 Windows x64 安装包(约950MB)。安装:运行 .exe 文件。关键选项1:勾选 Add Anaconda to my PATH (添加到环境变量)…...

OpenAPI规范自动生成CLI工具:原理、实现与工程实践

1. 项目概述:从API文档到命令行工具的自动化革命如果你是一名后端开发者,或者经常需要与各种RESTful API打交道,那么下面这个场景你一定不陌生:产品经理或前端同事跑过来,递给你一份新鲜出炉的OpenAPI/Swagger规范文档…...

3分钟实现Zotero与Notion双向联动:Notero完整使用指南

3分钟实现Zotero与Notion双向联动:Notero完整使用指南 【免费下载链接】notero A Zotero plugin for syncing items and notes into Notion 项目地址: https://gitcode.com/gh_mirrors/no/notero 你是否曾为学术研究中的文献管理而烦恼?Zotero中精…...

从零构建FreeRTOS认知:核心概念与实战框架精讲

1. 认识FreeRTOS:嵌入式系统的"交通指挥官" 第一次接触FreeRTOS时,我盯着文档里那些"任务"、"队列"、"调度器"之类的术语发懵,就像刚拿到驾照就被扔进了早高峰的十字路口。后来才发现,这…...

OpenClaw微信公众号插件wemp v2:双Agent路由与混合知识库实战

1. 项目概述:一个为OpenClaw设计的微信公众号插件如果你正在寻找一个能够将你的AI助手能力无缝接入微信公众号,实现自动化客服、智能问答甚至更复杂交互的解决方案,那么你找对地方了。wemp(WeChat MP Plugin)正是这样一…...