APP下载

基于双方ECDSA的强匿名性比特币密钥管理方案

2021-10-18韩妍妍徐鹏格李兆斌魏占祯

计算机应用与软件 2021年10期
关键词:密钥比特钱包

韩妍妍 徐鹏格 李兆斌 魏占祯

1(西安电子科技大学通信工程学院 陕西 西安 710071) 2(北京电子科技学院通信工程系 北京 100070)

0 引 言

比特币[1]是由中本聪于2008年提出的一种点对点的电子现金支付系统。比特币的发行和交易不依赖于任何金融机构,而是由P2P网络节点共同实现的。其中比特币的发行称为挖矿。矿工通过执行PoW共识协议将若干比特币交易打包成区块。该块在经过网络节点的校验后被记入区块链中,矿工也因此获得创建新块的新币奖励以及交易费。挖矿机制巩固了去中心化的清算交易机制,在没有中央权力机构的情况下实现了全网共识。而比特币交易[2]是比特币网络中最重要的部分。与传统的银行交易不同,任何规模的比特币交易都是利用secp256k1标准的ECDSA[3]算法实现完全自动化的。因此,拥有私钥就相当于拥有对比特币的使用权。作为存储和保护比特币私钥的重要途径,比特币钱包受到了学术界和产业界的高度关注。

比特币核心(BitcoinCore)[4]是最早提供比特币钱包服务的免费开源软件。比特币核心的开发是完全透明化的,用户可以验证软件的二进制版本与源包是否对应,从而排除软件进行恶意篡改的可能。因此,比特币核心是比特币最安全的管理模式。然而该软件需要验证整个区块链来防止用户双重花费,这显然需要额外的成本。目前,该软件需要大约80 GB的存储空间来存储比特币交易等相关数据,并且一笔交易的验证时间大约为1个小时。从长远考虑,这显然不符合用户的利益。正如中本聪的白皮书所述,用户可以在不运行完整网络节点的情况下验证比特币交易(简化支付验证,SPV)。由此产生的SPV钱包只需下载区块头,而不用下载包含在每个区块中的交易信息。这种不含交易信息的区块链大小只有完整区块链的1/1 000。在绝大多数的实际情况中,连接良好的SPV节点是足够安全的,它在资源需求、实用性和安全性之间维持恰当的平衡。因此,与BitcoinCore相比,SPV钱包因更少的资源开销和带宽消耗而越来越受欢迎。

软件钱包所面临的共同安全问题是黑客攻击。如果攻击者可以访问软件钱包操作系统,他就可以访问钱包,从而盗取用户的私钥。以Trezor钱包为代表的硬件钱包通常采用与Internet分离,单独保存比特币密钥的方法。设备在内部签署交易,允许用户通过USB连接方式将签名的交易发送到不可信赖的计算机。这种将私钥与易受攻击的环境相分离的方法增加了攻击者非法获取私钥的难度。另一方面,以Gennaro等[5]为代表的学者在2016年提出了一种新的密钥管理思路:将密钥进行拆分,并由一组阈值成员共同生成签名。并且,他们在Mackenzie等[6]方案的基础上设计出一种最优的(t,n)门限ECDSA方案。随后大量优秀的双方或多方ECDSA算法[7-10]相继提出,为门限钱包设计提供了有力的密码算法支撑。其中:多方ECDSA更适用于企业管理比特币;而双方ECDSA则更符合个体用户增强比特币密钥的安全需求。Mann等[11]利用电脑桌面钱包与智能手机钱包结合的方法则是双方ECDSA的应用实例。

此外,比特币的匿名性也受到了学术界和产业界的高度关注。虽然比特币可以通过使用假名来保护用户的隐私,但由于比特币交易记录是公开且未加密的,用户的密钥严格限制为可链接的匿名性。目前大致有替换币和混币两种技术手段来增强其匿名性。ZeroCoin[12]等协议是先将密码货币兑换为替代币,之后再换回密码货币,从而达到混淆的作用,但这种技术与比特币协议不兼容。CoinJion[13]和CoinShuffle[14]等协议则是采用混币技术,将多个用户的比特币交易合并到一个单一交易中,使外部各方更难以辨别支付方和付款方,并且不需要修改比特币协议。例如,芥末钱包正是采用CoinJion混币协议来增强比特币的匿名性。

基于以上研究基础,本文提出智能手机钱包与硬件钱包相结合的密钥管理方案。利用Diffie-Hellman协议生成比特币密钥,利用CoinShuffle协议[14]创建比特币交易,借鉴Lindell等[7]双方ECDSA方案的研究思路对交易进行签名,从而实现用户密钥由两个钱包共同管理,所创建的交易输入输出地址之间具有不可链接性。本文还利用离散对数的零知识证明保证智能手机钱包和硬件钱包数据交互的正确性。而本文的问责协议可保证方案的顺利执行,增强方案的鲁棒性。安全性分析表明,本文方案能抵御中间人攻击、去匿名攻击、双重花费等多种攻击。与现有的若干密钥管理方案相比,本文方案更加安全,更便于随时随地进行比特币交易,具有一定的理论和实际意义。

1 基础知识

1.1 椭圆曲线数字签名

椭圆曲线数字签名算法(ECDSA)[15]由阶为q、生成元为G的循环群参数化,其中G为某条椭圆曲线上的点。ECDSA算法具体定义如下:

Gen(1κ):随机选择一个私钥sk∈Zq,计算公钥Q=sk·G。输出公私钥对(Q,sk)。

Sig(sk∈Zq,m∈{0,1}*):随机选取一个随机数k∈Zq,计算(rx,ry)=k·G。然后计算s=k-1·(H(m)+sk·rx),输出数字签名σ=(s,rxmodq),其中H()表示哈希函数。

1.2 Diffie-Hellman密钥交换协议

Diffie-Hellman密钥交换协议[16](DH协议)可实现两个用户在公共信道上安全的交换密钥,并且产生的密钥可应用于加密、密钥管理或其他密码算法。DH协议是基于离散对数问题的困难性来实现的,为满足通信双方共享密钥的目的,通信双方A和B需完成如下操作:

1) A、B分别选取一个随机数0≤xA,xB

2) A将yA发送给B,B将yB发送给A。

1.3 同态加密算法

同态加密算法[17-18]的同态性是指对若干明文进行运算后再加密,与加密后对密文进行相应运算的结果是等价的。Pailliler加密算法[18]属于部分同态加密算法。假设其公钥对为(n,g),m1、m2为待处理的明文数据,Enc(·)为加密算法,Dec(·)为解密算法,则Pailliler加密算法具有如下性质:

Enc(m1)*Enc(m2)(modn2)=Enc(m1+m2(modn))

(1)

Enc(m1)*gm2(modn2)=Enc(m1+m2(modn))

(2)

Enc(m1)m2(modn2)=Enc(m1m2(modn))

(3)

1.4 CoinShuffle协议

CoinShuffle协议[14]是一种混币技术,需要用户与比特币网络中n-1名成员合作完成。假设全体成员输入地址的比特币币值为value。该协议分为如下四个阶段。若前三个阶段未成功运行,将进入问责阶段。

1) Announcement:每位成员广播自己的输入地址,并接收其他成员的输入地址,然后创建输入地址列表Tin。

2) Shuffling:全体成员对所有成员的输出地址按设定的规则进行洗牌,生成输出地址列表Tout。

3) Transaction Verification:每位成员分别创建比特币交易Tx={Tin,Tout,value}。全体成员均对交易进行独立签名后,将签名后交易广播到比特币网络。

4) Blame:在前三个阶段中,如果某些成员偏离了协议,则诚实的参与者将报错并进入问责阶段,暴露并排除不诚实的成员。

1.5 零知识证明

零知识证明[19-21]是证明者(Prover)向验证者(Verifier)证明他们知道值x的方法,证明者除了证明知道值x而不传达其他任何信息。离散对数的零知识证明是最常用的零知识证明之一,可通过Fiat-Shamir协议[20]或Schnorr协议[21]进行实例化。下面给出两种离散对数的零知识证明的基本结构。第一种对应于基本的离散对数的零知识证明,第二种允许证明者先对证明做出承诺,稍后揭示。假设G是阶为q,生成元为G的循环群。

2 方案设计

智能手机钱包Alice和硬件钱包Bob通过USB连接。Alice主要负责创建、广播和存储与用户相关的比特币交易,Bob则负责协助Alice完成对交易的签名。因此,只需要Alice连接比特币网络。整个方案由密钥生成协议、交易生成协议、数字签名协议,以及问责协议四部分组成。下面以adrin→adrout为例来阐述方案设计,即用户将币值value的比特币从地址adrin全部转入地址adrout,如图1所示。

图1 整体方案设计

假设G是阶为q、生成元为G的循环群。

1) 密钥生成协议。Alice和Bob可根据以下操作生成输入地址Adrin以及对应的私钥份额skA、skB。类似地,用户可以生成输出地址Adrout。

(1) Alice和Bob利用BIP39规则[22]生成钱包种子seedA和seedB。为便于描述,两个钱包各自在本地选取一个随机数seedA,seedB∈Zq作为种子。

(2) Alice和Bob分别利用种子、比特币地址编号c、口令pw生成私钥份额skA、skB。

用户需将两个钱包的种子和口令妥善保管,便于钱包导入和导出比特币密钥。

2) 交易生成协议。本协议利用CoinShuffle协议来创建比特币交易,用户仅需利用Alice与比特币网络中n-1名成员互动完成。

(1) Alice建立临时公钥加密算法的公私钥对(p,k),并广播签名消息(p,Adrin)。然后接收验证其他成员的相关签名消息是否正确。最终生成交易的输入地址列表Tin。

(2) Alice按照自己的编号分三种情况与网络中n-1位成员共同生成打乱的输出地址列表Tout。

(3) 为保证过程(2)的正确执行,Alice及其他成员均需广播包括Tx在内的签名消息。若全体消息均正确,Alice即可创建比特币交易Tx={Tin,Tout,value}。

3) 数字签名协议。Alice和Bob利用双方ECDSA算法协作完成对比特币交易的签名。

(2) Alice将(Tx,Enc(skA))发送给Bob。Tx为未签名的比特币交易,Enc(skA)为私钥份额skA同态加密后的密文。

4) 问责协议。问责协议主要保证Alice和n-1名成员正确执行该协议,排除恶意合作成员。协议的主要内容如下:

(1) 如果发现某成员的输入地址的币值低于约定值value,或地址上的比特币已被花费,问责该成员。

(2) 如果在输出地址洗牌过程中,某成员在协议执行过程中操作失败,进入问责协议。

(3) 在验证输出地址列表正确性时,如果发现某两个成员Pi和Pj所提供的哈希值hi与hj不等,执行协议问责恶意成员。

3 具体方案

Alice与Bob以及Alice与其他成员的数据交互过程如图2所示。为简便起见,示意图省略了Alice和Bob数据交互所使用的零知识证明以及问责协议的内容。以下为各协议的具体内容。

3.1 密钥生成协议

1) Alice和Bob分别随机生成种子seedA,seedB∈Zq,然后计算公私钥对(pkA,skA)、(pkB,skB)。

skA=seedA·H(pw‖c)

(4)

skB=seedB·H(pw‖c)

(5)

pkA=skA·G

(6)

pkB=skB·G

(7)

扬州大学服装与服饰设计专业教学大纲安排有《民族服饰采风》课程,每年都安排大三学生到西南地区采风,其中广西就是主要的采风地点。为了实现各门课程的协调融合,针对学生的“学术性学习”过程中遇到的困惑和问题进行有的放矢地应答,笔者利用讲座或“微课程”等形式带领学生研读该书“服用门”部分,推进研究性学习在学生中的实践工作。

5) Alice和Bob计算公钥Q及输入地址Adrin,并保存在本地。Q的计算如式(8)所示,式(9)为比特币地址生成算法,详见参考文献[22]。

Q=skA·pkB=skB·pkA

(8)

Adrin=Base58(RIPEMD160(SHA256(Q)))

(9)

用户再次运行密钥生成协议生成输出地址Adrout。

3.2 交易生成协议

假设n位成员的顺序已定,Alice是第m位成员,协商的临时会话标识符为τ。此外,为保证所发送信息的完整性和不可抵赖性,全体成员需对所发送的消息进行签名。假设Alice的临时ECDSA公私钥对为(y,x),其他成员已知Alice的验证公钥y。下文中的E(·)表示某公钥加密算法,定义E((p1,p2,…,pn),M)=E(p1,(E(p2,(…E(pn,M))…))),pi为第i位成员的加密公钥(i∈[1,n]),M为明文。

1) Alice生成一个临时的公钥加密算法的公私钥对(p,k),然后计算:

σ1=sig(x,(p,Adrin,1,τ))

(10)

并广播(p,adrin,σ1)。如果m=1,上述过程可省略。然后接收其他成员Pt(t∈[1,n],t≠m)的签名信息,并验证其所提供的比特币地址中是否有足够的比特币。若正确,存储该信息,最终生成交易的输入地址列表Tin。否则,进入问责协议。

2) Alice需按自己的编号分如下三种情况进行计算:

(1) 如果m=1,计算:

c1=E((p2,p3,…,pn),Adrout)

(11)

σ2=sig(x,(C1,2,τ))

(12)

然后将(C1,σ2)发送给第2名成员。其中C1=(c1)为一元向量。

如果某个元素解密失败,或者其中某两个元素的解密结果相同,则进入问责协议2)。否则继续计算:

cm=E((pm+1,pm+2,…,pn),Adrout)

(13)

σ2=sig(x,(Cm,2,τ))

(14)

将信息(Cm,σ2)发送给第m+1名成员。

σ2=sig(x,(Tout,2,τ))

(15)

最后广播(Tout,σ2)给其他所有成员。

3) 为保证大家在广播过程中诚实,Alice(其他成员也需进行如下广播)还需计算:

h=H((p2,p3,…,pn),Tout)

(16)

σ3=sig(x,(h,3,τ)))

(17)

广播(h,σ3)。当接收到其他成员所发送的签名信息后,若发现任意两个成员a和b所提供的哈希值ha≠hb,进入问责协议。否则Alice创建交易Tx={Tin,Tout,value}。

3.3 数字签名协议

DB=kB·G

(18)

R=kB·DA

(19)

(20)

式中:r是R的横坐标。

R=kA·DB

(21)

(22)

(23)

计算r′=x′ modq。若r′=r,签名有效,Alice向其他成员广播签名值σ。

4) 接收到其他n-1名成员的签名广播后,将全部签名加入比特币交易Tx,然后广播到比特币网络中。若发现某成员在该协议中进行了双花,则进入问责协议。

3.4 问责协议

Alice根据以下原则执行问责协议:

1) 如果发现某成员所提供输入地址的币值低于约定值value,或地址上的比特币已被花费。需将该情况广播给其他成员,问责该成员。此情况可能发生在交易生成协议的步骤1)或数字签名协议的步骤4)。

2) 在生成输出地址列表Tout的过程中,如果发现所接收向量中有重复密文,又或缺少密文,问责上一位成员。此外,如果对向量中的元素解密失败,进行报错广播,计算:

h′=H((p2,p3,…,pn))

(24)

σ4=sig(x,(h′,4,τ))

(25)

3) 在验证输出地址列表Tout时,如果发现成员Pi和Pj所提供的哈希值hi与hj不等,即hi≠hj,需成员Pi和Pj广播他们收到的所有关于加密公钥{p2,p3,…,pn}和输出地址列表Tout相关的签名信息。其他成员重新计算hi与hj,并验证其是否正确。

(1) 如果计算发现hi或hj不正确,直接暴露不诚实的成员Pi或Pj。

(2) 否则,分为两种情况:某成员通过向成员Pi和Pj发送不同的加密公钥或者最后一名成员Pn向两位成员提供了错误的输出地址向量Tout。此时,利用两位成员所公布的签名消息可找出恶意成员。

诚实用户可以检测到旨在破坏协议的攻击,并且可以识别和排除至少一个行为不端的参与者。然后,其他参与者可以在没有恶意的参与者的情况下再次运行协议。

4 方案分析

4.1 安全分析

总体而言,智能手机钱包Alice和硬件钱包Bob首先各自生成并保存一个用于衍生密钥的种子,然后结合密码口令pw利用BIP32[22]生成所需私钥份额。这种双钱包的密钥管理方案相较传统的单位置存储方案显然更加安全。此外,攻击者即使盗取了某个钱包的种子,在没有pw的情况下也无法生成任一私钥份额,更无法获取任何比特币私钥。因此,本文方案有效提高了个体用户的比特币密钥管理的安全性。

在密钥生成协议中,Alice和Bob利用DH协议完成比特币地址的生成工作。基于离散对数难解问题,仅根据pkA、pkB、相关零知识证明等信息,任何人均无法计算得到相关私钥份额skA或skB。在数字签名协议中,Alice和Bob利用基于同态加密算法的双方ECDSA来计算比特币交易的数字签名。攻击者即使截获了Alice和Bob通信的密文CT或者CT′,在没有解密私钥的条件下也无法得到相关私钥份额的有用信息。因此,两个协议中的数据传输工作可选用数据线完成。此外,本文方案利用CoinShuffle协议创建比特币交易来有效提高用户使用比特币时的匿名性,利用问责协议增强交易生成协议的鲁棒性。

下面对方案的安全性进行具体分析。本文方案可以抵御中间人攻击、去匿名攻击、双重花费、伪造攻击,但无法抵御拒绝服务攻击。

1) 抵御中间人攻击。DH协议是无法抵御“中间人攻击”的。在密钥生成协议和数字签名协议中,由于双方的公钥是由当事方而不是可信第三方发布,所以攻击者Mallory不仅能监听Alice和Bob之间的信息,还能修改、删除信息,并能产生全新的信息。因此,本文方案利用两种离散对数的零知识证明来协助Alice或Bob对收到公钥进行验证从而抵御该攻击。而在交易生成协议中Alice和其他成员都需对每轮发送的数据进行签名,这不仅可以抵御中间人攻击,还能有效防止成员在该协议中进行恶意操作。

2) 抵御去匿名攻击。由于比特币分布式账本固有的性质,比特币交易的输入地址和输出地址往往是相关联的,用户的隐私也由此受到损害。本文方案采用CoinShuffle协议来提高比特币交易的匿名性。在此协议中,每个成员Pi依次利用后续成员Pj(j>i)的公钥对其输出地址进行分层加密。从第2名成员开始,每个成员Pi从成员Pi-1接收i-1个密文,并从密文中剥离一层加密,添加其输出地址的密文后随机洗牌。随后将混洗的密文集发送给下一个参与者Pi+1。如果每位成员均诚实,则由最后一个成员生成输出地址的混洗列表Tout。CoinShuffle协议[14]打乱了输入输出地址的对应顺序,并且映射关系在成员间不可见,使用户以真正的匿名方式使用比特币。

3) 抵御伪造攻击。首先对数字签名协议的正确性做简要证明。Alice对Bob的密文进行解密,得到δ=D(CT′),从而可以继续计算:

k-1·(m′+sk·rx)

(26)

式(26)显然与集中式的ECDSA的签名结果相同,ECDSA的不可伪造性保证了数字签名协议的不可伪造。另外,在此协议中,Alice不仅可利用公钥对所生成的签名做验证,也可以对接收到的其他成员的签名进行验证。当所有的签名验证无误后,Alice才会将比特币交易广播到比特币网络中。若发现错误签名,进入问责协议,剔除不诚实的合作成员后重新运行协议。因此,攻击者无法通过伪造交易的签名来盗取用户的比特币。

4) 抵御双重花费。在创建比特币交易的过程中,恶意成员可能会将已花费的比特币地址作为输入地址,或者在协议执行的同时另外创建单笔交易,并发布到比特币网络中,从而实现双花。本文方案采用问责协议来抵御双重花费。针对前者,各成员可以提前验证其他成员所提供的输入地址是否有效,若无效,问责恶意成员。对于后者而言,比特币网络最终仅会对其中一个交易达成共识,因此,全体成员在签名协议执行以后,需要观察共同创建的比特币交易是否被区块链记录。如果发现某成员企图实现恶意双花,则进入问责协议。此外,问责协议还起到保证交易生成协议正确执行的作用。

4.2 性能分析

表1分别从Alice和Bob的本地开销、通信开销、交互轮次等方面对方案主要协议的计算复杂性进行分析。其中通信开销主要指Alice与Bob、Alice与其他成员之间的通信成本。在密钥生成协议中,Alice和Bob的本地开销主要来自哈希运算以及椭圆曲线上的点乘运算,而通信开销主要为Alice和Bob之间对离散对数值的两次零知识证明;在交易生成协议中,Bob因不参与该协议而不产生任何开销,Alice的本地开销主要来自于数字签名和公钥加解密算法,而通信开销主要由Alice与其他成员进行若干次数据交互所产生;在数字签名协议中,Alice的本地开销主要来自于椭圆曲线上的点乘运算和同态加解密算法,Bob还需完成若干次同态加性和乘性运算,而通信开销主要来自于Alice和Bob对离散对数的两次零知识证明,以及Alice与其他成员进行的数据交互。为便于开销统计,表1将Alice广播(或接收并验证)数据的通信开销视为一致,并且忽略其他开销相对较小的运算。

表1 方案的计算开销统计

表2为本文方案与现有的几种密钥管理方案的性能对比。Gennaro等[6]的方案适合企业或团体对比特币进行联合管理,而本文方案和其他三种方案均适合于个体管理比特币。本文方案将智能手机钱包和硬件钱包相结合,既能满足用户随时随地进行比特币交易的需求,也能有效保证用户密钥的安全性。并且整个方案的设计与现有的比特币系统完全兼容。

表2 方案的特性对比

1) 交易便利。当使用硬件钱包花费比特币时,一般需要先在固定的网站上创建交易,然后将交易发送到硬件钱包并请求数字签名。硬件钱包完成签名后将其发回计算机。这在某种程度上限制了用户进行比特币交易的时间地点。而在本文方案中,用户只需利用USB连接智能手机钱包和硬钱包就可随时随地完成比特币交易,弥补了这一缺点。

2) 安全性高。本文方案可以抵御中间人攻击、去匿名攻击、双重花费等多种攻击。即使智能手机钱包被攻击者攻击,但由于硬件钱包中的私钥份额与网络隔绝,攻击者仍然无法获取比特币密钥,这弥补了热钱包易受黑客攻击的弱点。此外,芥末钱包采用CoinJoin协议[13]来实现交易输入输出地址的不可链接,本文方案所利用的CoinShuffle协议[14]在前者的基础上,进一步实现了输入输出地址的映射关系在成员之间不可见,这保证了成员内部也无法获取其他人输出地址的信息,具有更高的匿名性。

3) 与比特币系统兼容。整个方案所采用的双方ECDSA以及CoinShuffle协议是不需要任何可信第三方的,并且与当前的比特币系统完全兼容。

5 结 语

本文以双方ECDSA和CoinShuffle协议[14]为理论基础,将智能手机钱包与硬件钱包结合以提高比特币密钥的安全性。本文方案以最理想的情况为例阐述协议内容,但现实情况却更为复杂。在实际情况中,用户可能有若干输入地址、若干输出地址。在交易生成协议中,只需先将全体成员的每个输入地址进行洗牌,再将每个输出地址进行洗牌就可实现比特币地址之间的不可链接性。此外,比特币交易的匿名性会随着参与交易生成协议的成员人数n的增加而加强,但交易完成时间也会随之延长,因此用户应根据实际需求选择合适的成员人数n。本文方案为其他区块链项目的密钥管理方案提供了新思路,具有一定的研究意义。

猜你喜欢

密钥比特钱包
幻中邂逅之金色密钥
幻中邂逅之金色密钥
钱包
Android密钥库简析
我帮你拿来了
《彭博》比特币有多贵?
比特币分裂
我帮你拿来了
比特币一年涨135%重回5530元
神秘的比特币