【技术实现步骤摘要】
一种基于标识算法的国密SSL加密方法
[0001]本专利技术涉及电子政务与商务领域,特别是涉及一种基于标识算法的国密SSL加密方法。
技术介绍
[0002]随着信息时代的到来,电子政务与电子商务的崛起使人们的生活更加倾向于线上,作为三大核心密码协议之一的SSL/TLS协议为全世界大约80%的线上应用提供数据完整性保护、数据机密性保护和身份认证功能,其重要性不言而喻。历代不同版本的SSL/TLS协议都定义了上百个加密方法,由于算法本身的安全性以及计算效率,实际应用中主流的加密方法屈指可数,大多只有依赖PKI证书才能完成身份认证和密钥交换。然而面对当下变化性强,更新升级速度快以及拥有海量用户的移动互联网应用,PKI证书管理成本之高,CA部署之难等问题使得传统加密方法捉襟见肘。
[0003]国家密码管理局2014年发布的《GMT 0024-2014SSL VPN技术规范》标准,在TLS1.1的握手协议中增加了ECC、IBC的认证模式和密钥交换模式,目前江南天安公司的TaSSL以及北京大学的GmSSL开源库都已经实现了基于ECC算法的SSL握手协议,深圳奥联公司自主设计并实现了一款基于SM9标识算法的SSL VPN网关产品,换言之迄今基于国密标准的IBC认证模式和密钥交换模式在SSL协议中仍没有实现。
技术实现思路
[0004]为了克服上述现有技术的不足,本专利技术提供一种基于标识算法的国密SSL加密方法。此方法中公钥的产生依赖SM9标识算法而不是PKI证书,因此无需颁发和管理PKI证书,在成本和效率 ...
【技术保护点】
【技术特征摘要】
1.一种基于标识算法的国密SSL加密方法,其特征在于,包括如下步骤:步骤1:使用EVP接口调用SM9密码算法;步骤2:使用SM9算法进行精简密钥协商;步骤3:基于SM9进行双证书认证;步骤4:基于SM9进行精简握手协议过程;步骤5:调用设计的建立链接口建立基于SM9的SSL链接。2.根据权利要求1所述的一种基于标识算法的国密SSL加密方法,其特征在于,所述步骤1采用OpenSSL中的非对称算法EVP封装SM9算法,并实现EVP_PKEY的调用接口,包括以下步骤:步骤一:在evp目录下封装公钥算法,将具体实现的SM9算法“告知”给OpenSSL,包括OpenSSL源码crypto/evp目录下以“p_”开头的文件进行编辑操作,密钥封装过程调用公钥加解密接口,修改如下四个文件:1)编辑p_enc.c文件,以满足EVP公钥加密接口对SM9加密算法的支持,在p_enc.c文件中首先创建一个SM9的密钥结构体并利用该结构体初始化加密函数,其次定义加密曲线为SM9曲线;2)编辑p_dec.c文件,以完成EVP公钥解密接口对SM9解密算法的支持,在p_dec.c文件中首先创建SM9密钥结构体并初始化解密函数,其次定义解密曲线为SM9曲线;3)编辑p_sign.c文件,以满足EVP数字签名接口对SM9签名算法的支持,定义SM9曲线;4)编辑p_verify.c文件,以满足EVP验签接口对SM9验签算法的支持,定义验签所用的曲线为SM9曲线;步骤二:实现SM9算法的EVP_PKEY调用接口;此接口的实现,需要修改OpenSSL源码crypto/ec目录下的ec_pmeth.c文件;具体操作如下:1)在EC_PKEY_CTX结构体尾部添加非对称密钥的信息,以供后续EC_PKEY有关接口完成相应的功能,包括SM9曲线参数、签名者id、公钥加密参数、对方id、id长度以及系统参数;2)在pkey_ec_init函数、pkey_ec_copy函数和pkey_ec_cleanup函数中添加对上述变量的初始化、复制或清理操作;3)在pkey_ec_sign函数中添加签名回调功能,回调在OpenSSL密码算法库中实现的SM9签名算法;4)在pkey_ec_verify函数中添加验签回调功能,回调在OpenSSL密码算法库中实现的SM9验签算法;5)在pkey_ec_kdf_derive函数中增加对SM9密钥协商的支持;6)在ec_pkey_meth数组中添加SM9公钥加密和解密的接口,并在该数组之上静态实现。3.根据权利要求1所述的一种基于标识算法的国密SSL加密方法,其特征在于,所述步骤2使用SM9算法进行精简密钥协商,包括以下步骤:步骤一:定义复用函数SM9_generate_key_exchange()以计算公钥,该函数的功能为:在群G1上根据R、r、gr、peer_id和sk计算公钥;其中R为G1上的一对临时密钥,为密钥协商第一阶段的结果,后续彼此依照对方产生的R值进行共享密钥的计算;r为[1,N-1]的随机数;gr用来存放转换为比特串的g;peer_id为对方的标识;sk为调用方加密私钥;步骤二:定义发起方和响应方计算共享密钥的接口;此接口的功能为:依据对方产生的
R值计算共享密钥,并对比两者的哈希值,R为G1上的一对临时密钥;1)定义发起方计算共享密钥的接口,此接口的功能为:根据rA,RA,RB,g1,IDB,skA计算共享密钥SKA,并计算SKA的哈希值SA与接收到的SB对比;其中rA为[1,N-1]上的随机数;RA为第一阶段发起方A产生的临时密钥;RB为第一阶段响应方B产生的临时密钥;g1用来存放转换为比特串的g;IDB为响应方的标识;skA为发起方的加密私钥;SKA为发起方的计算结果;SA为SKA的哈希值;SB为从响应方B接收到的SKB的哈希值;2)定义响应方计算共享密钥的接口,此接口的功能为:根据rB,RA,RB,g2,IDA,skB计算共享密钥SKB,并计算SKB的哈希值SB与接收到的SA对比;其中rB为[1,N-1]上的随机数;RB为第一阶段响应方B产生的临时密钥;RA为第一阶段发起方A产生的临时密钥;g2用来存放转换为比特串的g;IDA为发起方的标识;skB为响应方的加密私钥;SKB为发起方的计算结果;SB为SKB的哈希值;SA为从发起方A接收到的SKA的哈希值。4.根据权利要求1所述的一种基于标识算法的国密SSL加密方法,其特征在于,所述步骤3使用基于SM9算法的双证书认证体系,在SSL_CTX数据结构和SSL数据结构这两个数据结构之上实现对加密私钥的设置,具体包括:步骤一:对于SSL数据结构,实现对加密私钥设置1)定义SSL1_3_use_enc_PrivateKey(SSL*ssl,EVP_PKEY*pkey)接口以调用OPENSSL的ssl_set_pkey()接口完成对SSL对象加密私钥的设置,其中参数ssl为SSL对象,pkey为待设置的加密私钥,PKEY为私钥类型;2)定义SSL1_3_use_enc_PrivateKey_ASN1(int type,SSL*ssl,const unsigned char*d,long len)接口以完成对编码后的加密私钥的设置;首先调用OPENSSL中的d2i_PrivateKey()函数,依据type类型解码得到加密私钥;然后调用OPENSSL中的SSL1_3_use_enc_PrivateKey()接口完成对SSL对象加密私钥的设置;其中参数type为加密私钥的类型;ssl为SSL对象;d为待解码的私钥;len为待解码私钥的长度;3)定义SSL1_3_use_enc_PrivateKey_file(SSL*ssl,const char*file,int type)接口以通过读取文件的方式完成对SSL对象加密私钥设置;首先调用BIO_r...
【专利技术属性】
技术研发人员:许盛伟,封化民,刘飚,江继军,
申请(专利权)人:北京电子科技学院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。