签名方法、验证签名的方法及移动终端、服务器与流程

文档序号:30952407发布日期:2022-07-30 08:14阅读:924来源:国知局
签名方法、验证签名的方法及移动终端、服务器与流程

1.本发明涉及通信技术领域,尤其涉及一种签名方法和、验证签名的方法及移动终端、服务器。


背景技术:

2.基于公钥基础pki(public key infrastructure,公钥基础设施)的数字签名技术在金融、电子商务中有着广泛的应用。传统的签名流程是通常由可信介质保障下的签名方生成公私钥对,并使用私钥对消息进行签名,将消息、公钥和签名结果发给验签方,验签方使用公钥进行验签。传统的应用场景下通常是由服务器作签名方,而客户端作验签方,假设服务端是相对安全的,私钥不会泄露,只需要对公钥进行保护(防止被替换)即可。例如采用数字证书来保证公钥没有被替换。
3.然而,应用于传统应用的场景方案已不能满足所有的需求,在面向移动互联和万物互联的新场景下需要客户端生成签名,而服务端进行验签,在此场景下客户端使用私钥进行签名,服务器使用公钥验签。而客户端作为弱端(比如智能手机),其保护私钥的能力是有限的,一旦私钥泄露,攻击者就可伪造签名,使整个签名系统存在风险。
4.因此,需要一种新的签名方法来提高私钥的安全性。


技术实现要素:

5.本发明的主要目的是提供一种签名方法、验证签名的方法及移动终端、服务器,以提高私钥的安全性。
6.第一方面,本发明提供一种签名方法,应用于签名方,包括:获取针对签名方的z算法实例,结合预设实时参数,利用预设参数算法,生成会话密钥;根据待签名数据和指定杂凑值,利用第一预设算法,生成第一签名参数,并将第一签名参数发送给验签方,以使验签方基于第一签名参数结合预设非对称密钥算法生成第二签名参数和第一签名因子;基于会话密钥以及验签方发来的第二签名参数和第一签名因子,利用第二预设算法,生成第二签名因子,将第一签名因子和第二签名因子作为对待签名数据的签名结果,并将签名结果发送给验签方,以使验签方对签名结果进行验证。
7.在一个实施例中,根据签名方身份信息和预设非对称密钥算法的参数信息,利用第三预设算法,生成指定杂凑值,其中,预设非对称密钥算法包括椭圆曲线算法。
8.在一个实施例中,第一预设算法和第三预设算法分别包括sm3算法。
9.在一个实施例中,第二签名参数的数量为至少两个。
10.在一个实施例中,当第二签名参数的数量为两个时;基于会话密钥以及验签方发来的第二签名参数和第一签名因子,利用第二预设算法,生成第二签名因子,包括:基于会话密钥以及验签方发来的两个第二签名参数和第一签名因子,利用下式生成第二签名因子:其中,其中,s表示第二签名因子,d1表示签名方生成的第一随机数,k1表示会话密钥,s1和s2均表示第二签名参数,r表示第一签名因子,|
mod|表示模运算,n表示预设非对称密钥算法中的基点的阶。
11.在一个实施例中,该方法还包括:根据签名方生成的第一随机数,利用预设非对称密钥算法,生成第一预备公钥,并将第一预备公钥发送给验签方,以使验签方利用第四预设算法通过将第一预备公钥与验签方生成的第二随机数进行结合来生成目标公钥。
12.在一个实施例中,获取针对签名方的z算法实例,包括:从签名方所属终端获取针对签名方的z算法实例;或向验签方所属终端请求针对签名方的z算法实例。
13.第二方面,本发明提供一种验证签名的方法,应用于验签方,包括:接收签名方发来的利用如上文所述的签名方法生成的第一预备公钥和签名结果;根据验签方生成的第二随机数和第一预备公钥,利用第四预设算法,生成目标公钥,以利用目标公钥按照预设非对称密钥算法的验证方法来对签名结果进行验证。
14.在一个实施例中,还包括:获取针对签名方的z算法实例,结合预设实时参数,利用预设参数算法,生成会话密钥;基于预设非对称密钥算法,根据会话密钥和第三随机数生成倍点坐标,继而根据倍点坐标和签名方发来的第一签名参数生成第一签名因子,其中,第一签名参数由签名方根据待签名数据和指定杂凑值,利用第一预设算法生成;根据第二随机数和会话密钥,生成第二签名参数;将第二签名参数和第一签名因子发送给签名方。
15.第三方面,本发明提供一种签名方法,应用于不同于签名方和验签方的第三方,包括:获取针对签名方的z算法实例,结合预设实时参数,利用预设参数算法,生成会话密钥;基于预设非对称密钥算法,根据会话密钥和第三随机数生成倍点坐标,继而根据倍点坐标和签名方发来的第一签名参数生成第一签名因子,其中,第一签名参数由签名方根据待签名数据和指定杂凑值,利用第一预设算法生成;根据第二随机数和会话密钥,生成第二签名参数;将第二签名参数和第一签名因子发送给签名方。
16.第四方面,本发明提供一种移动终端,包括:存储器和处理器,存储器中存储有计算机程序,当计算机程序被处理器执行时,执行如上文所述的签名方法的步骤。
17.第五方面,本发明提供一种服务器,包括:存储器和处理器,存储器中存储有计算机程序,当计算机程序被处理器执行时,执行如上文所述的验证签名的方法的步骤或如上文所述的签名方法的步骤。
18.第六方面,本发明提供一种签名验证系统,包括如上文所述的移动终端和至少一个如上文所述的服务器。
19.第七方面,本发明提供一种存储介质,存储有计算机程序,计算机程序被处理器执行时,执行如上文所述的签名方法的步骤或如上文所述的验证签名的方法的步骤。
20.本发明的技术方案可以但不限于加强对基于“移动终端签名-服务器验签”这一场景的整个签名系统的安全性保护。即使交互中所传递的所有数据均被窃听,攻击者依然无法伪造签名,且单独的劫持签名方或验签方也无法伪造签名。同时,签名方通过与z密码算法相结合,一方面z密码算法提供随机数的派生机制,另一方面通过基于z密码算法的双向认证和会话密钥协商机制,来提供身份密钥安全(算法与密钥融合),提供了一次一密、多因素认证、双向认证等增强机制。
附图说明
21.构成本技术的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示
意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定,在附图中:
22.图1为根据本技术一示例性实施方式的签名验证流程的时序图;
23.图2为根据本技术一示例性实施方式的获取z算法实例的时序图。
具体实施方式
24.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
25.实施例一
26.本实施例提供一种签名验证方法的交互过程的具体实施例。如图1所示,以移动终端作为签名方,以服务器作为验签方为例进行说明,当然,本实施例的方案同样适用于以服务器为签名方、以移动终端为验签方的场景以及更多的场景。
27.在初始化阶段,签名方产生第一随机数d1,并利用非对称加密算法计算得到第一预备公钥p1=d
1-1
·
g,将第一预备公钥发送给验签方。验签方接收第一预备公钥,并生成第二随机数d2,继而计算目标公钥p=d
2-1
·
p
1-g,并将目标公钥p发送给签名方。其中,非对称加密算法可以包括椭圆曲线算法,而且,计算第一预备公钥和目标公钥的算法也不局限于此,本领域技术人员可以根据需要进行选择。
28.随后,签名方和验签方可以各自根据签名方身份信息和椭圆曲线算法的参数信息,利用sm3算法,生成指定杂凑值za。当然,也可以利用其他可以生成指定杂凑值的算法。签名方生成的指定杂凑值用于后续生成第一签名参数,验签方生成的指定杂凑值可以用于后续验证签名。
29.同时,签名方可以向服务器请求针对签名方的z算法实例,也可以向自身所属终端申请z算法实例,再将z算法实例发送给验签方。相应的,验签方可以根据签名方身份信息生成针对签名方的z算法实例,也可以接收签名方发来的针对签名方的z算法实例。
30.图2为根据本技术一示例性实施方式的获取z算法实例的时序图。在图2中,签名方可以先向验签方发送通信请求,该通信请求可以包括签名方身份信息和时间戳t;继而,验签方响应于该通信请求,向签名方发送挑战值;签名方基于该挑战值,按照z(z(z(x)+w)+v)的算法计算得到结果

,并将结果

发送给验签方;验签方同样按照z(z(z(x)+w)+v)的算法计算得到结果

,当结果



相同时,表明认证通过,随后,验签方继续计算z(z(z(t)+w)+v),得到结果

,并将结果

发送给签名方;签名方继续计算z(z(z(t)+w)+v),得到结果

,当结果



相同时,表明认证通过;最后,双方同时计算会话密钥k1=z(z(z(z(x)+w)+v))。
31.在签名方对待签名数据m进行签名阶段,首先根据待签名数据和指定杂凑值za,按照sm3算法计算第一签名参数e=hash(za||m),并将第一签名参数e发送给验签方。当然,也可以利用其他算法来计算第一签名参数。
32.验签方接收第一签名参数e,并生成第三随机数k2,继而根据k1和k2计算倍点坐标(x1,y1)=k1·
k2·
g,计算第一签名因子r=(e+x1)|mod|n,计算两个第二签名参数s1=d
2-1
·
k1|mod|n和s2=d
2-1
,最后,将第一签名因子r和两个第二签名参数s1和s2发送给签名方。其中,计算倍点坐标、第一签名因子以及各个第二签名参数的方法并不局限于此,完全可以利用其他可行的算法进行计算,各个算法之间既可以相同,也可以各不相同。
33.签名方再根据会话密钥k1、验签方发来的两个第二签名参数s1和s2以及第一签名因子r,计算第二签名因子s=d
1-1
k1s1+d
1-1
s2·
r-r|mod|n,其中,s表示第二签名因子,d1表示签名方生成的第一随机数,k1表示会话密钥,s1和s2均表示第二签名参数,r表示第一签名因子,|mod|表示模运算,n表示预设非对称密钥算法中的基点的阶。其中,计算第二签名因子的算法并不局限于此,本领域技术人员可以根据需要进行选择。将明文的待签名数据m和签名结果(r,s)发送给验签方,以使验签方利用目标公钥对该签名结果进行验证。
34.验签方可以利用相关技术中的sm2算法的验证过程来对签名结果进行验证。
35.需要说明的是,参与签名的验签方与对签名结果进行验证的验签方可以相同也可以不同,例如可以不是同一终端服务器。
36.本发明的技术方案可以但不限于加强对基于“移动终端签名-服务器验签”这一场景的整个签名系统的安全性保护。通过将私钥分解成两个密钥参数,分别由签名方和验签方生成,而真正的私钥从不以任何完整的形式出现在签名方或验签方的运算中,在签名过程中引入新的随机数来保护交互过程,同时验签阶段并不需要这些随机数参与,而依然与标准sm2的验签流程相同。
37.在安全性方面,即使交互中所传递的所有数据均被窃听,攻击者依然无法伪造签名,且单独的劫持签名方或验签方也无法伪造签名。同时,签名方通过与z密码算法相结合,一方面,z密码算法提供随机数的派生机制,另一方面,通过基于z密码算法的双向认证和会话密钥协商机制,提供了一次一密、多因素认证、双向认证等增强机制,来确保身份密钥安全(算法与密钥融合)。
38.实施例二
39.首先,介绍一下相关技术中的椭圆曲线算法。
40.椭圆曲线算法是一种公钥加密算法,它所依赖的困难问题是椭圆曲线上的离散对数问题,椭圆曲线加密算法(elliptic curve cryptography,简称ecc)是由neal koblit和victor miller于1985年首先提出,从那时起ecc的安全性和实现效率就被众多的数学家和密码学家所广泛研究。所得的结果表明,与rsa算法相比,ecc具有密钥长度短,加解密速度快,对计算环境要求低,对通讯带宽占用低等特点。
41.椭圆曲线算法的复杂度是依赖于求其多倍点的不可逆性,椭圆曲线上点的运算与在标准坐标系下有很大区别。椭圆曲线上点的加法是将两个点相连所在直线与椭圆曲线交于第三点,再求第三点关于横坐标轴的对称点,即为两点的和的坐标。由此可导出倍点的概念,椭圆曲线上某点的二倍点是过该点所做的切线与椭圆曲线相交的第三点再关于横坐标轴取对称的点。点p的二倍点和点p自身的和即为点p的三倍点,由此类推,可求出点p的k倍点坐标。
42.椭圆曲线上的离散对数问题就是:在已知点p的坐标和其k倍点k
·
p的坐标的情况下,想推导出k是非常困难的(各倍点坐标之间是相对离散的,不具备规律性,因此只能正向从p点逐个求其倍点,将结果与k
·
p做比对)。而椭圆曲线上点的乘法(已知p的坐标和乘数k,求k
·
p)却可以依照double-and-add算法快速求到结果。这种计算难度上的不对等决定了椭圆曲线公钥加密算法的可行性(基点p作为协商好的参数,倍数k作为私钥,倍点k
·
p作为公钥)。
43.接下来,简要介绍国密sm2签名方案。
44.在使用sm2之前,通信双方要预先设定相同的椭圆曲线参数,包括:参数a、b,用以确定椭圆曲线的形状

大素数p,用以确定有限域fp;基点g的坐标(xg,yg);基点g的阶n。
45.基于这些参数,签名方和验签方都需要计算出杂凑值za,其中za=h
256
(entla||ida||a||b||xg||yg||xa||ya)
46.国密sm2签名方案由三部分组成:密钥生成、签名生成、签名验证。
47.(1)密钥生成
48.1、签名方生成随机数da,da∈[1,n-1];
[0049]
2、计算p=da·
g,将p(xa,ya)作为公钥公开,da作为私钥保存。
[0050]
(2)签名生成
[0051]
1、签名方选取随机数k∈[1,n-1],计算k
·
g=(x1,y1);
[0052]
2、设待签名消息为m,签名方计算e=hash(za||m);
[0053]
3、计算r=(e+x1)|mod|n,若r=0或r+k=n,则返回第1步重新生成k;
[0054]
4、计算s=((1+da)-1
·
(k-r
·
da))|mod|n,若s=0则返回第1步重新生成k;
[0055]
(r,s)即为签名结果;
[0056]
(3)验签方进行签名验证
[0057]
1、收到消息m和签名(r,s);
[0058]
2、检验是否满足r,s∈[1,n-1],是则继续,否则验签失败;
[0059]
3、检验是否满足r+s=n,是则验签失败,否则继续;
[0060]
4、计算e

=hash(za||m);
[0061]
5、计算(x
′1,y
′1)=s
·
g+(r+s)
·
p;
[0062]
6、计算r

=(e

+x
′1)|mod|n;
[0063]
7、检验是否满足r=r

,是则验签成功,否则验签失败。
[0064]
最后,介绍本发明的技术方案。
[0065]
本签名方案基于国密sm2签名算法架构,其中,使用的椭圆曲线参数名与sm2官方文档提供的相一致。本方案在整体上可分为两部分:签名主体部分和基于z算法的数据保护部分。
[0066]
签名主体部分可以分为签名初始化(产生公钥)部分、生成签名部分以及签名验证部分三部分。
[0067]
(1)签名初始化
[0068]
签名初始化的目的是通信双方通过协商得到公钥,而其中的任何一方无法单独计算出公钥。具体步骤如下:
[0069]
1、客户端产生随机数d1;
[0070]
2、客户端通过椭圆曲线运算得到并将p1发送给服务器;
[0071]
3、服务器生成随机数d2;
[0072]
4、服务器根据d2和p1进行椭圆曲线运算,得到目标公钥并将p发送给客户端;
[0073]
(2)生成签名
[0074]
在生成签名之前客户端和服务器首先计算出杂凑值za,za=h
256
(entla||ida||a||
b||xg||yg||xa||ya),其中,参数a、b、xg、yg、xa、ya可参考标准sm2实例的参数,ida为用户标识,entla为标识长度,h256()为国密sm3杂凑算法。
[0075]
本方案中的生成签名依然需要通信双方的交互,设待签名消息为m,具体签名步骤如下(可参考图1):
[0076]
1、客户端和服务器基于z密码算法的双向认证和会话密钥协商机制,共同产生会话密钥k1;
[0077]
客户端把随机数d1和公钥p保存到本地,在需要的时候从本地调用直接进行签名。但这样直接保存显然是不安全的,因此本方案采用基于z算法的安全机制对基于sm2的协同机制进行保护。
[0078]
z密码算法是主要为解决公众在移动互联条件下身份认证和会话密钥协商而设计。z分组密码算法是个性化的分组密码算法,在这里可以选取其加密或解密函数作为单向密码函数,类似公钥密码仅仅认证用户身份并完成会话密钥协商,其具体的双向认证和密钥协商过程是:
[0079]
第1步,用户发起通信请求,将用户id和当前时刻t发送给服务器;
[0080]
第2步,服务器响应,将挑战值x发送给用户;
[0081]
第3步,用户计算z(z(z(x)+w)+v)发送给服务器,其中w是用户简单口令、v是用户客户端硬件序列号;
[0082]
第4步,服务器计算z(z(z(x)+w)+v),与第3步用户发来的值比对,相同则认证通过,否则认证不通过;
[0083]
第5步,服务器计算z(z(z(t)+w)+v),发送给用户;
[0084]
第6步,用户计算z(z(z(t)+w)+v),与第5步服务器发来的值比对,相同则完成对服务器的认证,否则认证不通过;
[0085]
第7步,在双方认证均通过的基础上,用户与服务器双方分别计算出k1=z(z(z(z(x)+w)+v)),即为后续连接数据加密的会话密钥或作为同步参数来使用(共64比特,,如需要128比特,可再发一组挑战值,并双方做类似计算)。
[0086]
2、客户端计算e=hash(za||m),其中hash()为国密sm3杂凑算法,客户端将e作为第一签名参数发送给服务器;
[0087]
3、服务器通过椭圆曲线运算得到q=k1·
g,生成随机数k2,计算(x1,y1)=k2·
q;计算r=(e+x1)|mod|n,若r=0则重新生成k2;计算计算将(r,s1,s2)作为第二签名参数发送给客户端;
[0088]
4、客户端计算若s=0或s=n-r,则返回第1步;
[0089]
5、签名完成,客户端输出明文m和签名结果(r,s)。
[0090]
(3)签名验证
[0091]
服务器的签名验证部分与国密sm2的验签流程基本相同,具体步骤如下:
[0092]
1、收到消息m和签名(r,s);
[0093]
2、检验是否满足r,s∈[1,n-1]是,则继续,否则验签失败;
[0094]
3、检验是否满足r+s=n,是则验签失败,否则继续;
[0095]
4、计算e

=hash(za||m);
[0096]
5、计算(x
′1,y
′1)=s
·
g+(r+s)
·
p;
[0097]
6、计算r

=(e

+x
′1)|mod|n;
[0098]
7、检验是否满足r=r

,是则验签成功,否则验签失败。
[0099]
本方案采用协同计算方式保障签名算法的私钥在弱终端(无硬件安全介质)条件下进行签名计算的安全性,同时通过与z密码算法的结合,一方面基于z密码算法的双向认证有效提升终端的可信计算安全性,另一方面通过z的会话密钥协商机制,有效保障协同签名计算所需的敏感参数安全。因此,整体方案极大提升纯软件条件下的协同签名的安全性,有效提升泛终端密码计算的便捷、合规和遍在性。
[0100]
实施例三
[0101]
本实施例提供一种移动终端,包括:存储器和处理器,存储器中存储有计算机程序,当计算机程序被处理器执行时,执行如上文所述的签名方法的步骤。
[0102]
在一个实施例中,该移动端可以包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
[0103]
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash flash ram)。内存是计算机可读介质的示例。
[0104]
实施例四
[0105]
本实施例提供一种服务器,包括:存储器和处理器,存储器中存储有计算机程序,当计算机程序被处理器执行时,执行如上文所述的验证签名的方法的步骤或如上文所述的签名方法的步骤。
[0106]
在一个实施例中,该服务器可以包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
[0107]
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash flash ram)。内存是计算机可读介质的示例。
[0108]
实施例五
[0109]
本实施例提供一种签名验证系统,包括如上文所述的移动终端和至少一个如上文所述的服务器。当所包括的服务器的数量为两个以上时,执行签名方法的服务器与执行验证签名的方法的服务器可以是不同的服务器。
[0110]
实施例六
[0111]
本实施例提供一种存储介质,存储有计算机程序,计算机程序被处理器执行时,执行如上文所述的签名方法的步骤或如上文所述的验证签名的方法的步骤。
[0112]
计算机程序可以采用一个或多个存储介质的任意组合。存储介质可以是可读信号介质或可读存储介质。
[0113]
可读存储介质例如可以包括电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)可以包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件或者上述的任意合适的组合。
[0114]
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读计算机程序。这种传播的数据信号可以采用多种形式,例如可以包括电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何存储介质,该存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0115]
存储介质上包含的计算机程序可以用任何适当的介质传输,例如可以包括无线、有线、光缆、rf等等,或者上述的任意合适的组合。
[0116]
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序。程序设计语言可以包括面向对象的程序设计语言——例如java、c++等,还可以包括常规的过程式程序设计语言——诸如“c”语言或类似的程序设计语言。计算机程序可以完全地在用户计算设备上执行、部分地在用户设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网(例如可以包括局域网或广域网)连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0117]
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本技术的示例性实施方式,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0118]
需要说明的是,本技术的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换。
[0119]
应当理解的是,本说明书中的示例性实施方式可以由多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施方式。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。提供这些实施方式是为了使得本技术的公开彻底且完整,并且将这些示例性实施方式的构思充分传达给本领域普通技术人员,而不应当理解为对本发明的限制。
[0120]
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1