CN113254961A - 基于go语言封装调用硬件国密密码接口的方法 - Google Patents
基于go语言封装调用硬件国密密码接口的方法 Download PDFInfo
- Publication number
- CN113254961A CN113254961A CN202110580261.5A CN202110580261A CN113254961A CN 113254961 A CN113254961 A CN 113254961A CN 202110580261 A CN202110580261 A CN 202110580261A CN 113254961 A CN113254961 A CN 113254961A
- Authority
- CN
- China
- Prior art keywords
- sdf
- encryption machine
- application
- key
- encryption
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000005538 encapsulation Methods 0.000 title claims abstract description 19
- 238000012795 verification Methods 0.000 claims abstract description 16
- 230000008569 process Effects 0.000 claims abstract description 12
- 230000005540 biological transmission Effects 0.000 claims description 19
- 230000003993 interaction Effects 0.000 claims description 19
- 230000006870 function Effects 0.000 claims description 12
- VBMOHECZZWVLFJ-GXTUVTBFSA-N (2s)-2-[[(2s)-6-amino-2-[[(2s)-6-amino-2-[[(2s,3r)-2-[[(2s,3r)-2-[[(2s)-6-amino-2-[[(2s)-2-[[(2s)-6-amino-2-[[(2s)-2-[[(2s)-2-[[(2s)-2,6-diaminohexanoyl]amino]-5-(diaminomethylideneamino)pentanoyl]amino]propanoyl]amino]hexanoyl]amino]propanoyl]amino]hexan Chemical compound NC(N)=NCCC[C@@H](C(O)=O)NC(=O)[C@H](CCCCN)NC(=O)[C@H](CCCCN)NC(=O)[C@H]([C@@H](C)O)NC(=O)[C@H]([C@H](O)C)NC(=O)[C@H](CCCCN)NC(=O)[C@H](C)NC(=O)[C@H](CCCCN)NC(=O)[C@H](C)NC(=O)[C@H](CCCN=C(N)N)NC(=O)[C@@H](N)CCCCN VBMOHECZZWVLFJ-GXTUVTBFSA-N 0.000 claims description 7
- 108010068904 lysyl-arginyl-alanyl-lysyl-alanyl-lysyl-threonyl-threonyl-lysyl-lysyl-arginine Proteins 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 4
- 230000008676 import Effects 0.000 claims description 3
- 230000006378 damage Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephone Function (AREA)
Abstract
本发明公开了一种基于go语言封装调用硬件国密密码接口的方法,包括:应用端采用go语言接口调用SDF接口端,连接动态连接库,所述动态连接库接收SDF接口端请求,生成并返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种或几种过程信息,所述过程信息例如句柄、状态码、信息指针、随机数其中的一种或几种;所述动态连接库对接SDF接口端接收应用端指令请求;根据所应用端指令通过SDF接口端请求触发加密机,所述加密机返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种请求结果。本发明的方法能够实现使用go语言调用SDF接口,并通过SDF接口对接加密机实现硬件加密,方便应用实现自己的密码系统,增强应用的安全等级。
Description
技术领域
本发明属于国密密码接口技术领域,具体涉及一种基于go语言封装调用硬件国密密码接口的方法。
背景技术
SDF接口(硬件密码接口)标准是国家密码行业标准GM/T 0018-2012《密码设备应用接口规范》中规定的有关密码设备应用接口的规范。
该标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备指定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导。
目前的部分加密机厂商已经开始支持SDF接口标准,而SDF接口标准是针对C语言为原型的接口,在其他语言中无法直接调用这些接口。
因此,亟需一种基于go语言和C语言的对SDF接口的封装后的调用方法,这样在go语言类型的应用中,可以直接调用go语言的接口来操作支持SDF接口标准的加密机,方便应用实现自己的国密密码系统,增强应用的安全等级。
发明内容
本发明基于上述背景和现有技术所存在的问题,拟设计一种基于go语言封装调用硬件国密密码接口的方法,其能够实现go语言对SDF接口进行封装后的调用,方便应用实现自己的密码系统,增强应用的安全等级。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
为了实现本发明的这些目的和其它优点,提供了如下技术方案:
响应于应用端指令基于go语言发起的SDF接口端调用请求;
SDF接口端经动态连接库接收调用请求,生成并返回加密操作的过程信息,并将过程信息发送至加密机,其中,动态连接库设置在SDF接口端内,所述过程信息为执行加密操作的相关参数,其中,所述相关参数包括句柄、状态码、信息指针、随机数中的一种或几种;
所述应用端指令通过SDF接口端转换为SDF格式请求触发加密机;
所述加密机根据所述请求返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种请求结果。
在一种可选的实施方式中,所述密钥生成采用SM2算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口生成SM2密钥,具体实现步骤包括:
SDF接口端接收应用端生成的SM2非对称密钥请求,并将生成密钥对请求传递给加密机;
加密机生成SM2非对称密钥,并进行存储后返回SM2非对称密钥对;
由所述SDF接口端将SM2非对称密钥对返回到应用端;
应用端将SDF接口端的非对称密钥类型进行转化,使之符合应用端的使用。
在一种可选的实施方式中,所述签名采用SM2算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现SM2签名,具体实现步骤包括:
SDF接口接收应用端传入的密钥标签,调用获取索引的接口,传入密钥标签到加密机,SDF接口端接收所述加密机返回密钥索引;
同时,应用端获取私钥权限,并通过SDF接口端从加密机获取私钥权限,传入密钥的索引值;
同时,SDF接口端获取应用端导出的签名公钥,传入密钥的索引值,导出签名公钥;
加密机获取所述私钥权限、签名公钥、密钥的索引值及导出的签名公钥,通过SDF接口端返回到应用端;
SDF接口端接收应用端的签名请求,传入SM2公钥和消息到加密机,由加密机进行哈希运算(杂凑运算)初始化、哈希运算(多包杂凑运算)、结束哈希运算(杂凑运算结束)操作,完成哈希值计算,并通过SDF接口端返回摘要到应用端;
应用端将签名请求通过SDF接口端传入加密机内部进行签名,传入密钥(key)的索引值(Index)和摘要,由加密机通过SDF接口端返回签名得到r和s到应用端;
由所述应用端对r和s进行ASN.1编码,得到签名结果,并发送释放私钥权限,SDF接收应用端的释放通知并将此消息发送到加密机,加密机释放私钥权限。
在一种可选的实施方式中,所述验签采用SM2算法实现签名验证,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现对上述签名的SM2验签,具体实现步骤包括:
应用端通过ASN.1解码得到r和s,并将公钥类型转换为SDF中的公钥类型,然后对所述r和s进行填充,填充为SDF的最大长度;
所述应用端发起验签请求,SDF接口端接收验签请求,并将公钥和摘要传输到加密机,加密机进行验签,通过SDF接口端返回验签结果到应用端。
在一种可选的实施方式中,所述加密采用SM2算法实现加密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现SM2加密,具体实现步骤包括:
应用端将公钥类型转换为SDF中的私钥类型,然后将加密请求发送到SDF接口端;
SDF接口端接收所述加密请求,将公钥和明文发送到加密机,由加密机进行签名,并通过SDF接口端返回密文(ECC_Cipher)类型数据到应用端;
应用端将回ECC_Cipher内容转换为C1C3C2型密文。
在一种可选的实施方式中,所述解密采用SM2算法实现解密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现SM2解密,具体实现步骤包括:
应用端解析C1C3C2型密文,得到ECC_Cipher类型数据,然后将私钥转换为私钥类型,并发送解密请求;
SDF接口端接收解密请求,将私钥和密文传输到加密机;
加密机获取私钥和密文进行解密,并将解密后的明文和明文长度到SDF接口端,SDF接口端将明文返回到应用端。
在一种可选的实施方式中,所述hash运算采用SM3算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现采用SM3的hash运算,具体实现步骤包括:
应用端调用哈希运算初始化(HashInit)函数进行哈希运算的初始化操作,并由SDF接口端将哈希运算消息发送到加密机;
由于加密机对数据长度有一定限制,应用端对数据进行分组,循环调用哈希运算函数(HashUpdate),向SDF接口端传入分组数据,调用结束哈希运算(HashFinal)函数,SDF将分组数据转化为SDF格式的请求传输到加密机;
加密机通过SDF接口端返回哈希运算结果到应用端。
在一种可选的实施方式中,所述密钥生成采用SM4算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口生成SM4密钥,具体实现步骤包括:
应用端发送生成随机数请求,通过SDF接口端将生成密钥请求发送到加密机,由加密机通过SDF接口端返回随机数;
应用端将所述随机数设置为SM4对称密钥。
在一种可选的实施方式中,所述加密采用SM4算法实现加密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现SM4加密,具体实现步骤包括:
应用端对数据进行PKCS#7填充,生成随机数作为IV(对称加密需要使用,此处可理解为随机数,在名称解释处说明),所述数据填充为SM4块大小的整数倍;
应用端发送生成会话密钥句柄请求到SDF接口端,SDF接口端导入密钥并将请求发送到加密机,加密机生成会话密钥句柄返回到SDF接口端;
应用端将加密请求通过SDF接口端发送到加密机,加密机基于CBC模式使用会话密钥句柄和IV对数据进行对称加密,并通过SDF接口端返回密文结果;
应用端将IV和密文结果进行拼接,完成数据加密后通过SDF接口端发送销毁会话密钥句柄到加密机,加密机销毁会话密钥句柄。
在一种可选的实施方式中,所述解密采用SM4算法实现解密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即调用硬件密码接口实现SM4解密,具体实现步骤包括:
应用端对密文数据进行拆解,得到IV和密文,然后将生成会话密钥句柄通过SDF接口端发送到加密机;
所述加密机生成会话密钥句柄并将其返回到SDF接口端,接收应用端通过SDF接口端发送过来的解密请求,基于CBC模式使用会话密钥句柄和IV对密文进行解密,并通过SDF接口端返回明文结果;
应用端根据PKCS#7标准规范将填充数据清除,并将销毁会话密钥句柄请求通过SDF接口端发送到加密机,加密机销毁会话密钥句柄。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,图中显而易见可以的具体实现流程作为本发明进一步的具体实施例,落入本发明的保护范围。
图1为本发明基于go语言封装调用硬件密码接口的原理图;
图2为本发明采用SM2算法实现密钥生成的流程图;
图3为本发明采用SM2算法实现签名的流程图;
图4为本发明采用SM2算法实现验签的流程图;
图5为本发明采用SM2算法实现加密的流程图;
图6为本发明采用SM2算法实现解密的流程图;
图7为本发明采用SM3算法实现hash运算的流程图;
图8为本发明采用SM4算法实现密钥生成的流程图;
图9为本发明采用SM4算法实现加密的流程图;
图10为本发明采用SM4算法实现解密的流程图;
具体实施方式
为了清晰地阐述本发明,使本发明实施例的目的、技术方案和优点更加清楚,下面结合了本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,以令本领域技术人员参照说明书文字能够据以实施。下面将附图结合具体实施方式对本发明的技术加以详细说明。
名称解释:
SM2/SM3/SM4:国家商用密码,简称国密(SM)。是我国自主研发创新的一套数据加密处理系列算法。从SM2-SM4分别实现了非对称密码、摘要(hash运算)、和对称密码等算法功能。
IV:Initialization vector,替代第一个密文块的随机数,用于对称加密算法中;
CBC:CipherBlock Chaining,密码分组链接模式,先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密;
ASN.1:抽象语法标记(Abstract Syntax Notation One),是一种ISO/ITU-T标准,描述了一种对数据进行表示、编码、传输和解码的数学格式,提供了一整套正规的格式用于描述对象的结构,屏蔽语言上执行方式、数据的具体指代及应用程序。
SM2算法进行签名和验签得到签名结果r和s是一次签名的两部分,共同构成签名,即一个数字签名包含两个数字,r和s,使用一个私钥来产生r和s,如果将公钥和s代入被选定的数学方程给出r的话,这个签名就是有效的。
SM2非对称加密的结果由C1,C2,C3三部分组成。其中C1是生成随机数的计算出的椭圆曲线点,C2是密文数据,C3是SM3的摘要值。最开始的国密标准的结果是按C1C2C3顺序的,新标准的是按C1C3C2顺序存放的。
PKCS#7,也叫做加密消息的语法标准,由RSA安全体系在公钥加密系统中交换数字证书产生的一种加密标准。
图1示出了根据本发明的一种实现形式,示出了本发明基于go语言封装调用硬件密码接口的原理图,包括应用端、SDF接口端和加密机之间采用go语言接口调用SDF接口端,连接动态连接库,所述动态连接库接收SDF接口端请求对接加密机,生成并返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种或几种过程信息,所述过程信息包括句柄、状态码、信息指针、随机数其中的一种或几种,其中信息指针包括哈希值指针(pucMAC[out],缓冲区指针,用于存放输出的MAC值)、哈希值长度指针(puiMACLength[out],输出的MAC值长度)和公私钥信息指针;然后所述动态连接库对接SDF接口端接收应用端指令请求;最后根据所应用端指令通过SDF接口端请求触发加密机,所述加密机返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种请求结果。
其中,动态连接库作为本发明SDF接口端的一部分,起着连接不同数据源的作用,本质上还是SDF接口端的功能,因此在本发明的说明中,主要提及封装后的应用端、SDF接口端和加密机三方之间的密码接口之间实现密钥生成、签名、验签、加密、解密及hash运算的交互过程。
具体实施例1
具体的,本发明以应用端、SDF接口端和加密机之间采用go语言接口调用SDF接口端转换go语言格式连接加密机,加密机采用SM2算法实现密钥生成、签名、验签、加密、解密,采用SM3实现Hash运算,并通过SDF接口端转换格式后返回结果到应用端,分别包括以下技术方案和实现步骤:
S1:采用SM2算法实现密钥生成,如图2为本发明采用SM2算法实现密钥生成的流程图,具体实现步骤包括:
S12:SDF接口端接收应用端生成的SM2非对称密钥请求,并将生成密钥对请求传递给加密机(SDF_GenerateKeyPair_ECC);
S13:加密机生成SM2非对称密钥,并进行存储后返回SM2非对称密钥对;
S14:由所述SDF接口端将SM2非对称密钥对返回到应用端;
S15:应用端将SDF接口端的非对称密钥类型进行转化,使之符合应用端的使用。
S2:采用SM2算法实现签名,如图3为本发明采用SM2算法实现签名的流程图,具体实现步骤包括:
S21:SDF接口接收应用端传入的密钥标签,调用获取索引的接口,传入密钥标签到加密机,SDF接口端接收所述加密机返回密钥索引;
S22:同时,应用端获取私钥权限(GetPrivateKeyAccessRight),并通过SDF接口端从加密机获取私钥权限(GetPrivateKeyAccessRight),传入密钥的索引值(key的Index);
S23:同时,SDF接口端获取应用端导出的签名公钥(ExportSignPublicKeyECC),传入密钥(key)的索引值(Index),
S24:加密机获取所述私钥权限、签名公钥和密钥的索引值导出签名公钥,通过SDF接口端返回到应用端;
S25:应用端接收到所述签名公钥,发起hash运算签名请求,SDF接口端接收应用端的签名请求,传入SM2公钥和消息到加密机,由加密机进行哈希运算(杂凑运算)初始化(SDF_HashInit)、哈希运算(包杂凑运算)(SDF_HashUpdate)、结束哈希运算(杂凑运算结束)(SDF_HashFinal)操作,完成哈希值计算,所述哈希值计算方法包括:
S251:采用杂凑算法计算哈希ZA值(杂凑值,或即为哈希值),并通过SDF接口端返回摘要到应用端;
S252:SDF接口端调用签名运算函数,传入SM2公钥、消息,进行hash运算,SDF接口端接收并返回运算完成后的哈希值的摘要到应用端;
S26:应用端将签名(InternalSignECC)请求通过SDF接口端传入加密机内部进行签名(SDF_internalSign_ECC),传入密钥(key)的索引值(Index)和摘要,由加密机通过SDF接口端返回签名得到r和s到应用端;
S27:由所述应用端对r和s进行ASN.1编码,得到签名结果,并发送释放私钥权限(ReleasePrivateKeyAccessRight),SDF接收应用端的释放通知并将此消息发送到加密机,加密机释放私钥权限。
S3:采用SM2算法实现签名验证,如图4为本发明采用SM2算法实现验签的流程图,具体实现步骤包括:
S31:应用端通过ASN.1解码得到r和s,并将公钥类型转换为SDF中的公钥(ECCrefPublicKey)类型,然后对所述r和s进行填充,填充为SDF的ECCref_MAX_LEN大小;
S32:所述应用端发起验签请求(ExternalVerifyECC),SDF接口端接收验签请求,并将公钥和摘要传输到加密机,加密机进行验签(SDF_ExternalVerify_ECC),通过SDF接口端返回验签结果到应用端。
S4:采用SM2算法实现加密,如图5为本发明采用SM2算法实现加密的流程图,具体实现步骤包括:
S41:应用端将公钥类型转换为SDF中的ECCrefPublicKey类型,然后将加密请求(ExternalEncryptECC)发送到SDF接口端;
S42:SDF接口端接收所述加密请求,将公钥和明文发送到加密机,由加密机进行签名,并通过SDF接口端返回密文(ECC_Cipher)类型数据到应用端;
S43:应用端将回ECC_Cipher内容转换为C1C3C2型密文。
S5:采用SM2算法实现解密,如图6为本发明采用SM2算法实现解密的流程图,具体实现步骤包括:
S51:应用端解析C1C3C2型密文,得到ECC_Cipher类型数据,然后将私钥转换为私钥(ECCrefPrivateKey)类型,并发送解密请求(ExternalDecryptECC);
S52:SDF接口端接收解密请求,将私钥和密文传输到加密机;
S53:加密机获取私钥和密文进行解密,并将解密后的明文和明文长度到SDF接口端,SDF接口端将明文返回到应用端。
S6:采用SM3算法实现hash运算,如图7为本发明采用SM3算法实现hash运算的流程图,具体实现步骤包括:
S61:应用端调用哈希运算初始化(HashInit)函数进行哈希运算的初始化操作,并由SDF接口端将哈希运算消息发送到加密机;
S62:由于加密机对数据长度有一定限制,应用端对数据进行分组,循环调用哈希运算函数(HashUpdate),向SDF接口端传入分组数据,调用结束哈希运算(HashFinal)函数,SDF将分组数据转化为SDF格式的请求传输到加密机;
S63:加密机通过SDF接口端返回哈希运算结果到应用端。
具体实施例2:
采用SM4算法的实现过程,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,即以应用端、SDF接口端和加密机之间采用go语言接口调用SDF接口端转换go语言格式连接加密机,加密机采用SM4算法实现密钥生成、加密、解密,并通过SDF接口端转换格式后返回结果到应用端,具体实现步骤如下:
P1:采用SM4算法实现密钥生成,如图8为本发明采用SM4算法实现密钥生成的流程图,具体实现步骤包括:
P11:应用端发送生成随机数请求,通过SDF接口端将生成密钥请求(SDF_GenerateRandom)发送到加密机,由加密机通过SDF接口端返回随机数;
P12:应用端将所述随机数设置为SM4对称密钥。
P2:采用SM4算法实现加密,如图9为本发明采用SM4算法实现加密的流程图,具体实现步骤包括:
P21:应用端对数据进行PKCS#7填充,生成随机数作为IV(对称加密需要使用),所述数据填充为SM4块大小的整数倍;
P22:应用端发送生成会话密钥句柄请求到SDF接口端,SDF接口端导入密钥并将请求(SDF_ImportKey)发送到加密机,加密机生成会话密钥句柄返回到SDF接口端;
P23:应用端将加密请求通过SDF接口端(SDF_Encrypt)发送到加密机,加密机基于CBC模式使用会话密钥句柄和IV对数据进行对称加密,并通过SDF接口端返回密文结果;
P24:应用端将IV和密文结果进行拼接,完成数据加密后,通过SDF接口端发送销毁会话密钥句柄(SDF_DestroyKey)到加密机,加密机销毁会话密钥句柄。
P3:采用SM4算法实现解密,如图10为本发明采用SM4算法实现解密的流程图,具体实现步骤包括:
P31:应用端对密文数据进行拆解,得到IV和密文,然后将生成会话密钥句柄通过SDF接口端(SDF_ImportKey)发送到加密机;
P32:所述加密机生成会话密钥句柄并将其返回到SDF接口端,接收应用端通过SDF接口端发送过来的解密请求(SDF_Decrypt),基于CBC模式使用会话密钥句柄和IV对密文进行解密,并通过SDF接口端返回明文结果;
P33:应用端根据PKCS#7标准规范将填充数据清除,并将销毁会话密钥句柄请求通过SDF接口端(SDF_DestroyKey)发送到加密机,加密机销毁会话密钥句柄。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本发明的密钥生成、签名、验签、加密、解密和hash运算其中的一种或几种的其他组合及其他容易想到的将本发明各部分拆解的方案落入本发明的保护范围内。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。
Claims (10)
1.一种基于go语言封装调用硬件国密密码接口的方法,其特征在于,具体实现步骤包括:
响应于应用端指令基于go语言发起的SDF接口端调用请求;
SDF接口端经动态连接库接收调用请求,生成并返回加密操作的过程信息,并将过程信息发送至加密机,其中,动态连接库设置在SDF接口端内,所述过程信息为执行加密操作的相关参数,其中,所述相关参数包括句柄、状态码、信息指针、随机数中的一种或几种;
所述应用端指令通过SDF接口端转换为SDF格式请求触发加密机;
所述加密机根据所述请求返回密钥生成、签名、验签、加密、解密、Hash运算其中的一种请求结果。
2.根据权利要求1所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述密钥生成采用SM2算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
SDF接口端接收应用端生成的SM2非对称密钥请求,并将生成密钥对请求传递给加密机;
加密机生成SM2非对称密钥,并进行存储后返回SM2非对称密钥对;
由所述SDF接口端将SM2非对称密钥对返回到应用端;
应用端将SDF接口端的非对称密钥类型进行转化。
3.根据权利要求1所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述签名采用SM2算法实现包括前置签名操作和签名操作,并通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
所述前置签名操作包括以下步骤:
SDF接口接收应用端传入的密钥标签,调用获取索引的接口,传入密钥标签到加密机,SDF接口端接收所述加密机返回密钥索引;
应用端获取私钥权限,并通过SDF接口端从加密机获取私钥权限,传入密钥的索引值;
SDF接口端获取应用端导出的签名公钥,传入密钥的索引值,导出签名公钥;
加密机获取所述私钥权限、签名公钥、密钥的索引值及导出的签名公钥,通过SDF接口端返回到应用端;
所述签名操作包括:
SDF接口端接收应用端的签名请求,传入SM2公钥和消息到加密机,由加密机进行哈希运算初始化、哈希运算、结束哈希运算操作,完成哈希值计算,并通过SDF接口端返回摘要到应用端;
应用端将签名请求通过SDF接口端传入加密机内部进行签名,传入密钥的索引值和摘要,由加密机通过SDF接口端返回签名得到r和s到应用端;
由所述应用端对r和s进行ASN.1编码,得到签名结果,并发送释放私钥权限,SDF接收应用端的释放通知并将此消息发送到加密机,加密机释放私钥权限。
4.根据权利要求3所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述验签采用SM2算法实现对签名的验证,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端通过ASN.1解码得到r和s,并将公钥类型转换为SDF中的公钥类型,然后对所述r和s进行填充,填充为SDF的最大长度;
所述应用端发起验签请求,SDF接口端接收验签请求,并将公钥和摘要传输到加密机,加密机进行验签,通过SDF接口端返回验签结果到应用端。
5.根据权利要求1所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述加密采用SM2算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端将公钥类型转换为SDF中的公钥类型,然后将加密请求发送到SDF接口端;
SDF接口端接收所述加密请求,将公钥和明文发送到加密机,由加密机进行签名,并通过SDF接口端返回密文类型数据到应用端;
应用端将回密文内容转换为C1C3C2型密文。
6.根据权利要求1或5所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述解密采用SM2算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端解析C1C3C2型密文,得到密文类型数据,然后将私钥转换为私钥类型,并发送解密请求;
SDF接口端接收解密请求,将私钥和密文传输到加密机;
加密机获取私钥和密文进行解密,并将解密后的明文和明文长度到SDF接口端,SDF接口端将明文返回到应用端。
7.根据权利要求1或3或4所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,所述hash运算采用SM3算法实现,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端调用哈希运算初始化函数进行哈希运算的初始化操作,并由SDF接口端将哈希运算消息发送到加密机;
应用端对数据进行分组,循环调用哈希运算函数,向SDF接口端传入分组数据,调用结束哈希运算函数,SDF将分组数据转化为SDF格式的请求传输到加密机;
加密机通过SDF接口端返回哈希运算结果到应用端。
8.根据权利要求1所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,采用SM4算法实现所述密钥生成,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端发送生成随机数请求,通过SDF接口端将生成密钥请求发送到加密机,由加密机通过SDF接口端返回随机数;
应用端将所述随机数设置为SM4对称密钥。
9.根据权利要求1所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,采用SM4算法实现所述加密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端对数据进行PKCS#7填充,生成随机数IV,所述数据填充为SM4块大小的整数倍;
应用端发送生成会话密钥句柄请求到SDF接口端,SDF接口端导入密钥并将请求发送到加密机,加密机生成会话密钥句柄返回到SDF接口端;
应用端将加密请求通过SDF接口端发送到加密机,加密机基于CBC模式使用会话密钥句柄和随机数IV对数据进行对称加密,并通过SDF接口端返回密文结果;
应用端将随机数IV和密文结果进行拼接,完成数据加密后通过SDF接口端发送销毁会话密钥句柄到加密机,加密机销毁会话密钥句柄。
10.根据权利要求1或9所述的基于go语言封装调用硬件国密密码接口的方法,其特征在于,采用SM4算法实现所述解密,通过SDF接口端转换go语言格式实现加密机和应用端之间的传输交互,具体实现步骤包括:
应用端对密文数据进行拆解,得到随机数IV和密文,然后将生成会话密钥句柄通过SDF接口端发送到加密机;
所述加密机生成会话密钥句柄并将其返回到SDF接口端,接收应用端通过SDF接口端发送过来的解密请求,基于CBC模式使用会话密钥句柄和随机数IV对密文进行解密,并通过SDF接口端返回明文结果;
应用端根据PKCS#7标准规范将填充数据清除,并将销毁会话密钥句柄请求通过SDF接口端发送到加密机,加密机销毁会话密钥句柄。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110580261.5A CN113254961A (zh) | 2021-05-26 | 2021-05-26 | 基于go语言封装调用硬件国密密码接口的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110580261.5A CN113254961A (zh) | 2021-05-26 | 2021-05-26 | 基于go语言封装调用硬件国密密码接口的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113254961A true CN113254961A (zh) | 2021-08-13 |
Family
ID=77184611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110580261.5A Pending CN113254961A (zh) | 2021-05-26 | 2021-05-26 | 基于go语言封装调用硬件国密密码接口的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254961A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114826725A (zh) * | 2022-04-20 | 2022-07-29 | 微位(深圳)网络科技有限公司 | 数据交互方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108769173A (zh) * | 2018-05-21 | 2018-11-06 | 阿里体育有限公司 | 运行智能合约的区块链实现方法及设备 |
CN110048855A (zh) * | 2019-04-23 | 2019-07-23 | 东软集团股份有限公司 | 国密算法的引入方法及调用方法、及装置、设备、Fabric平台 |
CN110619224A (zh) * | 2019-08-28 | 2019-12-27 | 深圳市元征科技股份有限公司 | 一种数据处理方法和相关装置 |
CN112363967A (zh) * | 2020-11-09 | 2021-02-12 | 成都卫士通信息产业股份有限公司 | 密码设备接口标准统一方法、装置、设备及介质 |
CN112398826A (zh) * | 2020-11-03 | 2021-02-23 | 北京天融信网络安全技术有限公司 | 基于国密的数据处理方法、装置、存储介质及电子设备 |
CN112737779A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市宝能投资集团有限公司 | 一种密码机服务方法、装置、密码机及存储介质 |
-
2021
- 2021-05-26 CN CN202110580261.5A patent/CN113254961A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108769173A (zh) * | 2018-05-21 | 2018-11-06 | 阿里体育有限公司 | 运行智能合约的区块链实现方法及设备 |
CN110048855A (zh) * | 2019-04-23 | 2019-07-23 | 东软集团股份有限公司 | 国密算法的引入方法及调用方法、及装置、设备、Fabric平台 |
CN110619224A (zh) * | 2019-08-28 | 2019-12-27 | 深圳市元征科技股份有限公司 | 一种数据处理方法和相关装置 |
CN112398826A (zh) * | 2020-11-03 | 2021-02-23 | 北京天融信网络安全技术有限公司 | 基于国密的数据处理方法、装置、存储介质及电子设备 |
CN112363967A (zh) * | 2020-11-09 | 2021-02-12 | 成都卫士通信息产业股份有限公司 | 密码设备接口标准统一方法、装置、设备及介质 |
CN112737779A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市宝能投资集团有限公司 | 一种密码机服务方法、装置、密码机及存储介质 |
Non-Patent Citations (1)
Title |
---|
杨智等: "在 MATLAB 语言中间接实现C语言链接", 《兰州理工大学学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114826725A (zh) * | 2022-04-20 | 2022-07-29 | 微位(深圳)网络科技有限公司 | 数据交互方法、装置、设备及存储介质 |
CN114826725B (zh) * | 2022-04-20 | 2024-04-16 | 微位(深圳)网络科技有限公司 | 数据交互方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111131278B (zh) | 数据处理方法及装置、计算机存储介质、电子设备 | |
CN102333093A (zh) | 一种数据加密传输方法及系统 | |
CN105376261B (zh) | 一种用于即时通讯消息的加密方法及系统 | |
CN101262341A (zh) | 一种会务系统中混合加密方法 | |
CN111490871A (zh) | 一种基于量子密钥云的sm9密钥认证方法、系统及存储介质 | |
CN107249002B (zh) | 一种提高智能电能表安全性的方法、系统及装置 | |
CN110113150A (zh) | 基于无证书环境的可否认认证的加密方法和系统 | |
CN106453391A (zh) | 一种重复长数据加密传输的方法及系统 | |
CN113285959A (zh) | 一种邮件加密方法、解密方法及加解密系统 | |
CN104901803A (zh) | 一种基于cpk标识认证技术的数据交互安全保护方法 | |
CN114268439A (zh) | 一种基于格的身份基认证密钥协商方法 | |
CN111817846A (zh) | 一种轻量级的密钥协商通信协议 | |
Jakobsson et al. | Scramble all, encrypt small | |
CN114172651B (zh) | 一种sm9公钥加密算法、解密算法的gpu加速实现方法 | |
CN113254961A (zh) | 基于go语言封装调用硬件国密密码接口的方法 | |
CN112861164B (zh) | 一种加密方法、解密方法、数据处理方法、终端及加密机 | |
CN104486756A (zh) | 一种密笺短信的加解密方法及系统 | |
CN113645235A (zh) | 分布式数据加解密系统及加解密方法 | |
CN110677238B (zh) | 广播加密方法和装置 | |
CN114896608A (zh) | 采用go语言实现硬件密码接口的方法、介质及装置 | |
CN114826611B (zh) | 一种基于国密SM9的IND-sID-CCA2安全标识广播加密方法 | |
CN114363086B (zh) | 基于流密码的工业互联网数据加密传输方法 | |
CN108882182A (zh) | 短信加解密装置 | |
CN110365482A (zh) | 一种数据通信方法和装置 | |
CN101267298A (zh) | 一种基于媒体流业务的密钥协商方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210813 |
|
RJ01 | Rejection of invention patent application after publication |