HMAC 签名算法详解
一、什么是 HMACHMACHash-based Message Authentication Code基于哈希的消息认证码是一种结合密码学哈希函数与对称密钥来生成消息认证码的算法。它同时继承了哈希函数的高效计算特性与对称密钥的认证能力核心作用是验证消息的完整性与真实性—— 确保消息在传输过程中未被篡改且确实来自持有密钥的合法发送方。HMAC 由 Mihir Bellare、Ran Canetti 和 Hugo Krawczyk 于 1996 年提出1997 年被纳入 RFC 2104 国际标准是目前工业界应用最广泛的消息认证码方案。它不绑定特定哈希函数可灵活搭配 MD5、SHA-1、SHA-256、SHA-512 等任意哈希算法对应记作 HMAC-MD5、HMAC-SHA256、HMAC-SHA512 等。二、核心设计思想很多人会将 HMAC 简单理解为 “密钥 消息拼接后做哈希”即Hash(key message)。这种朴素实现存在严重的安全缺陷最典型的就是长度扩展攻击攻击者在不知道原始密钥的情况下可以在消息末尾追加任意数据直接推导出合法的哈希值从而伪造签名。HMAC 的设计目标就是从结构上规避这类攻击它采用双层哈希 两次密钥异或的嵌套结构不直接拼接密钥与消息而是将密钥分别与两个固定常量ipad、opad做异或运算生成两组相互独立的派生密钥先将内层派生密钥与原始消息拼接执行第一次哈希运算再将外层派生密钥与第一次哈希的结果拼接执行第二次哈希运算最终输出 HMAC 值。这种 “内哈希 外哈希” 的嵌套结构从根本上阻断了长度扩展攻击的路径同时几乎没有损失哈希函数的计算效率。三、标准计算流程3.1 前置定义设H为所选底层哈希函数如 SHA-256K为原始签名密钥B为哈希函数的分组长度单位字节例如 SHA-256 分组长度为 64 字节SHA-512 为 128 字节L为哈希函数的输出长度单位字节例如 SHA-256 输出 32 字节ipad 0x36 重复 B 次内层填充常量opad 0x5C 重复 B 次外层填充常量text为待签名的原始消息3.2 密钥预处理密钥长度必须对齐哈希函数的分组长度因此需要先做标准化处理若密钥长度大于分组长度 B先对密钥执行一次哈希将哈希结果作为新密钥长度变为 L若密钥长度小于分组长度 B在密钥末尾补 0将其填充至 B 字节长度。最终得到长度恰好为 B 字节的标准化密钥K0。3.3 完整计算步骤计算内层派生密钥K_inner K0 XOR ipad将内层派生密钥与原始消息拼接得到内层输入K_inner || text对内层输入执行哈希运算得到内层摘要inner_hash H(K_inner || text)计算外层派生密钥K_outer K0 XOR opad将外层派生密钥与内层摘要拼接得到外层输入K_outer || inner_hash对外层输入执行哈希运算最终结果即为 HMAC 值\(\text{HMAC}(K, \text{text}) H\left( (K_0 \oplus \text{opad}) \parallel H\left( (K_0 \oplus \text{ipad}) \parallel \text{text} \right) \right)\)3.4 常量 0x36 与 0x5C 的设计依据这两个数值并非随机选取0x36 的二进制为001101100x5C 为01011100二者汉明距离大每一位差异尽可能多异或后能让密钥的比特位充分扩散降低内外层派生密钥的相关性提升整体安全性。四、安全特性分析4.1 核心安全优势天然抵抗长度扩展攻击这是 HMAC 最核心的安全价值。由于外层哈希完整包裹了内层哈希的输出攻击者无法通过追加消息的方式推导合法签名这也是它优于Hash(keymessage)朴素实现的根本原因。哈希碰撞影响有限即使底层哈希函数出现碰撞漏洞如 MD5、SHA-1HMAC 的安全性下降幅度也远小于裸哈希。例如 HMAC-MD5 至今仍未被完全攻破其安全强度显著高于单独使用 MD5。密钥不直接暴露密钥始终以异或后的派生形态参与运算不会直接出现在哈希输入的首尾降低了密钥侧信道泄露的风险。对称认证性只有持有相同密钥的双方才能生成和验证签名可确认消息来源的真实性。4.2 安全边界与注意事项HMAC 属于对称算法不具备不可否认性收发双方都可以生成签名无法替代数字签名密钥长度建议至少等于哈希输出长度过短的密钥会大幅降低暴力破解的成本不建议继续使用 HMAC-MD5、HMAC-SHA1生产环境优先选择 HMAC-SHA256 及以上强度的组合。五、典型应用场景5.1 API 接口鉴权开放平台与服务端通信中客户端将请求参数按规则排序拼接后用密钥生成 HMAC 签名服务端收到请求后按相同规则重新计算签名并比对。该方案可有效防止参数被篡改配合时间戳与随机数还能防御重放攻击是 AWS、阿里云、微信支付等绝大多数开放平台的标准鉴权方案。5.2 JWT 令牌签名JSON Web Token 中的 HS256、HS384、HS512 算法本质就是 HMAC-SHA256、HMAC-SHA384、HMAC-SHA512。服务端用密钥对 Payload 签名客户端无法篡改令牌内容服务端校验通过即可信任身份信息。5.3 文件完整性校验在分发安装包、固件等文件时发布方同时公布文件的 HMAC 值与共享密钥下载方计算本地文件的 HMAC 并比对可确认文件未被植入恶意代码。相比普通哈希校验HMAC 还能防止攻击者同时篡改文件和哈希校验值。5.4 密码存储不推荐HMAC 有时被用来哈希存储用户密码但它并非为慢哈希设计计算速度过快容易被彩虹表和暴力破解攻击。存储用户密码应优先使用 bcrypt、Argon2、PBKDF2 等专用慢哈希算法。六、代码实现示例6.1 PythonPython 标准库hmac提供了原生实现import hmac import hashlib key byour_secret_key message bHello, HMAC! # 生成 HMAC-SHA256 签名 signature hmac.new(key, message, digestmodhashlib.sha256).hexdigest() print(signature)6.2 GoGo 语言crypto/hmac标准库package main import ( crypto/hmac crypto/sha256 encoding/hex fmt ) func main() { key : []byte(your_secret_key) message : []byte(Hello, HMAC!) h : hmac.New(sha256.New, key) h.Write(message) signature : hex.EncodeToString(h.Sum(nil)) fmt.Println(signature) }6.3 Node.jsconst crypto require(crypto); const key your_secret_key; const message Hello, HMAC!; const signature crypto.createHmac(sha256, key) .update(message) .digest(hex); console.log(signature);七、总结HMAC 是密码学工程中极其经典且实用的基础组件它以极低的实现成本解决了网络通信中最常见的 “消息篡改” 与 “身份伪造” 问题。其双层哈希的设计思想简洁而精妙历经数十年工业界实战检验依然稳固。在工程实践中只要涉及对称密钥下的消息认证、接口签名、令牌校验HMAC-SHA256 都是默认的安全选型。理解其原理不仅能帮助开发者正确使用它也能避免因自行封装错误如实现hash(keymsg)朴素方案而引入安全漏洞。

相关新闻

基于TVA的具身智能因果感知与反事实想象能力

基于TVA的具身智能因果感知与反事实想象能力

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/8/23 6:47:33 阅读更多 →
SpringBoot+Vue全栈实习生管理系统开发实践

SpringBoot+Vue全栈实习生管理系统开发实践

1. 项目概述与核心价值实习生管理系统作为现代企业人力资源数字化转型的重要组成部分,正在从传统的Excel表格管理向智能化平台快速演进。这个基于SpringBootVue的全栈解决方案,完美融合了后端业务处理的高效性与前端交互的流畅体验。我在参与某跨国科技公…

2026/8/23 6:47:33 阅读更多 →
层次分析法(AHP)实战指南:从数学建模到决策优化

层次分析法(AHP)实战指南:从数学建模到决策优化

1. 项目概述:从“拍脑袋”到“算清楚”的决策利器在数学建模竞赛,尤其是像“美赛”、“国赛”这类开放性极强的比赛中,我们常常会遇到一类让人头疼的问题:方案选优。比如,要评选最佳旅游城市,需要考虑景色、…

2026/8/23 6:47:33 阅读更多 →

最新新闻

华为ENSP网络仿真工具安装与排错全指南:从VLAN实验到替代方案

华为ENSP网络仿真工具安装与排错全指南:从VLAN实验到替代方案

1. 先搞清楚 ENSP 到底是什么,以及它现在还能不能用如果你正在准备网络工程师认证,或者需要模拟华为网络设备来做实验,那你大概率绕不开 ENSP 这个名字。ENSP,全称是 Enterprise Network Simulation Platform,是华为官…

2026/8/23 7:39:49 阅读更多 →
卡方检验原理与实战:从拟合优度到独立性检验的多语言实现

卡方检验原理与实战:从拟合优度到独立性检验的多语言实现

1. 卡方分布:从理论到实战的桥梁在数据建模和统计分析的世界里,我们经常需要判断一个样本是否服从某个理论分布,或者检验两个分类变量之间是否存在关联。比如,工厂质检员想知道一批产品的次品率是否与生产线有关,市场分…

2026/8/23 7:39:49 阅读更多 →
Angular7,9,学习笔记一 创建项目,基本语法

Angular7,9,学习笔记一 创建项目,基本语法

1.创建项目2.目录结构3.app4.创建组件5.语法5.1绑定属性5.2绑定html5.3.ngFor循环数据5.4.引入图片5.5条件判断5.6样式5.7管道5.8事件5.9.表单1.10双向数据绑定,只是针对表单在中引入

2026/8/23 7:39:49 阅读更多 →
Mac Studio本地部署120B大模型实战:低成本私有AI开发环境搭建

Mac Studio本地部署120B大模型实战:低成本私有AI开发环境搭建

在Mac Studio上本地部署一个120B参数的大语言模型,听起来像是技术极客的“炫技”行为,还是真的具备实用价值?当“大模型部署”成为开发者圈子的热门话题,我们听到的往往是“需要多张A100/H100”、“显存动辄上百GB”、“电费惊人”…

2026/8/23 7:39:49 阅读更多 →
C++可变参类模板:从递归特化到类型安全容器的实现

C++可变参类模板:从递归特化到类型安全容器的实现

1. 从“万能容器”到“类型安全的参数打包”:可变参类模板的动机在C模板编程的日常里,我们经常会遇到一个经典需求:设计一个能容纳任意数量、任意类型数据的容器或工具类。你可能会立刻想到std::tuple,它确实是一个完美的解决方案…

2026/8/23 7:39:49 阅读更多 →
哈希表平均查找长度计算:拉链法、线性探测与平方探测实战解析

哈希表平均查找长度计算:拉链法、线性探测与平方探测实战解析

1. 项目概述:从“平均查找长度”说起在数据结构与算法的世界里,我们经常需要评估一个查找算法的效率。当面试官问你“哈希表的平均查找长度怎么算?”,或者你在优化一个高频查询的缓存系统时,一个核心的量化指标就会浮出…

2026/8/23 7:38:48 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →