基于区块链的具有隐私保护的公平合同签署方法与流程

文档序号:17775413发布日期:2019-05-28 20:02阅读:347来源:国知局
基于区块链的具有隐私保护的公平合同签署方法与流程

本发明涉及信息安全技术领域,具体涉及一种基于区块链的具有隐私保护的公平合同签署方法。更具体地说,本发明是实现一个去中心化的公平合同签署方法,同时保证签署人身份、签署合同内容、合同的数字签名都是隐藏的。



背景技术:

在电子商务中,人们往往通过签署合同来保护自己的权利和经济利益,公平合同签署协议本质上是参与方之间公平交换对合同内容的数字签名。可以保证双方同时收到对方对合约的签名,一旦某一方不签名而得到了对方的签名,将受到相应的惩罚。

如今已经提出了很多合同签署协议方案,根据对可信第三方中心(ttp)的依赖程度,可以分为三类:第一类是没有ttp参与的协议,合同签名者之间通过轮流交换1比特秘密信息来实现完整签名信息的交换,其中一方最多知道对方的1比特信息;第二类是在线ttp协议,需要依赖可信第三方进行公平合同的签署;第三类是离线ttp协议,是为了处理第二类中出现的ttp或某一方不在线,使另一方无止境等待的情况。后两类中,ttp都掌握着合同签署相关的敏感信息,如果第三方不诚实,就存在第三方和某一方合谋得到其他签名者信息的不公平现象。另外,这种第三方中心掌握了大量的敏感信息,包括合同内容信息,签署方的身份信息以及合同的数字签名信息。如果第三方有意或者无意中将敏感信息泄露给他人,或者遭受到外部攻击,造成数据泄露将会对参与方的隐私造成极大威胁。为了避免中心化带来的安全风险,也逐渐向多中心甚至去中心化发展。

近年来,随着比特币的兴起,区块链技术受到广泛关注。区块链可以看成一个去中心的可信第三方,它具有去中心化、高度透明、不可篡改等优点。在区块链上部署公平合同签署协议可以消除第三方中心带来的弊端。然而,区块链上的数据是公开的,如果考虑隐私性,每个人都会知道签署人的身份和合同的签名。如果合同涉及经济利益,签署方的身份及合同相关信息一旦泄露,其他人可能通过这些泄露的数据猜测出一些有价值的信息,可能会给参与者带来经济上的损失。一个有效的签名信息一旦公布,攻击者或许有机会伪造一个有效的合同签名。为了将这些敏感信息隐藏起来,就需要用到一些密码学匿名工具。通过将区块链与匿名技术相结合,构造一个可以实现去中心且具有隐私性的公平合同签署方法。

现有技术中,也有些文献对此有研究。2015年,wan等人在文献《electroniccontractsigningwithoutusingtrustedthirdparty》中设计了一个基于时间戳服务器的,通过区块链技术实现的去中心化的公平合同签署协议。也有相关文献主要研究基于区块链的公平交换协议,可以实现公平合同签署协议,但这些协议都没有考虑隐私保护的需求。2017年,haibotian等人在文献《contractcoin:towardspracticalcontractsigningonblockchain》中提出了基于rsa的盲的可验证加密签名方案rsa-bves(rsablindedverifiableencryptedsignature),并将它应用于公平合同签署协议中。该协议实现了隐藏所签署的合同信息,合同的数字签名,同时使用押金来达到协议的公平性。但是没有完全隐藏合同签署者的身份。

因为区块链上交易信息是公开的,交易的来源和去向是可以被追踪的,即使交易数据隐藏起来了,如果没有隐藏交易的来源,恶意者仍然可以通过追溯交易的资金流向分析出这个交易的用户身份。从而对该用户的其他交易行为相联系,推断出一些有效信息。在2017年haibotian等人的文献中,在首次用户往联合交易中转账时,使用的是自己账户中的余额,因此将用户的真实身份与签署合同的交易地址相联系起来了,由此泄露了该用户参与了此次合同签署,这在一些涉及敏感签署方信息的的合同签署中是具有极大风险的。所以在签署合同协议中并没有起到完全隐藏签署者身份的作用。

因此,主要工作是使用密码学工具一次性环签名技术将用户在初次转账时的身份隐藏起来,同时,在合同签署过程中使用盲化的合同签名办法,实现不泄露用户身份的设想。

环签名在1991年就被提出来了,但当时这项技术被称为群签名(groupsignature),群签名是需要依赖一个可信的第三方来参与,随着后来研究人员不断的改进,逐渐发展成今天稍成熟的环签名技术,环签名不需要可信第三方的参与。环签名要做的就是将签名者的公钥和另外一个公钥集合(但不知道私钥)进行混合,然后再对消息进行签名,这样对于签名验证者(任何人都可以验证)来说,无法区分混合后集合中哪一个公钥对应的是真正的签名者。

首先要注意的是,这里的“一次性”指的是一个币对应一个私钥,花钱时用来签名,只能用一次。每个用户可以随机生成多个公私钥对。如果出现双花,这两个用同一个私钥签名的交易将会彼此联系,将会被矿工发现。因此一次性环签名不仅实现了签名者身份的隐藏,同时有效防止了双花。

一次性环签名包括四个算法:(gen,sig,ver,lnk)。其中gen算法是输入一些公开参数,输出一次性的椭圆曲线公私钥对(p,x),和一个公钥i;sig是签名算法,输入为要签名的信息m,一个公钥的集合{pi},输出一个签名σ;ver是签名验证算法,输入签名消息m,以及前面的签名,验证通过输出为“true”,否则为“false”;lnk是检查有没有双花的算法,如果发现双花,两个签名会彼此链接,输出为“linked”;否则两个签名之间是独立的,输出为“indep”。

在涉及到签署合同时,为了使签署的合同满足一般的文档格式,采用基于rsa的合同签名,参考文献《contractcoin:towardspracticalcontractsigningonblockchain》中的基于rsa的盲的可验证加密算法。该加密算法是包括实现a、b对消息m的盲签名,最后将对方对消息的真实签名提取出来的过程。

其中涉及到7个算法。其中三个为基于rsa方案的签名算法:keygen,sign,verify。presignagree算法用来产生对需要签名信息的标签。对这个标签的签名是通过rsa-bvessign算法产生。矿工对这个标签产生的签名进行验证是通过算法rsa-bvesver来完成。最后b使用ext算法提取来自于a对文件的真实签名。



技术实现要素:

针对现存的基于区块链的公平合同签署协议存在的隐私性上的不足,本发明公开了一种基于区块链的隐私保护公平合同签署方法。该方法是对以往公平签署合同协议上隐私方面的改进,通过使用一次性环签名技术,实现隐藏区块链中交易的来源,混淆用户身份,从而实现更强的隐私性,有效地保证了合同签署过程中信息安全问题。

本发明的目的可以通过采取如下技术方案达到:

一种基于区块链的具有隐私保护的公平合同签署方法,所述的公平合同签署方法包括下列步骤:

s1、a、b双方初始化参数,各自从证书颁发机构ca得到合法证书certa、certb,协商要签署的文件,及签署合同押金金额d;

s2、a生成联合交易的一部分,然后向该联合交易地址转账,用a的私钥对交易签名,最后发给b;

s3、b验证联合交易,验证通过后将交易补充完整,并转入押金,用b的私钥签名,然后发送到区块链网络中;

s4、a、b双方分别计算对合同的签名,加密之后连同构建的opena和openb交易,一起发送到区块链网络中;

s5、a从openb交易中获得b对合同的签名,拿回联合交易中自己的押金d;b从opena交易中获得a对合同的签名,拿回联合交易中自己的押金d;

s6、a运行提取算法,提取出b对合同的签名;同理,b运行提取算法,提取出a对合同的签名。

进一步地,所述的步骤s1中a、b除了需要各自从证书颁发机构ca得到合法证书外,还需要为形成rsa签名生成初始密钥对,并发送给对方。

进一步地,所述的步骤s2中a往联合交易地址转账时采用的是一次性环签名技术,实现混淆交易来源,隐藏a的身份。

进一步地,所述的步骤s3中,b在对联合交易补充时,同样从b账户往联合交易地址转账,其中,转账使用一次性环签名技术来混淆交易来源,隐藏b的真实身份,转账数额为押金金额d。

进一步地,所述的押金金额d以1比特币为单位。

进一步地,所述的步骤s4中对合同的签名采用基于盲的可验证的rsa签名算法。

进一步地,所述的步骤s5中,如果a、b其中任意一方没有将opena交易或openb交易放在链上,这一方将拿不回自己在联合交易中的押金金额d。

进一步地,整个过程中合同的内容、合同的真实签名、a和b的身份都被隐藏起来,除了签名双方,其他人都无法猜测出有谁参与了合同的签署,并且签署的内容和签名是什么。而且对于不诚实给出签名的用户有惩罚措施。

本发明相对于现有技术具有如下的优点及效果:

1、采用基于区块链的去中心化方式部署,避免了中心化带来的风险。

2、使用带有惩罚机制的智能合约实现了公平的合同签署协议。

3、完全隐藏了合同签署双方的身份,隐藏了合约的内容,以及双方对合约的签名,实现了基于区块链的隐私保护的公平合同签署。

附图说明

图1是本发明实施例提供的基于区块链的具有隐私保护的公平合同签署方法流程图;

图2是本发明实施例提供的基于区块链的具有隐私保护的公平合同签署方法的合同签署用例图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例

本实施例公开了一种基于区块链的具有隐私保护的公平合同签署方法,采用区块链技术和一次性环签名技术以及基于rsa的盲签名技术进行双方的公平合同签署,该公平合同签署方法首先是参与签署合同的a、b双方初始化参数,得到合法证书certa和certb、协商要签署的文件、协商签署合同的押金金额d;其次a生成联合交易的一部分,然后向该联合交易地址转账,用自己的私钥对交易签名,再发给b;然后b对联合交易验证,验证通过后将交易补充完整,用自己的私钥签名,然后发送到区块链网络中去;再其次a、b双方分别计算对合同的签名,加密之后连同构建的opena(a创建的交易,输入为自已对合同的签名;输出是将押金转到自己的一次性地址),openb(b创建的交易,输入为自已对合同的签名;输出是将押金转到自己的一次性地址)交易,一起发送到区块链网络;再其次a从openb中获得b对合同的签名,拿回联合交易中自己的押金d,同理,b也可以得到加密的签名和押金;最后a运行提取算法,提取出b对合同的签名;同理b提取出a对合同的签名。

该公平合同签署方法具体步骤如下:

步骤s1、a、b双方初始化参数,得到合法证书certa、certb,协商要签署的文件,协商签署合同的押金金额d。

具体步骤如下:a生成临时rsa密钥对(na,ea,da),这个密钥对是一次性的,其中(na,ea)是公钥,(na,da)是私钥,这也是为了在签署合同过程中隐藏身份。a用自己的私钥ska对临时公钥(na,ea)签名,产生证书tca。然后a把certa和tca发给b。b收到之后对certa和tca进行验证,验证通过的话,b和a一样,会产生一个临时证书tcb,临时公钥(nb,eb),然后生成盲签名验证算法(presignagree算法)中的参数(ga,yab),此参数是为了计算公共标签,而a、b通过几轮的参数交换将得到一样的公共标签l。随后将certb,tcb,(ga,yab)发送给a。

当a收到b发来的certb,tcb,(ga,yab)之后,a会像b一样,首先对b的身份进行验证。如果验证通过,a会生成presignagre算法中的参数(gb,yba),然后计算presignagree算法中的其他参数sa,yaa,yar,mab。接着a将(gb,yba),yaa,yar,mab发给b,并令签名标签la=(na,ea,ga,yab,yaa,yar)(此签名标签是为了让a、b之间共享可以解密的参数)。

b收到(gb,yba),yaa,yar,mab之后,会像presignagree算法中一样,先验证消息mab,如果验证通过,b令l′a=(na,ea,ga,yab,yaa,yar)。随后,b依据presignagree算法,计算其中的参数sb,ybb,ybr,mbb,然后将ybb,ybr,mbb发给a,并令lb=(nb,eb,gb,yba,ybb,ybr),这是b生成的标签。

在收到ybb,ybr,mbb之后,a也会验证mbb,如果验证通过,a令标签l′b=(nb,eb,gb,yba,ybb,ybr)。

步骤s2、a生成联合交易的一部分,然后向该联合交易地址转账,用自己的私钥对交易签名,最后发给b。

a首先在自己钱包中找一笔交易ta是没有花过的,且金额为d,a将ta的id号txid发给b。b也找一笔交易tb是没有花过的,且有金额为d,b将tb的id号txid发给a。现在a来产生一个联合交易。

这个交易的输入需要包含a的签名脚本,在此a会使用一次性环签名技术来隐藏身份。然后a会指定两个输出:第一个输出脚本需要body,δa,δb,δab(其中body表示相关数据填充内容,δa表示a花钱时的签名脚本,δb表示b花钱时的签名脚本,δab是a对合同的盲化后的签名)作为输入,需要满足的布尔条件是:要么在时间t内,提供来自于a的有效签名δa并且bv(la,δab)算法(该算法表示对a给出的的盲化的rsa签名验证通过)返回为真;要么超过时间t后,提供来自于b的有效签名δb。第一个输出为d;第二个输出脚本与上面提到的类似,需要body,δa,δb,δbb(δbb是b对合同的盲化后的签名)作为输入,需要满足的布尔条件是要么在时间t内,提供来自于b的有效签名δb并且bv(l′b,δbb)算法(对b的盲化的rsa签名验证通过)返回为真;要么超过时间t后,提供来自于a的有效签名δa。第二个输出同样为d。a然后将部分构建好的联合交易发给b。

步骤s3、b对联合交易验证,验证通过后将交易补充完整,用自己的私钥签名,然后发送到区块链网络中去。

b收到后会先检查两个输出的金额和脚本。因为b有l′a和lb,并且知道交易对象的身份,知道ta,tb。b会检查是否a可以消费ta,若所有检查通过后,b会用自己的私钥在输入脚本处给这个交易进行签名,并广播提交这个交易到区块链网络中去。

步骤s4、a、b双方分别计算对合同的签名,加密之后连同构建的opena,openb交易,一起发送到区块链网络。

如果a看到这个联合交易在规定时间内出现在了区块链上,a会开始计算合同签名,依据rsa-bves签名方案中的res-bvessign算法,产生签名δab。然后为了在给出签名后能取回自己在联合交易中的钱,a会产生一个交易opena,依照如下形式:

(1)输入脚本包括a的签名(用自己的私钥ska签名),以及rsa-bves签名δab。

(2)a会指定一个d的输出。输出脚本只有body和a用私钥ska的签名。布尔条件是:来源于a的这个签名是有效的。

然后a将opena交易广播。

同样,在b发现联合交易被及时确认并放在链上之后,b也会计算合同签名,依据rsa-bves签名方案中的res-bvessign算法,产生签名δbb。然后为了取回自己在联合交易中的押金,b会产生一个交易openb

但也存在如果在规定时间内,联合交易还没有出现在链上,合同的签署被迫中止。这时,任何一方都可以花掉之前存在联合交易中的押金,中止合同的签署。例如,a等了几个小时,但联合交易仍然没有出现,也可以将ta交易中的钱花掉,因为拥有对应私钥。

步骤s5、a从openb中获得b对合同的签名,拿回联合交易中自己的押金d;同理,b也可以得到加密的签名和押金。

如果在规定时间内opena出现在了区块链上,但openb没有出现,并且已经过了正常验证时间,此时a可以生成赎回押金的claima交易,如下:

(1)输入脚本包括a的签名;

(2)a指定一个输出为d比特币。输出脚本只需要body以及来自a的签名。布尔条件是来自于a的签名是有效的。

然后a将这claima广播,就可以拿走b在联合交易中的押金;同理,如果在规定时间内opena交易没有出现,b也可以拿走a的押金。

步骤s6、a运行提取算法,提取出b对合同的签名;同理b提取出a对合同的签名。

如果openb交易在约定时间内出现在链上,a就可以通过联合交易和openb交易脚本中的(lb,δbb)提取合同的rsa签名。a运行ext算法,提取出的有效rsa合同签名是关于(nb,eb)的。同理,b也可以提取出a的关于(na,ea)的rsa签名。

a可以将关于(nb,eb)的对合同的rsa签名,以及临时证书tcb,证书certb列在bob对于合同的签名列表中。a将把这个列表凭证的形式放进合同中当成b对合同的签名。同理,b也会得到a对合同的签名列表凭证。因为在a、b分别往联合交易地址转账的时候,隐藏了钱的来源,因此在这一步很好地隐藏了自己的身份。而且在合同签名的过程中也实现了用户身份的隐藏。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1