[转载]GM/T 0009《SM2密码算法使用规范》新老标准对比分析

原文地址如下,略有修订。

【技术专栏】GM/T 0009《SM2密码算法使用规范》新老标准对比分析

摘要:本文档对比GM/T 0009《SM2密码算法使用规范》的新版本(2023版)和老版本(2012版)的差异,并给出支持新版本标准的升级建议以供参考。

关键词:SM2,公钥,私钥,点压缩,SM2预处理

1. 背景

2023年12月,国家密码管理局在第45号公告[1]中发布信息:自2024年6月1日起实施GM/T 0009—2023SM2密码算法使用规范》[2](以下简称新版标准)等25项密码行业标准,被代替的老版本GM/T 0009—2012《SM2密码算法使用规范》[3](以下简称老版标准)自2024年6月1日起予以废止。

GM/T 0009《SM2密码算法使用规范》介绍SM2密码算法使用,其主要内容包括:

  1. 定义SM2使用方法,例如计算Z值,计算签名验签的杂凑值e等;
  2. 定义相关数据格式,例如公私钥格式、密文格式、签名数据格式等。

本标准是一个处于底层的密码基础类标准,且影响范围较大——涉及支持SM2算法的设备和系统。因此该标准的修订版不可能和之前版本有太大的差异——牵一发而动全身。

本文对比GM/T 0009新版本和老版本的差异,并给出支持新版本标准的建议以供参考。

2. 差异对比

2.1 差异综述

按新版本的前言所述,GM/T 0009新老版本之间主要有如下差异(见下表)。

表2-1 GM/T 0009新老版本主要差异

主要修订内容

备注

影响范围

1

SM2私钥的描述

(见老版本5.1节和新版本5.1节)

文字性修订

极小

2

SM2公钥的描述

(见老版本5.2节和新版本5.2节)

文字性修订

极小

3

SM2公钥的数据格式

(见老版本7.1节和新版本7.1节)

增加压缩点形式

4

密钥对保护数据格式的描述

(见老版本7.4节和新版本7.4节)

文字性修订

极小

5

预处理1——计算Z值的描述

(见老版本8.1节和新版本8.1节)

文字性修订

极小

新老版本差异总结如下:

  • 新版本向下兼容老板本;
  • 新版本变化小,
  • 对支持SM2算法的设备和系统的影响小。

各差异点的详细分析可见本章后续内容。

2.2 差异1——SM2私钥的描述

差异点1“SM2私钥的描述”,其差异如下表所示。表中信息直接摘录新老版本标准的描述内容,见老版本5.2节和新版本5.2节。

表2-2 差异点1“SM2私钥的描述”的差异

版本

内容对比

老版本

SM2私钥是一个大于或等于1且小于n-1的整数(n为SM2算法的阶,其值参见GM/T 0003),简记为k长度为256

新版本

SM2私钥是大于或等于1且小于n-1的整数(n为SM2算法的阶,其值见GB/T 32918. 5—2017),简记为d

本差异点主要是文字性修订。

其中,关于“私钥长度”补充如下说明:

  • 老版本:在此处专门说明私钥长度为256比特;
  • 新版本:在此处未指明私钥长度,但在条款7.4 b)中明确说明“私钥明文为高字节在前的8位字节串,其长度固定为32字节”,因此私钥仍为256比特。

综上,私钥长度无实质性差异。

本差异点影响:极小。

2.3 差异2——SM2公钥的描述

差异点2“SM2公钥的描述”,其差异如下表所示。表中信息直接摘录新老版本标准的描述内容,见老版本5.2节和新版本5.2节。

表2-3 差异点2“SM2公钥的描述”的差异

版本

内容对比

老版本

SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来表示,记为(x, y),简记为Q每个分量的长度为256

新版本

SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来表示,记为(x, y),简记为Q公钥值由其对应的私钥dG进行点乘计算得到(GSM2椭圆曲线的基点,G的取值见GB/T 32918.52017)。

本差异点主要是文字性修订。

此外,如前所述,因为私钥长度无变化仍为256比特,所以公钥的x和y坐标长度不变,都是256比特。

本差异点影响:极小。

2.4 差异3——SM2公钥的数据格式

差异点3“SM2公钥的数据格式”,其差异如下表所示。表中信息直接摘录新老版本标准的描述内容,见老版本7.1节和新版本7.1节。

表2-4 差异点3“SM2公钥的数据格式”的差异

版本

内容对比

老版本

SM2算法公钥数据格式的ASN.1定义为:

SM2PublicKey ::= BIT STRING

SM2PublicKey为BIT STRING类型,内容为04 || X || Y,其中,X和Y分别标识公钥的x分量和y分量,其长度各为256位。

新版本

SM2算法公钥数据格式的ASN.1定义为:

SM2PublicKey ::= BIT STRING

SM2PublicKey为BIT STRING类型,内容为04 || X || Y,02 || X或者03 || X,其中X和Y均为256位,分别为公钥的x分量和y分量。

04 || X || Y为SM2算法公钥数据非压缩格式,02 || X和03 || X均为SM2算法公钥数据压缩格式。当该公钥的y分量的最低位为0时,该公钥压缩格式为02 || X。当该公钥的y分量的最低位为1时,该公钥压缩格式为03 || X。SM2公钥格式应符合GB/T 32918.1—2016中A.5的规定。

本差异点主要是新版本增加对公钥压缩点的支持,这使得公钥可表述为:

——04 || X || Y:老版本描述的非压缩点形式;

——02 || X:新版本新增的压缩点形式,当公钥y分量的最低位为0时;

——03 || X:新版本新增的压缩点形式,当公钥y分量的最低位为1时。

本差异点影响:中。

2.5 差异4——密钥对保护数据格式的描述

差异点4“密钥对保护数据格式的描述”,其差异如下表所示。表中信息直接摘录新老版本标准的描述内容,见老版本7.4节和新版本7.4节。

表2-5 差异点4“密钥对保护数据格式的描述”的差异

版本

内容对比

老版本

在SM2密钥对传递时,需要对SM2密钥对进行加密保护。具体的保护方法为:

  1. 产生一个对称密钥。
  2. 按对称密码算法标识指定的算法对SM2私钥进行加密,得到私钥的密文。若对称算法为分组算法,则其运算模式为ECB。
  3. 使用外部SM2公钥加密对称密钥得到对称密钥密文。
  4. 将私钥密文、对称密钥密文封装到密钥对保护数据中。

新版本

在SM2密钥对传递时,应对SM2密钥对进行加密保护。具体的保护方法如下。

  1. 产生一个对称密钥。
  2. 按对称密码算法标识指定的算法对SM2私钥明文进行加密,得到私钥的密文。私钥明文为高字节在前的8位字节串,其长度固定为32字节,由私钥整数的二进制形式进行高比特补0256比特后转换得到。若对称算法为分组算法,则其运算模式为ECB。
  3. 使用外部SM2公钥加密对称密钥得到对称密钥密文。
  4. 将私钥密文、对称密钥密文封装到密钥对保护数据中。

本差异点主要是文字性修订。

如前所述(见2.2节),新版本在此处说明“私钥明文为高字节在前的8位字节串,其长度固定为32字节”,即明确私钥仍为256比特。

本差异点影响:极小。

2.6 差异5——预处理1计算Z值的描述

预处理1是签名验签等涉及的计算Z值的运算。差异点5“预处理1计算Z值的描述”,其差异如下表所示。表中信息直接摘录新老版本标准的描述内容,见老版本8.1节和新版本8.1节。

表2-6 差异点5“预处理1计算Z值的描述”的差异

版本

内容对比

老版本

预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到Z值的过程。Z值用于预处理2,也用于SM2密钥协商协议。

输人: ID   字节串                用户身份标识

            Q    SM2PublicKey   用户的公钥

输出: Z     字节串                预处理1的输出

计算公式为:

Z= SM3(ENTL || ID || a || b || xG || yG || xA || yA)

其中:

ENTL  为由2个字节表示的ID的比特长度;

ID        为用户身份标识;

a、b    为系统曲线参数;

xG、yG 为基点;

xA、yA 为用户的公钥。

详细的计算过程参见GM/T 0003和GM/T 0004。

新版本

预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到Z值的过程。Z值用于预处理2,也用于SM2密钥协商协议。

输人: ID   字节串                用户身份标识

            Q    SM2PublicKey   用户的公钥

输出: Z     字节串                预处理1的输出

计算公式为:

Z= SM3(L|| SID || a || b || xG || yG || xA || yA)

其中:

Z   ——预处理1的输出

L   ——用户身份标识的长度(比特);

SID——用户身份标识;

a   ——SM2椭圆曲线参数;

b   ——SM2椭圆曲线参数;

xG ——基点的横坐标;

yG ——基点的纵坐标;

xA ——用户公钥的横坐标;

yA ——用户公钥的纵坐标;

L由其整数值的二进制形式进行高比特补0至16比特后转换得到。a、b、xG、yG、xA和yA分别由其整数值的二进制形式进行高比特补0至256比特后转换得到。

详细的计算过程应符合GB/T 32918.2—2016中5.5和GB/T 32905—2016中第5章的规定。

本差异点主要是文字性修订,个别记号做了微调。

本差异点影响:极小。

3. 升级建议

根据第二章的分析(见2.1 差异综述)可知,新版本向下兼容老板本,且新版本变化小,对支持SM2算法的设备和系统的影响小

短期之内按老版本执行应该没有明显问题,但仍然建议升级增补公钥的压缩点形式以支持新标准。

参考文献

[1] 国家密码管理局公告(第45号)[EB/OL]. (2023-12-23).

国家密码管理局公告(第45号)_国家密码管理局

[2] 密码行业标准化技术委员会. GM/T 0009—2023 密码算法使用规范.

[3] 密码行业标准化技术委员会. GM/T 0009—2012 密码算法使用规范.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值