本发明涉及sm2密钥协商,尤其涉及一种基于国密算法的门限密钥协商的方法及系统。
背景技术:
1、本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
2、在基于硬件指纹的高安全性国密自动化加固系统中,通信方b与通信方a的通信交流必不可少,而通信时维护安全的主要方法就是密钥协商。在密钥协商过程中,身份验证关系到双方的通信安全,在密钥协商之前,双方要确保对方的身份是合法的,如果没有进行有效的身份验证,就会存在被伪造者攻击或中间人攻击的风险。其次,密钥传输过程中,双方需要交换信息以生成共享密钥,但是在不安全的通信渠道中传递数据很容易被攻击,造成密钥信息泄露或篡改,威胁通信的机密性和完整性。此外,密钥信息的管理也是一个挑战,共享密钥的生成、存储和更新需要精确而安全的处理,如果密钥信息管理不当,比如密钥过期、密钥关键信息泄露等问题,都会造成密钥被破解或者被篡改而无法使用,进而威胁系统的安全性。
技术实现思路
1、为了解决上述背景技术中存在的技术问题,本发明提供一种基于国密算法的门限密钥协商的方法及系统,其由云端充当可信中心,执行shamir门限秘密共享方案将私钥db进行分割,得到子秘密项dbi,设置分割的安全级别,并将dbi进行包数据处理发送给通信方b;通信方a选取随机数ra并计算出椭圆曲线点ra转化为整数,发送给通信方b;通信方b选取随机数rb计算椭圆曲线点rb转化为整数,发送给通信方a,并执行门限算法将rb分割成若干数据项rbi,对数据项rbi进行打包处理,添加认证信息等操作,随后将数据项rbi传递给通信方b;通信方b接收云端数据包dbi;通信方b选取合适的vi,进行拉格朗日插值法恢复点v,验证点v是否在椭圆曲线上,若不满足,则重新选取rbi进行计算;通信方b执行shamir门限秘密共享方案将kb进行分割,得到k个子秘密项kbi,并选取若干项发送给通信方a,若需要再次传输数据,则通过kbi项进行恢复kb,验证其安全性和保密性。
2、为了实现上述目的,本发明采用如下技术方案:
3、本发明的第一个方面提供一种基于国密算法的门限密钥协商的方法。
4、一种基于国密算法的门限密钥协商的方法,通信双方通过互相传递信息,共同协商出一个共享密钥,通信方a和通信方b,各自分别具有私钥da、db,公钥pa、pb;
5、所述通信方a包括以下步骤:使用伪随机数生成器选取随机数ra,并计算出椭圆曲线点ra,再转化为整数后,发送给通信方b;接收通信方b计算的椭圆曲线点rb和通信方b选取的随机数rb,执行门限算法将rb分割成若干数据项rbi,对数据项rbi进行处理后,将数据项rbi发送给通信方b;验证rb是否在椭圆曲线上,不满足则报错退出;根据公钥pb计算椭圆曲线点u,并根据椭圆曲线点u,计算ka;接收通信方b计算的kb,并判断ka=kb是否成立,若是,则协商通过;否则不通过,则协商失败;
6、所述通信方b包括以下步骤:使用伪随机数生成器选取随机数rb,计算椭圆曲线点rb,再转化为整数后,发送给通信方a;接收云端数据包dbi,以此计算tbi,并保存;接收通信方a计算的椭圆曲线点ra,验证ra是否满足椭圆曲线方程,不满足则报错退出;根据tbi和ra计算vi,进行拉格朗日插值法恢复点v,验证点v是否在椭圆曲线上,若不满足,则重新选取rbi进行计算;根据点v,计算kb,并发送给通信方a。
7、进一步地,所述云端数据包dbi的产生过程包括:云端采用shamir门限秘密共享方案将私钥db进行分割,得到k个子秘密项dbi,保存dbi,并选取若干项dbi发送给通信方a。
8、更进一步地,所述端采用shamir门限秘密共享方案将私钥db进行分割的过程包括:
9、将数据私钥db转换为base64字符串并存储在password变量中;
10、根据shamir门限秘密共享方案分别创建split分割函数,securitylevel安全级别等级函数;
11、设置分割的安全级别,存储在splitsecuritylevel变量中;
12、使用split.makeshares方法进行密码分割,传入参数为:要求的最小共享数量、总共的共享数量、password、和splitsecuritylevel;
13、将返回的shares对象赋值给secret变量,表示原始密码的秘密部分;
14、使用linq表达式筛选出满足条件(x是偶数)的份额,并将结果存储在subset1变量中;
15、将dbi进行包数据处理发送给通信方b。
16、进一步地,所述将dbi进行包数据处理发送给通信方b的过程包括:
17、选择要发送的子秘密项dbi,同时从总数据项中对已经发送的子秘密项dbi进行标记dbi’;
18、添加标识信息identity,表示发送方的身份标识;
19、添加哈希认证hash authentication,用于验证包的完整性和防篡改;
20、将包括dbi的关键信息进行加密处理;
21、添加发送包的时间戳信息,并将上述操作后的数据放入json数据结构中,转换为字符串。
22、进一步地,所述根据tbi和ra计算vi,进行拉格朗日插值法恢复点v的过程包括:
23、对一些参数进行初始化,包括sm2曲线的参数以及定义一个infinity点作为插值的初始点;
24、对于每一个已知点,计算其对应的li值;li的计算使用了拉格朗日插值公式,其中分子部分使用了已知点的x坐标的差值,分母部分使用了已知点的x坐标的差值的累积乘积,并求模曲线的模数p;将li值乘以对应的已知点的y坐标,并求模曲线的模数p;
25、将li值乘以sm2曲线的生成点g,得到对应的插值点lipoint;
26、将插值点lipoint与之前的插值点interpolatedpoint相加,得到新的插值点;
27、循环遍历所有的已知点,重复计算新的差之点的过程;返回最终的插值点;
28、构造坐标点,验证其是否满足椭圆曲线方程。
29、进一步地,在得到kb后,通信方b采用shamir秘密共享方案将kb进行分割,得到k个子秘密项kbi,保存kbi,并选取若干项发送给通信方a。
30、更进一步地,所述在得到kb后,通信方b采用shamir秘密共享方案将kb进行分割,得到k个子秘密项kbi,保存kbi,并选取若干项发送给通信方a的过程包括:
31、通信方b执行以下步骤:
32、将得到的共享密钥kb,使用split函数进行分割,得到分割后的子密钥项kb1,kb2,kb3;
33、选择kb1子密钥项,采用包处理方式添加身份标识identity,哈希认证hashauthentication等操作,同时标记kb1子密钥项;
34、将处理后的kb1数据包发送给通信方a,同时接收通信方a发送的ka1数据包,双方各自保存共享密钥子密钥项;
35、若再次需要进行密钥协商数据通信,则将ka1数据项处理后发送给通信方a,并接收通信方a发送的kb1子密钥项;
36、整合处理子密钥项kbi,并使用拉格朗日插值法恢复完整的kb;
37、使用恢复后的kb加密自身身份信息发送给通信方a,同时使用恢复后的kb解密通信方a发来的数据信息,若解密成功,则继续使用kb;若解密失败,则需要重新进行密钥协商。
38、进一步地,所述shamir门限秘密共享方案包括:采用split分割函数用于对密钥进行分割,并对分割点结合进行操作和管理;采用combine合并函数,依据分割点集合中的最大y坐标值来确定密钥的安全级别,根据安全级别调整一系列相关参数,根据输入的点集使用拉格朗日插值算法进行密钥的重构计算,返回密钥的重构对象;采用securitylevel安全级别等级函数,获取和设置当前的安全级别。
39、更进一步地,所述采用split分割函数用于对密钥进行分割,并对分割点结合进行操作和管理的过程包括:
40、存储和管理密钥的分割点:在share<tnumber>类内部维护了一个collection<finitepoint<tnumber>>对象,用于存储密钥的各个分割点;通过add()方法向集合中添加新的分割点,通过remove()方法从集合中移除指定的分割点;
41、访问和操作分割点:通过索引器和getenumerator()方法,访问集合中指定位置的分割点,以及遍历所有分割点;使用count属性获取集合中的分割点数量,使用contains()方法判断集合中是否包含指定的分割点;
42、进行转换和序列化:使用shares<tnumber>类,将对象转换为字符串数组、字符串或finitepoint<tnumber>数组;采用tostring()方法将shares<tnumber>对象转换为字符串表示形式;
43、对生成集合的同步与复制:采用copyto()方法用于将分割点集合复制到数组中,以及clear()方法用于清空集合中的所有分割点;
44、更进一步地,所述采用combine合并函数,依据分割点集合中的最大y坐标值来确定密钥的安全级别,根据安全级别调整一系列相关参数,根据输入的点集使用拉格朗日插值算法进行密钥的重构计算,返回密钥的重构对象的过程包括:
45、使用reconstruction方法,接受不同形式的输入参数,包括字符串、字符串数组、shares对象或点数组;
46、在reconstruction方法中,对输入参数进行检查;
47、通过计算输入点的最大y值,确定安全级别,根据安全级别选择合适的计算器对象;
48、调用lagrangeinterpolate方法进行插值计算;
49、在lagrangeinterpolate方法中,对输入点进行验证,确保没有重复的点;
50、创建一些临时变量用于计算,包括计算器和分子、分母的乘积和项;
51、在两个循环中进行计算,计算分子、分母的乘积,并累加到最终的分子上;
52、对最终的分子进行取模运算,得到插值多项式的系数;
53、返回插值多项式的系数,作为恢复的秘密。
54、更进一步地,所述采用securitylevel安全级别等级函数,获取和设置当前的安全级别的过程包括:
55、采用securitylevel安全级别等级函数的私有字段fixedsecuritylevel,存储安全级别的值;在get访问器中,直接返回fixedsecuritylevel字段的值;在set访问器中,首先检查设置的值是否小于5,如果是,则抛出argumentoutofrangeexception异常;
56、如果未启用秘密模式,并且设置的值小于分割的安全级别,则将值强制设置为分割的安全级别;
57、使用二分查找算法在securitylevels数组中查找设置的值,并获取最接近的大于等于该值的安全级别;
58、如果找到的索引小于0,则取反索引并使用elementat方法获取对应的安全级别值;
59、如果抛出了argumentoutofrangeexception异常,则再次抛出argumentoutofrangeexception异常;
60、更新mersenneprime字段的值为2的设置安全级别次方减去1;
61、更新fixedsecuritylevel字段的值为设置的安全级别。
62、本发明的第二个方面提供一种基于国密算法的门限密钥协商的系统。
63、一种基于国密算法的门限密钥协商的系统,通信双方通过互相传递信息,共同协商出一个共享密钥;
64、通信方a和通信方b,各自分别具有私钥da、db,公钥pa、pb;
65、通信方a,用于使用伪随机数生成器选取随机数ra,并计算出椭圆曲线点ra,再转化为整数后,发送给通信方b;接收通信方b计算的椭圆曲线点rb和通信方b选取的随机数rb,执行门限算法将rb分割成若干数据项rbi,对数据项rbi进行处理后,将数据项rbi发送给通信方b;验证rb是否在椭圆曲线上,不满足则报错退出;根据公钥pb计算椭圆曲线点u,并根据椭圆曲线点u,计算ka;接收通信方b计算的kb,并判断ka=kb是否成立,若是,则协商通过;否则不通过,则协商失败;
66、通信方b,用于使用伪随机数生成器选取随机数rb,计算椭圆曲线点rb,再转化为整数后,发送给通信方a;接收云端数据包dbi,以此计算tbi,并保存;接收通信方a计算的椭圆曲线点ra,验证ra是否满足椭圆曲线方程,不满足则报错退出;根据tbi和ra计算vi,进行拉格朗日插值法恢复点v,验证点v是否在椭圆曲线上,若不满足,则重新选取rbi进行计算;根据点v,计算kb,并发送给通信方a。
67、与现有技术相比,本发明的有益效果是:
68、本发明提出了一种有门限算法参与的密钥协商技术对通信双方信息进行安全加密,并实现通过门限算法管理共享密钥的一种方法。该方法在sm2密钥协商的基础上,加入了shamir秘密共享方案来处理通信数据,在基于硬件指纹的高安全性国密自动化加固系统中对通信数据进行安全加固,并且实现使用shamir秘密共享方案对共享密钥等关键数据进行管理与保存。与以往的技术相比,本发明是一种系统稳定、传输效率高且安全性高的门限密钥协商方法。