GM/T 0091-2020 相关标准英文版PDF, 自动发货
| 标准号码 | 价格美元 | 第2步(购买) | 交付天数 | 标准名称 |
| GM/T 0091-2020 | 260 | GM/T 0091-2020 | 3秒自动 | 基于口令的密钥派生规范 |
| 基本信息 | |
|---|---|
| 标准编号 | GM/T 0091-2020 (GM/T0091-2020) |
| 中文名称 | 基于口令的密钥派生规范 |
| 英文名称 | Password-based key derivation specification |
| 行业 | Chinese Industry Standard (推荐) |
| 中标分类 | L80 |
| 字数估计 | 17,160 |
| 发布日期 | 2020-12-28 |
| 实施日期 | 2021-07-01 |
| 标准依据 | 国家密码管理局公告第41号 |
| 发布机构 | 国家密码管理局 |
GM/T 0091-2020
(Password-based key derivation specification)
ICS 35.040
CCSL80
中华人民共和国密码行业标准
基于口令的密钥派生规范
2020-12-28发布
2021-07-01实施
国家密码管理局 发 布
目次
前言 Ⅰ
1 范围 1
2 规范性引用文件 1
3 术语和定义 1
4 符号和缩略语 1
5 OID定义 2
6 基于口令的密钥派生函数 2
7 基于口令的加密方案 4
7.1 加密操作 4
7.2 解密操作 4
8 基于口令的消息鉴别码 4
8.1 MAC的生成 4
8.2 MAC的验证 5
附录A(资料性) 辅助技术 6
附录B(规范性) ASN.1语法 9
附录C(规范性) ASN.1结构定义 12
参考文献 14
基于口令的密钥派生规范
1 范围
本文件规定了基于口令的密钥派生规范,包括基于口令的密钥派生函数、基于口令的加密方案、基
于口令的消息鉴别码。
本文件适用于证书与密钥迁移时利用口令来保护被迁移的密钥。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文
件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于
本文件。
GB/T 15852.2 信息技术 安全技术 消息鉴别码 第2部分:采用专用杂凑函数的机制
GB/T 25069-2010 信息安全技术 术语
GB/T 32905-2016 信息安全技术 SM3密码杂凑算法
GB/T 32907-2016 信息安全技术 SM4分组密码算法
GM/Z4001 密码术语
3 术语和定义
GB/T 25069-2010和GM/Z4001界定的以及下列术语和定义适用于本文件。
3.1
算法标识 algorithmidentifier
用于对密码算法进行唯一标识的符号。
3.2
通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密密钥的函数。
[来源:GB/T 25069-2010,2.2.2.124]
3.3
伪随机函数 pseudorandomfunction
产生伪随机数的函数。
3.4
盐值 salt
作为单向函数或加密函数的二次输入而加入的随机变量,可用于导出口令验证数据。
[来源:GB/T 25069-2010,2.2.2.186]
注:盐值也称添加变量。
4 符号和缩略语
下列符号和缩略语适用于本文件。
7 基于口令的加密方案
7.1 加密操作
基于口令P的加密操作具体包含以下步骤:
a) 选定KDF和基础加密方案(见A.3);
b) 选择一个盐值S和一个迭代次数c(见第6章);
c) 选择将要在基础加密方案中使用的派生密钥的字节数dkLen;
d) 将口令P、盐值S和迭代次数c代入选定的KDF中得到一个dkLen字节长的派生密钥DK:
DK=KDF(P,S,c,dkLen);
e) 在基础加密方案中,使用派生密钥DK将消息 M 加密为密文C;(根据基础加密方案的不同,
本步骤可能涉及对初始向量和填充串等参数的选择)
f) 输出密文C。
盐值S、迭代次数c、密钥长度dkLen和密钥派生函数KDF及基础加密方案的标识符可用一个算
法标识传送给解密方 (按附录B的B.2)。
7.2 解密操作
基于口令P将密文C解密为消息 M的步骤如下:
a) 获取操作中的盐值S;
b) 获取密钥派生函数中的迭代次数c;
c) 获取基础加密方案中派生密钥的字节数dkLen;
d) 将口令P、盐值S和迭代次数c代入选定的密钥派生函数(见第6章),得到一个dkLen字节长
的派生密钥DK:
DK=KDF(P,S,c,dkLen);
e) 在基础加密方案中,用派生密钥DK将密文C解密为消息 M。如果解密函数输出“解密出
错”,则输出“解密出错”并终止程序;
f) 输出解密后的消息 M。
8 基于口令的消息鉴别码
8.1 MAC的生成
基于口令P生成消息 M的消息鉴别码T的具体步骤如下:
a) 选定密钥派生函数KDF和基础消息鉴别方案(见A.4);
b) 选择一个盐值S和一个迭代次数c(选择原则见A.1);
c) 选择基础消息鉴别方案中使用的派生密钥的字节长度dkLen;
d) 将口令P、盐值S和迭代次数c代入选定的密钥派生函数中,得到一个字节长度为dkLen的派
生密钥DK:
DK=KDF(P,S,c,dkLen);
e) 在基础消息鉴别方案中使用派生密钥DK生成消息 M的消息鉴别码T;
f) 输出消息鉴别码T。
盐值S、迭代次数c、密钥长度dkLen和密钥派生函数KDF及基础消息鉴别方案的标识符可用一
个算法标识传送给消息验证方(见A.3)。
实现者应注意基于口令的密钥派生函数与基于口令的消息鉴别码所使用的口令和盐值需要互相独
立,不要相互混淆。
8.2 MAC的验证
基于口令P对消息 M进行处理,验证消息鉴别码T的步骤如下:
a) 获取盐值S和迭代次数c;
b) 获取基础消息鉴别方案中派生密钥的字节长度dkLen;
c) 将口令P、盐值S和迭代次数c代入选定的密钥派生函数,得到一个字节长度为dkLen的派生
密钥DK:DK= KDF(P,S,c,dkLen);
d) 将派生密钥DK运用到基础消息鉴别方案中对消息 M 进行处理,从而对消息鉴别码T进行
验证。
如果消息鉴别码通过了验证,则输出“正确”,否则输出“错误”。
附 录 A
(资料性)
辅助技术
A.1 盐值和迭代次数
A.1.1 盐值
由于盐值和迭代次数是本文件的关键技术,本附录对其进行深入的讨论。
在基于口令的密码中,对于给定的口令,盐值常用来与口令一起生成密钥集,并从密钥集中根据盐
值随机选取一个密钥。
使用以下的密钥派生函数从密钥集中选择一个密钥:
DK=KDF(P,S)
其中,DK是派生密钥,P是口令,S是盐值。
这会带来两个好处。
a) 攻击者根据口令字典难于计算出所有可能的密钥。例如,假设盐值的长度为64比特,则每个
口令能够派生264个密钥。经过一次基于口令的操作后,即使盐值已知,攻击者也只能对口令
进行搜索。
b) 同一密钥基本不可能被选到两次。如果盐值的长度为64比特,根据“生日悖论”,只有选择了
232个密钥后,出现“碰撞”的概率才会显著提高。因此,不必担心在某些加密和消息鉴别应用
中同一个密钥会被重复选用。
基于口令的加密方案,当使用口令派生密钥时,加密方只要选择一个很长的、随机性强的盐值,就能
满足上述两点。这同样也适用于消息鉴别。但解密方或消息验证方难以确定对方所提供的盐值是否随
机。在某种情况下,应用为了利用对同一密钥重复使用所产生的影响,可能使用从另一个基于口令的操
作中复制得到的盐值。例如,假设合法的双方交换一条经过80比特长的密钥加密的消息,其中的密钥
由合法双方共用的口令和同一个盐值派生得到。攻击者就可能将这个盐值作为一个用于生成40比特
长密钥的盐值提供给一个合法方。如果该合法方公开了用40比特长的密钥解密的结果,攻击者就能计
算出这个密钥。若这个40比特长密钥正好是那个80比特长的密钥的前半部分,攻击者就很容易计算
出密钥的后半部分。
为了抵抗这种攻击,应对重复使用同一密钥所产生的影响进行仔细地分析,或者将一些能明确区分
不同操作的数据加入盐值。例如,可以用一个非随机的字节来说明一个生成密钥的用途:加密、消息鉴
别或其他,然后把这个字节包含到盐值中。
基于以上论述,对盐值的选择提出了以下建议。
a) 在基于口令的加密和消息鉴别方案中,对于一个给定的口令,如果不必考虑对派生密钥(或密
钥前缀)的重复使用所产生的影响,则盐值可以随机生成,接收方也不必对其进行详细的格式
检查。盐值的长度至少应为8字节(64比特)。
b) 如果需要考虑重复使用派生密钥所产生的影响,盐值就应包含一些能明确区分不同操作和不
同密钥长度的数据。该数据的长度至少应是8字节,而且接收方应对其进行检查或重新生成。
例如,盐值可以包含一个附加的非随机字节来说明派生密钥的用途。或者,用一个结构来描述
派生密钥的详细信息(如,加密或鉴别技术,派生密钥的序列号等),并将这个结构的编码包含
到盐值中。这种附加数据的特定格式由应用程序来决定。
注:推荐使用硬件随机数发生器生成盐值(或盐值的随机部分)。如果无法取得一个(伪)随机数生成器来生成盐值
(或盐值的随机部分),一种替代的方法是将口令和待处理的消息 M 代入到一个基于口令的密钥派生函数中。
比如说盐值可以通过计算S=KDF(P,M)得到。若消息 M的消息空间(如“Yes”or“No”)较小,由于生成盐值
的数量太少,则不建议采用该替代方法。
A.1.2 迭代次数
迭代次数通常被用来增加从口令派生密钥的计算代价,从而增加攻击的难度。从计算角度看,迭代
次数c通过log2(c)位来增加密码的安全强度,以对抗暴力攻击或字典攻击等基于审判的攻击。
为迭代次数选择一个合理的值取决于环境和应用场景。在用户可接受的范围内,迭代次数c应尽
可能选择大的,派生密钥的时间尽量长的。
在本文件推荐的最小迭代次数是1024。对生成单个密钥来说,并不会产生明显影响,但对口令的
穷举攻击却是严重的负担。对于特别重要的密钥,或者从用户感知角度来说,对系统性能不是很挑剔
的,推荐10000000的迭代次数。
A.2 伪随机函数
本文件规定的PBKDF使用一个PRF来派生密钥,PRF可产生伪随机序列,本附录介绍了PRF的
一个实例HMAC-SM3,HMAC算法按GB/T 15852.2执行。
HMAC-SM3为基于SM3密码杂凑算法计算消息鉴别码的函数,可作为一个PRF使用。与计算
HMAC相同,该PRF的第一个参数用作HMAC的“密钥”,第二个参数用作 HMAC的“明文”,输出为
杂凑值的全部长度。在本文件的PBKDF中,“密钥”就是口令,而“明文”就是盐值。HMAC-SM3的密
钥长度可变,输出长度为32字节(256位)。
HMAC-SM3对密钥长度没有限制,但当密钥长度大于256位时,HMAC-SM3把它杂凑到256位。
所以,即使很长的派生密钥是由一个密钥经过多个伪随机函数得到,该派生密钥的有效搜索空间最多为
256位。
对象标识符id-hmacWithSM3标识伪随机函数HMAC-SM3算法:
在AlgorithmIdentifier与该OID相关联的参数域应有类型NULL。该对象标识符使用在对象集
PBKDF-PRFs......
英文网页English: GM/T 0091-2020
相关标准: GB/T 15843.1|GM/T 0082|GM/T 0083|GM/T 0081|GM/T 0091-2020|GM/T 0091|