本发明属于密码技术领域,更进一步涉及网络安全技术领域中的一种基于可链接环签名和多重签名的区块链匿名签名方法。本发明可应用于对区块链数字资产信息的签署,能够有效保护签名者的隐私数据,并对网络环境下签名者的密钥和身份提供安全保障作用。
背景技术:
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,从本质上讲,它是一个去中心化的数据库,是通过密码学相关算法生成并串联起来的数据块,平均每十分钟就能够生成一个新的区块。如今,随着区块链技术的日趋成熟,越来越多的用户信息被记录在区块链上,由此带来了潜在的隐私泄露问题:由于区块链是公开的,攻击者可以通过分析区块链上签名数据的输入和输出地址,进而追踪用户的数字资产流向,同时攻击者也可以通过数据挖掘等相关算法来实现去匿名性。随着区块链的增长,公布的信息越多,去匿名性也就越容易。因此,为了保护用户的隐私和安全,如何在区块链上实现匿名性更好的签名方法是目前整个行业面临的重要问题。
binwang、zijianbao等人在其发表的论文“lockcoin:asecureandprivacy-preservingmixserviceforbitcoinanonymity”(arxivpreprintarxiv:1811.04349,2018.)中提出了一种基于半可信第三方的区块链签名方法。该方法引入了半可信第三方,通过用户将区块链资产转入半可信第三方的托管地址,再由半可信第三方将等量的区块链资产转给用户新的账户这一过程,使得外部攻击者无法找出用户新旧账户之间的关联,从而实现了不可关联性。在该方法的签名过程中,参与者利用盲签名算法对消息数据进行签名,从而达到了即便是内部攻击者也无法区分用户的新旧账户。该区块链签名方法实现了任何人都无法关联用户账户的匿名性,这相对于任何人都有可能关联用户账户的原有的区块链系统而言,拥有更好的匿名性。但是,该方法仍然存在的不足之处是:该方法使用了一个类似于区块链的公共日志,这使得用户每次与半可信第三方交互都需要若干区块的确认,并且用户不仅需要托管账户,还需要保证金账户,这使得用户和半可信第三方的交易数量增多,因此每次签名都需要数个小时,通信的时间延迟太久,使得该方法效率低下,不具有实用性。
北京计算机技术及应用研究所在其申请的专利文献“一种基于一次性环签名的区块链隐私保护方法”(申请公布号:cn109067547a,申请号:2018111058729,申请日:2018.09.21)中提出了一种基于一次性环签名的区块链隐私保护方法,以保护区块链中的身份隐私和交易隐私。该方法借鉴环签名的一般过程,并利用了diffie-hellman交换技术,每次由付款方生成收款方的账户地址,这使得只有付款方本人以及拥有私钥的收款方知道收款账户地址。从而使得该签名算法具有更好的匿名性。该方法存在的不足之处是,环签名技术的引入带来了复杂的计算量,并且生成的签名长度较长,为区块链系统增加了过多负担,同时,该方法生成的签名与现行的区块链应用场景不兼容。
技术实现要素:
本发明的目的在于针对上述现有技术的不足,提出一种基于可链接环签名和多重签名的区块链匿名签名方法,通过环签名来隐藏真实的签名者,使用多重签名来混淆多个签名者的隐私数据,从而实现区块链上匿名签名的方法,提高系统整体的安全性能。
为了实现上述目的,本发明采用的技术方案包括以下步骤:
(1)生成用户的公钥私钥对:
(1a)通过安全信道,将区块链的公共参数pp={q,fq,g,n,g}发送给每个用户,其中,q表示一个256比特长的大素数,fq表示一个有限域,g表示椭圆曲线上的基点,n表示椭圆曲线上的基点的阶数,g表示基点所生成的群;
(1b)每个用户使用各自的私钥与椭圆曲线上的基点进行点乘操作,得到各自的公钥;
(2)生成签名群组公钥:
(2a)将拟签名的用户组成签名群组,签名群组中的每个用户广播自己的公钥;
(2b)签名群组中的每个用户收集其他用户的公钥,生成签名群组公钥;
(3)生成可链接的环签名:
(3a)从签名群组中任意选取一名用户,按照区块链系统规范,生成包含所选用户新账户的待签名消息;
(3b)利用链接标签算法,计算所选用户的链接标签;
(3c)按照下式,所选用户计算身份标识:
cb+1=h1(γ,y,m,u×g,u×h)
其中,cb+1表示签名群组中第b+1个用户的身份标识,h1(·)表示安全抗碰撞的哈希函数,γ表示签名群组公钥,y表示所选用户的链接标签,m表示包含所选用户新账户的待签名消息,u表示所选用户在[1,n-1]范围内随机选择的正整数,×表示椭圆曲线上的点乘操作,h表示所选用户的公钥映射;
(3d)利用递推公式,所选用户计算其他用户的身份标识;
(3e)所选用户利用环签名生成算法生成可链接的环签名,将可链接的环签名和包含所选用户新账户的待签名消息发送给签名收集者;
(3f)判断是否选完签名群组中的所有用户,若是,则执行步骤(4),否则,执行步骤(3a);
(4)签名收集者验证环签名:
(4a)签名收集者接收签名群组中的所有用户发来的环签名;
(4b)利用环签名恢复公式,签名收集者计算签名群组中每个用户的身份标识;
(4c)判断第一个用户的身份标识是否满足环签名闭合条件,若是,则执行步骤(4d),否则,退出签名;
(4d)判断所有的环签名中是否存在满足可链接条件的两个环签名,若是,则退出签名,否则,执行步骤(5);
(5)生成多重签名信息:
(5a)签名收集者将签名群组公钥作为多重签名信息的输入地址;
(5b)签名收集者将签名群组中所有用户的新账户作为多重签名信息的输出地址;
(5c)按照下式,签名收集者生成多重签名信息,发送多重签名信息给签名群组中的所有用户:
t=γ||m
其中,t表示签名收集者生成的多重签名信息,||表示级联操作,m表示签名群组中所有用户的新账户集合;
(6)签署多重签名信息:
(6a)签名群组中的所有用户使用各自的私钥,签署多重签名信息;
(6b)将多重签名广播至区块链系统;
(7)验证签名:
区块链系统上的矿工使用签名群组公钥验证签名,将有效的多重签名记录至区块链。
本发明与现有技术相比具有如下优点:
第一,由于本发明生成可链接的环签名,将可链接的环签名和包含所选用户新账户的待签名消息发送给签名收集者,克服了现有技术中用户每次与半可信第三方交互都需要若干区块的确认的缺点,使得本发明中通信的时间延迟更低,效率更高,提升区块链系统的整体安全性能。
第二,由于本发明所选用户利用递推公式计算其他用户的身份标识,克服了现有技术中生成的签名长度较长,为区块链系统增加了过多负担的缺点,使得本发明中的环签名数据包更小,提高了系统的效率。
第三,由于本发明生成多重签名信息,克服了现有技术中生成的签名与现行的区块链应用场景不兼容的缺点,使得本发明更具有实用性。
附图说明
图1为本发明的流程图。
具体实施方式
下面结合附图1,对本发明做进一步详细的描述。
步骤1,生成用户的公钥私钥对。
通过安全信道,将区块链的公共参数pp={q,fq,g,n,g}发送给每个用户,其中,q表示一个256比特长的大素数,fq表示一个有限域,g表示椭圆曲线上的基点,n表示椭圆曲线上的基点的阶数,g表示基点所生成的群。
每个用户使用各自的私钥与椭圆曲线上的基点进行点乘操作,得到各自的公钥。
步骤2,生成签名群组公钥。
将拟签名的用户组成签名群组,签名群组中的每个用户广播自己的公钥。
签名群组中的每个用户收集其他用户的公钥,生成签名群组公钥。
步骤3,生成可链接的环签名。
从签名群组中任意选取一名用户,按照区块链系统规范,生成包含所选用户新账户的待签名消息。
所述的区块链系统规范是指,待签名消息包括账户公钥,账户私钥,账户资产,数字证书和账户所属机构。
利用链接标签算法,计算所选用户的链接标签。
所述的链接标签算法的具体步骤如下:
第一步,按照下式,所选用户计算自己的公钥映射:
h=h2(a)
其中,h表示所选用户的公钥映射,h2(·)表示不同于h1(·)的安全抗碰撞哈希函数,a表示所选用户的公钥;
第二步,按照下式,所选用户计算自己的链接标签:
y=a×h
其中,y表示所选用户的链接标签,a表示所选用户的私钥。
按照下式,所选用户计算身份标识:
cb+1=h1(γ,y,m,u×g,u×h)
其中,cb+1表示签名群组中第b+1个用户的身份标识,h1(·)表示安全抗碰撞的哈希函数,γ表示签名群组公钥,y表示所选用户的链接标签,m表示包含所选用户新账户的待签名消息,u表示所选用户在[1,n-1]范围内随机选择的正整数,×表示椭圆曲线上的点乘操作,h表示所选用户的公钥映射。
所述的安全抗碰撞的哈希函数为
利用递推公式,所选用户计算其他用户的身份标识。
所述的递推公式如下:
ci+1=h1(γ,y,m,si×g+ci×ai,si×h2(ai)+ci×y)
其中,ci+1表示签名群组中第i+1个用户的身份标识,i的取值范围为[b+1,t]∪[1,b-1],b表示所选用户在签名群组中的索引值,t表示签名群组的用户总数,∪表示集合并操作,si表示所选用户在[1,n-1]范围内随机选择的签名群组中第i个用户的签名分量,ci表示签名群组中第i个用户的身份标识,ai表示签名群组中第i个用户的公钥。
所选用户利用环签名生成算法生成可链接的环签名,将可链接的环签名和包含所选用户新账户的待签名消息发送给签名收集者。
所述的环签名生成算法的步骤如下:
第一步,按照下式,所选用户计算自己的签名分量:
sb=u-acbmodn
其中,sb表示所选用户的签名分量,cb表示所选用户的身份标识,mod表示数模操作;
第二步,按照下式,所选用户生成可链接的环签名:
σ=c1||s||y
其中,σ表示所选用户生成的可链接的环签名,c1表示签名群组中第一个用户的身份标识,s表示签名群组中所有用户的签名分量集合。
判断是否选完签名群组中的所有用户,若是,则继续执行,否则,执行步骤(3a);
步骤4,签名收集者验证环签名。
签名收集者接收签名群组中的所有用户发来的环签名。
利用环签名恢复公式,签名收集者计算签名群组中每个用户的身份标识。
所述的环签名恢复公式如下:
ci+1=h1(γ,y,m,si×g+ci×ai,si×h2(ai)+ci×y)
其中,ci+1表示签名群组中第i+1个用户的身份标识,i的取值范围为[1,t]。
判断第一个用户的身份标识是否满足环签名闭合条件,若是,则继续执行,否则,退出签名。
所述的环签名闭合条件是指下式成立:
c1=h1(γ,y,m,st×g+ct×at,st×h2(at)+ct×y)
其中,st表示签名群组中第t个用户的签名分量,ct表示签名群组中第t个用户的身份标识,at表示签名群组中第t个用户的公钥。
判断所有的环签名中是否存在满足可链接条件的两个环签名,若是,则退出签名,否则,继续执行。
所述的可链接条件是指,两个不同的环签名的链接标签相等。
步骤5,生成多重签名信息。
签名收集者将签名群组公钥作为多重签名信息的输入地址。
签名收集者将签名群组中所有用户的新账户作为多重签名信息的输出地址。
按照下式,签名收集者生成多重签名信息,发送多重签名信息给签名群组中的所有用户:
t=γ||m
其中,t表示签名收集者生成的多重签名信息,||表示级联操作,m表示签名群组中所有用户的新账户集合。
步骤6,签署多重签名信息。
签名群组中的所有用户使用各自的私钥,签署多重签名信息。
将多重签名广播至区块链系统。
步骤7,验证签名。
区块链系统上的矿工使用签名群组公钥验证签名,将有效的多重签名记录至区块链。