本发明涉及信息安全技术领域,具体涉及一种轻量级的sm2国密证书的生成方法和系统。
背景技术:
x.509是密码学里公钥证书的格式标准。公钥证书,又称数字证书,是用来证明公开密钥拥有者的身份的电子文件,此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。目前互联网上使用的数字证书标准是x.509v3版本,于2008年发布在ietfrfc5280。x.509证书内容的编码方法是asn.1标准的der(distinguishedencodingrules,唯一编码规则)编码。
我国在x.509证书格式标准的基础上,于2012年发布了基于sm2密码算法的数字证书格式(相关国家标准见于gm/t0015、gm/t0043、gb/t20518),称为sm2国密证书。sm2国密证书使用sm2公钥和签名算法,但sm2国密证书的编码方法仍是asn.1标准的der编码。asn.1标准的der编码可以将数字证书、密钥等数据进行二进制序列化,但其缺点是编码后占用的空间较大,不适合在物联网场景下使用。
目前我国的sm2国密证书在使用der编码时占用的空间较大,导致在物联网场景下使用sm2国密证书进行身份认证时,通信开销、功耗、延迟和占用存储空间都较大,影响了性能。
技术实现要素:
本申请提供一种轻量级的sm2国密证书的生成方法和系统,旨在解决现有sm2国密证书通信开销、功耗、延迟和占用存储空间都较大,影响性能的问题。
根据第一方面,一种实施例中提供一种轻量级的sm2国密证书的生成方法,所述sm2国密证书基于x.509数字证书设计,所述生成方法包括:
对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到sm2certtiny证书,所述sm2certtiny证书为一轻量级的x.509数字证书;
基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,得到所述轻量级sm2国密证书。
一种实施例中,所述基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,包括:
省略sm2certtiny证书中有固定的值的字段;
省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段;
对剩余的字段,省略字段值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码。
一种实施例中,所述sm2certtiny证书包括以下字段:版本号version、证书序列号serialnumber、签名算法标识符signature、颁发者issuer、有效期validity、主体subject、主体公钥信息subjectpublickeyinfo、颁发机构密钥标识符authoritykeyidentifier、主体密钥标识符subjectkeyidentifier、密钥用途keyusage、证书撤销列表分发点crldistributionpoints、签名算法标识符signaturealgorithm和签名值signaturevalue。
一种实施例中,所述省略sm2certtiny证书中有固定的值的字段包括:省略版本号version、省略签名算法标识符signature、省略签名算法标识符signaturealgorithm;
所述省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段包括:省略颁发机构密钥标识符authoritykeyidentifier和主体密钥标识符subjectkeyidentifier。
一种实施例中,所述对剩余的字段,省略字段值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码,包括:
将证书序列号serialnumber由整型数字编码为字节数组;
对于颁发者issuer,仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串;
对于有效期validity,将其中的notbefore字段和notafter字段都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,notbefore字段和notafter字段均符合"yymmddhhmmssz"格式,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值;
对于主体subject,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串;
对于主体公钥信息subjectpublickeyinfo,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节;
对于密钥用途keyusage,省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组;
对于证书撤销列表分发点crldistributionpoints,仅保留http://[example.com/xx.crl]格式中的[example.com/xx.crl]内容,并编码为utf8字符串;
对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
根据第二方面,一种实施例中提供一种轻量级的sm2国密证书的生成系统,所述sm2国密证书基于x.509数字证书设计,所述生成系统包括:
证书压缩模块,用于对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到sm2certtiny证书,所述sm2certtiny证书为一轻量级的x.509数字证书;
cbor编码模块,用于基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,得到所述轻量级sm2国密证书。
一种实施例中,所述cbor编码模块包括字段省略单元和编码单元,所述字段省略单元用于省略sm2certtiny证书中有固定的值的字段,以及省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段;所述编码单元用于省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码。
一种实施例中,所述sm2certtiny证书包括以下字段:版本号version、证书序列号serialnumber、签名算法标识符signature、颁发者issuer、有效期validity、主体subject、主体公钥信息subjectpublickeyinfo、颁发机构密钥标识符authoritykeyidentifier、主体密钥标识符subjectkeyidentifier、密钥用途keyusage、证书撤销列表分发点crldistributionpoints、签名算法标识符signaturealgorithm和签名值signaturevalue。
一种实施例中,所述字段省略单元用于省略版本号version、签名算法标识符signature、签名算法标识符signaturealgorithm、颁发机构密钥标识符authoritykeyidentifier和主体密钥标识符subjectkeyidentifier;所述编码单元通过以下方式省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码:
将证书序列号serialnumber由整型数字编码为字节数组;
对于颁发者issuer,仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串;
对于有效期validity,将其中的notbefore字段和notafter字段都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,notbefore字段和notafter字段均符合"yymmddhhmmssz"格式,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值;
对于主体subject,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串;
对于主体公钥信息subjectpublickeyinfo,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节;
对于密钥用途keyusage,省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组;
对于证书撤销列表分发点crldistributionpoints,仅保留http://[example.com/xx.crl]格式中的[example.com/xx.crl]内容,并编码为utf8字符串;
对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
根据第三方面,一种实施例中提供一种计算机可读存储介质,所述介质上存储有程序,所述程序能够被处理器执行以实现上述第一方面所述的轻量级的sm2国密证书的生成方法。
依据上述实施例的轻量级的sm2国密证书的生成方法和系统,以及计算机可读存储介质,由于对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,然后基于简明二进制对象表示cbor编码格式,进行进一步压缩和重新编码,从而得到了轻量级的sm2国密证书,使得sm2国密证书的大小得到了有效的缩减,从而使得物联网设备在使用sm2国密证书进行身份认证时的通信开销、功耗、延迟和所占用存储空间都能够有效减少,提升了性能。
附图说明
图1为一种实施例的轻量级的sm2国密证书的生成方法流程图;
图2为一种实施例的轻量级的sm2国密证书的生成系统的结构示意图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。
随着物联网(iot,internetofthings)技术的发展,越来越多资源受约束的轻量级设备被接入物联网,这些设备在通信时需要进行身份认证。现有的身份认证方案主要基于公钥基础设施(pki,publickeyinfrastructure),使用x.509格式的数字证书及相应的认证协议。但是在物联网场景下,设备的存储资源有限,带宽有限,传统的x.509数字证书不能满足要求。
目前互联网上广泛使用的x.509数字证书标准是2008年发布的,该标准在设计时没有考虑到物联网场景的需求。因此,需要针对物联网设备的特点,在保持对x.509标准兼容的基础上,对数字证书的设计和编码进行优化,实现数字证书的轻量化,以减少物联网设备在身份认证过程中的通信开销、功耗、延迟和存储空间等。
为了满足物联网场景下对轻量级数字证书的需求,本发明提供一种轻量级的sm2国密证书的生成方法,其中的sm2国密证书是基于x.509数字证书设计的,保持了对x.509标准的兼容,也实现了数字证书的轻量化。请参考图1,本发明一种实施例中的轻量级的sm2国密证书的生成方法包括步骤101~102,下面具体说明。
步骤101:对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到轻量级的x.509数字证书,命名为sm2certtiny证书。合规sm2国密证书指符合国家标准《gb/t20518-2018信息安全技术公钥基础设施数字证书格式》,以及密码行业标准《gm/t0015基于sm2密码算法的数字证书格式》和《gm/t0043-2015数字证书互操作检测规范》的数字证书。轻量级的x.509数字证书sm2certtiny的结构如表1所示:
表1sm2certtiny证书的内容结构
步骤102:基于简明二进制对象表示cbor(concisebinaryobjectrepresentation)编码格式,对sm2certtiny证书进行进一步压缩和重新编码,得到轻量级sm2国密证书,这个过程命名为sm2cbor编码。sm2cbor编码具体包括如下过程:
1.省略sm2certtiny证书中有固定的值的字段。比如签名算法标识符signature和signaturealgorithm固定为sm3withsm2encryption,因此可以基于这一固定值进行省略。由表1可知有固定的值的字段包括版本号version,签名算法标识符signature和signaturealgorithm,因此这三者可以被省略。
2.省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段。由于主体密钥标识符subjectkeyidentifier可以直接根据主体公钥信息subjectpublickeyinfo直接计算出来,颁发机构密钥标识符authoritykeyidentifier可以直接根据签发者的subjectpublickeyinfo直接计算出来,因此主体密钥标识符subjectkeyidentifier和颁发机构密钥标识符authoritykeyidentifier可以被省略。
3.对剩余的字段,省略字段值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码,具体包括如下过程:
3.1将证书序列号serialnumber由整型数字编码为字节数组。
3.2对于颁发者issuer,由于固定使用cn=[subject-name]/c=cn格式,其中[]内容根据实际情况替换,因此可以仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串。
3.3对于有效期validity,其中包括两个子字段:notbefore(不早于)和notafter(不晚于)。notbefore字段和notafter字段均为utctime类型,符合"yymmddhhmmssz"格式,可以将它们都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值。解码时使用公式:ss=nmod60,mm=((n-ss)/60)mod60,依此类推。
3.4对于主体subject,与颁发者issuer同理,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串。
3.5对于主体公钥信息subjectpublickeyinfo,其公钥类型固定为sm2,而sm2公钥是椭圆曲线上一个点的坐标(x,y),因为sm2椭圆曲线参数是公开的,y坐标可以根据x坐标计算,因此可以省略y坐标,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节。
3.6对于密钥用途keyusage,由于其类型固定为关键类型,因此省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组。
3.7对于证书撤销列表分发点crldistributionpoints,由于固定使用http://[example.com/xx.crl]格式,其中[]内容据实际情况替换,因此可以仅保留其中的[example.com/xx.crl]内容,并编码为utf8字符串。
3.8对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
其中各个字段的编码方式均采用cbor编码。
经过上述过程后得到的轻量级的sm2国密证书命名为sm2certiotiny证书,其结构如表2所示:
表2sm2certiotiny证书的内容结构
sm2certiotiny证书只包括9个字段内容,且顺序按表2固定,因此无需使用字段的标识符,只需按照cbor的数据类型和长度对各字段进行编码,cbor编码具体规则如下:
1.对于字节数组,cbor编码后首字节为0b010_xxxxx。为了表达字节数组长度,如果字节数组的长度小于或等于23字节,那么直接使用首字节的低5位表示;如果字节数组的长度大于或等于24字节,那么使用第二个字节表示长度,第一个字节的低5位为11000。例如证书序列号serialnumber为1234567890,对应十六进制数为0x499602d2,占用4个字节,编码后为0x44499602d2。
2.对于字符串,cbor编码后首字节为0b011_xxxxx。为了表达字符串的长度,如果字符串的长度小于或等于23字节,那么直接使用首字节的低5位表示;如果字符串的长度大于或等于24字节,那么使用第二个字节表示长度,第一个字节的低5位为11000;如果字符串的长度大于等于256字节,那么使用第二和第三个字节表示长度,第一个字节的低5位为11001。例如颁发者issuer为“opensecurityresearch(osr)”,对应十六进制数为:0x4f70656e20536563757269747920526573656172636820284f535229,占用28个字节,编码后为:0x781c4f70656e20536563757269747920526573656172636820284f535229。
3.对于无符号整数,cbor编码后首字节为0b000_xxxxx。为了表达不同长度的无符号整数,cbor格式使用第一个字节的低5位表示整数类型,如0b000_11010为uint32_t。例如有效期不早于字段validity–notbefore为“210102123456”,转换为整数后为757773296,为uint32_t类型,对应十六进制数为0x2d2ab3f0,编码后为0x1a2d2ab3f0。
在上述轻量级的sm2国密证书的生成方法的基础上,本发明还提供一种轻量级的sm2国密证书的生成系统,请参考图2,一种实施例中轻量级的sm2国密证书的生成系统包括证书压缩模块21和cbor编码模块22,下面分别说明。
证书压缩模块21用于对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到轻量级的x.509数字证书,命名为sm2certtiny证书。合规sm2国密证书指符合国标《gb/t20518-2018信息安全技术公钥基础设施数字证书格式》的数字证书。轻量级的x.509数字证书sm2certtiny的结构如表1所示。
cbor编码模块22用于基于简明二进制对象表示cbor编码格式,对sm2certtiny证书进行进一步压缩和重新编码,得到轻量级sm2国密证书。请参考图2,cbor编码模块22包括字段省略单元221和编码单元222,字段省略单元221用于省略sm2certtiny证书中有固定的值的字段,以及省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段;编码单元222用于省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码。
字段省略单元221省略sm2certtiny证书中有固定的值的字段,比如签名算法标识符signature和signaturealgorithm固定为sm3withsm2encryption,因此可以基于这一固定值进行省略。由表1可知有固定的值的字段包括版本号version,签名算法标识符signature和signaturealgorithm,因此这三者可以被字段省略单元221省略。
由于主体密钥标识符subjectkeyidentifier可以直接根据主体公钥信息subjectpublickeyinfo直接计算出来,颁发机构密钥标识符authoritykeyidentifier可以直接根据签发者的subjectpublickeyinfo直接计算出来,因此主体密钥标识符subjectkeyidentifier和颁发机构密钥标识符authoritykeyidentifier可以被字段省略单元221省略。
编码单元222通过以下方式省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码:
1.将证书序列号serialnumber由整型数字编码为字节数组。
2.对于颁发者issuer,由于固定使用cn=[subject-name]/c=cn格式,其中[]内容根据实际情况替换,因此可以仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串。
3.对于有效期validity,其中包括两个子字段:notbefore(不早于)和notafter(不晚于)。notbefore字段和notafter字段均为utctime类型,符合"yymmddhhmmssz"格式,可以将它们都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值。解码时使用公式:ss=nmod60,mm=((n-ss)/60)mod60,依此类推。
4.对于主体subject,与颁发者issuer同理,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串。
5.对于主体公钥信息subjectpublickeyinfo,其公钥类型固定为sm2,而sm2公钥是椭圆曲线上一个点的坐标(x,y),因为sm2椭圆曲线参数是公开的,y坐标可以根据x坐标计算,因此可以省略y坐标,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节。
6.对于密钥用途keyusage,由于其类型固定为关键类型,因此省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组。
7.对于证书撤销列表分发点crldistributionpoints,由于固定使用http://[example.com/xx.crl]格式,其中[]内容据实际情况替换,因此可以仅保留其中的[example.com/xx.crl]内容,并编码为utf8字符串。
8.对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
其中各个字段的编码方式均采用cbor编码。经过编码单元222处理后得到的数字证书即为轻量级的sm2国密证书,命名为sm2certiotiny证书,其结构如表2所示。sm2certiotiny证书只包括9个字段内容,且顺序按表2固定,因此无需使用字段的标识符,只需按照cbor的数据类型和长度对各字段进行编码,cbor的编码规则参见上文。
下面通过一个具体的例子对本发明的轻量级的sm2国密证书的生成方法进行说明。在对一x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容后,得到一sm2certtiny证书,其结构化显示如下:
上述sm2certtiny证书经der编码后大小为454字节,具体如下:308201c230820167a0030201020204499602d2300a06082a811ccf5501837530283119301706035504030c104f535220526f6f742043412054657374310b300906035504061302434e301e170d3231303430393039353730305a170d3232303430393039353730305a30283119301706035504030c104f535220534d3243424f522054657374310b300906035504061302434e3059301306072a8648ce3d020106082a811ccf5501822d03420004f952732c811238ed23d053289fb6faf74811784c2e82ab38d05c9d7bad6292714114205df482ff25157f750c90c412199d4bb2655a4a9875b4c0eabb59638f41a37f307d301d0603551d0e041604143ccaf6c6a12e7039db6e8e3ffe03ec1ed02643a6301f0603551d23041830168014dd0863ba4121be965d8cec7d4f61128904063c26300e0603551d0f0101ff0404030206c0302b0603551d1f042430223020a01ea01c861a687474703a2f2f6578616d706c652e636f6d2f63726c2e70656d300a06082a811ccf550183750349003046022100baa836b5a78070e05cca20c842441233baa27771b44a626d6cd188187216a753022100ddbe1a2bae3b9d3b087f56024b3759005734ce545f58038bd89a47ca40aeb979
对上述sm2certtiny证书进行本发明的sm2cbor编码,得到sm2certiotiny证书,其结构化显示如下:
1:h'499602d2',
2:"osrrootcatest",
3:766663020,
4:802605420,
5:"osrsm2cbortest",
6:h'f952732c811238ed23d053289fb6faf74811784c2e82ab38d05c9d7bad629271’,
7:h'06c0',
8:"example.com/crl.pem"
9:
h'022100baa836b5a78070e05cca20c842441233baa27771b44a626d6cd188187216a753022100ddbe1a2bae3b9d3b087f56024b3759005734ce545f58038bd89a47ca40aeb979'
经sm2cbor编码后得到的上述sm2certiotiny证书的:
第一个字段为serialnumber,是一个长度为4的字节数组,因此编码为0x449602d2;
第二个字段为issuer-name,是一个长度为16的字符串,因此编码为0x704f535220526f6f742043412054657374;
第三个字段为validity-notbefore,是一个32bit整数,因此编码为0x1a2db2596c;
第四个字段为validity-notafter,是一个32bit整数,因此编码为0x1a2fd6c96c;
第五个字段为subject-name,是一个长度为16的字符串,因此编码为0x704f535220534d3243424f522054657374;
第六个字段为subjectpublickeyinfo,是一个长度为33的字节数组,因此编码为0x582103f952732c811238ed23d053289fb6faf74811784c2e82ab38d05c9d7bad629271;
第七个字段为keyusage,是一个长度为2的字节数组,因此编码为0x4206c0;
第八个字段为crldistributionpoints,是一个长度为19的字符串,因此编码为0x726578616d706c652e636f6d2f63726c2e70656d;
第九个字段为signaturevalue,是一个长度为64的字节数组,因此编码为0x5840022100baa836b5a78070e05cca20c842441233baa27771b44a626d6cd188187216a753022100ddbe1a2bae3b9d3b087f56024b3759005734ce545f58038bd89a47ca40aeb979。
可以看到sm2certiotiny证书的大小为178字节,将各字段的编码序列化,具体如下:
449602d2704f535220526f6f7420434120546573741a2db2596c1a2fd6c96c704f535220534d3243424f522054657374582103f952732c811238ed23d053289fb6faf74811784c2e82ab38d05c9d7bad6292714206c0726578616d706c652e636f6d2f63726c2e70656d5840022100baa836b5a78070e05cca20c842441233baa27771b44a626d6cd188187216a753022100ddbe1a2bae3b9d3b087f56024b3759005734ce545f58038bd89a47ca40aeb979
因此,在证书的大小方面,sm2certiotiny证书相较于sm2certtiny证书减小了约60%。
综上所述,依据上述实施例的轻量级的sm2国密证书的生成方法和系统,由于对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,然后基于简明二进制对象表示cbor编码格式,进行进一步压缩和重新编码,从而得到了轻量级的sm2国密证书sm2certiotiny,使得sm2国密证书的大小得到了有效的缩减,物联网设备在使用sm2certiotiny证书进行身份认证时,通信开销、功耗、延迟和所占用存储空间都能够得到有效减少,从而提升了性能。
本文参照了各种示范实施例进行说明。然而,本领域的技术人员将认识到,在不脱离本文范围的情况下,可以对示范性实施例做出改变和修正。例如,各种操作步骤以及用于执行操作步骤的组件,可以根据特定的应用或考虑与系统的操作相关联的任何数量的成本函数以不同的方式实现(例如一个或多个步骤可以被删除、修改或结合到其他步骤中)。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。另外,如本领域技术人员所理解的,本文的原理可以反映在计算机可读存储介质上的计算机程序产品中,该可读存储介质预装有计算机可读程序代码。任何有形的、非暂时性的计算机可读存储介质皆可被使用,包括磁存储设备(硬盘、软盘等)、光学存储设备(cd至rom、dvd、bluray盘等)、闪存和/或诸如此类。这些计算机程序指令可被加载到通用计算机、专用计算机或其他可编程数据处理设备上以形成机器,使得这些在计算机上或其他可编程数据处理装置上执行的指令可以生成实现指定的功能的装置。这些计算机程序指令也可以存储在计算机可读存储器中,该计算机可读存储器可以指示计算机或其他可编程数据处理设备以特定的方式运行,这样存储在计算机可读存储器中的指令就可以形成一件制造品,包括实现指定功能的实现装置。计算机程序指令也可以加载到计算机或其他可编程数据处理设备上,从而在计算机或其他可编程设备上执行一系列操作步骤以产生一个计算机实现的进程,使得在计算机或其他可编程设备上执行的指令可以提供用于实现指定功能的步骤。
虽然在各种实施例中已经示出了本文的原理,但是许多特别适用于特定环境和操作要求的结构、布置、比例、元件、材料和部件的修改可以在不脱离本披露的原则和范围内使用。以上修改和其他改变或修正将被包含在本文的范围之内。
前述具体说明已参照各种实施例进行了描述。然而,本领域技术人员将认识到,可以在不脱离本披露的范围的情况下进行各种修正和改变。因此,对于本披露的考虑将是说明性的而非限制性的意义上的,并且所有这些修改都将被包含在其范围内。同样,有关于各种实施例的优点、其他优点和问题的解决方案已如上所述。然而,益处、优点、问题的解决方案以及任何能产生这些的要素,或使其变得更明确的解决方案都不应被解释为关键的、必需的或必要的。本文中所用的术语“包括”和其任何其他变体,皆属于非排他性包含,这样包括要素列表的过程、方法、文章或设备不仅包括这些要素,还包括未明确列出的或不属于该过程、方法、系统、文章或设备的其他要素。此外,本文中所使用的术语“耦合”和其任何其他变体都是指物理连接、电连接、磁连接、光连接、通信连接、功能连接和/或任何其他连接。
具有本领域技术的人将认识到,在不脱离本发明的基本原理的情况下,可以对上述实施例的细节进行许多改变。因此,本发明的范围应仅由权利要求确定。
1.一种轻量级的sm2国密证书的生成方法,所述sm2国密证书基于x.509数字证书设计,其特征在于,所述生成方法包括:
对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到sm2certtiny证书,所述sm2certtiny证书为一轻量级的x.509数字证书;
基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,得到所述轻量级sm2国密证书。
2.如权利要求1所述的生成方法,其特征在于,所述基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,包括:
省略sm2certtiny证书中有固定的值的字段;
省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段;
对剩余的字段,省略字段值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码。
3.如权利要求2所述的生成方法,其特征在于,所述sm2certtiny证书包括以下字段:版本号version、证书序列号serialnumber、签名算法标识符signature、颁发者issuer、有效期validity、主体subject、主体公钥信息subjectpublickeyinfo、颁发机构密钥标识符authoritykeyidentifier、主体密钥标识符subjectkeyidentifier、密钥用途keyusage、证书撤销列表分发点crldistributionpoints、签名算法标识符signaturealgorithm和签名值signaturevalue。
4.如权利要求3所述的生成方法,其特征在于,所述省略sm2certtiny证书中有固定的值的字段包括:省略版本号version、省略签名算法标识符signature、省略签名算法标识符signaturealgorithm;
所述省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段包括:省略颁发机构密钥标识符authoritykeyidentifier和主体密钥标识符subjectkeyidentifier。
5.如权利要求4所述的生成方法,其特征在于,所述对剩余的字段,省略字段值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码,包括:
将证书序列号serialnumber由整型数字编码为字节数组;
对于颁发者issuer,仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串;
对于有效期validity,将其中的notbefore字段和notafter字段都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,notbefore字段和notafter字段均符合"yymmddhhmmssz"格式,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值;
对于主体subject,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串;
对于主体公钥信息subjectpublickeyinfo,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节;
对于密钥用途keyusage,省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组;
对于证书撤销列表分发点crldistributionpoints,仅保留http://[example.com/xx.crl]格式中的[example.com/xx.crl]内容,并编码为utf8字符串;
对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
6.一种轻量级的sm2国密证书的生成系统,所述sm2国密证书基于x.509数字证书设计,其特征在于,所述生成系统包括:
证书压缩模块,用于对x.509数字证书进行压缩,仅保留合规sm2国密证书所要求的最少内容,得到sm2certtiny证书,所述sm2certtiny证书为一轻量级的x.509数字证书;
cbor编码模块,用于基于简明二进制对象表示cbor编码格式,对所述sm2certtiny证书进行进一步压缩和重新编码,得到所述轻量级sm2国密证书。
7.如权利要求6所述的生成系统,其特征在于,所述cbor编码模块包括字段省略单元和编码单元,所述字段省略单元用于省略sm2certtiny证书中有固定的值的字段,以及省略sm2certtiny证书中,值可以直接根据其他字段的值计算得到的字段;所述编码单元用于省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码。
8.如权利要求7所述的生成系统,其特征在于,所述sm2certtiny证书包括以下字段:版本号version、证书序列号serialnumber、签名算法标识符signature、颁发者issuer、有效期validity、主体subject、主体公钥信息subjectpublickeyinfo、颁发机构密钥标识符authoritykeyidentifier、主体密钥标识符subjectkeyidentifier、密钥用途keyusage、证书撤销列表分发点crldistributionpoints、签名算法标识符signaturealgorithm和签名值signaturevalue。
9.如权利要求8所述的生成系统,其特征在于,所述字段省略单元用于省略版本号version、签名算法标识符signature、签名算法标识符signaturealgorithm、颁发机构密钥标识符authoritykeyidentifier和主体密钥标识符subjectkeyidentifier;所述编码单元通过以下方式省略剩余的字段的值中的固定内容,并基于简明二进制对象表示cbor编码格式进行重新编码:
将证书序列号serialnumber由整型数字编码为字节数组;
对于颁发者issuer,仅保留cn=[issuer-name]/c=cn格式中的[issuer-name]内容,并编码为utf8字符串;
对于有效期validity,将其中的notbefore字段和notafter字段都转换为整数值,并编码为32bit无符号整数,转换公式为:
n=ss 60*(mm 60*(hh 24*(dd 32*(mm 13*yy)))),其中n为转换后的整数值,notbefore字段和notafter字段均符合"yymmddhhmmssz"格式,ss、mm、hh、dd、mm、yy为"yymmddhhmmssz"格式中对应的值;
对于主体subject,仅保留cn=[subject-name]/c=cn格式中的[subject-name]内容,并编码为utf8字符串;
对于主体公钥信息subjectpublickeyinfo,仅保留sm2公钥对应的椭圆曲线上的点的x坐标值和y坐标奇偶性的标记值,并编码为33字节的字节数组,其中x坐标值占32字节,y坐标奇偶性的标记值占1字节;
对于密钥用途keyusage,省略其中表示类型的字节,仅保留余下的2字节,并编码为2字节的字节数组;
对于证书撤销列表分发点crldistributionpoints,仅保留http://[example.com/xx.crl]格式中的[example.com/xx.crl]内容,并编码为utf8字符串;
对于签名值signaturevalue,省略其前面的长度信息和填充信息,仅保留sm2签名值,共64字节,并编码为64字节的字节数组。
10.一种计算机可读存储介质,其特征在于,所述介质上存储有程序,所述程序能够被处理器执行以实现如权利要求1至5中任一项所述的生成方法。
技术总结