一种数据包的生成方法

文档序号:7552160阅读:139来源:国知局
专利名称:一种数据包的生成方法
技术领域
本发明属于安全认证技术领域,具体涉及一种数据包的生成方法。
背景技术
现有技术中,在基于开源密码算法库的应用中使用硬件设备存在以下问题:开源密码算法库的版本不同,实现硬件设备的自定义接口也有所改变,不利于代码维护。例如,以开源密码算法库OpenSSL为例,传统情况下,在SSL (安全套接层协议,Secure SocketLayer的缩写)中使用高强度算法的硬件设备,需要做大量的接口修改工作,并要求开发者熟悉硬件的内部结构和相应的开发接口。OpenSSL的引擎机制通过提供通用的加密接口解决了这个难题。OpenSSL中的引擎技术虽便于对算法库进行算法扩展,但在实现时发现,随着OpenSSL版本的升级,引擎接口定义也有所不同。且在应用时,实现一个引擎不是一件很容易的事情。所以,现有技术有以下缺陷:版本不同,引擎实现接口有所变化,不利于代码维护;实现引擎难度较大,对在开源密码算法库的应用中嵌入使用硬件设备的开发带来困难。

发明内容
为解决现有技术中存在的问题,本发明提出了结合开源密码算法库和硬件设备的一种数据包的生成方法。本发明采用的技术方案如下:一种数据包的生成方法,包括:步骤S1:数据包生成器创建一个待填充的数据包;步骤S2:所述数据包生成器根据读取的硬件设备中的公钥信息生成临时密钥对;步骤S3:所述数据包生成器根据读取的硬件设备内部信息和接收到的外部参数信息设置所述待填充的数据包的数据;步骤S4:所述数据包生成器从所述数据包中获取待签名数据,并根据预设签名算法,使用所述临时密钥对的私钥对所述待签名数据进行签名得到第一签名值,并将所述第一签名值设置在所述数据包的数据中;步骤S5:所述数据包生成器将所述待签名数据发送给所述硬件设备,并接收所述硬件设备返回的第二签名值;步骤S6:所述数据包生成器将所述第二签名值的类型转换成预设签名值结构类型,并用转换后的第二签名值替换所述数据包中的第一签名值;步骤S7:所述数据包生成器验证当前数据包,正确则执行下一步,否则报错;步骤S8:所述数据包生成器将当前数据包转换成预设编码类型的数据包。其中,所述步骤SI具体为创建一个待填充的证书请求数据包并设置所述证书请求数据包的版本。步骤S2中所述硬件设备中的公钥信息是指硬件设备根据接收到的外部输入参数生成的预设密钥对中的公钥的类型信息。步骤S3所述硬件设备内部信息是指硬件设备根据接收到的外部输入参数生成的预设密钥对中的公钥,所述外部参数信息是指外部传入的主题字符串和摘要算法。所述步骤S3具体为,根据所述公钥、所述主题字符串和所述摘要算法设置所述证书请求数据包的用户公钥、主题项和摘要算法,进一步具体为,I)将外部传入的所述主题字符串转换成第一预设类型,根据转换后的主题字符串设置所述证书请求数据包的主题项;2)根据外部传入的所述摘要算法设置所述证书请求数据包的摘要算法;3)将所述公钥转换成第二预设类型,根据转换后的公钥设置所述证书请求数据包中的用户公钥。步骤S4所述待签名数据包括所述证书请求数据包中的用户公钥和主题项。或者:所述步骤SI具体为创建一个待填充的加密消息数据包并设置所述加密消息数据包的类型。步骤S2中所述硬件设备中的公钥信息是指根据外部输入参数选取的导入证书中的公钥的类型信息。步骤S3所述硬件设备内部信息是指根据外部输入参数从硬件设备中选取的导入证书的公钥,所述外部参数信息为外部传入的摘要算法和原文数据。步骤S3具体为,根据所述导入证书在所述加密消息数据包中设置用户证书,根据所述外部传入的摘要算法和所述临时密钥对在所述加密消息数据包中设置签名值结构,根据外部传入的原文数据在所述加密消息数据包中设置待签名数据。上述步骤S2具体为:所述数据包生成器根据读取的硬件设备中的公钥的位长生成预设长度的随机数作为临时密钥对。上述预设签名算法为MD5RSA或SHA1RSA。步骤S7所述验证当前数据包具体为:对当前数据包中的待签名数据进行摘要得到第一摘要值,对当前数据包中的第二签名值做公钥解密得到第二摘要值,比对这两个摘要值,如果完全一致则验证成功,否则验证失败。步骤S8所述预设编码类型为DER编码类型。采用本发明达到的有益效果是:该方法不破坏原有基于开源密码算法库的应用的框架,在使用中具有实际意义。


图1是实施例1提出的一种数据包的生成方法流程图;图2是实施例2提供的一种证书请求数据包的生成方法流程图;图3是实施例3提供的一种加密消息数据包的生成方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1结合开源密码算法库和硬件设备,本实施例提出了一种数据包的生成方法,所述开源密码算法库采用普遍使用的OpenSSL,所述硬件设备为硬件加密设备;如图1所示,所述方法包括:步骤1:数据包生成器创建一个待填充的数据包;例如,通过调用X509_REQ_new O来创建一个待填充的证书请求数据包(X509_REQ);或是通过调用PKCS7_new()来创建一个待填充的加密消息数据包(PKCS7)。所述数据包生成器用于根据开源算法库和硬件加密设备生成特定的数据包。步骤2:数据包生成器根据读取的硬件设备中的公钥信息生成临时密钥对;具体地,当硬件设备中存在导入证书时,所述公钥信息为根据外部输入参数选取的导入证书中的公钥的类型信息;当硬件设备中不存在导入证书时,硬件设备根据接收到的外部输入参数生成预设密钥对,所述公钥信息为根据预设密钥对的公钥句柄导出的公钥的类型信息。本实施例中,本步骤具体为:根据读取的硬件设备中的公钥的位长生成预设长度的随机数作为临时密钥对。步骤3:数据包生成器根据读取的硬件设备内部信息和接收到的外部参数信息设置所述待填充的数据包的数据;具体地,当所述待填充的数据包为X509_REQ时,所述读取的硬件设备内部信息为根据硬件设备中预设密钥对的公钥句柄导出的公钥,所述外部参数信息为外部传入的DN字符串、摘要算法;设置X509_REQ中的数据具体包括根据所述导出的公钥、外部传入的DN字符串和摘要算法设置X509_REQ的用户公钥、主题(即DN项)、摘要算法;当所述待填充的数据包为PKCS7时,所述读取的硬件设备内部信息为硬件设备中存储的导入证书,所述外部参数信息为外部传入的摘要算法;设置PKCS7中的数据具体包括根据导入证书在PKCS7中设置用户证书,根据摘要算法和所述临时密钥对在PKCS7设置签名值结构,根据外部传入的原文数据在PKCS7中设置待签名数据。步骤4:数据包生成器从所述数据包中获取待签名数据,并根据预设签名算法,使用临时密钥对的私钥对待签名数据进行签名得到第一签名值,并将该第一签名值设置在数据包的数据中;具体地,当所述待填充的数据包为X509_REQ时,待签名数据为X509_REQ中的用户公钥、DN项和摘要算法;当所述待填充的数据包为PKCS7时,待签名数据为外部传入的原文数据,例如外部传入的证书请求数据等。所述预设算法可以为MD5RSA或SHA1RSA。步骤5:数据包生成器将所述待签名数据发送给硬件设备,并接收硬件设备返回的第二签名值;具体地:硬件设备根据设备中存储的私钥的句柄访问私钥,并根据预设签名算法对接收到的待签名数据进行签名,生成第二签名值,并将所述第二签名值返回给数据包生成器;本实施例中具体地,数据包生成器调用标准接口访问硬件设备,硬件设备根据预设签名算法用存储的私钥对所述待签名数据进行签名,生成第二签名值并返回给数据包生成器。所述标准接口为CSP或Pl I等标准接口。步骤6:数据包生成器将第二签名值的类型转换成预设签名值结构类型,并用转换后的第二签名值替换数据包中的第一签名值;步骤7:数据包生成器验证当前数据包,如正确则执行下一步,否则报错;具体地验证过程为:数据包生成器对当前数据包中的待签名数据进行摘要得到第一摘要值,对当前数据包中的签名值做公钥解密获取第二摘要值,比对这两个摘要值,如果完全一致则验证成功,否则验证失败。
步骤8:数据包生成器将当前数据包转换成预设编码类型的数据包。本实施例中具体地,数据包生成器将当前数据包转换成DER编码类型。实施例2在实施例1的基础上以开源密码算法库OpenSSL为例,本实施例提出了一种基于OpenSSL的请求证书应用中使用硬件设备的方法,如图2所示,其中所述设备为硬件加密设备,数据包生成器被外部应用程序调用来生成证书请求数据包时,执行以下操作:步骤101:数据包生成器从设备中获得公钥和私钥的句柄,根据公钥句柄导出公钥;具体地,所述设备中存储有根据外部输入参数生成的预设密钥对的公钥和私钥的句柄,数据包生成器根据公钥句柄导出公钥。本实施例中还包括,将导出的公钥转换成DER编码的公钥。步骤102:数据包生成器创建一个待填充的证书请求数据包;本实施例中优选的,创建的待填充的证书请求数据包的DER编码如下:30 Ia 30 10 02 00 30 00 30 08 30 03 06 01 00 03 01 00 a0 00 30 03 0601 00 03 01 00。进一步的,还包括设置该证书请求数据包的版本,优选的,设置版本为2后的证书请求数据包的DER编码如下:30 Ib 30 11 02 01 01 30 00 30 08 30 03 06 01 00 03 01 00 a0 00 30 0306 01 00 03 01 00。步骤103:数据包生成器根据所述导出的公钥和外部传入的DN字符串、摘要算法设置证书请求数据包的数据;本实施例中具体地,所述证书请求数据包的数据包含有用户公钥、主题(即DN项)和摘要算法。本步骤具体包括:I)将外部传入的DN字符串的类型转换成第一预设类型,根据转换后的DN字符串设置证书请求数据包的DN项;具体地,所述第一预设类型优选为X509_NAME类型,将外部传入的DN字符串转换成X509_NAME类型的过程包括:首先根据分隔符将DN各项分开,然后再解析“=”号,分析出各DN项的“key”和“Value”,最后将DN项转换成OID,并根据Value类型创建类型。本实施例中优选的,所述DN项包括countryName、commonName、organizationalUniteName、organizationName。所述 DN 项的 countryName 的 DER 编码为:30 09 06 03 55 04 06 13 02 63 6e ;所述 DN 项的 commonName 的 DER 编码为:30 Ob 06 03 55 04 03 Ie 04 98 de 59 29 ;所述 DN 项的 organizationalUniteName 的DER 编码为:30 10 06 03 55 04 Ob 13 09 43 75 73 74 6f 6d 65 72 73 ;所述 DN 项的organizationName 的 DER 编码为:30 19 06 03 55 04 Oa 13 12 43 46 43 41 20 4f 7065 72 61 74 69 6f 6e 20 43 41 32。2)根据外部传入的摘要算法,设置证书请求数据包的摘要算法。本实施例中优选的,所述摘要算法为SHA1,设置到证书请求数据包的摘要算法的DER编码为:30 Od 06 09 2a 86 48 86 f7 Od 01 01 01 05 00。所述摘要算法还可以为MD5。
3)将DER编码的公钥的类型转换成第二预设类型,根据转换后的公钥设置证书请求数据包中的用户公钥;具体地,所述第二预设类型优选为EVP_PKEY类型。本实施例中优选的,设置到证书请求数据包中的用户公钥的DER编码如下:
权利要求
1.一种数据包的生成方法,其特征在于,包括: 步骤S1:数据包生成器创建一个待填充的数据包; 步骤S2:所述数据包生成器根据读取的硬件设备中的公钥信息生成临时密钥对; 步骤S3:所述数据包生成器根据读取的硬件设备内部信息和接收到的外部参数信息设置所述待填充的数据包的数据; 步骤S4:所述数据包生成器从所述数据包中获取待签名数据,并根据预设签名算法,使用所述临时密钥对的私钥对所述待签名数据进行签名得到第一签名值,并将所述第一签名值设置在所述数据包的数据中; 步骤S5:所述数据包生成器将所述待签名数据发送给所述硬件设备,并接收所述硬件设备返回的第二签名值; 步骤S6:所述数据包生成器将所述第二签名值的类型转换成预设签名值结构类型,并用转换后的第二签名值替换所述数据包中的第一签名值; 步骤S7:所述数据包生成器验证当前数据包,如正确则执行下一步,否则报错; 步骤S8:所述数据包生成器将当前数据包转换成预设编码类型的数据包。
2.如权利要求1所述的方法,其特征在于,所述步骤SI具体为创建一个待填充的证书请求数据包并设置所述证书请求数据包的版本。
3.如权利要求2所述的方法,其特征在于,步骤S2中所述硬件设备中的公钥信息是指硬件设备根据接收到的外部输入参数生成的预设密钥对中的公钥的类型信息。
4.如权利要求1所述的方法,其特征在于,步骤S2具体为:所述数据包生成器根据读取的硬件设备中的公钥的位长生成预设长度的随机数作为临时密钥对。
5.如权利要求2所述的方法,其特征在于,步骤S3所述硬件设备内部信息是指硬件设备根据接收到的外部输入参数生成的预设密钥对中的公钥,所述外部参数信息是指外部传入的主题字符串和摘要算法。
6.如权利要求5所述的方法,其特征在于,所述步骤S3具体为,根据所述公钥、所述主题字符串和所述摘要算法设置所述证书请求数据包的用户公钥、主题项和摘要算法。
7.如权利要求5所述的方法,其特征在于,所述步骤S3具体为, 1)将外部传入的所述主题字符串转换成第一预设类型的数据,根据转换后的主题字符串设置所述证书请求数据包的主题项; 2)根据外部传入的所述摘要算法设置所述证书请求数据包的摘要算法; 3)将所述公钥转换成第二预设类型的数据,根据转换后的公钥设置所述证书请求数据包中的用户公钥。
8.如权利要求2所述的方法,其特征在于,步骤S4所述待签名数据包括所述证书请求数据包中的用户公钥和主题项。
9.如权利要求1所述的方法,其特征在于,所述步骤SI具体为创建一个待填充的加密消息数据包并设置所述加密消息数据包的类型。
10.如权利要求9所述的方法,其特征在于,所述步骤S2中所述硬件设备中的公钥信息是指根据外部输入参数选取的导入证书中的公钥的类型信息。
11.如权利要求9所述的方法,其特征在于,所述步骤S3所述硬件设备内部信息是指根据外部输入参数从硬件设备中选取的导入证书的公钥,所述外部参数信息为外部传入的摘要算法和原文数据。
12.如权利要求11所述的方法,其特征在于,所述步骤S3具体为:根据所述导入证书在所述加密消息数据包中设置用户证书,根据所述外部传入的摘要算法和步骤S2所述临时密钥对在所述加密消息数据包中设置签名值结构,根据外部传入的原文数据在所述加密消息数据包中设置待签名数据。
13.如权利要求1所述的方法,其特征在于,所述预设签名算法为MD5RSA或SHA1RSA。
14.如权利要求1所述的方法,其特征在于,所述步骤S7所述验证当前数据包具体为:对当前数据包中的待签名数据进行摘要得到第一摘要值,对当前数据包中的第二签名值做公钥解密得到第二摘要值,比对所述第一摘要值和第二摘要值,如果完全一致则验证成功,否则验证失败。
15.如权 利要求1所述的方法,其特征在于,步骤S8所述预设编码类型为DER编码类型。
全文摘要
本发明提出的一种数据包的生成方法,属于安全认证技术领域;包括创建一个待填充的数据包,根据读取的硬件设备中的公钥信息生成临时密钥对,根据读取的硬件设备内部信息和接收到的外部参数信息设置所述待填充的数据包的数据;从所述数据包中获取待签名数据,并根据预设签名算法和临时密钥对的私钥对待签名数据进行签名得到第一签名值并将其设置在数据包的数据中;将所述待签名数据发送给所述硬件设备并获取第二签名值;将所述第二签名值的类型转换成预设签名值结构类型,并用转换后的第二签名值替换所述数据包中的第一签名值,将当前数据包转换成预设编码类型的数据包。该方法不破坏原有基于开源密码算法库的应用的框架,在使用中具有实际意义。
文档编号H04L9/32GK103078746SQ20131004987
公开日2013年5月1日 申请日期2013年2月7日 优先权日2013年2月7日
发明者陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1