NIST SP 800-108密钥导出函数KDF研究
NIST SP 800-108笔记
摘要:本文档对NIST SP 800-108介绍的密钥导出函数KDF进行简要分析记录,文档记录了三种类型的密钥导出函数,分别是基于计数器模式的KDF、基于反馈模式的KDF、基于双线叠加的KDF(前两种模式的组合)。KDF中采用的伪随机函数PRF可以采用HMAC或者CMAC。
关键词:密钥、密钥导出、密钥导出函数、HMAC、CMAC、分组密码算法、杂凑算法。
目录
4 伪随机函数PRF. 1
5 密钥导出函数KDF. 2
5.1 基于计数器模式的KDF. 2
5.2 基于反馈模式的KDF. 3
5.3 基于双线叠加的KDF(前两种模式的组合)... 5
4 伪随机函数PRF
5 密钥导出函数KDF
5.1 基于计数器模式的KDF
函数:KO = KDF_Counter(KI, Lable, Context, L)
- KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
- Lable:标签,比特串,比如可表示KDF的用途。
- Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
- L:导出密钥的比特长度。
K(i) = PRF(KI, [i]2 || Lable || 0x00 || Context || [L]2)
步骤5:返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。
- [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
- [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
- 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。
5.2 基于反馈模式的KDF
函数:KO = KDF_Feedback(KI, Lable, Context, L).
- KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
- Lable:标签,比特串,比如可表示KDF的用途。
- Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
- L:导出密钥的比特长度。
- IV:初始化向量,任意长度,可为空串。
K(i) = PRF(KI, K(i-1) {|| [i]2} || Lable || 0x00 || Context || [L]2)
步骤5:返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。
- {|| [i]2} 表示可以将[i]2和其它数据串联在一起,也可以不串联它。
- [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
- [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
- 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。
5.3 基于双线叠加的KDF(前两种模式的组合)
函数:KO = KDF_Double_Pipeline(KI, Lable, Context, L).
- KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
- Lable:标签,比特串,比如可表示KDF的用途。
- Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
- L:导出密钥的比特长度。
- IV:初始化向量,任意长度,可为空串。
步骤4:A(0) = IV= Lable || 0x00 || Context || [L]2。
5.2 K(i) = PRF(KI, A(i) {|| [i]2} || Lable || 0x00 || Context || [L]2) ;
步骤6:返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。
- {|| [i]2}表示可以将[i]2和其它数据串联在一起,也可以不串联它。
- [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
- [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
- 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。
NIST SP 800-108密钥导出函数KDF研究相关推荐
- C语言KDF密钥源代码,区块链中的数学-SM2算法与KDF密钥导出函数
本节讲了SM2算法的KDF函数,从一般用途到SM2特定实现 ## 写在前面 上一节说了[sm2概述和加密过程](https://learnblockchain.cn/article/1516)实现, ...
- SM2使用的密钥导出函数
SM2中使用了一种KDF,可以参见SM2标准文档第4部分公钥加密算法的5.4.3节密钥派生函数. 函数:K = KDF (Z, klen) 功能:SM2使用的的密钥导出函数 输入参数: Z:KDF所需 ...
- SM9使用的密钥导出函数
SM9使用的密钥导出函数是H1和H2函数的前四步,详情参见在第2部分 数字签名算法 5.4.2节密码杂凑函数. 两个密钥导出函数的差异在SM3杂凑时的首字节不同,H1和H2分别使用0x01和0x02作 ...
- 国密SM2算法密钥派生函数KDF的实现
前段时间需要实现国密算法SM2的签名.验签.加密.解密等功能,加解密过程使用到的密钥派生函数(KDF),从网上搜到的代码不符合<GMT 0003.4-2012 SM2椭圆曲线公钥密码算法 > ...
- 基于国密SM3算法(openssl接口)密钥派生函数KDF的实现
前言 最近项目需要使用KDF生成秘钥,对比国密标准(GB_T 32918.4-2016)及网络资料,发现确实没有让我满意的, 自己结合标准和大佬:Heidlyn的帖子<国密SM2算法密钥派生函数 ...
- MAC 与密钥派生函数 KDF
一.MAC 消息认证码 MAC 消息认证码,即 Message Authentication Code,是用于验证消息的一小段信息. 换句话说,能用它确认消息的真实性--消息来自指定的发件人并且没有被 ...
- NIST SP 800-132基于口令的密钥生成函数PBKDF和主密钥保护数据的方法研究
摘要:本文档对NIST SP 800-132介绍的基于口令的密钥生成函数PBKDF进行简要分析记录,基于口令的密钥生成函数即将口令(Password)通过密钥导出函数KDF后生成主密钥.同时描述了 ...
- HMAC和密钥导出(HMAC and Key Derivation)
简单地计算hash_func(key+msg)以获得MAC(消息认证码)被认为是不安全的.建议改用HMAC算法,例如HMAC-SHA256或HMAC-SHA3-512或其他安全MAC算法. 什么是HM ...
- dll 导出函数 下划线_内核中的代码完整性:深入分析ci.dll
前言 在某些场景中,如果我们希望在允许某个进程进行特定动作前,以一种可靠的方式确认该进程是否可信,那么验证该进程的Authenticode签名是一个不错的方式.用户模式下的DLL wintrust提供 ...
- NIST:生成安全密码密钥
NIST:生成安全密码密钥 https://ws680.nist.gov/publication/get_pdf.cfm?pub_id=913043 ITL BULLETIN FOR DECEMBER ...
最新文章
- Hibernate 关联映射 之 多对多 关联(一)
- 修改tomcat端口号的方法:
- 鸿蒙台湾乌龙茶,郭碧婷生女再闹乌龙?向太守口如瓶,向佐有意回避,其实另有隐情...
- c语言单词翻译大全,c语言单词翻译
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符
- 基于事件驱动架构构建微服务第7部分:在仓储上实现事件溯源
- 获取当前jvm的进程号
- 12306一直提示网络有问题_春运10日拉开大幕 买票遇到问题?别慌!这里有答案...
- python条形堆积图_python – 带有中心标签的堆积条形图
- org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont.addNewFamily()
- 尚硅谷周阳老师2020最新Springcloud完整版学习
- Exchange 2013管理员账号登录ecp登陆不了
- 什么是BI、数据仓库、数据湖和数据中台,他们有什么差异?
- 2022-08-22 第六小组 瞒春 学习笔记
- 【20220504】软件开发模式
- wsl1升级到 wsl2 后高cpu占用解决方案
- RISC-V技术杂谈
- appium - X5内核应用
- mysql 解决全角半角 问题
- java mp4 切片_视频完美切片存储方案 附自动化处理脚本