用户控制服务器端密钥可靠使用的方法转让专利

申请号 : CN202311380131.2

文献号 : CN117118759B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 尹才敏杨飞陈燕晏民曹吕俊黄晶星

申请人 : 四川省数字证书认证管理中心有限公司

摘要 :

本发明公开了一种用户控制服务器端密钥可靠使用的方法,涉及信息安全行业PKI电子认证、电子签名与云计算技术融合技术领域,包括:用户身份认证:用户向CA机构提交证书注册申请,CA机构认证用户身份;云签系统密钥生成:云签系统在系统初始化时产生系统主密钥SMK和中间密钥KEK;用户密钥生成:用户在云签系统中生成签名密钥对;用户在云签系统中进行消息签名操作;对消息进行验签;对待加密明文消息进行加密;用户在云签系统中进行消息解密操作;本发明在不降低密钥安全性的前提下提升了用户体验。

权利要求 :

1.一种用户控制服务器端密钥可靠使用的方法,其特征在于,包括以下步骤:

S100、用户身份认证:用户向CA机构提交证书注册申请,CA机构认证用户身份;所述步骤S100具体包括以下步骤:S101、用户注册:用户访问CA机构的CA系统证书注册页面,用户输入唯一身份标识UniqueID及其他证照信息,提交证书注册申请;

S102、核验用户身份:CA系统对用户身份进行实名认证和身份核验,核验通过后,通知用户设置签名私钥生成口令PassWord;

S103、加密隐私数据:CA系统对唯一身份标识UniqueID做HASH运算得到用户唯一身份特征值HashedUniqueID,HashedUniqueID=HASH(UniqueID);对签名私钥生成口令PassWord做HMAC运算得到用户私钥生成口令特征值HashedPassWord,HashedPassWord=HMAC(UniqueID,PassWord);

S104、数据存储:CA系统将用户唯一身份特征值HashedUniqueID、用户私钥生成口令特征值HashedPassWord存储到自身数据库中;

S200、云签系统密钥生成:云签系统在系统初始化时产生系统主密钥SMK和中间密钥KEK;

S300、用户密钥生成:用户在云签系统中生成签名密钥对,所述签名密钥对包括签名私钥SignPrivateKey和签名公钥SignPublicKey;

S400、用户在云签系统中进行消息签名操作;

S500、利用签名公钥SignPublicKey对消息进行验签;

S600、对待加密明文消息PlainText进行加密;

S700、用户在云签系统中进行消息解密操作。

2.根据权利要求1所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S200具体包括以下步骤:S201、产生主密钥SMK:云签系统调用服务器密码机对称密钥产生接口产生内部对称密钥,即主密钥SMK;

S202、产生中间密钥KEK:云签系统调用服务器密码机对称密钥产生接口产生外部对称密钥,即中间密钥KEK;

S203、加密中间密钥KEK:云签系统调用服务器密码机对称加密接口,使用主密钥SMK对称加密中间密钥KEK,得到EncKEK,EncKEK=SymmEncrypt(SMK,KEK);

S204、数据存储:云签系统将EncKEK存储到自身数据库中。

3.根据权利要求2所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S300具体包括以下步骤:S301、用户输入身份信息:用户访问云签系统用户密钥生成页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;

S302、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);

S303、核验用户身份:云签系统调用CA系统接口验证用户身份信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份验证结果;

S304、产生密钥因子:若CA系统返回验证成功,云签系统调用服务器密码机为用户产生随机数RandomNumber,作为用户签名密钥因子,随机数RandomNumber用于派生签名私钥SignPrivateKey;

S305、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥,即主密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber);

S306、计算签名公钥和证书请求:云签系统基于用户签名私钥SignPrivateKey生成用户签名公钥SignPublicKey和证书请求CSR;

S307、申请用户证书:云签系统调用CA系统接口为用户申请证书,传入

HashedUniqueID、证书请求CSR和EncKEK,CA系统为用户签发证书并在数据库用户表中存储HashedUniqueID、证书请求CSR、EncKEK及证书信息,CA系统返回用户签名证书SignCert、用户加密证书EncCert、用户加密密钥数字信封EncKeyEnvelope;

S308、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);

S309、加密密钥因子:云签系统使用中间密钥KEK对随机数RandomNumber对称加密得到EncRandomNumber=SymmEncrypt(KEK,RandomNumber);

S310、数据存储:云签系统将HashedUniqueID、EncRandomNumber、SignCert、EncCert、EncKeyEnvelope存储到自身数据库密钥表中。

4.根据权利要求3所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S400具体包括以下步骤:S401、输入用户身份信息:用户访问云签系统需要进行签名的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;

S402、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);

S403、核验用户身份:云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份及证书状态验证结果;

S404、用户确认待签名消息:若CA系统返回验证成功,云签系统提示用户确认待签名消息OriginalText是否有误;

S405、查询密钥因子:若用户确认OriginalText无误,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、SignCert;

S406、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);

S407、解密密钥因子:云签系统使用KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber);

S408、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber);

S409、对消息进行签名:云签系统调用服务器密码机签名接口使用签名私钥SignPrivateKey对待签名消息OriginalText计算签名值SignValue,SignValue=Sign(SignPrivateKey,SignAlg,OriginalText),其中,SignAlg为签名算法;

S410、数据存储:云签系统将用户签名证书SignCert、待签名消息OriginalText、签名值SignValue存储到自身数据库签名表中。

5.根据权利要求4所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S500具体如下:在需要验证签名的业务场景,相关依赖方访问云签系统获取已签名数据包,从签名数据包的用户签名证书SignCert导出签名公钥SignPublicKey完成验签,验签结果=VerifySign(SignPublicKey,SignAlg,OriginalText,SignValue)。

6.根据权利要求4或5所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S600具体如下:在需要消息加密的业务场景,相关依赖方访问云签系统获取用户加密证书EncCert,从用户加密证书EncCert导出公钥EncPublicKey对待加密明文消息PlainText使用EncPublicKey加密,加密结果为密文消息CipherText,CipherText=Encrypt(EncPublicKey,PlainText)。

7.根据权利要求6所述的用户控制服务器端密钥可靠使用的方法,其特征在于,所述步骤S700具体包括以下步骤:S701、输入用户身份信息:用户访问云签系统需要进行解密的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;

S702、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);

S703、核验用户身份:云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份及证书状态验证结果;

S704、查询密钥因子:若CA系统返回验证成功,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、EncKeyEnvelope;

S705、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);

S706、解密密钥因子:云签系统使用中间密钥KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber);

S707、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥,即主密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber);

S708、解密加密私钥:云签系统调用服务器密码机数据解密接口,使用签名私钥SignPrivateKey对用户加密密钥数字信封EncKeyEnvelope进行解密,得到加密密钥的私钥EncPrivateKey,EncPrivateKey=Decrypt(SignPrivateKey, EncKeyEnvelope);

S709、解密加密消息:云签系统调用服务器密码机数据解密接口,使用加密私钥EncPrivateKey对密文消息CipherText进行解密,得到明文消息PlainText,PlainText=Decrypt(EncPrivateKey,CipherText)。

说明书 :

用户控制服务器端密钥可靠使用的方法

技术领域

[0001] 本发明涉及信息安全行业PKI电子认证、电子签名与云计算技术融合技术领域,特别是一种用户控制服务器端密钥可靠使用的方法。

背景技术

[0002] 在基于云计算的PKI电子认证、电子签名应用场景中,由于用户无法使用终端USBKEY密码介质,PKI电子认证、电子签名服务机构需为证书用户提供签名密钥托管服务,当前常用技术路线是由PKI电子认证服务机构(简称:CA机构)部署一套密钥管理系统(简称:KMS),为证书用户代理产生签名私钥及证书请求,由数字证书认证系统(简称:CA系统)为用户签发数字证书,在需要签名的操作环节,互联网应用服务器通过访问KMS接口调取用户签名私钥为用户代理签名。
[0003] 当前常用技术路线主要存在以下缺陷:
[0004] (1)KMS在为用户产生签名私钥及证书请求时,用户没有参与到该环节,用户私钥数据没有依托用户私有秘密信息参与计算来产生,KMS在调用用户签名私钥做数字签名时,也没有依托用户私有秘密信息参与计算,不能确保获得了用户授权许可。
[0005] (2)用户私钥存储、访问控制的安全性较差,一旦KMS系统出现黑客入侵或系统管理员有恶意行为,很难避免用户的私钥不被恶意调用。

发明内容

[0006] 为解决现有技术中存在的问题,本发明的目的是提供一种用户控制服务器端密钥可靠使用的方法,本发明在不降低密钥安全性的前提下提升了用户体验。
[0007] 为实现上述目的,本发明采用的技术方案是:一种用户控制服务器端密钥可靠使用的方法,包括以下步骤:
[0008] S100、用户身份认证:用户向CA机构提交证书注册申请,CA机构认证用户身份;
[0009] S200、云签系统密钥生成:云签系统在系统初始化时产生系统主密钥SMK和中间密钥KEK;
[0010] S300、用户密钥生成:用户在云签系统中生成签名密钥对,所述签名密钥对包括签名私钥SignPrivateKey和签名公钥SignPublicKey;
[0011] S400、用户在云签系统中进行消息签名操作;
[0012] S500、利用签名公钥SignPublicKey对消息进行验签;
[0013] S600、对待加密明文消息PlainText进行加密;
[0014] S700、用户在云签系统中进行消息解密操作。
[0015] 作为本发明的进一步改进,所述步骤S100具体包括以下步骤:
[0016] S101、用户注册:用户访问CA机构的CA系统证书注册页面,用户输入唯一身份标识UniqueID及其他证照信息,提交证书注册申请。
[0017] S102、核验用户身份:CA系统对用户身份进行实名认证和身份核验,核验通过后,通知用户设置签名私钥生成口令PassWord;
[0018] S103、加密隐私数据:CA系统对唯一身份标识UniqueID做HASH运算得到用户唯一身份特征值HashedUniqueID,HashedUniqueID=HASH(UniqueID);对签名私钥生成口令PassWord做HMAC运算得到用户私钥生成口令特征值HashedPassWord,HashedPassWord=HMAC(UniqueID,PassWord);
[0019] S104、数据存储:CA系统将用户唯一身份特征值HashedUniqueID、用户私钥生成口令特征值HashedPassWord存储到自身数据库中。
[0020] 作为本发明的进一步改进,所述步骤S200具体包括以下步骤:
[0021] S201、产生主密钥SMK:云签系统调用服务器密码机对称密钥产生接口产生内部对称密钥,即主密钥SMK;
[0022] S202、产生中间密钥KEK:云签系统调用服务器密码机对称密钥产生接口产生外部对称密钥,即中间密钥KEK;
[0023] S203、加密中间密钥KEK:云签系统调用服务器密码机对称加密接口,使用主密钥SMK对称加密中间密钥KEK,得到EncKEK,EncKEK=SymmEncrypt(SMK,KEK);
[0024] S204、数据存储:云签系统将EncKEK存储到自身数据库中。
[0025] 作为本发明的进一步改进,所述步骤S300具体包括以下步骤:
[0026] S301、用户输入身份信息:用户访问云签系统用户密钥生成页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;
[0027] S302、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);
[0028] S303、核验用户身份:云签系统调用CA系统接口验证用户身份信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份验证结果;
[0029] S304、产生密钥因子:若CA系统返回验证成功,云签系统调用服务器密码机为用户产生随机数RandomNumber,作为用户签名密钥因子,随机数RandomNumber用于派生签名私钥SignPrivateKey;
[0030] S305、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥,即主密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber)。
[0031] S306、计算签名公钥和证书请求:云签系统基于用户签名私钥SignPrivateKey生成用户签名公钥SignPublicKey和证书请求CSR;
[0032] S307、申请用户证书:云签系统调用CA系统接口为用户申请证书,传入HashedUniqueID、证书请求CSR和EncKEK,CA系统为用户签发证书并在数据库用户表中存储HashedUniqueID、证书请求CSR、EncKEK及证书信息,CA系统返回用户签名证书SignCert、用户加密证书EncCert、用户加密密钥数字信封EncKeyEnvelope;
[0033] S308、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);
[0034] S309、加密密钥因子:云签系统使用中间密钥KEK对随机数RandomNumber对称加密得到EncRandomNumber=SymmEncrypt(KEK,RandomNumber);
[0035] S310、数据存储:云签系统将HashedUniqueID、EncRandomNumber、SignCert、EncCert、EncKeyEnvelope存储到自身数据库密钥表中。
[0036] 作为本发明的进一步改进,所述步骤S400具体包括以下步骤:
[0037] S401、输入用户身份信息:用户访问云签系统需要进行签名的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;
[0038] S402、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);
[0039] S403、核验用户身份:云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份及证书状态验证结果;
[0040] S404、用户确认待签名消息:若CA系统返回验证成功,云签系统提示用户确认待签名消息OriginalText是否有误;
[0041] S405、查询密钥因子:若用户确认OriginalText无误,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、SignCert;
[0042] S406、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);
[0043] S407、解密密钥因子:云签系统使用KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber);
[0044] S408、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber)。
[0045] S409、对消息进行签名:云签系统调用服务器密码机签名接口使用签名私钥SignPrivateKey对待签名消息OriginalText计算签名值SignValue,SignValue=Sign(SignPrivateKey,SignAlg,OriginalText),其中,SignAlg为签名算法;
[0046] S410、数据存储:云签系统将用户签名证书SignCert、待签名消息OriginalText、签名值SignValue存储到自身数据库签名表中。
[0047] 作为本发明的进一步改进,所述步骤S500具体如下:
[0048] 在需要验证签名的业务场景,相关依赖方访问云签系统获取已签名数据包,从签名数据包的用户签名证书SignCert导出签名公钥SignPublicKey完成验签,验签结果=VerifySign(SignPublicKey,SignAlg,OriginalText,SignValue)。
[0049] 作为本发明的进一步改进,所述步骤S600具体如下:
[0050] 在需要消息加密的业务场景,相关依赖方访问云签系统获取用户加密证书EncCert,从用户加密证书EncCert导出公钥EncPublicKey对待加密明文消息PlainText使用EncPublicKey加密,加密结果为密文消息CipherText,CipherText=Encrypt(EncPublicKey,PlainText)。
[0051] 作为本发明的进一步改进,所述步骤S700具体包括以下步骤:
[0052] S701、输入用户身份信息:用户访问云签系统需要进行解密的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;
[0053] S702、加密隐私数据:云签系统对唯一身份标识UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对私钥生成口令PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord);
[0054] S703、核验用户身份:云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识参数,CA系统在数据库中进行存储并返回用户身份及证书状态验证结果;
[0055] S704、查询密钥因子:若CA系统返回验证成功,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、EncKeyEnvelope;
[0056] S705、解密中间密钥KEK:云签系统调用服务器密码机对称解密接口,使用主密钥SMK对称解密EncKEK得到KEK,KEK=SymmDecrypt(SMK,EncKEK);
[0057] S706、解密密钥因子:云签系统使用中间密钥KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber);
[0058] S707、计算签名私钥:云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥,即主密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber);
[0059] S708、解密加密私钥:云签系统调用服务器密码机数据解密接口,使用签名私钥SignPrivateKey对用户加密密钥数字信封EncKeyEnvelope进行解密,得到加密密钥的私钥EncPrivateKey,EncPrivateKey=Decrypt(SignPrivateKey, EncKeyEnvelope);
[0060] S709、解密加密消息:云签系统调用服务器密码机数据解密接口,使用加密私钥EncPrivateKey对密文消息CipherText进行解密,得到明文消息PlainText,PlainText=Decrypt(EncPrivateKey,CipherText)。
[0061] 本发明的有益效果是:
[0062] 1、本发明采用将用户唯一身份标识特征值、私有秘密信息及依托服务器密码机产生的真随机数三个数据组合形成用户密钥因子,通过服务器密码机内置密钥及HMAC算法计算产生用户签名私钥,确保用户在关键的密钥生成、数字签名、消息加密环节中,必须通过CA机构的身份核验,并出示注册时设置的私有秘密信息,同时需通过服务器密码机才能计算出签名私钥,确保云计算场景中的私钥产生、调用全过程仅由用户控制和安全可靠。
[0063] 2、本发明由于云签系统不存储用户签名私钥,仅存储部分密钥因子的密文,即便云签系统数据库被拖库,在没有用户私有秘密信息和服务器密码机硬件的情况下,无法计算出用户签名私钥,其安全性很高。
[0064] 3、本发明“用户注册、身份认证、证书状态验证”由CA系统负责,可有效避免用户身份认证出错或被忽略、用户使用弱口令和证书状态忽略验证等问题;同时“私钥生成、私钥调用”由云签系统负责,支持云签系统在多个信息系统密码应用单位本地部署,可实现用户在跨系统使用不同云服务时,用户签名私钥“一系统一密”,增强了密钥安全性。
[0065] 4、本发明有别于常规的KMS、签名验签等系统,不需要在用户PC电脑或手机上安装任何软硬件密码介质或中间件,适用于多种人机交互应用场景(小程序、H5页面、APP等)的数字签名和加解密应用,为用户提供了安全、便捷访问自己专属且受控的云端密钥,在不降低密钥安全性的前提下提升了用户体验。

附图说明

[0066] 图1为本发明实施例的结构框图;
[0067] 图2为本发明实施例的流程图。

具体实施方式

[0068] 下面结合附图对本发明的实施例进行详细说明。
[0069] 实施例
[0070] 本实施例采用将用户唯一身份标识特征值、私有秘密信息及服务器密码机产生的真随机数进行组合计算派生出用户专有私钥,并通过加密输出存储到云签名服务系统(简称:云签系统)中,该云签系统可由非CA机构的其他网络运营者(简称:云签机构)运营,云签机构与CA机构、用户形成三方协同机制,在用户签名私钥产生、数字签名、消息解密等关键操作必须由三方系统协同才能完成,缺少任一一方都无法进行相应操作,以确保云计算场景中的用户私钥产生、计算、存储全过程的安全可靠、用户可控。
[0071] 具体地,如图1所示,本实施例由面向用户的人机交互应用程序(比如:小程序、H5页面、APP等)、云签系统、CA系统和服务器密码机构成。
[0072] 用户通过人机交互应用程序(比如:微信/支付宝小程序、H5页面、PC/手机APP等)访问CA系统注册用户信息、身份认证;云签系统初始化系统密钥,为用户生成用户密钥,调用CA系统申请证书;云签系统为用户提供数字签名、消息解密等关键操作。
[0073] 如图2所示,本实施例的用户控制服务器端密钥可靠使用的方法,包括以下步骤:
[0074] S100:用户身份认证。
[0075] 用户向CA机构提交证书注册申请,CA机构认证用户身份。
[0076] S101:用户注册。用户访问CA机构的CA系统证书注册页面,用户输入唯一身份标识UniqueID(比如:个人身份证号码或机构统一社会信用代码)及其他证照信息,提交证书注册申请。
[0077] S102:核验用户身份。CA系统对用户身份进行实名认证和身份核验,核验通过后,通知用户设置签名私钥生成口令PassWord。
[0078] S103:加密隐私数据。CA系统对UniqueID做HASH运算得到用户唯一身份特征值HashedUniqueID,HashedUniqueID=HASH(UniqueID);对PassWord做HMAC运算得到用户私钥生成口令特征值HashedPassWord,HashedPassWord=HMAC(UniqueID,PassWord)。
[0079] S104:数据存储。CA系统将“HashedUniqueID、HashedPassWord”存储到自身数据库中。
[0080] S200:云签系统密钥生成。
[0081] 云签系统在系统初始化时产生系统主密钥SMK和中间密钥KEK。
[0082] S201:产生主密钥SMK。云签系统调用服务器密码机对称密钥产生接口产生内部对称密钥SMK(比如:索引值为1的内置密钥)。
[0083] S202:产生中间密钥KEK。云签系统调用服务器密码机对称密钥产生接口产生外部对称密钥KEK。
[0084] S203:加密中间密钥KEK。云签系统调用服务器密码机对称加密接口,使用SMK对称加密KEK,得到EncKEK,EncKEK=SymmEncrypt(SMK,KEK)。
[0085] S204:数据存储。云签系统将EncKEK存储到自身数据库中。
[0086] S300:用户密钥生成。
[0087] 用户在云签系统中生成签名密钥对,签名密钥对由签名私钥SignPrivateKey和签名公钥SignPublicKey构成。
[0088] S301:用户输入身份信息。用户访问云签系统用户密钥生成页面,输入唯一身份标识UniqueID和私钥生成口令PassWord。
[0089] S302:加密隐私数据。云签系统对UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord)。
[0090] S303:核验用户身份。云签系统调用CA系统接口验证用户身份信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识(比如:密钥生成)等参数,CA系统在数据库中存储“HashedUniqueID、HashedPassWord、EncKEK、用户密钥操作标识”等信息,返回用户身份验证结果。
[0091] S304:产生密钥因子。若CA系统返回验证成功,云签系统调用服务器密码机为用户产生随机数RandomNumber,作为用户签名密钥因子,RandomNumber用于派生签名私钥SignPrivateKey。
[0092] S305:计算签名私钥。云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber)。
[0093] S306:计算签名公钥和证书请求。云签系统基于用户签名私钥SignPrivateKey生成用户签名公钥SignPublicKey和证书请求CSR。
[0094] S307:申请用户证书。云签系统调用CA系统接口为用户申请证书,传入HashedUniqueID、证书请求CSR、EncKEK等,CA系统为用户签发证书并在数据库用户表中存储HashedUniqueID、证书请求CSR、EncKEK及证书信息,CA系统返回用户签名证书SignCert、用户加密证书EncCert、用户加密密钥数字信封EncKeyEnvelope。
[0095] S308:解密中间密钥KEK。云签系统调用服务器密码机对称解密接口,使用SMK对称解密EncKEK,得到KEK,KEK=SymmDecrypt(SMK,EncKEK)。
[0096] S309:加密密钥因子。云签系统使用KEK对RandomNumber对称加密得到EncRandomNumber=SymmEncrypt(KEK,RandomNumber)。
[0097] S310:数据存储。云签系统将HashedUniqueID、EncRandomNumber、SignCert、EncCert、EncKeyEnvelope存储到自身数据库密钥表中。
[0098] S400:消息签名操作。
[0099] 用户在云签系统中进行消息签名操作。
[0100] S401:输入用户身份信息。用户访问云签系统需要进行签名的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;
[0101] S402:加密隐私数据。云签系统对UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord)。
[0102] S403:核验用户身份。云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识(比如:签名操作)参数,CA系统在数据库中存储“HashedUniqueID、HashedPassWord、EncKEK、用户密钥操作标识”等信息,返回用户身份及证书状态验证结果。
[0103] S404:用户确认待签名消息。若CA系统返回验证成功,云签系统提示用户确认待签名原文消息OriginalText是否有误。
[0104] S405:查询密钥因子。若用户确认OriginalText无误,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、SignCert。
[0105] S406:解密中间密钥KEK。云签系统调用服务器密码机对称解密接口,使用SMK对称解密EncKEK,得到KEK,KEK=SymmDecrypt(SMK,EncKEK)。
[0106] S407:解密密钥因子。云签系统使用KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber)。
[0107] S408:计算签名私钥。云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber)。
[0108] S409:对消息进行签名。云签系统调用服务器密码机签名接口使用签名私钥SignPrivateKey对待签名消息OriginalText计算签名值SignValue,SignValue=Sign(SignPrivateKey,SignAlg,OriginalText),SignAlg为签名算法(比如:SM3WithSM2,下同)。
[0109] S410:数据存储。云签系统将SignCert、OriginalText、SignValue存储到自身数据库签名表中。
[0110] S500:消息验签操作。
[0111] 在需要验证签名的业务场景,相关依赖方可访问云签系统获取已签名数据包“SignCert、OriginalText、SignValue”,从SignCert导出公钥SignPublicKey,按照常规方式即可完成验签,验签结果=VerifySign(SignPublicKey,SignAlg,OriginalText,SignValue)。
[0112] S600:消息加密操作。
[0113] 在需要消息加密的业务场景,相关依赖方可访问云签系统获取用户加密证书EncCert,从EncCert导出公钥EncPublicKey,按照常规方式对待加密明文消息PlainText使用EncPublicKey加密,加密结果为密文消息CipherText,CipherText=Encrypt(EncPublicKey,PlainText)。
[0114] S700:消息解密操作。
[0115] 用户在云签系统中进行消息解密操作。
[0116] S701:输入用户身份信息。用户访问云签系统需要进行解密的页面,输入唯一身份标识UniqueID和私钥生成口令PassWord;
[0117] S702:加密隐私数据。云签系统对UniqueID做HASH运算得到HashedUniqueID=HASH(UniqueID);云签系统对PassWord做HMAC运算得到HashedPassWord=HMAC(UniqueID,PassWord)。
[0118] S703:核验用户身份。云签系统调用CA系统接口验证用户身份及证书状态信息是否有效,传入HashedUniqueID、HashedPassWord、EncKEK和用户密钥操作标识(比如:解密操作)参数,CA系统在数据库中存储“HashedUniqueID、HashedPassWord、EncKEK、用户密钥操作标识”等信息,返回用户身份及证书状态验证结果。
[0119] S704:查询密钥因子。若CA系统返回验证成功,云签系统根据HashedUniqueID在数据库中查询EncKEK、EncRandomNumber、EncKeyEnvelope。
[0120] S705:解密中间密钥KEK。云签系统调用服务器密码机对称解密接口,使用SMK对称解密EncKEK,得到KEK,KEK=SymmDecrypt(SMK,EncKEK)。
[0121] S706:解密密钥因子。云签系统使用KEK对EncRandomNumber对称解密得到RandomNumber=SymmDecrypt(KEK,EncRandomNumber)。
[0122] S707:计算签名私钥。云签系统调用服务器密码机HMAC接口,将服务器密码机内部对称密钥SMK作为密钥参数输入,将用户唯一身份特征值HashedUniqueID、私钥生成口令PassWord、随机数RandomNumber三者组合后作为消息参数输入,计算用户签名私钥SignPrivateKey,SignPrivateKey=HMAC(SMK,HashedUniqueID||PassWord||RandomNumber)。
[0123] S708:解密加密私钥。云签系统调用服务器密码机数据解密接口,使用签名私钥SignPrivateKey对用户加密密钥数字信封EncKeyEnvelope进行解密,得到加密密钥的私钥EncPrivateKey,EncPrivateKey=Decrypt(SignPrivateKey, EncKeyEnvelope)。
[0124] S709:解密加密消息。云签系统调用服务器密码机数据解密接口,使用加密私钥EncPrivateKey对密文消息CipherText进行解密,得到明文消息PlainText,PlainText=Decrypt(EncPrivateKey,CipherText)。
[0125] 以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。