1. 引言
随着网络技术的快速发展,区块链技术 [1] [2] 因其抗篡改、去中心化、公开透明等特点逐渐受到国内外学者的关注,并被广泛应用于各个领域 [3] [4] [5] 。例如,基于区块链的加密货币被设计为链式的分布式账本,记录了交易双方的地址和交易金额等私人数据,以及其他交易数据。在区块链系统中,交易参与者通常使用公钥地址进行交易,所有数据都记录在分布式账本中 [6] 。然而,这种分布式账本在区块链网络中是完全透明的,交易关系密切相关,这意味着任何与每笔交易相关的信息都可以被区块链上的任何人访问。如果恶意对手从大量交易记录中获取有效信息,并分析地址和交易记录,则极有可能推断出参与者的身份信息,从而导致参与者身份隐私的泄露和可能的经济损失 [7] 。此外,在没有监管机构的情况下,恶意节点可以冒充正常节点加入网络,通过侦听网络信息、制造虚假信息等方式破坏交易协议 [8] 。
事务身份隐私保护可以进一步细分为事务发起者隐私保护和接受者隐私保护。此外,随着区块链技术在业内的日益普及,隐私保护与身份监管之间的冲突日益明显。基于公开链的加密货币采用匿名无访问认证机制,并通过混淆技术提供强大的交易身份隐私保护 [9] 。虽然这降低了区块链系统中与公共分类帐簿记相关的隐私风险,但它也为非法交易提供了便利 [10] 。
目前有各种可用的技术来保护事务处理、事务发起者和接收者地址的机密性。例如,零知识证明 [11] ,环签名 [12] 和隐形地址协议 [13] ,Zerocoin是一种基于零知识证明的加密货币,Zerocoin通过零知识证明技术隐藏真实交易金额和参与者身份,保证匿名性和机密性 [14] 。当用户将零币从一个地址发送到另一个地址时,零币系统将零币转换为等价的“零币支出”。这些花费与任何特定的用户身份无关。然后,零币系统利用零知识证明技术证明“零币支出”等于已知数量的“零币存款”,而不透露任何关于交易发起者或接收者身份或交易金额的信息。该方法保证了交易金额和参与者身份的机密性,支持匿名交易。虽然零币提供了更高的隐私性和安全性,但其复杂的零知识证明在交易处理过程中需要大量的计算能力和存储空间。Zerocash是作为一种对零币的改进而提出的,使用Pedersen承诺和非交互式零知识证明来减少计算需求,尽管它没有解决可控监管的问题 [15] 。Monero使用环签名和隐形地址协议来确保交易匿名性、不可追踪性和不可链接性 [16] 。在群签名算法中,签名者利用自己的私钥和任意n个环成员(包括自己)的公钥生成环签名,保护了交易发起者的身份隐私。而隐私地址协议是生成一个一次性的临时交易地址来隐藏真实地址,防止接收者与不同的交易关联,保护交易中的用户身份。有各种可用的技术来保护事务处理、事务发起者和接收者地址的机密性。
最初的隐形地址协议(Stealth Address Protocol, SAP)是由比特币社区的一位匿名成员在2011年提出的,利用承诺方案和交叉签名实现匿名交易,该提议在比特币社区得到了广泛的关注和讨论,并为后来的隐形地址协议的发展奠定了基础 [17] 。虽然SAP可用于保护交易接收者的隐私,但由于需要根据发送者的私钥计算隐形地址,因此缺乏随机性,如果接收者没有及时花掉这笔钱,交易发起者可以收回这笔资金 [18] 。因此,在SAP的基础上提出了双钥隐形地址协议(Dual-Key Stealth Address Protocol, DKSAP),其中每个用户有两个私钥:一个用于接收交易,另一个用于从接收的交易中提取资金。隐写地址的每次计算都是基于随机数,解决了SAP问题,但也带来了较大的计算和存储开销。文献 [19] 提出了一种无临时密钥泄漏的双密钥不可见地址协议PDKSAP,通过该协议发送方和接收方维护本地交易记录数据库来记录与其他用户的交易次数。文献 [20] 提出了一种基于双线性映射的高效双密钥隐藏地址协议EDKSAP。发送方计算临时事务输出地址,接收方通过双线性映射验证计算结果,提高计算性能。在 [21] 文献中,作者提出了DKSAP-IoT,一种基于类似TLS会话恢复技术的DKSAP改进方案,以提高性能,但是并没有可监管的功能,各参与方的作恶成本较低。
针对现有研究方案存在问题:一是如何在计算开销较低的同时保证完全匿名的安全数据交易,二是在交易中如何识别并追朔作恶行为,并有效的对恶意参与方进行惩罚。本文提出一种基于椭圆曲线密码的可控监督高性能匿名交易方案。在该方案中,我们在DKSAP中加入了一个承诺系统,以确保交易金额的机密性。此外,我们还引入了一个监管机构来监控每一笔交易,从而防止交易双方因信息不对称而导致的非法交易。针对恶意行为,设计了挑战–响应机制来跟踪和惩罚违规参与者,所提方案在保持较高交易效率的同时,提供了增强的安全性和隐私保障。
2. 预备知识
2.1. 椭圆曲线密码体制(ECC)
椭圆曲线密码体制(Elliptic Curve Cryptography, ECC)是一种基于椭圆曲线数学的现代广泛使用的公钥加密体制。椭圆曲线的概念最早是在19世纪中期由法国数学家Augustinlouis Cauchy提出的,他研究了椭圆积分的性质。然而,椭圆曲线在密码学中的应用直到很久以后才被发现。在20世纪70年代末和80年代初 [22] ,包括Neal Koblitz和Victor Miller在内的一群数学家独立地提出了将椭圆曲线用于密码学的想法。
椭圆曲线密码(ECC)是一种利用有限域上的椭圆曲线以较小的密钥长度提供强安全性的公钥密码体制。ECC背后的基本原理是使用椭圆曲线来生成用于加密和解密消息的公钥和私钥对。椭圆曲线密码学的优势是可以在某些情况下使用更小的密钥提供比其他方法更高级的安全性。设有限域
有一条椭圆曲线
,其中p为质数,
:
要求曲线在有限域内处处可导,满足
。定义
是椭圆曲线上的加法运算如下描述:任取椭圆曲线上的两点P、Q,作直线交于椭圆曲线的另一点R,R点关于x轴的对称点则为R,如果P和Q是一个点,那么作P点的切线。
同理定义椭圆曲线上的被点运算,以
为例:
代表
个加法运算。椭圆曲线密码系统的安全性是基于求解椭圆曲线离散对数问题(ECDLP) [6] [7] 的难度。这个问题涉及到找到给定一个点
的整数
,其中n是
的群阶。
椭圆曲线离散对数问题(ECDLP):在上述条件中在有限域
中取一条
,取两点
,并满足
。求解k的值。定义:
为破解ECDLP问题的概率,对于任意多项式时间算法A,从概率上
是可忽略的。
2.2. 基于椭圆曲线密码的承诺系统
基于ECC的承诺方案是一种密码学原语,允许一方(称为提交者)提交一个秘密值,而不会将其泄露给另一方(称为验证者)。该方案由Torben Pryds Pedersen于1992年首次提出,作为一种确保安全电子通信的方法 [23] 。
基于椭圆曲线的承诺方案背后的原理是利用椭圆曲线的性质来创建一个单向函数。该函数接收提交者希望提交的秘密值和随机值作为输入,并生成椭圆曲线上的一个点作为输出。提交者将这一点发送给验证者,验证者将其存储为承诺。提交者也会对随机值保密。稍后,当提交者想要揭示秘密值时,他们将秘密值和随机值同时提供给验证者,验证者可以通过使用提供的值计算相同的单向函数来验证承诺的有效性 [24] 。
基于椭圆曲线密码的承诺方案的实现涉及到椭圆曲线密码。这包括选择一条合适的椭圆曲线,并在曲线上定义一个操作,比如点加法。提交者随机选择一个值,使用单向函数计算曲线上的点,并将结果点发送给验证者。提交者将秘密值和随机值同时发送给验证者,验证者可以利用提交者提供的值计算单向函数来验证是否合法。
2.3. 双密钥隐形地址协议(DKSAP)
双密钥隐身地址协议是对传统的隐身地址进行改进后的协议,双密钥隐身地址通过双密钥的方式更好的保护了交易地址的隐私 [21] 。双密钥隐私地址协议的工作原理如下所示:
初始化设置:选择椭圆曲线群G的p阶生成元g,抗碰撞哈希函数为
。
密钥生成:接收方随机选取
生成密钥对
和
,其中u为扫描私钥,s为花费私钥,U和S分别为对应的公钥,满足条件
。
共享秘密计算:发送方随机选取
生成临时密钥对
满足
,并将R发送给接收方。随后发送方和接收方可以计算共享秘密
,其中发送方的计算方式为
,接收方的计算方式为
。
隐身地址计算:发送方计算接收方的隐身地址P,作为交易的输出地址:
,接收方可以计算
来进行签名。
交易扫描:在DKSAP中,接收方可以共享扫描私钥x和支付公钥S给代理服务器。这些实体可以通过计算
得到接收方的隐身地址,从而代表接收方扫描这些区块链交易。但是,他们无法计算隐身地址私钥
并花费资产。
3. 基于隐蔽地址协议的监督匿名交易方案(SATSAP)
这一节主要对DKSAP协议进行改进并构造了一个可以应用在参与方恶意模型下的匿名数据交易方案。在本方案中,不仅可以在区块链上进行安全的匿名交易,而且还可以对参与方中的非法行为进行监管和追踪,经过实验证明,本方案更有希望能适用于现实场景。
总体方案
SATSAP分为四个阶段:初始化阶段;事务发起阶段;事务验证阶段;挑战应答阶段。
1) 初始化阶段
密钥生成算法
:输入公共参数pp,交易成员生成自己的公私钥对
,其中
称为交易事务的扫描公私钥对,
为消费公私钥对,满足
,G为椭圆曲线上的基点,算法1如下所示。认证中心CA为每个交易成员颁布证书,并储存注册每个用户的公钥信息,以便检验身份的合法性。假设交易中存在n个用户,分为有i个交易发起方用户
和有j个交易接收方用户
,在交易发起方用户中第i个用户
的扫描私钥为
,花费公钥为
,其中
,交易接收方中第j个用户
的扫描公私钥为
,花费公私钥对为
,
。监管方拥有接收方的一半公私钥
对用于检验交易。接收方拥有
来对收到的转账进行签名和消费。公私钥对返回成功后,由监管方在区块链上部署特定的保证金智能合约,并由接收方的私钥签名触发智能合约。

Algorithm 1. Public key generation algorithm
算法1. 公钥生成算法
在规定的时间锁内,需要各交易参与方们提交一定的保证金到智能合约,最后如果有人被查出作恶行为,则保证金将被没收,并分发给其它诚实的参与者。如果没有任何违法行为,那么就退还保证金。智能合约如算法2表示:

Algorithm 2. Smart contracts for margin
算法2. 保证金智能合约
为了降低在交易过程中篡改交易金额的风险,并确保最终转账金额与接收方的期望一致,有必要对交易发起方施加承诺要求。承诺要求将事务发起者绑定到商定的交易金额,从而防止对事务数据进行任何未经授权的修改。
例如,假设事务发起者希望转移m的金额。为了引入额外的安全层,加入了一个盲因子
,从而得到承诺值
。事务发起者提供了盲因子
,承诺值
随后被记录在区块链上。在所有事务完成后,将启动承诺披露阶段,在此期间,监督者和事务接收方根据提交的值验证最终收集金额。如果验证过程成功,则认为交易有效,并且将交易信息追加到区块链。
2) 事务发起阶段
密钥生成假设用户User1需要发起一笔交易,收款用户是User2,金额为b,其中User1的公私钥对为
,User2的公私钥对为
。监管方建立并发布地址维护列表,如表1所示:
在发起交易之前,User1应向主管查询最新版本的地址列表。如果User2的信息不存在于地址表中,则可以确定该交易为首次交易,从而需要计算双方的共享秘密。成功通过RA的验证后,用户User1生成一个随机数
,用于派生一个临时公钥
,然后传输给RA。RA收到临时公钥后使用用户User2的公钥
,计算共享密钥
:
(3-1)
由于监管方RA拥有接收方的验证公私钥对,所以监管方RA计算User2的一次地址P2,并更新地址表:
(3-2)
3) 事务验证阶段
首先User2需要通过查询地址表中的临时公钥R1计算公共秘密
,并计算一次地址
(3-3)
随后,User2进行验证检查,确认地址表中的地址
与
是否匹配。这个验证步骤的成功完成使User2成为事务的合法接收者。在协议到期时,交易接收者可以通过利用其私钥
继续签署和执行交易,如下公式所示,该公式强调User2是消费密钥的唯一所有者。
(3-4)
算法3的作用在于监管方需要对交易发起方User1最开始承诺的金额进行验证,防止交易发起方进行任何的篡改和作恶行为,如果承诺值验证通过则证明转账的金额是正确金额。那么User2向RA发送确认消息,RA再执行转账事务,算法3如下所示。如果监管方此时发现交易事务中有作弊行为则触发进入下一小节的惩罚合约。

Algorithm 3. Smart contract to verify the value of the commitment
算法3. 承诺验证智能合约
4) 挑战应答阶段
如上一节所述,如果RA在时间锁定到期时未能收到User1的确认,RA将发起挑战合同。这种情况会导致四种可能:一是User2故意终止协议没有发送确认信息给RA;二是在承诺验证智能合约中,User1提供的承诺参数错误,导致合约输出为0;三是User1提交了正确的数据,但是数据在网络传输中丢失了;四是User1和User2的行为完全正确,只是最后发给RA的确认信息在网络传输中丢失了。所以,我们接下来设计了一个挑战回应机制来解决上述问题,以达到可控可追溯的效果。
a) RA在区块链上发布事务,告诉各交易参与方进入挑战回应阶段,并为此事务设置一个时间锁,首先需要User2随时检查区块链上的事务,如果发现进入挑战回应阶段并且User1自身并没有故意终止协议,只是确认信息在传输过程中丢失了,导致监管方RA并没有收到确认信息,那么必须User2需要在RA规定的时间内在区块链上发布相应的确认事务,否则RA会判定是User2作弊。
b) 如果User2觉得是User1的验证数据有误,导致User2没有向监管方RA发送确认事务,那么此时User2需要向区块链上公开发布挑战事务Txchallenge,如下图1所示,表中输入是交易发起方User2未花费的一小笔钱,输出的是User1的临时地址,数据域中包含了自己计算出的共享秘密c1,共享秘密用来证明User2是交易接收方的身份,并且规定了一个时间锁,所有操作需要在时间锁到来之前完成。
表中输入是交易发起方User2未花费的一小笔钱,输出的是User1的临时地址,数据域中包含了自己计算出的共享秘密c1,共享秘密用来证明User2是交易接收方的身份。
c) 同理,User1需要随时检查区块链上发布的事务中有没有关于自己的挑战事务,有的话必须发布回应事务Txresponse,回应事务表如下图2所示。如果在User2规定的时间锁结束之前,依旧没有收到任何来自User1的回应事务,那么直接RA直接判定User1作弊,终止协议,扣除保证金。
d) 如果User1并没有作恶,只是数据丢失,或者数据输入错误。那么User1需要证明自己的清白,并及时发布回应事务Txresponse。
在此交易中,输入是挑战交易中包含的货币,而输出是接收者的隐形地址p2。数据字段包括重新提供的承诺值和共享秘密。User2在验证Txchallenge中的所有信息后,向监管机构提交确认消息,罚款合同终止,并执行转账和保证金退款。
此时完整的匿名交易协议结束,本方案中的计算过程大致和双密钥对隐身地址方案相同,但是相比之下本方案简化了交易双方之间需要协同计算的计算量。方案中引入了监管方这个主体来对每笔交易事务进行监管,使得每一笔交易都是正确的,安全的并且是匿名的,并且最后提出的“挑战回应”机制可以有效地防止参与方之间的某些非法行为,并且能够有效的惩罚恶意的参与方。
4. 安全性与实验分析
本节介绍我们提出的匿名方案的安全性分析和实验分析,该解决方案假设与DKSAP相同的威胁模型。威胁模型考虑了两种类型的恶意对手。第一种类型是外部恶意攻击者,他们试图通过观察区块链上的交易记录来获取有关交易地址或金额的私人信息。第二种类型涉及交易中的不诚实方,他们从事欺诈行为以获得对自己有利的信息。
4.1. 安全性分析
在初始化阶段中,假设存在一个恶意敌手A'随时观察区块链上的数据信息,由于Key.Gen(pp)公私钥生成算法都是由CA派发的,每一个用户所注册的公私钥对以及身份信息都由CA进行储存,所以此阶段中,恶意敌手A'无法通过区块链上的信息来冒充或者窃取任何用户的私钥及公钥信息。在此阶段的最后,交易发起方需要向监管方RA提交一个对交易金额的承诺Cmi,且
,又因为基于EC的Pedersen承诺本身的安全性定义具有隐私性和绑定性,隐私性指就算恶意敌手A'能够窃取到Cmi和rcm,根据椭圆曲线离散对数的困难性,也无法得到隐藏金额的值。绑定性指除非是承诺打开阶段由交易发起方主动向监管方公布m和rcm,否则任何人不能找到另一个m和rcm来构造等式
使得
。所以在初始化阶段中,本文的方案是安全的。
在交易发起阶段,如果是双方第一次进行交易,那么就交易放起方给监管方需要提交交易接收方的一次性公钥Pj的相关信息,监管方验证通过之后在地址表里面进行更新。此阶段假设存在恶意敌手A',交易发起方User1,交易接收方User2,监管方RA。User1发起交易需要选取随机数r1计算出自己的临时公钥R1,User2的验证公钥Vpk2计算User2的公共秘密c1,由于这里的公共秘密计算是通过基于椭圆曲线的密钥交换算法得到的,所以根据椭圆曲线的离散对数难题,恶意敌手A'在这一阶段只能得到
,给定点R1和G,求出r1是不可行的,其中的Vpk2同理。
在交易验证阶段,由于监管方RA可以用User2的花费公钥Spk2计算出一次性地址并更新地址表,User2计算自己的一次地址
并对照地址表的P2,如果匹配就向监管方RA加密发送需要收到的金额数,如果没有参与方作弊的话那么监管方RA就需要触发承诺验证智能合约,本合约的作用是保证交易发起方User1所承诺的金额与交易发起方User2所提供的金额所保持一致,如果一致,那么就执行最后的转账合约和最后的保证金退还合约,将交易发起方User1的金额值转给交易发起方User2,协议结束。在这个阶段,如果有敌手A'窃听传输消息,在没有私钥的情况下,也只能得到关于承诺打开阶段的密文,这对承诺系统的安全性并无影响。如果敌手A'在链下能够得到User2的花费公钥Spk2,同样根据椭圆曲线的离散对数问题,定点Spk2和G,求出花费私钥Ssk2是不可行的。
在挑战验证阶段,因为监管方RA并没有收到交易双方的确认信息,所以RA需要进行此阶段来判断出作恶的参与方。假设恶意敌手A'将交易发起方User2发送的确认信息给恶意丢弃了,导致监管方RA并没有收到User2的数据,所以User2需要在RA触发挑战验证合约之后向RA证明自己的清白,同理,User1也需要证明自己的清白,在这个过程中,由于每一步都进行上链广播,不仅公开可见,并且恶意敌手无法从密文消息中解密出明文,所以此阶段也是安全的。
由于本方案使用了基于椭圆曲线的一次地址协议而不是真实地址来进行交易,就算此地址在区块链上公开,由于椭圆曲线的离散对数难题所以不会泄露出交易参与各方的地址信息,同时利用了承诺系统的不可抵赖性以及绑定性来对需要转账的金额进行隐藏,并引入发布挑战事务,可以快速帮助监管方审查作弊的参与者,这样就可以适用于恶意参与方模型下,最后构造了一个完整的匿名的安全的交易方案。
4.2. 实验结果分析
本小节对本文的方案进行了算法实现和性能测试。测试程序使用了python语言,实验环境配置为:AMD Ryzen 5 3600 6-Core Processor六核处理器,16 GB DDR4 2400 MHz (8 GB + 8 GB)内存,Windows 10操作系统,NVIDIA GeForce GTX 1660 SUPER (6 GB)显卡,python版本为3.8,下面将从交易发起方,交易接收方,总体方案三个方向进行仿真N = 1,5和10次隐私交易的计算开销对比,代码结果如下图3所示。
请注意,本方案将原隐藏地址协议的验证一次地址部分转交给监管方RA进行处理,这样的好处是可以让交易接收方减少一半的密钥存储空间,并且减少交易接收方的计算量,在整个过程中,交易接收方需要做的事情仅仅是对承诺做出验证,验证通过后,发送验证成功事务给监管方RA。从实验结果可以看出,本方案的交易双方的计算开销与原来的方案相比,随着交易次数的增加,计算开销小于DKSAP方案中的计算量。
由上述实验结果图4和图5可以得出结论,本文提出的匿名方案不仅可以在保证完全匿名的场景下进行安全的交易,并且相对于传统的DKSAP协议拥有更小的计算开销,后续提出的“挑战-回应”机制还可以保证监管方达到“可控监管”的目的。
随着网络技术的快速发展,尽管区块链为匿名交易带来了诸多便利,但交易参与者的不诚实行为和来自外部攻击者的恶意攻击仍对用户隐私构成挑战。文中基于DKSAP提出了一种可在区块链上监督的完全匿名交易方案,并设计了一种“挑战–响应”机制来跟踪和识别交易参与者的恶意行为。最后,实现了一种既能实现完全匿名交易又适用于恶意参与者模型的交易方案。实验结果表明,与原方案相比,所提方案对交易参与者的计算开销相对较小。

Figure 4. Schematic of the calculation overhead of the transaction initiator
图4. 交易发起方的计算开销示意图

Figure 5. Schematic of the calculation overhead of the transaction recipient
图5. 交易接受方的计算开销示意图
5. 结论
随着网络技术的快速发展,尽管区块链为匿名交易带来了诸多便利,但交易参与者的不诚实行为和来自外部攻击者的恶意攻击仍对用户隐私构成挑战。文中基于DKSAP提出了一种可在区块链上监督的完全匿名交易方案,并设计了一种“挑战–响应”机制来跟踪和识别交易参与者的恶意行为。最后,实现了一种既能实现完全匿名交易又适用于恶意参与者模型的交易方案。实验结果表明,与原方案相比,所提方案对交易参与者的计算开销相对较小。然而,本文提出的方案引入了监管机构的概念,以实现“可控监管”,即交易参与者需要对监管机构完全信任。因此,在未来的工作中,将会研究零知识证明、同态加密等方向来构造不需要监管机构的匿名交易方案。
基金项目
国家自然科学基金项目(61962009、62202118),国家重点研发计划项目“航空装备制造业集聚区协同制造集成技术研究与应用示范”(2020YFB1713300)、2020.10~2023.09,贵州省教育厅尖端技术人才工程项目([2022] 073)。
参考文献