标准搜索结果: 'GM/T 0080-2020'
标准编号 | GM/T 0080-2020 (GM/T0080-2020) | 中文名称 | SM9密码算法使用规范 | 英文名称 | SM9 cryptographic algorithm application specification | 行业 | Chinese Industry Standard (推荐) | 中标分类 | L80 | 字数估计 | 14,136 | 发布日期 | 2020-12-28 | 实施日期 | 2021-07-01 | 标准依据 | 国家密码管理局公告第41号 | 发布机构 | 国家密码管理局 |
GM/T 0080-2020: SM9密码算法使用规范
GM/T 0080-2020 英文名称: SM9 cryptographic algorithm application specification
中华人民共和国密码行业标准
SM9密码算法使用规范
国家密码管理局 发 布
1 范围
本文件定义了SM9密码算法的使用方法,以及密钥、加密与签名等的数据格式。
本文件适用于SM9密码算法的使用,以及支持SM9密码算法的设备和系统的研发和检测。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文
件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于
本文件。
GB/T 32905 信息安全技术 SM3密码杂凑算法
GB/T 32907 信息安全技术 SM4分组密码算法
GB/T 32918(所有部分) 信息安全技术 SM2椭圆曲线公钥密码算法
GB/T 38635.1-2020 信息安全技术 SM9标识密码算法 第1部分:总则
GB/T 38635.2-2020 信息安全技术 SM9标识密码算法 第2部分:算法
3 术语和定义
下列术语和定义适用于本文件。
5 SM9的密钥对
5.2 SM9主私钥
包括SM9签名主私钥和加密主私钥,都是一个大于或等于1且小于N-1的整数(N是循环群G1、
G2和GT的阶,其值见GB/T 38635.2-2020的附录A.1),简记为s,长度为256bit。
5.3 SM9主公钥
包括SM9签名主公钥Ppub2和加密主公钥Ppub1。分别是G2和G1上的点,坐标表示为(xSPub,
ySPub)和(xEPub,yEPub)。其中签名主公钥的x,y坐标还分别包含两个分量即x1分量和x2分量,y1分量和
y2分量,每个分量的长度为256bit。而加密主公钥x,y坐标值长度都是256bit。
5.4 SM9用户私钥
包括SM9用户签名私钥和用户加密私钥,分别是G1和G2上的点,坐标表示为(xSPri,ySPri)和(xEPri,
yEPri)。其中用户签名钥x,y坐标值长度都是256bit。而用户加密私钥的x,y坐标还分别包含两个分
量即x1分量和x2分量,y1分量和y2分量,每个分量的长度为256bit。
5.5 SM9用户公钥
在IBC技术中,用户标识ID可唯一确定用户的公钥,应用中以此代表公钥。基于双线性对ID坐
标的表示可分为用户签名公钥坐标和用户加密公钥坐标,用户签名公钥坐标与签名主公钥坐标结构相
同,x,y坐标上还有各自的两个分量,记为QS,用户加密公钥与加密主公钥坐标结构相同,记为QE。
注:这里给出用户公钥坐标的生成方法。
6 数据格式
6.1 密钥数据结构
密钥类型分为签名、加密主密钥和签名、加密用户密钥:
a) SM9算法签名主私钥数据格式的ASN.1定义为:
SM9SignMasterPrivateKey::=SM9MasterPrivateKey
SM9MasterPrivateKey::=INTERGER
b) SM9算法签名主公钥数据格式的ASN.1定义为:
SM9SignMasterPublicKey::=BITSTRING
SM9SignMasterPublicKey为BITSTRING类型,内容为:
04‖X1‖X2‖Y1‖Y2,其中,X1、X2和Y1、Y2分别标识公钥的各个x分量和y分量,每个分量长度
为256bit。或
03‖X1‖X2,其中,X1、X2分别标识公钥的各个x分量,每个分量长度为256bit。选取解压后的
Y根值 (Y1‖Y2)中最右边bit位为1的那个值。还原后Y根值取最右那个比特为0的值,否则Y1=
基域q-根Y1,Y2=基域q-根Y2。或
02‖X1‖X2,其中,X1、X2分别标识公钥的2个x分量,每个分量长度为256bit。选取解压后的
Y根值 (Y1‖Y2)中最右边bit位为0的选项值。还原后 Y根值取最右一比特为0的选项值,否则
Y1=基域q-根Y1,Y2=基域q-根Y2。
c) SM9算法加密主私钥数据格式的ASN.1定义为:
SM9EncryptMasterPrivateKey::=SM9MasterPrivateKey
d) SM9算法加密主公钥数据格式的ASN.1定义为:
SM9EncryptMasterPublicKey::=BITSTRING
SM9EncryptMasterPublicKey为BITSTRING类型,内容为:
04‖X‖Y,其中,X和Y标识公钥的各个x分量和y分量,每个分量长度为256bit。
03‖X,其中,X标识公钥的x分量,每个分量长度为256bit。选取解压后的Y根值中最右边bit
位为1的那个值。还原后Y根值取最右那个比特为0的值,否则Y=基域q-根Y。或
02‖X,其中,X分别标识公钥的x分量,每个分量长度为256bit。选取解压后的Y根值中最右边
bit位为0的选项值。还原后Y根值取最右一比特为0的选项值,否则Y=基域q-根Y。
e) SM9算法用户签名私钥数据格式的ASN.1定义为:
SM9SignPrivateKey::=SM9EncryptMasterPublicKey
f) SM9算法用户加密私钥数据格式的ASN.1定义为:
SM9EncryptPrivateKey::=SM9SignMasterPublicKey
6.2 签名数据结构
SM9算法签名数据格式的ASN.1定义为:
SM9Signature::=SEQUENCE{
H OCTETSTRING,/杂凑分量,算法是H2(见GB/T 38635.2-2020)
S SM9SignPrivateKey/签名结果(见GB/T 38635.2-2020)
6.3 加密数据结构
SM9算法加密后的数据格式的ASN.1定义为:
SM9Cipher::=SEQUENCE{
EnType INTEGER,/加密方式
C1 SM9SignPrivateKey,/C1(见GB/T 38635.2-2020的9.2)
C3 OCTETSTRING,/明文数据杂凑值
CipherText OCTETSTRING/密文
EnType为加密的方式,定义0代表 M⊕K1序列密码加密,1、2、4、8分别代表ECB、CBC,OFB、
CFB分组密码模式。分组密码加密的算法为GB/T 32907,
C1,该部分在GB/T 38635.2-2020的9.2中被称为C1。
C3为HASH,使用GB/T 32905算法对明文数据运算得到的杂凑值,其长度固定为256bit。
CipherText,为加密密文。
6.4 密钥封装数据格式
用户A将一个随机数封装成C后,并传递给用户B,以便计算出密钥K。
密钥封装数据格式的ASN.1定义为:
SM9KeyPackage::=SEQUENCE{
K OCTETSTRING,/生成的密钥
C SM9EncryptMasterPublicKey/封装的交换密文
K作为用户A保留的密钥。C作为交换密文传递给B用户,B用户利用C可以生成K。
7 预处理
7.1 预处理杂凑函数H1
验签、加密时应按GB/T 38635.2-2020的5.3.2.2内容进行预处理计算。
输入:
DATA 比特串/数据
Len 整型/数据长度
N 整型/是循环群G1、G2 和GT 的阶
输出:
h1 字节串/杂凑值,长度为256bit,且1≤h1<≤N-1
7.2 预处理杂凑函数H2
签名时应按GB/T 38635.2-2020的5.3.2.3内容进行预处理计算。
输入:
DATA 比特串/数据
Len 整型/数据长度
N 整型/是循环群G1、G2 和GT 的阶
输出:
h2 整数
7.3 预处理对运算e
应按GB/T 38635.2-2020的数字签名生成算法进行预处理计算。
对运算e,通过用户标识公钥和G1、G2 中的两个公开点P1 和P2 点计算出双曲线对g1 和g2。
签名g1 运算。
输入:
P1 SM9P1/生成元P1
PSpub SM9SignMasterPublicKey/签名主公钥
输出:
g1 比特串/双线性对GT 中元素计算结果,N的长度(256)×12=3072bit
加密g2 运算。
输入:
P2 SM9P2/生成元P2
PEpub SM9EncryptMasterPublicKey/加密主公钥
输出:
g2 比特串/双线性对,长度为3072bit
详细计算过程见GB/T 38635.1-2020的附录C.6。
7.4 预处理用户验签QD
将身份标识ID字符串变换为G2 域上的点的运算,从而得到基于双线性对ID的用户验证签名所
需的坐标值QD,用于验签计算过程中。
输入:
ID 字节串/用户身份标识串
hid 整数/KGC私钥生成函数公开标识,取值为1
N 整数/是循环群G1、G2 和GT 的阶
P2 SM9P2/生成元P2
Pspub SM9SignMasterPublicKey/签名主公钥
输出:
QD SM9SignMasterPublicKey
7.5 预处理用户加密QE
将身份标识ID字符串变换为G2 域上的点的运算,从而得到基于双线性对ID的用户加解密所需
的坐标值QE,用于密钥封装、加密、密钥交互计算过程中。
输入:
ID 字节串/用户身份标识串
hid 整数/KGC私钥生成函数公开标识,取值为1
N 整数/是循环群G1、G2 和GT 的阶
P1 SM9P1/生成元P1
Pepub SM9EncryptMasterPublicKey/加密主公钥
输出:
QE SM9EncryptMasterPublicKey
8 计算过程
8.1 生成密钥
密钥生成包括主私/公钥、用户私钥类型。
a) 主私钥生成
SM9签名主私钥和加密主私钥分别是由KGC按照GB/T 32918(所有部分)的方法产生的随机数,
其大于或等于1且小于N-1的整数(N 为SM9算法的阶),长度为256bit。
输入: 无
输出:
s SM9MasterPrivateKey/SM9主私钥,如果为签名主私钥标识为sS,加密主私钥标识
为sE
b) 主公钥生成
SM9签名主公钥和加密主公钥分别由相对应的主私钥与G2 的生成元点P2 和G1 的生成元点P1
的积生成。
● 签名主公钥生成
输入:
sS SM9MasterPrivateKey/签名主私钥
P2 SM9P2/P2 生成元点
输出:
Pspub SM9SignMasterPublicKey/SM9签名主公钥
● 加密主公钥生成
输入:
sE SM9MasterPrivateKey/加密主私钥
P1 SM9P1/P1 生成元点
输出:
Pepub SM9EncryptMasterPublicKey/SM9加密主公钥
详细的计算过程见GB/T 38635.2-2020的第6章。
c) 用户私钥生成
SM9用户私钥分用户签名私钥和用户加密私钥,用户分别由相对应的主私钥与G1 的生成元点P1
......
|