一种支持可信显示的协同签名方法和装置

文档序号:1744530 发布日期:2019-11-26 浏览:13次 >En<

阅读说明:本技术 一种支持可信显示的协同签名方法和装置 (A kind of collaboration endorsement method and device for supporting credible display ) 是由 韩留明 王庆芝 于 2019-07-19 设计创作,主要内容包括:本发明公开了一种支持可信显示的协同签名方法和装置,该方法包括以下步骤:1)签名参数初始化,产生整个签名过程中所需的公开参数;2)调用方和协同方生成秘钥;3)调用方和协同方合作生成公钥;4)生成签名。本发明方案保证仅在用户确认待签名消息正确性后,才会生成完整的数字签名;同时保证协同方数据丢失时,由于其缺乏存储在调用方的子私钥,攻击者无法利用协同方生成完整的数字签名。(The invention discloses a kind of collaboration endorsement methods and device for supporting credible display, method includes the following steps: 1) signature parameter initializes, generate and disclose parameter needed for entire signature process;2) called side and collaborative party generate code key;3) called side and collaborative party cooperation generate public key;4) signature is generated.The present invention program guarantee only after user confirms message correctness to be signed, can just generate complete digital signature;When guaranteeing collaborative party loss of data simultaneously, since its shortage is stored in the sub- private key of called side, attacker can not generate complete digital signature using collaborative party.)

一种支持可信显示的协同签名方法和装置

技术领域

本发明涉及密码学技术,尤其涉及一种支持可信显示的协同签名方法和装置。

背景技术

数字签名设备被广泛应用在电子商务、电子政务等场景,用于提供数字签名、身份认证等功能。

当前,数字签名设备中存储私钥信息,为避免数字签名设备在用户不知情的情况下对错误的消息进行数字签名,现有技术提出:在调用方根据数字签名请求方发送的待签名信息发起数字签名请求时,将待签名信息显示给用户,在用户确认待签名信息正确性、验证用户的PIN码后,完成数字签名并返回给数字签名请求方。但是,该方法中,若数字签名设备丢失或被窃取,攻击者在掌握用户PIN码后,能够使用该设备独立完成数字签名,从而造成个人或企业的损失。

为克服上述问题,现有技术提出:调用方在向数字签名设备发起数字签名请求或将数字签名结果返回给数字签名请求方时,可以通过短信验证码或口令的方式,验证用户身份信息。但是,该访问控制是在调用方处完成的,攻击者可以通过篡改调用方程序等方式,绕过该限制,完成完整的数字签名。

发明内容

本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种支持可信显示的协同签名方法和装置。

本发明解决其技术问题所采用的技术方案是:一种支持可信显示的协同签名方法,参与方包括调用方和协同方,包括以下步骤:

1)签名参数初始化

产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();

其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;

2)调用方和协同方生成秘钥

调用方获得私钥D1,协同方获得私钥D2;D1、D2为位于[1,n-1]之间的两个随机数;

3)调用方和协同方合作生成公钥

3.1)调用方计算D1在Fq上的逆元D1 -1mod n,并计算P1=D1 -1[*]G,将计算结果P1和用户身份信息发送给协同方,并发起协同生成公钥请求;其中,mod表示求模运算,[*]表示椭圆曲线点乘运算。

3.2)协同方接收并存储用户身份信息,并计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥存储用于后续数字签名计算;

协同方计算D2在Fq上的逆元D2 -1mod n,并计算P2=D2 -1[*]G,将计算结果P2返回给调用方,其中,mod表示求模运算,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

3.3)调用方计算W1=D1 -1[*]P2,存储计算结果W1,然后调用方计算P=W1[-]G,将计算结果P作为公钥公开,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

4)生成签名

4.1)调用方根据子私钥D1生成第一部分签名Q1,并将待签名消息M和Q1发送给协同方;

4.2)协同方可信地展示待签名消息M,在用户验证消息无误后,根据待签名消息M生成待签名消息M的消息摘要e,根据Q1和e生成第二部分签名r,并根据D2生成第三部分签名s2,将r和s2返回给调用方;

4.3)调用方根据D1、r和s2生成完整签名并返回给数字签名请求方。

按上述方案,所述步骤4.1)中调用方根据子私钥D1生成第一部分签名Q1的过程如下:调用方在收到对待签名消息M进行数字签名的请求时,产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1;其中,[*]表示椭圆曲线点乘运算。

按上述方案,所述步骤4.2)中协同方中可信地展示待签名消息M前通过本地安全存储私钥拥有者身份信息验证用户的身份。

按上述方案,所述步骤4.2)中协同方生成待签名消息M的消息摘要e的过程如下:协同方将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e;其中,Z表示私钥拥有者身份标识,Hash()表示预设的密码杂凑函数。

按上述方案,所述步骤4.2)中根据Q1和e生成第二部分签名r的过程如下:

协同方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;若r等于0,则协同方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。

按上述方案,所述步骤4.2)中根据D2生成第三部分签名s2,采用以下公式:

s2=D2*(r+k2)mod n。

按上述方案,所述步骤4.3)中调用方根据D1、r和s2生成完整签名(r,s),其中,s=k1+D1*s2-r mod n。

一种支持可信显示的协同签名装置,参与方包括调用方和协同方,包括:

签名参数初始化模块,用于产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();

其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;

密钥生成模块,用于调用方和协同方生成密钥;调用方获得私钥D1,协同方获得私钥D2;D1、D2为位于[1,n-1]之间的两个随机数;

公钥生成模块,用于调用方和协同方合作生成公钥,具体如下:

1)调用方计算D1在Fq上的逆元D1 -1mod n,并计算P1=D1 -1[*]G,将计算结果P1和用户身份信息发送给协同方,并发起协同生成公钥请求;其中,mod表示求模运算,[*]表示椭圆曲线点乘运算。

2)协同方接收并存储用户身份信息,并计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥存储用于后续数字签名计算;

协同方计算D2在Fq上的逆元D2 -1mod n,并计算P2=D2 -1[*]G,将计算结果P2返回给调用方,其中,mod表示求模运算,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

3)调用方计算W1=D1 -1[*]P2,存储计算结果W1,然后调用方计算P=W1[-]G,将计算结果P作为公钥公开,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

签名生成模块,用于生成待签名消息M的完整签名;具体如下:

1)调用方根据子私钥D1生成第一部分签名Q1,并将待签名消息M和Q1发送给协同方;调用方根据子私钥D1生成第一部分签名Q1的过程如下:调用方在收到对待签名消息M进行数字签名的请求时,产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1;其中,[*]表示椭圆曲线点乘运算

2)协同方可信地展示待签名消息M,在用户验证消息无误后,根据待签名消息M生成待签名消息M的消息摘要e,根据Q1和e生成第二部分签名r,并根据D2生成第三部分签名s2,将r和s2返回给调用方;

其中,协同方生成待签名消息M的消息摘要e的过程如下:协同方将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e;其中,Z表示私钥拥有者身份标识,Hash()表示预设的密码杂凑函数;

根据Q1和e生成第二部分签名r的过程如下:

协同方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;若r等于0,则协同方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算;

根据D2生成第三部分签名s2,采用以下公式:

s2=D2*(r+k2)mod n;

3)调用方根据D1、r和s2生成完整签名(r,s),其中,s=k1+D1*s2-r mod n,并将(r,s)返回给数字签名请求方。

本发明产生的有益效果是:本发明方法中,调用方和协同方分别存储部分私钥信息,任何一方无法获取完整的私钥信息;协同方(或协同签名设备)丢失时,攻击者仍无法构造完整的数字签名信息。而且,协同方(或协同签名设备)在进行信息的签名前,可信地展示待签名消息,在用户显示地确认签名消息的正确性后,才会使用存储的子私钥信息完成处理。因此,本方案中,在对消息进行数字签名时,用户能够确认待签名消息的正确性,并保证在协同方(或协同签名设备)丢失时,攻击者仍无法构造完整的数字签名,提高了数字签名的可靠性。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明实施例的方法流程图;

图2是本发明实施例的调用方和协同方合作生成公钥的过程示意图;

图3是本发明实施例的调用方和协同方生成待签名消息M的完整签名的过程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

如图1所示,一种支持可信显示的协同签名方法,包括以下步骤:

步骤11:调用方中存储有子私钥D1,协同方中安全存储子私钥D2

步骤12:调用方根据子私钥D1生成第一部分签名Q1,并将待签名消息M和Q1发送给协同方;

步骤13:协同方可信地展示待签名消息M,在用户验证消息无误后,生成待签名消息M的消息摘要e,根据Q1和e生成第二部分签名r,并根据D2生成第三部分签名s2,将r和s2返回给调用方;

步骤14:调用方根据D1、r和s2生成完整签名并返回给数字签名请求方;

通过步骤12~14所示过程,即可生成待签名消息M的完整签名。

调用方和协同方共享SM2算法的椭圆曲线参数E(Fq)、G和n,椭圆曲线E为定义在有限域Fq上的椭圆曲线,G为椭圆曲线E上n阶的基点,各参数的具体取值等均根据SM2算法预先设定。

D1和D2可由调用方和协同方自行生成,D1和D2也可由可信第三方分别安全传递给调用方和协同方。其中,D1、D2为位于[1,n-1]之间的两个随机数。

然后双方合作生成公钥P,相应地,图2为本发明调用方和协同方合作生成公钥的过程示意图,如图2所示,包括以下步骤;

步骤21:调用方计算D1在Fq上的逆元D1 -1mod n,并计算D1 -1[*]G,将计算结果P1和用户身份信息发送给协同方,并发起协同生成公钥请求,其中,mod表示求模运算,[*]表示椭圆曲线点乘运算。

步骤22:协同方存储用户身份信息,并计算D2 -1[*]P1[-]G,将计算结果P作为公钥存储用于后续数字签名计算;计算D2在Fq上的逆元D2 -1mod n,并计算D2 -1[*]G,将计算结果P2返回给调用方,其中,mod表示求模运算,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。

步骤23:调用方计算D1 -1[*]P2[-]G,将计算结果P作为公钥公开,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。

步骤24:调用方计算D1 -1[*]P2,存储计算结果W1,用于后续数字签名计算。

需要说明的是,上述步骤21~24的表示方式仅为举例说明,并不用于限制各步骤的执行顺序,在实际应用中,可根据实际需要设定各步骤的执行顺序,只要最终能够得到所需的结果即可,后续涉及到的各示意图中同样如此,不再赘述。

图3为本发明调用方和协同签名设备生成待签名消息M的完整签名的过程示意图,如图3所示,包括以下步骤31~310。

步骤31:调用方在收到对待签名消息M进行数字签名的请求时,产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1。其中,[*]表示椭圆曲线点乘运算。

步骤32:调用方将Q1和待签名消息M作为参数发送给协同方。

步骤33:协同方中安全存储私钥拥有者身份信息;其在进行签名计算前通过PIN码、生物特征等方式验证用户的身份。仅当用户身份验证通过后,继续处理;否则报错并结束处理。

步骤34:仅当用户身份验证通过后,协同方可信地展示待签名消息M。

步骤35:用户通过按键或点击屏幕的方式,选择进行协同签名或取消协同签名。仅当用户同意进行签名时,继续下列处理步骤;否则返回错误信息,并结束处理流程。

步骤36:协同方将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e。其中,Z表示私钥拥有者身份标识,Hash()表示预定的密码杂凑函数。

步骤37:协同方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算x1+e mod n,将计算结果作为r。若r不等于0,则执行步骤38;若r等于0,则第二通信方可重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止。其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。

步骤38:协同方计算D2*(r+k2)mod n,将计算结果作为s2,将r和s2返回给调用方。

步骤39:调用方计算k1+D1*s2-r mod n,得到计算结果s,其中,mod表示求模运算。

步骤310:若s不等于0且不等于n-r,则调用方将(r,s)作为完整签名返回给数字签名请求方。

基于上述方法,可以获得一种支持可信显示的协同签名装置,参与方包括调用方和协同方,包括:

签名参数初始化模块,用于产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();

其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;

密钥生成模块,用于调用方和协同方生成密钥;调用方获得私钥D1,协同方获得私钥D2;D1、D2为位于[1,n-1]之间的两个随机数;

公钥生成模块,用于调用方和协同方合作生成公钥,具体如下:

1)调用方计算D1在Fq上的逆元D1 -1mod n,并计算P1=D1 -1[*]G,将计算结果P1和用户身份信息发送给协同方,并发起协同生成公钥请求;其中,mod表示求模运算,[*]表示椭圆曲线点乘运算。

2)协同方接收并存储用户身份信息,并计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥存储用于后续数字签名计算;

协同方计算D2在Fq上的逆元D2 -1mod n,并计算P2=D2 -1[*]G,将计算结果P2返回给调用方,其中,mod表示求模运算,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

3)调用方计算W1=D1 -1[*]P2,存储计算结果W1,然后调用方计算P=W1[-]G,将计算结果P作为公钥公开,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;

签名生成模块,用于生成待签名消息M的完整签名;具体如下:

1)调用方根据子私钥D1生成第一部分签名Q1,并将待签名消息M和Q1发送给协同方;调用方根据子私钥D1生成第一部分签名Q1的过程如下:调用方在收到对待签名消息M进行数字签名的请求时,产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1;其中,[*]表示椭圆曲线点乘运算

2)协同方可信地展示待签名消息M,在用户验证消息无误后,根据待签名消息M生成待签名消息M的消息摘要e,根据Q1和e生成第二部分签名r,并根据D2生成第三部分签名s2,将r和s2返回给调用方;

其中,协同方生成待签名消息M的消息摘要e的过程如下:协同方将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e;其中,Z表示私钥拥有者身份标识,Hash()表示预设的密码杂凑函数;

根据Q1和e生成第二部分签名r的过程如下:

协同方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;若r等于0,则协同方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算;

根据D2生成第三部分签名s2,采用以下公式:

s2=D2*(r+k2)mod n;

3)调用方根据D1、r和s2生成完整签名(r,s),其中,s=k1+D1*s2-r mod n,并将(r,s)返回给数字签名请求方。

基于上述方法,本发明还公开了一种支持可信显示的协同签名设备。

一种支持可信显示的协同签名设备,包括:

协同签名设备可生成并安全存储自身的子私钥D2和相应子公钥P2;

协同签名设备也可由可信第三方分发子私钥D2,其安全存储D2和相应子公钥P2;

协同签名设备根据调用方发送的协同签名请求中待签名消息M和第一部分签名Q1,可信地展示待签名消息M;在用户验证消息无误后,生成待签名消息M的消息摘要e,根据Q1和e生成第二部分签名r;并根据D2生成第三部分签名s2;将r和s2返回给调用方,使得调用方能够构造出完整的数字签名。

其中,

协同签名设备和调用方共享SM2算法的椭圆曲线参数E(Fq)、G和n,椭圆曲线E为定义在有限域Fq上的椭圆曲线,G为椭圆曲线E上n阶的基点。

在收到调用方发起的协同生成公钥请求时,协同签名设备从[1,n-1]选择一个随机数D2,计算D2在Fq上的逆元D2-1mod n,计算D2-1[*]G并计算结果P2返回给调用方。其中,mod表示求模运算,[*]表示椭圆曲线点乘运算。

具体地,

在接收到调用方发起的协同签名请求时,协同签名设备解析请求获取待签名消息M和第一部分签名Q1。

协同签名设备根据存储的用户身份信息,在进行签名计算前验证用户的身份,验证用户身份的方式包括但不限于PIN码、生物特征等。

协同签名设备可信地展示待签名消息M;使得用户能够通过按键或点击屏幕的方式,选择进行协同签名或取消协同签名。

仅当用户同意进行协同签名时,协同签名设备将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示私钥拥有者身份标识,Hash()表示预定的密码杂凑函数。

协同签名设备产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算x1+e mod n,将计算结果作为r,其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。

若r不等于0,则协同签名设备计算D2*(r+k2)mod n,将计算结果作为s2;将r和s2返回给调用方,使得调用方能够构造完整的数字签名。

此外,

调用方和协同签名设备可以通过USB等物理连接的方式直接连接进行交互;通过无线、蓝牙、Near Field Communication(NFC)等非物理连接的方式直接进行交互;也可借助第三方实体转发的方式,完成信息交互。

应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种生成随机密码的数字电路

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!