一种基于环签名和智能合约的以太坊交易隐私保护方法

文档序号:1834510 发布日期:2021-11-12 浏览:21次 >En<

阅读说明:本技术 一种基于环签名和智能合约的以太坊交易隐私保护方法 (Ether shop transaction privacy protection method based on ring signature and intelligent contract ) 是由 黄杰 王威 于 2021-06-11 设计创作,主要内容包括:本发明公开了一种基于环签名和智能合约的以太坊交易隐私保护方法,以隐藏用户的原始账户地址,实现了以太坊交易隐私保护,包括以下步骤:(1)生产账户地址;(2)部署智能合约;(3)计算环签名;(4)向合约转账;(5)向合约发送公钥及环签名;(6)验证公钥;(7)验证环签名;(8)执行转账交易,本发明能够在隐藏用户原始账户地址的情况下完成向目标账户地址转账的目的,同时保证交易的可追溯性。(The invention discloses an Ethernet workshop transaction privacy protection method based on a ring signature and an intelligent contract, which is used for hiding an original account address of a user and realizing Ethernet workshop transaction privacy protection and comprises the following steps: (1) a production account address; (2) deploying an intelligent contract; (3) calculating a ring signature; (4) transferring the account to the contract; (5) sending a public key and a ring signature to the contract; (6) verifying the public key; (7) verifying the ring signature; (8) the invention can finish the purpose of transferring accounts to the target account address under the condition of hiding the original account address of the user and simultaneously ensure the traceability of the transaction.)

一种基于环签名和智能合约的以太坊交易隐私保护方法

技术领域

本发明涉及密码学以及信息安全技术领域,具体是一种基于环签名和智能合约的以太坊交易隐私保护方法。

背景技术

随着以太坊等区块链系统的兴起,如何在开放的区块链系统中保护用户的交易隐私已成为一个重要的研究课题。区块链维护的公开账本中记录了所有的交易数据,包括了交易的发起账户和接收账户。虽然这些账户地址与用户在真实世界中的信息不存在任何关系,但是攻击者可以通过分析区块链中的交易和账户数据进而关联到用户在真实世界中的IP或者其他可识别的身份信息。

例如,某个用户在线下进行消费时通过以太币进行支付,那么商家事实上就将用户的线上以太坊账户地址和用户的线下身份之间建立了关联。一旦攻击者通过分析以太坊中的交易数据,锁定了某个接收转账的账户地址就是商家的账户地址。攻击者就可以通过入侵商家的数据系统来获取到用户的以太坊账户地址和真实世界身份的关联信息,严重威胁到用户的数字货币资产的安全。

在区块链交易隐私保护研究领域,环签名技术是研究和关注的热点。环签名算法是由Rivest等人于2001年提出的一种新型的数字签名算法,签名的生成过程中签名需要按照一定的规则首尾相接,形成环型结构,因此该算法被称为环签名。不同于群签名,环签名中不存在管理系统,因此无法撤消单个签名的匿名性。另外,环签名的生成不需要群签名中所需的群建立过程,大大增加了签名的生成效率。

环签名可以由一组具有公私钥对的签名者集合的其中任何一名成员执行,无需其他成员参与。实际的签名者可以使用自己的私钥以及签名者集合中所有成员的公钥来生成环签名,任何验证者都可以通过签名者集合中的公钥来验证该环签名是否由该签名者集合中的成员签发。如果签名通过验证,验证者也只能知道签名者属于签名者集合,但是却不能确定签名者是集合中的哪一个成员。因此环签名可以很好的保护用户隐私,实现匿名性。

智能合约是在以太坊虚拟机(Ethereum Virtual Machine,简称EVM)中运行的代码,可以理解为存在某个特定账户地址上的功能模块集合。基于目前主流的solidity编程语言,用户可以开发出实现定制化操作的智能合约。智能合约被部署到以太坊主网络以后,会生成一个特定的合约账户地址。当以太坊中的用户需要调用合约中的函数时,就可以使用发送交易信息的方式与合约账户地址进行通信。在消息字段中表明需要调用的功能函数,以及对应要传递的函数参数,函数执行成功后即代表此交易成功。此交易不同于传统的以太转账交易,并不涉及钱包之间余额的传递,但仍需花费gas,且每笔交易也和普通交易一样生成哈希值并保存在区块中。

作为目前比较热门的区块链系统,以太坊中的交易数据都是公开的,所以用户在以太坊中发起的任何交易都是公开透明的。本发明尝试通过环签名技术和智能合约技术来保护用户的以太坊交易隐私,在隐藏用户原始账户地址的情况下完成向目标账户地址转账的目的,同时保证交易的可追溯性。

发明内容

本发明基于上述背景和存在的问题,拟提供一种基于环签名和智能合约的以太坊交易隐私保护方法,其能够在隐藏用户原始账户地址的情况下完成向目标账户地址转账的目的,同时保证交易的可追溯性。

为解决上述技术问题,本发明提供一种基于环签名和智能合约的以太坊交易隐私保护方法,包括如下步骤:

(1)生成账户地址:使用者需要采用椭圆曲线加密算法额外生成n个账户地址,具体如下所示:

addressPool={address0,address1,...,addressn-2,addressn-1}

addressPool中的每个账户地址都对应一个账户公钥,即addressi对应的账户公钥为addressPool中的每个账户地址都对应一个账户私钥,账户地址发起的每一笔交易都需要依赖于对应账户私钥进行的签名,即addressi对应的账户私钥为

使用者使用自己的账户地址addressA来替代addressPool中的addressj,其中j∈[0,n-1],生成了addressGroup;addressGroup中的账户地址对应的账户公钥集合为publicKeyGroup,具体如下所示:

addressGroup={address0,...,addressj-1,addressA,addressj+1,...,addressn-1}

(2)部署智能合约:使用者使用账户地址addressj来将交易隐私保护合约部署到以太坊主网络中,并生成合约账户地址addresscontract。账户地址addressj是该合约的拥有者,即owner=addressj。owner变量会保存到交易隐私保护合约中,交易隐私保护合约中的函数在调用时需要判断调用者的账户地址是否与owner变量相同,只有合约拥有者addressj才能调用合约中的函数。

(3)计算环签名:利用公钥集合publicKeyGroup与addressA对应的账户私钥来生成环签名σ,环签名σ采用的是AOS环签名算法,环签名σ表示为 (e0,s0,s1,......,sn-1),公钥其中为addressA对应的账户私钥且素数阶为q循环群 是循环群的生成元;等待被签名的消息 M=keccak256(pwd),其中keccak256为哈希函数,pwd是使用者为计算环签名所设置的一次性口令,该口令在整个过程中都不会公开,只有使用者知道口令pwd的内容。

(4)向合约转账:交易隐私保护合约利用合约地址addresscontract来帮用户执行转账交易,但是用户需要提前使用账户地址addressj来将数额为amount的以太币(单位为wei)发送到合约账户地址addresscontract,这样交易隐私保护合约才会拥有数额为amount的以太币(单位为wei)以用于替用户执行转账交易。

(5)向合约发送公钥及环签名:使用者使用账户地址addressj对应的账户私钥xj来签名一个调用环签名合约上的sendRingSignature函数的交易。在交易中,使用者需要向函数传入的参数为账户地址集合addressGroup、账户公钥集合publicKeyGroup、环签名σ、被签名的消息keccak256(pwd)、交易接收者的账户地址addressB、交易转账的以太币数额amount,交易会被广播到交易隐私保护合约的账户地址addresscontract并调用sendRingSignature函数,而sendRingSignature函数会依次调用合约内的3个函数,分别是验证公钥的verifyPublicKey函数、验证环签名的verifyRingSignature函数、执行交易的transferEther函数。

(6)验证公钥:首先,verifyPublicKey函数利用msg.sender全局变量来获取交易发起者的账户地址。只有调用者的账户地址与owner变量相同时,即调用者的地址为addressj时,函数才能被调用成功,solidity智能合约中的ms g.sender全局变量可以用来获取调用合约的账户地址,该变量获取到的是合约调用者的真实账户地址。

然后,verifyPublicKey函数会判断传入的账户地址集合addressGroup中的每个账户地址是否与账户公钥集合publicKeyGroup中的每个公钥对应,判断方法的伪代码如下所示:

(7)验证环签名:接着,verifyRingSignature函数会被调用以判断传入的环签名σ= (e0,s0,s1,......,sn-1)的完整性。

(8)执行转账交易:transferEther函数会被调用以向特定的账户地址进行转账。一旦环签名认证成功,交易隐私保护合约会使用自己的合约账户地址addresscontract来向账户地址addressB发起转账交易,转账的金额是数额为amount的以太币(单位为wei)。交易隐私保护合约使用自己的合约地址addresscontract来帮助用户进行交易,成功地隐藏了用户的原始账户地址,实现了保护用户以太坊交易隐私的目的。。

优选的,步骤(3)中AOS环签名算法的具体生成过程如下所示:

1)签名者选取长度为n的公钥集合publicKeyGroup={P0,P1,......,Pn-2,Pn-1},其中Pi的值如下所示:

2)生成随机数计算ej+1=keccak256(Q||M);

3)for i=(j+1)mod n;0≤i<n,i≠j;i=(i+1)mod n do

生成随机数并依次计算

4)设置使得等于

5)生成的AOS环签名为σ=(e0,s0,s1,......,sn-1);

优选的,所述步骤(7)中判断环签名σ完整性的方法具体步骤如下:

1)根据函数传入的参数可知被签名的消息M=keccak256(pwd)。

2)根据AOS环签名中的值依次计算,最后求出e0。其中Pi=publicKeyGroup[i],计算过程如下所示:

3)将求出的e0和AOS环签名中的e0进行比对,如果相同则代表该环签名σ有效。验证者无法知道环签名σ中的哪个si是利用签名者的私钥生成的,从而实现隐藏签名者身份的作用。

优选的,所述步骤(3)中生成环签名时使用的未公开口令pwd可以保证交易的可追溯性。在计算环签名过程中使用的口令pwd在整个交易过程中并未公开。如果日后需要对交易进行追溯,使用者可以通过向交易接收方或者第三方机构公开口令pwd来证明自己是环签名的生成者,从而证明自己是交易真实的发送方。

本发明的有益效果为:本发明提供一种基于环签名和智能合约的以太坊交易隐私保护方法。环签名技术可以将用户的原始账户地址隐藏在包含多个账户地址的账户地址集合之中;如果计算出的环签名通过了智能合约的验证,智能合约会使用自己的合约账户地址向指定的接收地址进行转账。以太坊中的外部观察者只能通过环签名来判断出发起转账交易的原始账户地址是账户地址集合之中的其中一个账户地址,但不能准确地分析出具体是哪个账户地址,从而实现了隐藏用户原始账户地址的目的,有效地保护了用户的以太坊交易隐私。另外,该方法可以在实现以太坊交易隐私保护的同时确保交易的可追溯性。如果日后需要对交易进行追溯,用户可以通过公开计算环签名过程中使用的口令来证明自己是环签名的生成者,从而证明自己是交易真实的发送方。

附图说明

图1为本发明中方法实施的过程图。

图2为本发明中部署智能合约的示意图。

图3为本发明中环签名生成的示意图。

图4为本发明中调用智能合约的示意图。

具体实施方式

如图1所示是本发明一种基于环签名和智能合约的以太坊交易隐私保护方法,包括如下步骤:

(1)生成账户地址:Alice需要采用椭圆曲线加密算法(Elliptic CurveCryptography,简称ECC)额外生成n个账户地址,具体如下所示:

addressPool={address0,address1,...,addressn-2,addressn-1}

addressPool中的每个账户地址都对应一个账户公钥,即addressi对应的账户公钥为addressPool中的每个账户地址都对应一个账户私钥,账户地址发起的每一笔交易都需要依赖于对应账户私钥进行的签名,即addressi对应的账户私钥为

Alice使用自己的账户地址addressA来替代addressPool中的addressj,其中j∈[0,n-1],生成了addressGroup;addressGroup中的账户地址对应的账户公钥集合为publicKeyGroup,具体如下所示:

addressGroup={address0,...,addressj-1,addressA,addressj+1,...,addressn-1}

(2)部署智能合约:交易隐私保护合约的作用是验证用户提供的环签名的真实性,然后利用合约地址来帮用户执行交易,以隐藏用户的原始账户地址。如图2所示,Alice 使用账户地址addressj来将交易隐私保护合约部署到以太坊主网络中,并生成合约账户地址addresscontract。账户地址addressj是该合约的拥有者,即owner=addressj。 owwner变量会保存到交易隐私保护合约中,合约中的函数在调用时需要判断调用者的账户地址是否与owner变量相同,只有合约拥有者addressj才能调用合约中的函数。

(3)计算环签名:Alice利用公钥集合publicKeyGroup与addressA对应的账户私钥来生成环签名σ。这里采用的是AOS(Abe-Ohkubo-Suzuki,简称AOS)环签名算法,其中包含的相关参数为:素数阶为q循环群 是循环群的生成元;公钥其中为addressA对应的账户私钥且哈希函数采用的是keccak256哈希函数;等待被签名的消息M=keccak256(pwd),其中 pwd是Alice为计算环签名所设置的一次性口令,该口令在整个过程中都不会公开,只有Alice知道口令pwd的内容。

AOS环签名的生成示意如图3所示,包括如下的步骤:

1)签名者选取长度为n的公钥集合publicKeyGroup={P0,P1,......,Pn-2,Pn-1},其中Pi的值如下所示:

2)生成随机数计算ej+1=keccak256(Q||M);

3)for i=(j+1)mod n;0≤i<n,i≠j;i=(i+1)mod n do

生成随机数并依次计算

4)设置使得等于

5)生成的AOS环签名为σ=(e0,s0,s1,......,sn-1);

(4)向合约转账:交易隐私保护合约利用合约地址addresscontract来帮用户执行转账交易,但是用户需要提前使用账户地址addressj来将数额为amount的以太币(单位为wei)发送到合约账户地址addresscontract,这样交易隐私保护合约才会拥有数额为 amount的以太币(单位为wei)以用于替用户执行转账交易。

(5)向合约发送公钥及环签名:如图4所示,Alice使用账户地址addressj对应的账户私钥xj来签名一个调用环签名合约上的sendRingSignature函数的交易。在该交易中,Alice需要向函数传入的参数为账户地址集合addressGroup、账户公钥集合publicKeyGroup、环签名σ、被签名的消息keccak256(pwd)、交易接收者的账户地址addressB、交易转账的以太币数额amount。

该笔交易会被广播到交易隐私保护合约的账户地址addresscontract并调用sendRingSignature函数,而sendRingSignature函数会依次调用合约内的3个函数,分别是验证公钥的verifyPublicKey函数、验证环签名的verifyRingSignature函数、执行交易的transferEther函数。

(6)验证公钥:首先,verifyPublicKey函数利用msg.sender全局变量来获取交易发起者的账户地址。只有调用者的账户地址与owner变量相同时,即调用者的地址为addressj时,函数才能被调用成功。(solidity智能合约中的msg.sender全局变量可以用来获取调用合约的账户地址,该变量获取到的一定是合约调用者的真实账户地址)。

然后,verifyPublicKey函数会判断传入的账户地址集合addressGroup中的每个账户地址是否与账户公钥集合publicKeyGroup中的每个公钥对应,判断方法的伪代码如下所示:

(7)验证环签名:接着,verifyRingSignature函数会被调用以判断传入的环签名σ= (e0,s0,s1,......,sn-1)的完整性,判断方法如下:

1)根据函数传入的参数可知被签名的消息M=keccak256(pwd)。

2)根据AOS环签名中的值依次计算,最后求出e0。其中Pi=publicKeyGroup[i],计算过程如下所示:

3)将求出的e0和AOS环签名中的e0进行比对,如果相同则代表该环签名σ有效。验证者无法知道环签名σ中的哪个si是利用签名者的私钥生成的,从而实现隐藏签名者身份的作用。

(8)执行转账交易:接着,transferEther函数会被调用以向特定的账户地址进行转账。一旦环签名认证成功,交易隐私保护合约会使用自己的合约账户地址addresscontract来向账户地址addressB发起转账交易,转账的金额是数额为amount的以太币(单位为wei)。交易隐私保护合约使用自己的合约地址addresscontract来帮助用户进行交易,成功地隐藏了用户的原始账户地址,实现了保护用户以太坊交易隐私的目的。

基于环签名和智能合约的以太坊交易隐私保护方法可以在保护交易隐私的同时确保交易记录的公开性和可追溯性。以太坊中的所有交易信息都是公开的,调用智能合约上的函数也是通过交易的方式进行的,这意味着在调用智能合约函数的过程中向函数传入的参数也是公开可见的。以太坊中的任何观察者都可以通过查看和验证交易记录来得出结论:addressGroup中的某个账户地址向addressB转账了数额为amount的以太币 (单位为wei),但是并不清楚转账的真实账户地址;另外,Alice在计算环签名过程中使用的口令pwd在整个交易过程中并未公开。如果日后需要对交易进行追溯,Alice可以通过向交易接收方Bob或者第三方机构公开口令pwd来证明自己是环签名的生成者,从而证明自己是交易真实的发送方。

本发明提供了一种基于环签名和智能合约的以太坊交易隐私保护方法,可以有效保护以太坊交易隐私。环签名技术可以将用户的原始账户地址隐藏在包含多个账户地址的账户地址集合之中;如果计算出的环签名通过了智能合约的验证,智能合约会使用自己的合约账户地址向指定的接收地址进行转账。以太坊中的外部观察者只能通过环签名来判断出发起转账交易的原始账户地址是账户地址集合之中的其中一个账户地址,但不能准确地分析出具体是哪个账户地址,从而实现了隐藏用户原始账户地址的目的,有效地保护了用户的以太坊交易隐私。另外,该方法可以在实现以太坊交易隐私保护的同时确保交易的可追溯性。如果日后需要对交易进行追溯,用户可以通过公开计算环签名过程中使用的口令来证明自己是环签名的生成者,从而证明自己是交易真实的发送方。

以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于区块链的个人征信信息管理方法

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!