CN112422507B - 一种基于标识算法的国密ssl加密方法 - Google Patents
一种基于标识算法的国密ssl加密方法 Download PDFInfo
- Publication number
- CN112422507B CN112422507B CN202011116758.3A CN202011116758A CN112422507B CN 112422507 B CN112422507 B CN 112422507B CN 202011116758 A CN202011116758 A CN 202011116758A CN 112422507 B CN112422507 B CN 112422507B
- Authority
- CN
- China
- Prior art keywords
- key
- ssl
- interface
- encryption
- algorithm
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0823—Network architectures or network communication protocols for network security for authentication of entities using certificates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/083—Network architectures or network communication protocols for network security for authentication of entities using passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/16—Implementing security features at a particular protocol layer
- H04L63/166—Implementing security features at a particular protocol layer at the transport layer
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0838—Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3226—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using a predetermined code, e.g. password, passphrase or PIN
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3263—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于标识算法的国密SSL加密方法,包括如下步骤:步骤1:使用设计的EVP接口调用SM9密码算法;步骤2:使用SM9算法进行精简密钥协商;步骤3:基于SM9进行双证书认证;步骤4:基于SM9进行精简握手协议过程;步骤5:调用设计的建立链接口建立基于SM9的SSL链接。本发明签名等所基于的密钥和用户已有标识有关,和传统的基于PKI的加密方法相比,避免了PKI证书管理成本高,CA部署难等问题。同时,改进了国密SSL握手流程滞后的问题,提升了相同加密方法下国密SSL的握手效率。
Description
技术领域
本发明涉及电子政务与商务领域,特别是涉及一种基于标识算法的国密SSL加密方法。
背景技术
随着信息时代的到来,电子政务与电子商务的崛起使人们的生活更加倾向于线上,作为三大核心密码协议之一的SSL/TLS协议为全世界大约80%的线上应用提供数据完整性保护、数据机密性保护和身份认证功能,其重要性不言而喻。历代不同版本的SSL/TLS协议都定义了上百个加密方法,由于算法本身的安全性以及计算效率,实际应用中主流的加密方法屈指可数,大多只有依赖PKI证书才能完成身份认证和密钥交换。然而面对当下变化性强,更新升级速度快以及拥有海量用户的移动互联网应用,PKI证书管理成本之高,CA部署之难等问题使得传统加密方法捉襟见肘。
国家密码管理局2014年发布的《GMT 0024-2014SSL VPN技术规范》标准,在TLS1.1的握手协议中增加了ECC、IBC的认证模式和密钥交换模式,目前江南天安公司的TaSSL以及北京大学的GmSSL开源库都已经实现了基于ECC算法的SSL握手协议,深圳奥联公司自主设计并实现了一款基于SM9标识算法的SSL VPN网关产品,换言之迄今基于国密标准的IBC认证模式和密钥交换模式在SSL协议中仍没有实现。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于标识算法的国密SSL加密方法。此方法中公钥的产生依赖SM9标识算法而不是PKI证书,因此无需颁发和管理PKI证书,在成本和效率上比以往SSL加密方法得到了大大优化。本发明的方法主要包括:握手步骤、密钥协商步骤、建立SSL链接步骤、双证书认证等步骤。
本发明所采用的技术方案为:一种基于标识算法的国密SSL加密方法,包括如下步骤:
步骤1:使用设计的EVP接口调用SM9密码算法;
步骤2:使用SM9算法进行精简密钥协商;
步骤3:基于SM9进行双证书认证;
步骤4:基于SM9进行精简握手协议过程;
步骤5:调用设计的建链接口完成建立基于SM9的SSL链接。
有益效果:
本发明提供一种基于标识的SSL加密方法,也即SSL加密方法中的加解密,采用了IBC体系,简化了在具体安全应用中大量数字证书的管理和交换困难的问题,使安全应用更加易于部署和使用,同时,在具体密码算法方面,使用了基于国密SSL标准的IBC-SM4-SM3和IBSDH-SM4-SM3加密套件。首先,需要完成国密SM9算法的OPENSSL EVP接口封装,并在此基础上设计了基于SM9算法的国密SSL握手协议、双证书认证以及SSL链接建立接口。签名等所基于的密钥和用户已有标识有关,和传统的基于PKI的加密方法相比,避免了PKI证书管理成本高,CA部署难等问题。同时,改进了国密SSL握手流程滞后的问题,提升了相同加密方法下国密SSL的握手效率。
附图说明
图1为SM9加密流程图;
图2为SM9解密流程图;
图3为SM9签名流程图;
图4为SM9验签流程图;
图5为本发明应用场景图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
历代不同版本的SSL/TLS协议都定义了上百个加密方法,而实际应用中大多只有依赖PKI证书才能完成身份认证和密钥交换。然而面对当下变化性强,更新升级速度快以及拥有海量用户的移动互联网应用,PKI证书管理成本之高,CA部署之难等问题使得传统加密方法捉襟见肘。而标识算法实现成本低、效率较高、运营管理方便、无需颁发和管理证书,还可增加时间或固定IP等方式解密信息的安全策略控制。因此,本发明提出一种基于标识的SSL加密方法,具体包括以下步骤:
步骤1:使用设计的EVP接口调用SM9密码算法;
步骤2:使用SM9算法进行精简密钥协商;
步骤3:基于SM9进行双证书认证;
步骤4:基于SM9进行精简握手协议过程;
步骤5:调用设计的建链接口完成建立基于SM9的SSL链接。
具体的,本发明的方法如下:
1.使用OPENSSL中的非对称算法EVP封装SM9密码算法
1.1SSL通信过程中各类密钥的生成方式与管理方法的设计。包括以下步骤:
步骤一:设计各类密钥的生成方式。首先要确定SM9中各密钥对象结构体,其次设计一个KGC功能接口,以完成系统参数组和主密钥对以及用户私钥的生成。
1)确定SM9中各密钥对象结构体,包括SM9主密钥、系统参数结构组、SM9私钥、SM9公钥的结构体。
SM9主密钥结构体:
struct SM9MasterSecret_st{
ASN1_OBJECT*pairing;
ASN1_OBJECT*scheme;
ASN1_OBJECT*hash1;
ASN1_OCTET_STRING*pointPpub;
BIGNUM*masterSecret;
};
系统参数组结构体:
struct SM9PublicParameters_st{
ASN1_OBJECT*pairing;
ASN1_OBJECT*scheme;
ASN1_OBJECT*hash1;
ASN1_OCTET_STRING*pointPpub;
};
SM9私钥结构体:
struct SM9PrivateKey_st{
ASN1_OBJECT*pairing;
ASN1_OBJECT*scheme;
ASN1_OBJECT*hash1;
ASN1_OCTET_STRING*pointPpub;
ASN1_OCTET_STRING*identity;
ASN1_OCTET_STRING*publicPoint;
ASN1_OCTET_STRING*privatePoint;
};
SM9公钥结构体:
struct SM9PublicKey_st{
ASN1_OBJECT*pairing;
ASN1_OBJECT*scheme;
ASN1_OBJECT*hash1;
ASN1_OCTET_STRING*pointPpub;
ASN1_OCTET_STRING*identity;
ASN1_OCTET_STRING*publicPoint;
};
2)设计KGC功能接口,以完成系统参数组和主密钥对以及用户私钥的生成。
系统参数组生成
在SM9各个功能算法中,系统参数组都是固定不变的,各个算法可以复用,所以只要编写一个系统参数生成接口即可,该接口原型为:
SM9PublicParameters*SM9_extract_public_parameters(SM9MasterSecret*msk)主密钥对生成
KGC的主密钥对包括公钥和私钥两个部分,且依据标准,又分为签名主密钥对和加密主密钥对。其实签名密钥对和加密密钥对本质上没有区别,因两者管理方式不同所以加以区分,在实现过程中只需要添加标志区分开来即可。所以对于主密钥对的生成,定义一个接口:
SM9MasterSecret*SM9_generate_master_secret(int pairing,int scheme).
其中pairing参数表示所采用曲线,即sm9bn256曲线;scheme表示该主密钥是用来签名,还是加密。
公钥和私钥生成
实现公钥和私钥的生成时,公钥对于用户是透明的,用户所用的“标识”即为公钥;私钥需要用户保存。在实现生成用户私钥接口之前,还需要实现两个辅助密码函数H1和H2。在SM9标准中,H1的定义为:H1(IDA||hid,N).其中hid表示私钥生成函数识别符(签名0x01、加密0x03、密钥交换0x02);返回一个BIGNUM。H2定义为:H2(M||w,N).其中M表示待签名的消息,w是群GT中的元素,w=gr;返回一个BIGNUM。这两个函数都需要调用密码杂凑函数来完成Hi(Z,n),SM9标准中规定的密码杂凑算法为SM3算法。这两个函数的原型如下:
int SM9_hash1(const EVP_MD*md,BIGNUM**r,
const char*id,size_t idlen,unsigned char hid,
const BIGNUM*range,BN_CTX*ctx);
int SM9_hash2(const EVP_MD*md,BIGNUM**r,
const unsigned char*data,size_t datalen,
const unsigned char*elem,size_t elemlen,
const BIGNUM*range,BN_CTX*ctx).
有了上述辅助密码函数,定义用户私钥生成函数原型为SM9PrivateKey*SM9_extract_private_key(SM9MasterSecret*msk,const char*id,size_t idlen).
主公钥生成
在genkey.c文件中,还需要实现计算主公钥的函数,计算主公钥的主要目的是为了后续SM9功能算法的使用,如数字签名的生成与验证、密钥封装和公钥加密等。主公钥是由主私钥和系统参数结合产生的,所以定义SM9主公钥生成函数原型为SM9PublicKey*SM9PrivateKey_get_public_key(SM9PublicParameters
*mpk,SM9PrivateKey*sk).
步骤二:对IBSDH-SM3-SM4加密方法密钥管理设计。主要包括:
签名主公钥:公开
签名私钥:用户秘密保存
加密主私钥:KGC秘密保存
加密主公钥:公开
加密私钥:用户秘密保存
预主密钥:握手结束后销毁
主密钥:安全保存在本地
会话密钥:当前会话结束后销毁
1.2 SM9签名与验签算法设计。SM9签名对象是经SM3做过摘要的结果,签名值包含h和S两个部分,其中h为密码函数H2的返回值。
SM9公钥算法签名验签如图3、图4所示,包括以下步骤:
步骤一:定义签名值的结构体。签名值的结构体如下:
struct SM9Signature_st{
BIGNUM*h;/*hash*/
ASN1_OCTET_STRING*pointS;/*point over E'(F_p^2)*/
};
步骤二:定义签名与验签接口
1)定义签名接口如下:
int SM9_sign(const unsigned char*data,size_t datalen,
unsigned char*sig,size_t*siglen,
SM9PrivateKey*sk).
其中data为待签名的数据,sig为签名后的结果,sk为签名私钥,签名失败返回0,签名成功返回1。
2)定义验签接口为:
int SM9_verify(const unsigned char*data,size_t datalen,
const unsigned char*sig,size_t siglen,
SM9PublicParameters*mpk,const char*id,size_t idlen)
其中data为待签数据,sig为待验证签名值,mpk为系统参数,id为签名者标识,验签不通过返回0,验签通过返回1。
1.3 SM9公钥加解密算法的设计
SM9公钥算法加解密如图1图2所示,包括以下步骤:
步骤一:根据M9加密结果内部包括C1、C2和C3三个部分,定义加密值结构体。
1)SM9加密值结构体定义:
struct SM9Ciphertext_st{
ASN1_OCTET_STRING*pointC1;/*point over E(F_p)*/
ASN1_OCTET_STRING*c2;/*ciphertext*/
ASN1_OCTET_STRING*c3;/*mac-tag*/
};
步骤二:根据SM9标准文档中描述加解密过程描述定义加解密接口。
1)定义加密接口为:
int SM9_encrypt(int type,
const unsigned char*in,size_t inlen,
unsigned char*out,size_t*outlen,
SM9PublicParameters*mpk,const char*id,size_t idlen).
其中type表示加密明文的方式(0表示序列加密,1表示分组加密),in为待加密数据,out为加密结果,mpk为系统参数,id为加密者标识,加密失败返回0,加密成功返回1。
2)定义SM9解密接口为:
int SM9_decrypt(int type,
const unsigned char*in,size_t inlen,
unsigned char*out,size_t*outlen,
SM9PrivateKey*sk).
其中type为加密明文的方式,in表示密文,out表示解密后的明文,sk为解密私钥,解密失败返回0,解密成功返回1。
1.4 SM9算法的EVP接口封装的设计
SM9公钥算法的EVP封装主要包括两个步骤:一是在evp目录下的公钥算法的封装,该过程主要是将前几节具体实现的SM9算法“告知”给OpenSSL,类似C程序中的函数声明过程;二是实现EVP_PKEY的调用接口。
步骤一:封装在evp目录下的公钥算法。主要是对OpenSSL源码crypto/evp目录下以“p_”开头的文件进行编辑操作,因为密钥封装过程主要调用公钥加解密接口,所以只用修改如下四个文件:
编辑p_enc.c文件,在合适位置添加如下代码:
#ifndef OPENSSL_NO_SM9
if(!(ctx=EVP_PKEY_CTX_new(pkey,NULL))
||!EVP_PKEY_encrypt_init(ctx)){
EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD,ERR_R_EVP_LIB);
goto end;
if(EVP_PKEY_id(pkey)==EVP_PKEY_EC&&EC_GROUP_get_curve_name(EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey)))==NID_sm9bn256v1){
#endif
该部分代码的主要功能是满足EVP公钥加密接口对SM9加密算法的支持。首先创建一个SM9的密钥结构体并利用该结构体初始化加密函数,其次定义加密曲线为SM9曲线。
编辑p_dec.c文件,在合适位置添加如下代码:
#ifndef OPENSSL_NO_SM9
siz=ekl;
if(!(ctx=EVP_PKEY_CTX_new(priv,NULL))
||!EVP_PKEY_decrypt_init(ctx)){
EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD,ERR_R_EVP_LIB);
goto end;
}
if(EVP_PKEY_id(priv)==EVP_PKEY_EC&&EC_GROUP_get_curve_name(EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(priv)))==NID_sm9bn256v1){
#endif
上述代码主要完成EVP公钥解密接口对SM9解密算法的支持。创建SM9密钥结构体并初始化解密函数,其次定义解密曲线为SM9曲线。
编辑p_sign.c文件,在合适位置添加如下代码:
#ifndef OPENSSL_NO_SM9
if(EVP_PKEY_id(pkey)==EVP_PKEY_EC&&EC_GROUP_get_curve_name(EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey)))==NID_sm9bn256v1){
#endif
该部分代码的功能是为了满足EVP数字签名接口对SM9签名算法的支持。签名的对象一般是杂凑之后的结果,对于SM9签名算法,标准中推荐使用SM3摘要算法,p_sign.c会先调用签名初始化函数,这里只需要定义SM9曲线。
编辑p_verify.c文件,在合适位置添加如下代码:
#ifndef OPENSSL_NO_SM9
if(EVP_PKEY_id(pkey)==EVP_PKEY_EC&&EC_GROUP_get_curve_name(
EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey)))==NID_sm9bn256v1){
#endif
该部分代码的功能是为了满足EVP验签接口对SM9验签算法的支持。同上述签名接口,只需要定义验签所用的曲线为SM9曲线。
步骤二:实现SM9算法的EVP_PKEY调用接口。此接口的实现,需要修改OpenSSL源码crypto/ec目录下的ec_pmeth.c文件。具体操作如下:
在EC_PKEY_CTX结构体尾部添加如下代码:
#ifndef OPENSSL_NO_SM9
int ec_scheme;
char*signer_id;
unsigned char*signer_zid;
char*id;
size_t idlen;
SM9PublicParameters*mpk;
#endif
该结构体主要存放了非对称密钥的信息,以供后续EC_PKEY有关接口完成相应的功能。在SM9的密钥信息中,定义了SM9曲线参数、签名者id、公钥加密参数、对方id、id长度以及系统参数。
在pkey_ec_init函数、pkey_ec_copy函数和pkey_ec_cleanup函数中添加对上述变量的初始化、复制或清理操作。
在pkey_ec_sign函数中添加如下代码:
#ifndef OPENSSL_NO_SM9
if(dctx->ec_scheme==NID_sm_scheme)
ret=SM9_sign(tbs,tbslen,sig,&sltmp,ec);
else
#endif
该部分代码的功能是调用在OpenSSL密码算法库中实现的SM9签名算法。
在pkey_ec_verify函数中添加如下代码:
#ifndef OPENSSL_NO_SM9
id=ctx->id
idlen=ctx->idlen
mpk=ctx->SM9PublicParameters
if(dctx->ec_scheme==NID_sm_scheme)
ret=SM9_verify(tbs,tbslen,sig,siglen,mpk,id,idlen);
else
#endif
该部分代码的功能是调用在OpenSSL密码算法库中实现的SM9验签算法。
在pkey_ec_kdf_derive函数中增加对SM9密钥协商的支持。
在ec_pkey_meth数组中添加SM9公钥加密和解密的接口,并在该数组之上静态实现。
2.使用SM9进行密钥协商,包括以下步骤:
步骤一:定义计算公钥的复用函数。研究SM9标准文档中描述的密钥交换算法流程可以发现:在密钥协商中产生随机数并计算G1群上的倍点和计算g1'=e(Ppub-e,P2)=g2均可看成在G1群上生成一对公私钥,因此定义一个复用函数,该函数原型为:
int SM9_generate_key_exchange(unsigned char*R,size_t*Rlen,
BIGNUM*r,unsigned char*gr,size_t*grlen,
const char*peer_id,size_t peer_idlen,
SM9PrivateKey*sk,int initiator).
其中R为G1上的一对临时密钥,为密钥协商第一阶段的结果,后续彼此依照对方产生的R值进行共享密钥的计算;r为[1,N-1]的随机数;gr用来存放转换为比特串的g;peer_id为对方的标识;sk为调用方加密私钥;initiator为发起方。
步骤二:发起方和响应方依据对方产生的R值分别计算共享密钥,并对比两者的哈希值。定义发起方和响应方计算共享密钥的接口。
1)定义发起方计算共享密钥的接口为:
int SM9_compute_share_key_A(unsigned char*SKA,size_t SKAlen,
unsigned char SA[32],/*optional,send to B*/
const unsigned char SB[32],/*optional,recv from B*/
const BIGNUM*rA,
const unsigned char RA[65],
const unsigned char RB[65],
const unsigned char g1[384],
const char*IDB,size_t IDBlen,
SM9PrivateKey*skA).
其中SKA为发起方的计算结果;SA为SKA的哈希值;SB为从响应方B接收到的SKB的哈希值;rA为[1,N-1]上的随机数;RA为第一阶段发起方A产生的临时密钥;RB为第一阶段响应方B产生的临时密钥;g1用来存放转换为比特串的g;IDB为响应方的标识;skA为发起方的加密私钥。
2)定义响应方计算共享密钥的接口为:
int SM9_compute_share_key_B(unsigned char*SKB,size_t SKBlen,
unsigned char SB[32],/*optional,send to A*/
unsigned char SA[32],/*optional,to be compared with recved SA*/
const BIGNUM*rB,
const unsigned char RB[65],
const unsigned char RA[65],
const unsigned char g2[384],
const char*IDA,size_t IDAlen,
SM9PrivateKey*skB).
其中SKB为响应方的计算结果;SB为SKB的哈希值;SA为从发起方A接收到的SKA的哈希值;rA为[1,N-1]上的随机数;RB为第一阶段响应方B产生的临时密钥;RA为第一阶段发起方A产生的临时密钥;g2用来存放转换为比特串的g;IDA为发起方的标识;skB为响应方的加密私钥。
3.基于SM9进行双证书认证
国产密码体系要求使用“双证书”,但是在OpenSSL实现的SSL/TLS中并没有提供支持双证书体系的API,因此需要设计并实现一套支持双证书认证体系的API。
OpenSSL中已经实现了支持TLS1.3协议所需要的API,也就是单证书认证体系的API,将这些接口保留,用作数字签名证书认证接口,并重新设计一套用于加密的接口。为了完成SSL/TLS握手和数据加密过程,OpenSSL在ssl目录下的ssl.h文件中定义了两种核心数据结构:SSL_CTX数据结构和SSL数据结构,其中SSL_CTX数据结构主要用于SSL握手前的环境准备,如设置CA文件和目录、设置SSL握手中的证书文件和私钥、设置协议版本及其他一些SSL握手时的选项。SSL数据结构主要用于SSL握手以及应用数据的传送。这两个核心数据结构所覆盖的整个SSL/TLS通信过程中都需要用到加密密钥,所以需要在这两个数据结构之上实现对加密私钥的设置。包括以下几个步骤:
步骤一:对于SSL数据结构,定义如下接口:
int SSL1_3_use_enc_PrivateKey(SSL*ssl,EVP_PKEY*pkey)
OpenSSL自身静态实现了ssl_set_cert()接口和ssl_set_pkek()接口,分别用于设置SSL或SSL_CTX数据结构所需的数字证书以及对应的私钥。上述接口的主要功能是调用ssl_set_pkey()接口完成对SSL对象加密私钥的设置,其中参数ssl为SSL对象,pkey为待设置的加密私钥。
int SSL1_3_use_enc_PrivateKey_ASN1(int type,SSL*ssl,const unsignedchar*d,long len)
该接口的主要功能是完成对编码后的加密私钥的设置。首先调d2i_PrivateKey()函数,依据type类型解码得到加密私钥;然后调用SSL1_3_use_enc_PrivateKey()接口完成对SSL对象加密私钥的设置。其中参数type为加密私钥的类型,如:EVP_PKEY_SM9;ssl为SSL对象;d为待解码的私钥;len为待解码私钥的长度。
int SSL1_3_use_enc_PrivateKey_file(SSL*ssl,const char*file,int type)
此接口的主要功能是通过读取文件的方式完成对SSL对象加密私钥的设置。首先调用BIO_read_filename()函数读文件,其次调用SSL1_3_use_enc_PrivateKey_ASN1()接口完成对SSL对象加密私钥的设置。其中参数ssl为SSL对象,file为加密私钥所在文件路径,type为加密私钥的类型。
步骤二:对于SSL_CTX数据结构,同样定义如下接口:
int SSL1_3_CTX_use_enc_PrivateKey(SSL_CTX*ctx,EVP_PKEY*pkey)
其功能和实现过程同SSL1_3_use_enc_PrivateKey()接口类似。调用ssl_set_pkey()接口完成对SSL_CTX对象加密私钥的设置,其中参数ctx为SSL_CTX对象,pkey为待设置的加密私钥。
int SSL1_3_CTX_use_enc_PrivateKey_ASN1(int type,SSL_CTX*ctx,constunsigned char*d,long len)
该接口的功能和实现过程同SSL1_3_use_enc_PrivateKey_ASN1()接口类似。首先要调用d2i_PrivateKey()函数,依据type类型解码得到加密私钥,其次调用SSL1_3_CTX_use_enc_PrivateKey()接口完成对SSL_CTX对象加密私钥的设置。其中参数type为加密私钥的类型;ctx为SSL_CTX对象;d为待解码的私钥;len为待解码私钥的长度。
int SSL1_3_CTX_use_enc_PrivateKey_file(SSL_CTX*ctx,const char*file,int type)
此接口的功能和实现过程同SSL1_3_use_enc_PrivateKey_file()接口类似。首先调用BIO_read_filename()函数读文件,其次调用SSL1_3_CTX_use_enc_PrivateKey_ASN1()接口完成对SSL_CTX对象加密私钥的设置。其中参数ctx为SSL_CTX对象,file为加密私钥所在文件路径,type为加密私钥的类型。
步骤三:设计ID参数。
为了满足对标识算法的适配,需要在SSL源码中部分API的参数中添加“char id”,当采用非标识加密方法进行握手时,令该参数为0;采用标识算法进行握手时,则该参数为对方的标识,在完成某个API功能之前都先判断id的值是否为0:如果id的值0,则选择非标识加密方法功能;如果id的值不为0,则当做标识对象参与后续的计算。在整个握手过程中(单向认证),除了服务端对随机数和系统参数的签名使用服务端的签名私钥之外,其他用到的都是加密私钥。
4.基于SM9进行国密SSL握手。
横纵对比(横向对比国际TLS1.1与国密SSL1.1,纵向对比国际TLS1.2与国际TLS1.3)可以发现,在握手流程方面国密SSL1.1并没有任何变化,据此大胆推测,国密SSL1.3的握手流程与TLS1.3的握手流程也不会有任何区别。同时从握手流程、认证方式、会话复用和密钥计算等四个方面纵向对比TLS1.2到TLS1.3的变化发现,其最大的特点是为了保证TLS的前向安全性和握手流程的精简,强制要求密钥协商的算法只能是(EC)DHE、PSK或两者的混合模式,而且TLS1.3删除了一些不安全的密码算法如SHA1,MD5等。对此在国密SSL标准中,需要舍弃一些过时的加密方法如:RSA-SM1-SM3、RSA-SM1-SHA1、RSA-SM4-SM3和RSA-SM4-SHA1.
首先SM9的密钥协商算法能够保证前向安全,其次SM9的密钥协商算法可以在一个RTT的时间内完成协商,也就是SM9的密钥协商算法完全可以适应TLS1.3的握手流程。握手流程设计如下(以一次正常的握手为例,不考虑会话的复用):
1)Client_Hello消息包括:
legacy_version,协议版本号为0x0101。在TLS1.3标准中,为了实现TLS1.2到TLS1.3的过渡,规定协议版本号使用TLS1.2的0x0303。因此在国密SSL中仍使用0x0101。
random,随机数。32字节由安全随机数生成器生成。
cipher_suites,客户端所支持的加密方法列表。
extensions,扩展列表。选择key_share扩展,将客户端临时密钥RA置于其中发送给服务端。
2)Server_Hello消息包括:
version,此字段包含此会话协商的SSL的版本号,TLS1.3是0x0304,暂定国密SSL1.3版本号为0x0102。
random,32字节由安全随机数生成器生成,必须独立于ClientHello.random生成。
cpher_suite,服务器从ClientHello.cipher_suites中的列表中选择的单个加密方法。
extensions,选择key_share扩展,将服务端临时密钥RB置于其中发送给客户端。
3)CertificateRequest消息为证书请求消息,目的是为了满足双向认证的需求。如果服务端要求认证客户端,则应该发送该消息。该消息包括:
certificate_types,要求客户端提供的证书类型,在采用标识加密方法时,该值必须为ibc_params(80)。
certificate_authorities,在采用标识加密方法时,该值为IBC密钥管理中心的信任域名列表。
服务端Certificate消息包括:
ibc_id,服务端的标识。
ibc_parameter,IBC系统参数。
服务端CertificateVerify消息包括:
signed_params,服务端对产生的临时密钥RB以及系统参数的签名值。
客户端Certificate消息与CertificateRequest消息相对应,如果服务端请求客户端证书,客户端发送该消息。
ibc_id,客户端的标识。
ibc_parameter,IBC系统参数。
客户端CertificateVerify消息包括:
signed_params,客户端对客户端和服务端产生的随机数以及系统参数的签名值。
5.建立SSL链接接口的设计
IBSDH-SM3-SM4加密方法在客户端与服务端,使用SM9密钥交换协议。为实现IBSDH-SM3-SM4加密方法,还需要在标准的SSL/TSL协议的基础上增加服务端与客户端独立的API接口(用于建立链接)。包括以下步骤:
步骤一:设计客户端发送SendClientKeyExchange和接受GetServerKeyExchange密钥过程。
1)SendClientKeyExchange过程需要完成以下操作:
生成客户端临时密钥RA;
通过对方标识与服务端发起SM9密钥协商过程;
向服务端发送临时密钥RA。
其中第一步调用SM9_generate_key_exchange()接口,剩余两步由SSL协议自身实现的API完成,定义接口函数为:int ssl1_3_send_client_key_exchange(SSL*ssl)。其中参数ssl为SSL数据结构的一个实例。
2)GetClientKeyExchange过程需要完成如下操作:
提取客户端临时密钥RA,并判断RA是否在曲线G1上;
根据RA计算秘密密钥SKB,并保存。
这两个操作都是调用SM9_compute_shared_key_B()接口完成。定义GetClientKeyExchange接口函数为:int ssl1_3_get_client_key_exchange(SSL*ssl)。参数ssl为SSL数据结构的一个实例。
步骤二:设计服务端发送SendServerKeyExchange和接受GetClientKeyExchange密钥过程。
1)SendServerKeyExchange过程作如下处理:
生成服务端临时密钥RB;
对RB的内容以及系统参数进行签名;
将数字签名结果和服务端临时密钥RB一起发送给客户端。
第一步调用SM9_generate_key_exchange()接口完成;第二步调用SM9_sign()接口完成;第三步由SSL协议自身的API实现。定义该接口函数为:int ssl1_3_send_server_key_exchange(SSL*ssl);其中参数ssl为SSL数据结构的一个实例。
2)GetServerKeyExchange过程包含以下操作:
提取服务端临时密钥RB,并判端RB是否在曲线G1上;
提取签名结果并完成验签,验签不通过握手失败。
根据RB计算秘密密钥SKA,并保存。
其中第一步和第三步调用接口SM9_compute_shared_key_A()完成;第二步调用SM9_verify()接口完成。定义该接口函数为:int ssl1_3_get_server_key_exchange
(SSL*ssl)。参数ssl为SSL数据结构的一个实例
实施例1:使用基于标识算法SSL套件握手
SLL加密方法使用最基础的过程是握手,具体握手流程如下:
1)客户端首先调用SM9_generate_key_exchange接口生成RA,并将RA置于ClientHello消息中发送给服务端。
2)服务端收到ClientHello消息后,先验证RA是否在G1上。如果在,则调用SM9_compute_share_key_B接口计算共享秘密密钥并调用SM9_generate_key_exchange接口生成RB置于ServerHello中发送给客户端;如果不在,则握手失败。
3)客户端接收到ServerHello和CertificateVerify消息后,先用服务端标识对签名值进行验签,以确定服务端的身份是否属实;然后再验证RB是否在G1上,如果在,则调用SM9_compute_share_key_A接口直接计算共享秘密密钥;如果不在,则握手失败。
实施例2:使用基于标识算法SSL套件交换密钥
1)调用SM9_generate_key_exchange()接口生成客户端临时密钥RA;
2)通过对方标识与服务端发起SM9密钥协商过程;
3)向服务端发送临时密钥RA。
4)调用SM9_compute_shared_key_B()接口提取客户端临时密钥RA,并判断RA是否在曲线G1上;
5)调用SM9_compute_shared_key_B()接口根据RA计算秘密密钥SKB,并保存。
6)调用SM9_generate_key_exchange()接口生成服务端临时密钥RB;
7)调用SM9_sign()接口对RB的内容以及系统参数进行签名;
8)将数字签名结果和服务端临时密钥RB一起发送给客户端。
9)调用接口SM9_compute_shared_key_A()提取服务端临时密钥RB,并判端RB是否在曲线G1上;
10)调用SM9_verify()接口提取签名结果并完成验签,验签不通过握手失败。
调用接口SM9_compute_shared_key_A()根据RB计算秘密密钥SKA,并保存。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,且应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (3)
1.一种基于标识算法的国密SSL加密方法,其特征在于,包括如下步骤:
步骤1:使用EVP接口调用SM9密码算法;
步骤2:使用SM9算法进行精简密钥协商;
步骤3:基于SM9进行双证书认证;
步骤4:基于SM9进行精简握手协议过程;
步骤5:调用设计的建立链接口建立基于SM9的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_s ign.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公钥加密和解密的接口,并在该数组之上静态实现;
所述步骤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的哈希值;
所述步骤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 unsignedchar*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_read_filename()函数读文件,其次调用SSL1_3_use_enc_PrivateKey_ASN1()接口完成对SSL对象加密私钥的设置,其中参数ssl为SSL对象,file为加密私钥所在文件路径,type为加密私钥的类型;
步骤二:对于SSL_CTX数据结构,实现对加密私钥设置
1)定义int SSL1_3_CTX_use_enc_PrivateKey(SSL_CTX*ctx,EVP_PKEY*pkey)接口,调用ssl_set_pkey()接口完成对SSL_CTX对象加密私钥的设置,其中参数ctx为SSL_CTX对象,pkey为待设置的加密私钥;
2)定义int SSL1_3_CTX_use_enc_PrivateKey_ASN1(int type,SSL_CTX*ctx,constunsigned char*d,long len)接口;首先要调用d2i_PrivateKey()函数,依据type类型解码得到加密私钥,其次调用SSL1_3_CTX_use_enc_PrivateKey()接口完成对SSL_CTX对象加密私钥的设置;其中参数type为加密私钥的类型;ctx为SSL_CTX对象;d为待解码的私钥;len为待解码私钥的长度;
3)定义int SSL1_3_CTX_use_enc_PrivateKey_file(SSL_CTX*ctx,const char*file,int type)接口;首先调用BIO_read_filename()函数读文件,其次调用SSL1_3_CTX_use_enc_PrivateKey_ASN1()接口完成对SSL_CTX对象加密私钥的设置;其中参数ctx为SSL_CTX对象,file为加密私钥所在文件路径,type为加密私钥的类型;
步骤三:设计ID参数
在SSL源码中部分API的参数中添加字符类型参数:id;当采用非标识加密方法进行握手时,令该参数为0;采用标识算法进行握手时,则该参数为对方的标识,在完成某个API功能之前都先判断id的值是否为0:如果id的值0,则选择非标识加密方法功能;如果id的值不为0,则当做标识对象参与后续的计算;在单向认证整个握手过程中,除了服务端对随机数和系统参数的签名使用服务端的签名私钥之外,其他用到的都是加密私钥。
2.根据权利要求1所述的一种基于标识算法的国密SSL加密方法,其特征在于,所述步骤4基于SM9算法进行精简握手,同时保证前向安全性,握手流程设计如下:
1)客户端发送Client_Hello消息,消息包括:
legacy_version,协议版本号为0x0101;
random,随机数;32字节由安全随机数生成器生成;
cipher_suites,客户端所支持的加密方法列表;
extensions,扩展列表,选择key_share扩展,将客户端临时密钥RA置于其中发送给服务端;
2)服务端发送Server_Hello消息,消息包括:
version,此字段包含此会话协商的SSL的版本号;
random,32字节由安全随机数生成器生成,必须独立于ClientHello.random生成;
cpher_suite,服务器从ClientHello.cipher_suites中的列表中选择的单个加密方法;
extensions,选择key_share扩展,将服务端临时密钥RB置于其中发送给客户端;
3)在第2)步同时,服务端发送:
CertificateRequest消息,即证书请求消息,目的是服务端要求认证客户端,以满足双向认证的需求;消息包括:
certificate_types,要求客户端提供的证书类型,在采用标识加密方法时,该值必须为ibc_params(80);
certificate_authorities,在采用标识加密方法时,该值为IBC密钥管理中心的信任域名列表;
Certificate消息包括:
ibc_id,服务端的标识;
ibc_parameter,IBC系统参数;
CertificateVerify消息包括:
signed_params,服务端对产生的临时密钥RB以及系统参数的签名值;
4)客户端发送
Certificate消息,此消息与CertificateRequest消息相对应,目的是客户端要求认证服务端;消息包括:
ibc_id,客户端的标识;
ibc_parameter,IBC系统参数;
CertificateVerify消息包括:
signed_params,客户端对客户端和服务端产生的随机数以及系统参数的签名值。
3.根据权利要求1所述的一种基于标识算法的国密SSL加密方法,其特征在于,所述步骤5采用SM9算法建立SSL链接,具体步骤如下:
步骤一:设计客户端发送过程SendClientKeyExchange和接受密钥过程GetServerKeyExchange;
1)客户端发送过程SendClientKeyExchange需要完成以下操作:
生成客户端临时密钥RA;
通过对方标识与服务端发起SM9密钥协商过程;
向服务端发送临时密钥RA;
2)接受密钥过程GetClientKeyExchange需要完成如下操作:
提取客户端临时密钥RA,并判断RA是否在曲线G1上;
根据RA计算秘密密钥SKB,并保存;
步骤二:设计服务端发送SendServerKeyExchange过程和接受密钥过程GetClientKeyExchange;
1)服务端发送过程SendServerKeyExchange作如下处理:
生成服务端临时密钥RB;
对RB的内容以及系统参数进行签名;
将数字签名结果和服务端临时密钥RB一起发送给客户端;
2)接受密钥过程GetServerKeyExchange包含以下操作:
提取服务端临时密钥RB,并判端RB是否在曲线G1上;
提取签名结果并完成验签,验签不通过握手失败;
根据RB计算秘密密钥SKA,并保存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011116758.3A CN112422507B (zh) | 2020-10-19 | 2020-10-19 | 一种基于标识算法的国密ssl加密方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011116758.3A CN112422507B (zh) | 2020-10-19 | 2020-10-19 | 一种基于标识算法的国密ssl加密方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112422507A CN112422507A (zh) | 2021-02-26 |
CN112422507B true CN112422507B (zh) | 2023-04-07 |
Family
ID=74840354
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011116758.3A Active CN112422507B (zh) | 2020-10-19 | 2020-10-19 | 一种基于标识算法的国密ssl加密方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112422507B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113364776A (zh) * | 2021-06-04 | 2021-09-07 | 北银金融科技有限责任公司 | 一种验证区块链节点使用国密算法通信的方法和系统 |
CN113783832B (zh) * | 2021-06-18 | 2022-09-23 | 中国地质大学(武汉) | 一种区块链常用密码学算法sdk包的开发制作方法及装置 |
CN113452705B (zh) * | 2021-06-28 | 2023-02-21 | 长春吉大正元信息技术股份有限公司 | 一种加密通信方法、装置、电子设备和存储介质 |
CN113810373B (zh) * | 2021-08-11 | 2023-04-07 | 长沙证通云计算有限公司 | 一种基于国密算法的ceph可视化一键部署方法 |
CN114024745A (zh) * | 2021-11-04 | 2022-02-08 | 格尔软件股份有限公司 | 安全传输层协议检测方法、装置、计算机设备和存储介质 |
CN115292746A (zh) * | 2022-07-28 | 2022-11-04 | 南京国电南自电网自动化有限公司 | 一种应用程序可信编译及运行方法 |
CN115694830A (zh) * | 2022-10-10 | 2023-02-03 | 广州大学 | 多机器人plc控制系统身份认证机制与方法 |
CN118432949B (zh) * | 2024-07-04 | 2024-08-23 | 福建远恩智能技术有限公司 | 一种环保设备通讯协议二次数据加密解密的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009076811A1 (zh) * | 2007-12-14 | 2009-06-25 | Huawei Technologies Co., Ltd. | 密钥协商方法、用于密钥协商的系统、客户端及服务器 |
CN105553662A (zh) * | 2014-10-29 | 2016-05-04 | 航天信息股份有限公司 | 基于标识密码的动态数字版权保护方法和系统 |
CN106060070A (zh) * | 2016-07-01 | 2016-10-26 | 中国人民解放军国防科学技术大学 | 基于身份密码系统的tls握手协议 |
CN111416714A (zh) * | 2020-04-08 | 2020-07-14 | 北京信安世纪科技股份有限公司 | 一种基于ssl协议实现sm9算法中标识交换的方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102124413B1 (ko) * | 2013-12-30 | 2020-06-19 | 삼성에스디에스 주식회사 | 아이디 기반 키 관리 시스템 및 방법 |
-
2020
- 2020-10-19 CN CN202011116758.3A patent/CN112422507B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009076811A1 (zh) * | 2007-12-14 | 2009-06-25 | Huawei Technologies Co., Ltd. | 密钥协商方法、用于密钥协商的系统、客户端及服务器 |
CN105553662A (zh) * | 2014-10-29 | 2016-05-04 | 航天信息股份有限公司 | 基于标识密码的动态数字版权保护方法和系统 |
CN106060070A (zh) * | 2016-07-01 | 2016-10-26 | 中国人民解放军国防科学技术大学 | 基于身份密码系统的tls握手协议 |
CN111416714A (zh) * | 2020-04-08 | 2020-07-14 | 北京信安世纪科技股份有限公司 | 一种基于ssl协议实现sm9算法中标识交换的方法和系统 |
Non-Patent Citations (2)
Title |
---|
《GM/T 0024-2014 SSL VPN技术规范》;国家密码管理局;《GM/T 0024-2014 SSL VPN技术规范》;20140213;第1-22页 * |
在自己的程序中调用SM9算法;guanzhi;《URL:https://github.com/guanzhi/GmSSL/issues/》;20190302;第1页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112422507A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112422507B (zh) | 一种基于标识算法的国密ssl加密方法 | |
CN108650227B (zh) | 基于数据报安全传输协议的握手方法及系统 | |
KR100319256B1 (ko) | 통신 프로토콜 운용 방법 | |
CN101459506B (zh) | 密钥协商方法、用于密钥协商的系统、客户端及服务器 | |
US7584505B2 (en) | Inspected secure communication protocol | |
CN110995414B (zh) | 基于国密算法在tls1_3协议中建立通道的方法 | |
CN109302369B (zh) | 一种基于密钥验证的数据传输方法及装置 | |
US20030163700A1 (en) | Method and system for user generated keys and certificates | |
US20080130895A1 (en) | Method and System for Deploying Advanced Cryptographic Algorithms | |
US20010023482A1 (en) | Security protocol | |
WO2019178942A1 (zh) | 一种进行ssl握手的方法和系统 | |
WO2007140665A1 (fr) | Système et procédé d'authentification de sécurité de connexion authentique basés sur cpk | |
CN112104453B (zh) | 一种基于数字证书的抗量子计算数字签名系统及签名方法 | |
JP2017536776A (ja) | ネットワーク機密データの平文の収集方法及びシステム | |
CN115314214B (zh) | 一种基于支持硬件加速国密算法的tls协议实现方法 | |
CN112332986B (zh) | 一种基于权限控制的私有加密通信方法及系统 | |
CN110912686A (zh) | 一种安全通道的密钥的协商方法及系统 | |
CN116684093B (zh) | 身份认证与密钥交换方法及系统 | |
CN108040071B (zh) | 一种VoIP音视频加密密钥动态切换方法 | |
CN115801223A (zh) | 一种基于ca证书的标识密钥体系与pki体系兼容方法 | |
CN114629646A (zh) | 基于混合后量子密钥封装和协商的安全传输方法及系统 | |
CN114338648A (zh) | 一种基于国密算法的sftp多端文件安全传输的方法及系统 | |
CN116366262A (zh) | 双SSL证书web服务器设置方法和web服务系统 | |
CN114707158A (zh) | 基于tee的网络通信认证方法以及网络通信认证系统 | |
Shaikh et al. | A survey on SSL packet structure |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |