HKDF秘钥生成算法

news2024/11/16 16:37:32

HKDF叫HMAC-based KDF(key derivation function),基于HMAC的密钥推导函数,所以我们先认识HMAC算法。

1. HMAC

基于一个共同密钥,在两个对端之间提供消息完整性确认的机制叫"message authentication codes(MAC),消息认证码"。其实就是将消息进行hash,得到的hash值附加到消息之后,随消息一起发送,对端接收后,同样进行hash,来验证消息是否被篡改——关键点在不同数据得到的hash值一定不同——其中得到的hash值就是MAC(在别的语境里边也叫消息摘要)。另外,为了避免使用同样的hash函数对相同数据进行操作总是得出同样的摘要,额外加入一个密钥,这样使用不同密钥就可以得出不同的MAC,当然,这个密钥是两个对端都知道的。这样,我们就得到了基于加密hash的消息完整性认证的算法——Hash-based MAC。

HMAC定义如下:

输入:

  • 使用的加密hash函数H,输出长度为hashLen
  • 使用的密钥K,长度hashLen <= Klen <= 64,如果K的长度超过64,则先用hash函数进行一次hash,用得到的值作为K
  • 需要认证的数据text

输出:

  • 消息完整性认证码HMAC

过程:

  • 定义 ipad = 64个0x36, opad = 64个0x5c
  • HMAC = HMAC-Hash(H, K, text) = H(K XOR opad, H(K XOR ipad, text))

目的:

  • 为text生成一个HMAC消息完整性认证码,输出长度就是hash函数的输出长度

在这里插入图片描述

2. HKDF

HKDF的主要目的使用原始的密钥材料,派生出一个或更多个能达到密码学强度的密钥(主要是保证随机性)——就是将较短的密钥材料扩展成较长的密钥材料,过程中需要保证随机性。
  HKDF包含两个基本模块,或者说两个基本使用步骤:1. 提取 Extract, 2. 扩展 Expand。

  • 提取:使用原始的密钥材料,派生出一个符合密码学强度的伪随机密钥
  • 扩展:使用第1步骤提取出来的伪随机密钥,扩展出指定长度的密钥(同时保证随机性)。

HKDF-Extract

输入:

  • HMAC使用的hash函数H,H输出长度是hashLen
  • 原始密钥材料IKM(input keying material)
  • 另外的随机源salt, 如果没有,默认是hashLen长度的0串

输出:

  • hashLen长度的伪随机密钥prk(pseudorandom key)

过程:

  • prk = HKDF-Extract(H, salt, IKM) = HMAC-Hash(H, salt, IKM)
  • 其实就相当于用salt作为HMAC-Hash的K,对IKM进行消息完整性认证

目的:

使用salt增加IKM的随机性

在这里插入图片描述

HKDF-Expand

输入:

  • HMAC使用的hash函数H,H输出长度是hashLen
  • 第一步生成的PRK
  • 另外的随机元info,可以为空
  • 期望生成的密钥长度L

输出:

  • L长度的OKM(output keying material)

过程:

N = ceil(L/hashLen)
T = T(1) || T(2) || T(3) || … || T(N)
OKM = T的前L字节
T(0) = 空
T(1) = HMAC-Hash(PRK, T(0) || info || 0x01)
T(2) = HMAC-Hash(PRK, T(1) || info || 0x02)
T(3) = HMAC-Hash(PRK, T(2) || info || 0x03)

目的:

  • 将PRK扩展到指定长度L,同时保持密码学强度(随机性)

在这里插入图片描述

3. 总结

  • HKDF是密钥推导算法,根据一个原始密钥材料,推导出指定长度的密钥;
  • HKDF基于HMAC;
  • HMAC是基于加密hash函数的消息完整性认证算法,主要目的是认证消息完整性。在这里被用于增加原始密钥材料的随机性;
  • HKDF包含两步:(1) 提取Extract, (2) 扩展Expand;
  • HKDF-Extract就是HMAC,取IKM的认证码,也就相当于用额外的随机源salt(Key)增加了IKM(text)的随机性;
  • HKDf-Expand就是将短密钥变长,同时保证随机性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CSS】CSS使用变量与变量定义

如何定义可以在CSS中使用的变量 CSS变量&#xff08;也称为自定义属性&#xff09;的定义规则如下&#xff1a; 使用–作为前缀&#xff0c;后跟变量名。变量名可以由字母、数字、连字符和下划线组成&#xff0c;并且不能以连字符开头。变量名区分大小写。变量定义在选择器范…

数据中心可视化——智慧机房数字孪生,高效运维管理

IDC&#xff08;Internet Data Center&#xff09;数据中心可视化是指通过可视化的方式对数据中心的运行状态、资源使用情况、安全监控等进行展示和管理。可以帮助管理员更好地了解数据中心的运行情况和趋势&#xff0c;及时发现问题并采取措施&#xff0c;提高数据中心的运行效…

鼠标悬停,用气泡形式提示用户信息

需求 鼠标悬停,用气泡形式提示用户名字信息 效果图 分析 图中深浅两色的小方块是由v-if遍历二维数组得来的,所以这个需求本质上是原生html元素的出现与隐藏,重点在于知道显示或隐藏哪一个元素 代码 <!-- shelvesList就是后台给前端的,关于库位信息的二维数组 --> &l…

用RunnerGo平替JMeter?这个测试平台确实可以!

1、前言 目前在性能测试领域市场jmeter占有率非常高&#xff0c;主要原因是相对比其他性能测试工具使用更简单&#xff08;开源、易扩展&#xff09;&#xff0c;功能更强大&#xff08;满足多种协议的接口&#xff09;&#xff0c;但是随着研发协同的升级&#xff0c;平台化…

java版本企业电子招标采购系统源码+二次开+Spring Cloud + Spring Boot 发

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

耳骨传导耳机哪个牌子好,几款实战性高的耳骨传导耳机分享

骨传导耳机是一种利用骨头直接传声的耳机&#xff0c;因为它不需要通过耳道来听音乐&#xff0c;所以能够更好地保护听力&#xff0c;也不会因为佩戴耳机而影响到我们正常的交流&#xff0c;可以说是一种比较健康的耳机。不过骨传导耳机的价格相对于普通蓝牙耳机来说还是要贵一…

二叉树题目:相同的树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;相同的树 出处&#xff1a;100. 相同的树 难度 3 级 题目描述 要求 给你两个二叉树的根结点 p \texttt{p} p …

振动在线监测:如何优化您的设备维护计划?

在工业生产中&#xff0c;设备的维护计划对于确保设备可靠性和生产效率至关重要。而振动在线监测作为一种先进的技术手段&#xff0c;可以实时监测设备振动情况&#xff0c;帮助企业优化维护计划&#xff0c;提高设备维护效率。本文将介绍振动在线监测的重要性&#xff0c;并分…

SparkSQL的分布式执行引擎(Spark ThriftServer)

文章目录 1.Spark ThriftServer2.启动 Spark ThriftServer3.Beeline方式连接4.DataGrip方式连接5. 代码方式6. SparkSQL运行方式7.参考文章 1.Spark ThriftServer Spark ThriftServer 相当于一个持续性的Spark on Hive集成模式&#xff0c;可以启动并监听在10000端口&#xff…

182_Power BI 使用 DAX 按照先进先出原则计算毛利润

182_Power BI 使用 DAX 按照先进先出原则计算毛利润 一、背景 在笔者以往的文章中也有先进先出的案例&#xff0c;可以参考(https://jiaopengzi.com/?s%E5%85%88%E8%BF%9B%E5%85%88%E5%87%BA)。 今天我们来看一个网友提出的问题&#xff0c; 先进先出的原则&#xff0c;入…

ATM模拟机-实战开发-前期准备

需求分析 项目名称&#xff1a;ATM模拟存取钱系统 目录 需求分析 项目名称&#xff1a;ATM模拟存取钱系统 项目目标功能分析&#xff1a; 用户功能&#xff1a; 提供功能 基本功能 管理员功能&#xff1a; 提供功能 基本功能 详细分析 用户功能 管理员功能 用户…

ModaHub大禹智库:ModelScope魔搭社区的“下载数据严重造假“的说法可能存在一定的合理性

目录 首先&#xff0c;我们需要了解ModelScope魔搭社区的运营模式和数据收集方式。 其次&#xff0c;我们需要考虑ModelScope魔搭社区的用户群体和应用场景。 此外&#xff0c;我们还需要考虑ModelScope魔搭社区的发展时间和市场竞争情况。 综上所述&#xff0c;ModelScope…

PHP反序列化漏洞之Phar

目录 1、认识phar类型文件 2、制作phar文件 3、phar的上传与读取 4、漏洞利用的条件 1、认识phar类型文件 这种文件可以通过phar协议来读取&#xff08;使用phar://后面接文件路径即可读取&#xff09; 先给大家看一下phar文件的大致样子&#xff1a; 它一般包括头部信息&…

Windows10下使用wsl2+ubuntu1804

一定好好看官方文档 适用于 Linux 的 Windows 子系统文档 | Microsoft Learn 一、安装WSL 1.1、方式一&#xff1a; 现在&#xff0c;可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择…

OpenAI Gym入门与实操(3)

接前一篇文章&#xff1a;OpenAI Gym入门与实操&#xff08;2&#xff09; 本文内容参考&#xff1a; Getting Started With OpenAI Gym | Paperspace Blog&#xff0c; 【强化学习】 OpenAI Gym入门&#xff1a;基础组件&#xff08;Getting Started With OpenAI Gym: The B…

leetcode 989.数组形式的整数加法

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a; 数组形式的整数加法 ⭕️ 代码&#xff1a; /*思路&#xff1a;数组从后往前和k的低位相加&#xff0c;若大于等于10则进一.[1 , 2 , 0 , 0] 3 44 3 2 1 最后逆置数组即可。 */ int* addToArrayForm(…

【进程】快速上手进程操作

目录 0. 进程概述 1. 创建进程 1.1 进程的创建&#xff1a;fork函数 1.2 进程的等待&#xff1a;wait()、waitpid() 1.3 特殊进程&#xff1a;僵尸进程、孤儿进程、守护进程 1.4 进程的终止&#xff1a;exit和_exit函数 1.5 进程退出清理&#xff1a;atexit函数 1.6 进…

自动部署代码导致接口访问404

问题原因&#xff1a;.user.ini文件中open_basedir与线上服务器中不同导致 由于.user.ini文件特殊性质 需要修改其中文件需要root权限也无法完成 推荐文章(linux系统中文件有哪些隐藏属性_帮助中心_文汇软件_山东文汇信息【官方网站】) 即可解决

【elementplus】body设置zoom后,el-table开启show-overflow-tooltip后,表格的tooltip显示会错位的解决方案

由于我的项目是无法避免使用zoom&#xff0c;所以只记录zoom后的解决方案 示例&#xff1a;明明划过的是第一行&#xff0c;tooltip却显示到了第四行的位置&#xff1b; 正确显示&#xff1a;划过第一行&#xff0c;tooltip显示在第一行的位置 代码&#xff1a;使用transfor…

关于 Asyncio,别再使用run_until_complete了

熟悉Python 的 Asyncio 进行异步编程的小伙伴肯定对下面的写法不陌生&#xff1a; import asyncioasync def test():await asyncio.sleep(3)print("Test rersult")loop asyncio.get_event_loop() loop.run_until_complete(test())这种写法也是在网上搜到的最多的协…