密码学学习笔记(二十一):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可以将哈希函数转换为密钥算法。
- 由主密钥生成两个密钥:k1 = k ⊕ ipad,k2 = k ⊕ opad。其中,ipad(内部填充)以及opad(外部填充)是常量,⊕表示异或操作。
- 将密钥k1和message串联在一起,计算串联结果的哈希值。
- 将密钥k2与第2步的输出串联在一起后,再次计算串联结果的哈希值。
- 将第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的输入。

相关文章:

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC
SHA-256 SHA-2是广泛应用的哈希函数,并且有不同的版本,这篇博客主要介绍SHA-256。 SHA-256算法满足了哈希函数的三个安全属性: 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。抗第二原像性 - 给定一个输入和它的哈希值…...

操作系统-笔记-第四章-文件管理
目录 四、第四章——文件管理 1、文件管理——基础概念 (1)文件结构 (2)操作系统提供的接口 (3)总结 2、文件的逻辑结构 (1)有结构文件(类似SQL表文件)…...
【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…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...