[发明专利]一种基于SM2算法的密钥分量托管方法和系统有效
申请号: | 201710253749.0 | 申请日: | 2017-04-18 |
公开(公告)号: | CN106961336B | 公开(公告)日: | 2019-11-26 |
发明(设计)人: | 熊荣华;其他发明人请求不公开姓名 | 申请(专利权)人: | 北京百旺信安科技有限公司;熊荣华 |
主分类号: | H04L9/32 | 分类号: | H04L9/32;H04L9/08 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100094 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 一种基于SM2公钥密码算法的密钥分量托管方法和系统,属于信息安全领域。由N(N≥1)个不同的密钥分量托管系统构成一个密钥托管网络,采用密钥分割存储和多方联合计算的方式,将用户的SM2私钥分割为N+1个分量,由用户和N个不同的密钥分量托管系统分散保存,在需要使用私钥时,由用户和N个密钥分量托管系统联合完成相关计算。在用户密钥生成和使用阶段,密钥分量托管系统通过标识映射算法产生用户私钥分量,但不实际保存,可以大大减小系统建设规模,节约系统投资成本,提高系统运行效率和服务水平。 | ||
搜索关键词: | 一种 基于 sm2 算法 密钥 分量 托管 方法 系统 | ||
【主权项】:
1.一种基于SM2公钥密码算法的密钥分量托管方法,其特征在于:应用于由N(N≥1)个不同的密钥分量托管系统所构成的一个密钥托管网络;所述方法包括:/n采用密钥分割存储和多方联合计算的方式,将用户端的SM2私钥分割为N+1个分量;/n由用户端和N个不同的密钥分量托管系统分散保存;/n在需要使用私钥对一个消息作数字签名时,由用户端和N个密钥分量托管系统联合完成签名计算,其中,计算形成的签名可使用用户端的公钥进行验证;/n在需要对用户端公钥加密后的密文进行解密时,由用户端和N个密钥分量托管系统联合完成对所述密文的解密计算,实现对所述密文的完整解密;/n所述方法还包括:/n在每个密钥分量托管系统中生成一个主密钥;/n通过一种标识映射算法,在用户密钥生成阶段,密钥分量托管系统采用所生成的主密钥对用户提供的识别信息进行分散映射,生成对应的私钥分量;其中,所述识别信息为:用户标识、用户设置的PIN码和用户端设备信息的一种组合或叠加;/n在用户端需使用自已的私钥分量时,按所述标识映射算法恢复用户端的私钥分量后,再进行相关密码运算;/n其中,本发明所依托的密码算法为国密SM2公钥密码算法,与SM2相关的椭圆曲线参数按国密SM2算法标准设置,有限域上的椭圆曲线记为E(Fq),其基点记为G,G的阶记为n;本发明涉及到的实体包括用户端和N(N≥1)个密钥分量托管系统,N个密钥分量托管系统分别记为PKE[1],PKE[2],…,PKE[N];每个用户端针对N个密钥分量托管系统,分别设置N个识别信息UID[1],UID[2],…,UID[N],而用户端数量不限;在系统运行初期,密钥分量托管系统PKE[i]随机生成1个系统主密钥MK[i]和1对SM2非对称密钥,系统主密钥MK[i]也可以用非对称密钥的私钥充当;密钥分量托管系统PKE[i]选取一个密钥分量映射生成函数g(x,y),对任意用户端,通过对系统主密钥MK[i]和用户识别信息UID[i]的映射可生成一个私钥分量di=g(MK[i],UID[i]),且di∈[1,n-1];通过以下步骤可完成用户签名密钥的生成与分割存储:/n第1步:所述用户端以自已的标识、输入的PIN码和硬件设备信息构造N个用户识别信息UID[1],UID[2],…,UID[N],再设置初始公钥参数QN+1=G;/n第2步:对于i=N,N-1,…,1,所述用户端依次与PKE[i]交互执行:/n(2a)所述用户端以PKE[i]的公钥对UID[i]加密生成一个密文C[i],发送C[i]和Qi+1到PKE[i];/n(2b)所述PKE[i]使用私钥对C[i]解密获取所述用户识别信息UID[i],计算di=g(MK[i],UID[i]),Qi=(di)-1Qi+1,回送Qi到用户端,将di作为用户的第i个签名私钥分量,但不需保存;/n(2c)所述用户保存Qi;/n第3步:所述用户端随机选取d0∈[1,n-1],计算Q0=(d0)-1Q1,Q=Q0-G,将d0作为用户端的签名私钥分量保存,将Q作为用户端的实际签名公钥保存,同时保存Q0;/n通过上述步骤生成的用户实际签名私钥d=(d0d1d2…dN)-1-1,实际签名公钥Q=dG,实际签名私钥在生成过程中并未出现,且对用户和N个密钥分量托管系统都不可知;/n通过以下步骤可完成用户加密密钥的生成与分割存储:/n第1步:所述用户以自已的标识、输入的PIN码和硬件设备信息构造一个用户识别信息,并将所述用户识别信息记为UID’[1],UID’[2],…,UID’[N],再设置初始值Q’N+1=G;/n第2步:对于i=N,N-1,…,1,所述用户依次与PKE[i]交互执行:/n(2a)所述用户以PKE[i]的公钥对UID’[i]加密生成一个密文C[i],发送C[i]和Q’i+1到PKE[i];/n(2b)所述PKE[i]使用私钥对C[i]解密获取所述用户UID’[i],计算di’=g(MK[i],UID’[i]),Q’i=di’Q’i+1,回送Q’i到用户端,将d’i作为用户的第i个加密私钥分量,但不需保存;/n第3步:所述用户随机选取d’0∈[1,n-1],计算Q’0=d’0Q1,Q’=Q’0,将d’0作为用户端的加密私钥分量保存,将Q’作为用户的实际加密公钥保存;/n通过上述步骤生成的用户实际加密私钥d’=d’0d’1d’2…d’N,实际加密公钥Q’=d’G,实际加密私钥在生成过程中并未出现,且对用户和N个密钥分量托管系统都不可知;/n用户端和N个密钥分量托管系统可联合完成对一个消息的SM2签名,设待签名的消息为M,e=h(Z||M)是对消息M的摘要值,其中,Z是与用户公钥和用户标识有关的信息,多方联合签名步骤如下:/n第1步:所述用户端以自已的标识、输入的PIN码和硬件设备信息等重新构造用户的识别信息UID[1],UID[2],…,UID[N],再随机选取k0∈[1,n-1],计算R0=k0Q0;/n第2步:对于i=1,2,…,N,所述用户依次与PKE[i]交互执行:/n(2a)用户端发送Ri-1和Qi到PKE[i];/n(2b)PKE[i]随机选取ki∈[1,n-1],计算Ri=Ri-1+kiQi,回送Ri到用户;/n第3步:设RN=(x1,y1),所述用户计算r=(e+x1)(mod n),并记sN+1=r;/n第4步:对于i=N,N-1,…,1,所述用户依次与PKE[i]交互执行:/n(4a)所述用户端以所述PKE[i]的公钥对UID[i]||Ri加密生成一个密文C[i],发送C[i]和si+1到PKE[i];/n(4b)所述PKE[i]对C[i]作私钥解密获取UID[i]和Ri’,验证Ri’=Ri是否成立,若成立,再计算签名私钥分量di=g(MK[i],UID[i])和部分签名si=ki+si+1di(mod n),回送所述部分签名si到用户端;/n(4c)所述用户端在收到所述PKE[i]的部分签名si后,计算R’=Ri-1+siQi–rG,检验R’=RN是否成立,若成立,则接受PKE[i]的部分签名si;/n第5步:所述用户端计算s=k0+s1d0–r(mod n),生成最终签名(r,s);/n按此步骤生成的签名(r,s)可以使用签名公钥Q按SM2签名的验证算法进行验证;/n用户端和N个密钥分量托管系统可联合完成对一个公钥加密的密文进行解密,设待解密的密文为C1||C2||C3,其中C1是一个椭圆曲线点,多方联合解密步骤如下:/n第1步:所述用户端以自已的标识、输入的PIN码和硬件设备信息重新构造用户的识别信息UID’[1],UID’[2],…,UID’[N],再随机选取k0∈[1,n-1],且k0≠(d’0)-1,计算DN+1=k0C1;/n第2步:对于i=N,N-1,…,1,所述用户依次与所述PKE[i]交互执行:/n(2a)所述用户端从所述PKE[i]获取一个随机数r[i];/n(2b)所述用户端以所述PKE[i]的公钥对UID’[i]||r[i]加密生成一个密文C[i],发送Di+1和C[i]到PKE[i];/n(2c)所述PKE[i]对C[i]作私钥解密获取UID’[i]和r’[i],验证r’[i]=r[i]是否成立,若成立,计算d’i=g(MK[i],UID’[i])和Di=d’iDi+1,回送Di到用户端;/n第3步:所述用户端计算D=(k0)-1d’0D1;/n第4步:所述用户端令D=(x2,y2),再按SM2解密算法的后续步骤解出明文。/n
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京百旺信安科技有限公司;熊荣华,未经北京百旺信安科技有限公司;熊荣华许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710253749.0/,转载请声明来源钻瓜专利网。
- 上一篇:量子密钥服务站
- 下一篇:一种群聊天方法及移动终端