一种保护用户隐私的盲协同签名方法

文档序号:29310698发布日期:2022-03-19 20:00阅读:105来源:国知局
一种保护用户隐私的盲协同签名方法

1.本发明涉及密码领域,特别涉及适用于需要保护用户隐私的盲协同签名方法。


背景技术:

2.基于公钥密码学的数字签名技术已经广泛应用于电子商务、身份认证、数字票据等应用中,而私钥的生成及使用的安全性是保证数字签名安全的基础,而硬件密码模块(如u盾等)和移动终端已成为个人身份凭证中的重要载体,但存在容易被盗和丢失的风险。另一方面,针对移动终端的攻击越来越多,许多恶意应用能够窃取用户存储在终端上的私有数据,攻击终端与服务器的通信,因此亟需解决移动终端上的密钥存储和计算安全。基于密钥拆分和协同计算的协同签名技术,在易于推广部署的同时,还能够满足签名私钥的保护要求。
3.为了便于理解,我们下面将发起协同签名的一方称为发起方,另一方称为服务方。在已有专利《一种支持信息隐藏的协同签名方法与系统》(申请公布号cn110535635a)中公开了一种支持信息隐藏的协同签名方法与系统,其特点是:发起方不会将待签名消息的明文、摘要信息或最终签名泄露给服务方,有效地保护了用户隐私信息。但是该方案存在如下不足:
4.1)在密钥对生成过程,发起方需要将自己的部分私钥对应的公钥发送给服务方,这样服务方也能计算出完整私钥对应的用户公钥p,从而当签名被公开后,服务方能够通过使用p验证签名的方式来判断公开的签名是否是自己参与生成的,也就是说服务方能够追踪签名。
5.2)在签名生成过程中,服务方需要计算q1=[k1]w1,其中k1是服务方生成的随机数,w1是和服务方私钥相关的一个椭圆曲线点,相对于椭圆曲线基点g的点乘,其它椭圆曲线点的乘法将慢很多,并且在一个服务方对应海量发起方的情景下也无法进行预计算,这容易造成服务方服务能力的瓶颈。


技术实现要素:

[0006]
有鉴于此,本发明公开了一种保护用户隐私的盲协同签名方法,定义了能够保护用户隐私的密钥对生成协议和防止服务方追踪签名的签名生成协议,除了提供用户隐私保护的特性外还通过使用可以优化的计算方法等增强了服务方的性能。
[0007]
为了达到上述目的,本发明的技术方案是这样实现的:
[0008]
1)密钥对生成协议:发起方和服务方分别生成各自的密钥对(d1,p1)和(d2,p2),发起方获得服务方的部分公钥p2并生成用户a的公钥pa,其中发起方为用户a所在的终端。具体步骤如下:
[0009]
发起方:
[0010]
a1:发起方向服务方发送协同密钥对生成请求。
[0011]
服务方:
[0012]
b1:产生随机数d2∈[1,n-1],其中n为椭圆曲线基点g的阶;
[0013]
b2:计算椭圆曲线点p2=[d2]g,服务方的密钥对为(d2,p2);
[0014]
b3:将p2发送给发起方。
[0015]
发起方:
[0016]
a2:验证p2是否满足椭圆曲线方程,若不满足则协同生成密钥对失败;满足则进行a3;
[0017]
a3:产生随机数d1∈[1,n-1];
[0018]
a4:计算椭圆曲线点p1=[d1]g,发起方的密钥对为(d1,p1);
[0019]
a5:计算椭圆曲线点pa=[d1]p
2-g,输出用户a的公钥为pa。
[0020]
2)签名生成协议:消息内容对服务方不可见。在签名被发起方公开后,服务方不能追踪签名。发起方和服务方需要进行两轮通信才能完成对消息m的签名。发起方首先向服务方发起盲协同签名请求;服务方生成临时私钥k2,并计算对应的公钥q2,将q2发送给发起方;发起方计算待签名消息m的摘要e,产生随机数k1,k3,并根据e、q2、k1、k3和服务方公钥p2一起生成临时签名第一部分r1,将r1发送给服务方;服务方根据d2、k2和r1计算临时签名第二部分s2后返回给发起方;发起方再根据d1、k1、s2和r计算并输出最终的签名(r,s)。具体步骤如下:
[0021]
发起方:
[0022]
a1:发起方向服务方发起协同签名请求。
[0023]
服务方:
[0024]
b1:产生随机数k2∈[1,n-1];
[0025]
b2:计算椭圆曲线点q2=[k2]g;
[0026]
b3:将q2发送给发起方。
[0027]
发起方:
[0028]
a2:验证q2是否满足椭圆曲线方程,若不满足则协同签名失败;满足则进行a3;
[0029]
a3:计算消息摘要e=hv(za||m),将e的数据类型转换为整数,其中za需按照gm/t 0003.2-2012第2部分5.5节中定义的方法计算得到;
[0030]
a4:产生随机数k1,k3∈[1,n-1];
[0031]
a5:计算椭圆曲线点(x1,y1)=[k1]p2+q2+[k3]g,按gm/t 0003.1-2012第1部分4.2节中定义的方法将x1数据类型转换为整数;
[0032]
a6:计算r=(e+x1)mod n,如果r=0或者r+k3=n,则返回a4;
[0033]
a7:计算r1=(r+k3)mod n;
[0034]
a8:将r1发送给服务方。
[0035]
服务方:
[0036]
b4:计算s2=(d
2-1
·
(k2+r1))mod n;
[0037]
b5:将s2发送给发起方。
[0038]
发起方:
[0039]
a9:计算s=(d
1-1
·
(k1+s2)-r)mod n,如果s=0或s+r=n则返回a1;
[0040]
a10:使用公钥pa验证签(r,s)是否为消息m的签名,如果不是则签名失败;否则输出(r,s)作为消息m的签名。
[0041]
可见,本发明所述方案中,服务方不知道用户公钥,不需要关联发起方私钥,从而能够有效保护用户的隐私。同时协议执行过程中发送的数据不包含敏感内容,不需要对通信数据做机密性保护;签名生成协议中,不向服务方发送关于待签名消息或者其摘要,服务方仅需要产生一个随机数,并且对于耗时较多的椭圆曲线点乘运算,服务方仅需要计算基点g和随机数的点乘,还可以在发起方请求前就进行预计算,从而本发明公布的服务方具有更高的性能。
附图说明
[0042]
图1为本发明保护用户隐私的盲协同签名方法实施例的流程图。
[0043]
图2为本发明密钥对生成协议的过程示意图。
[0044]
图3为本发明签名生成协议的过程示意图。
具体实施方式
[0045]
为了使本发明的技术方案更加清楚、明白,以下参照附图并举实施例,对本发明所述方案作进一步的详细说明。
[0046]
本发明使用以下术语和定义:
[0047]
1)协同数字签名:由两个参与方通过协议交互和使用各自掌握的用户部分私钥完成某输入消息的数字签名计算的过程。
[0048]
2)部分私钥:在协同数字签名过程中由发起方和服务方分别专用的秘密数据项。
[0049]
3)用户公钥:用户私钥对应的公钥,在本文件中是由两个参与方分别掌握的部分私钥共同组成的用户私钥对应的公钥。
[0050]
4)密钥对协同生成:由两个参与方通过协议交互生成各自掌握的部分私钥并输出用户公钥的过程。
[0051]
5)发起方:在协议的操作过程中发送首轮信息的参与方,本文件中一般为用户使用的终端。
[0052]
6)服务方:在协议的操作过程中协助发起方完成密钥对生成或签名的参与方,本文件中一般为服务端或辅助设备。
[0053]
7)盲协同签名:让服务方无法根据已签名消息内容或者签名值追踪签名的一种协同数字签名方式。
[0054]
本发明使用下列符号:
[0055]
d1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
发起方的部分私钥。
[0056]
d2ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
服务方的部分私钥。
[0057]
d-1
mod n
ꢀꢀꢀꢀꢀꢀꢀ
d模n的逆。
[0058]
e(fq)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀfq
上椭圆曲线e的所有有理点(包括无穷远点)组成的集合。
[0059]fq
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
包含q个元素的有限域。
[0060]eꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
密码杂凑算法作用于消息m的输出值。
[0061]gꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
椭圆曲线的一个基点,其阶为素数。
[0062]hv
()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
消息摘要长度为v比特的密码杂凑算法。
[0063]mꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
待签名的消息。
[0064]
mod n
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
模n运算。
[0065]nꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
基点g的阶。
[0066]
p1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
发起方的部分公钥。
[0067]
p2ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
服务方的部分公钥。
[0068]
paꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
用户a的公钥。
[0069]
x||y
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
x与y的拼接,其中x、y可以是比特串或字节串。
[0070]
zaꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
关于用户a的标识、部分椭圆曲线系统参数和用户a公钥的杂凑值。
[0071]
[k]p
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
椭圆曲线上点p的k倍点,k是正整数。
[0072]
(r,s)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
消息的签名。
[0073]
[x,y]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
大于或等于x且小于或等于y的整数的集合。
[0074]
图1为本发明保护用户隐私的盲协同签名方法实施例的流程图,如图1所示,包括以下步骤11~13。
[0075]
步骤11:服务方向发起方发送椭圆曲线点q2。
[0076]
步骤12:发起方向服务方发送fq上的元素r1。
[0077]
步骤13:服务方向发起方发送fq上的元素s2。
[0078]
图2为本发明密钥对生成协议的过程示意图。如图2所示,包括发起方步骤a1~a5和服务方步骤b1~b3。
[0079]
发起方:
[0080]
a1:发起方向服务方发送协同密钥对生成请求。
[0081]
服务方:
[0082]
b1:产生随机数d2∈[1,n-1];
[0083]
b2:计算椭圆曲线点p2=[d2]g,服务方的密钥对为(d2,p2);
[0084]
b3:将p2发送给发起方。
[0085]
发起方:
[0086]
a2:验证p2是否满足椭圆曲线方程,若不满足则协同生成密钥对失败;
[0087]
a3:产生随机数d1∈[1,n-1];
[0088]
a4:计算椭圆曲线点p1=[d1]g,发起方的密钥对为(d1,p1);
[0089]
a5:计算椭圆曲线点pa=[d1]p
2-g,用户a的公钥为pa。
[0090]
通过上述步骤所示过程,即可生成发起方和服务方各自的部分私钥d1和d2,并合成用户公钥pa。用户实际私钥为da=(d1d
2-1)mod n,无论是发起方还是服务方,都不能独立计算出用户私钥。
[0091]
需要说明的是,上述步骤表示方式仅为举例说明,并不用于限制各步骤的执行顺序,在实际应用中,可根据实际需要设定各步骤的执行顺序,只要最终能够得到所需的结果即可,后续涉及到的各示意图中同样如此,不再赘述。
[0092]
图3为本发明签名生成协议的过程示意图。如图3所示,包括发起方步骤a1~a10和服务方步骤b1~b5。
[0093]
发起方:
[0094]
a1:发起方向服务方发起协同签名请求。
[0095]
服务方:
[0096]
b1:产生随机数k2∈[1,n-1];
[0097]
b2:计算椭圆曲线点q2=[k2]g;
[0098]
b3:将q2发送给发起方。
[0099]
发起方:
[0100]
a2:验证q2是否满足椭圆曲线方程,若不满足则协同签名失败;
[0101]
a3:计算消息摘要e=hv(za||m),按gm/t 0003.1-2012第1部分4.2节中定义的方法将e的数据类型转换为整数,其中za需按照gm/t 0003.2-2012第2部分5.5节中定义的方法计算得到;
[0102]
a4:产生随机数k1,k3∈[1,n-1];
[0103]
a5:计算椭圆曲线点(x1,y1)=[k1]p2+q2+[k3]g,按gm/t 0003.1-2012第1部分4.2节中定义的方法将x1数据类型转换为整数;
[0104]
a6:计算r=(e+x1)mod n,如果r=0或者r+k3=n,则返回a4;
[0105]
a7:计算r1=(r+k3)mod n;
[0106]
a8:将r1发送给服务方。
[0107]
服务方:
[0108]
b4:计算s2=(d
2-1
·
(k2+r1))mod n;
[0109]
b5:将s2发送给发起方。
[0110]
发起方:
[0111]
a9:计算s=(d
1-1
·
(k1+s2)-r)mod n,如果s=0或s+r=n则返回a1;
[0112]
a10:使用公钥pa验证签(r,s)是否为消息m的签名,如果不是则签名失败;否则输出(r,s)作为消息m的签名。
[0113]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1