会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 比特币钱包 / 基于比特币交易区块验证的离线交易系统及其方法

基于比特币交易区块验证的离线交易系统及其方法

申请号 CN201711248074.7 申请日 2017-12-01 公开(公告)号 CN108256867A 公开(公告)日 2018-07-06
申请人 西安电子科技大学; 发明人 李雪莲; 王海玉; 高军涛; 李伟;
摘要 本发明公开了一种基于比特币交易区块验证的离线交易系统及其方法,主要解决现有技术中收款方仅对离线比特币交易执行常规验证,未对交易确认区块执行验证而造成的付款方伪造比特币问题,其实现步骤为:系统初始化,付款方在线将比特币存入钱包,钱包验证存款交易;付款方通过钱包与收款方执行离线交易,将存款交易区块验证参数写入支付合同,并利用支付合同生成新收款地址;收款方验证离线交易,并使用私钥提取新收款地址中的比特币。本发明通过将交易区块确认参数绑定在支付合同上,再利用支付合同生成新的收款地址,避免了付款方伪造比特币与收款方进行交易,同时有效的防止了付款方比特币泄露,可用于预防离线支付中付款方伪造比特币进行交易。
权利要求

1.一种基于比特币交易区块验证的离线交易系统及其方法,其特征在于包括:(1)付款方A在线存入比特币阶段:

(1a)付款方A通过它的付款平台PA向其离线钱包W在线存入设定数量的比特币,付款平台PA将此笔存款交易u1广播至比特币网络,离线钱包W地址为w1;

(1b)比特币网络中的挖矿节点对交易u1进行验证并写入第一个区块C1,离线钱包W从第一个区块C1中提取交易u1的区块确认参数(v,n,s),其中v表示当前比特币网络产生第一个区块的头部信息哈希值,n是确认交易u1的区块总个数,s是第一个区块与最后一个区块的时间戳之差;

(2)收款方B与支付方A的离线钱包W离线交易阶段:

(2a)收款方B在与付款方A的离线钱包W进行离线交易u0之前,由收款平台PB提前规定第一个区块的确认参数参考值(v',s',n'),其中v'=1.5E+58表示由收款方规定的产生第一个区块的头部信息哈希目标值,n'∈[5,16]表示由收款方规定的确认一笔交易所需要的区块数目,s'∈[1000,1400]表示由收款方规定的生成n'个区块所需时间的上限,其单位为秒;

(2b)收款方B在与付款方A的离线钱包W进行离线交易u0时,由收款平台PB将交易u1的区块确认参数参考值(v',s',n')写入原支付合同x,并将原支付合同x通过支付平台PA发送给离线钱包W;

(2c)离线钱包W根据原支付合同x和区块确认参数(v,n,s)计算新支付合同x1,保证收款方B能将区块确认参数(v,n,s)与自己规定的参考值(v',s',n')进行比对,确认交易u1的区块确认参数(v,n,s)不是伪造的;

(2d)离线钱包W利用主公钥性质,将新支付合同x1与收款地址pkB进行绑定,生成新收款地址dadd,并将离线钱包W地址w1中的比特币存入这个新收款地址dadd,以保证只有收款方B才能提取新收款地址上的比特币;

(2e)收款平台PB验证离线交易u0是否合法,以确定付款方A是否伪造比特币与自己交易,如果合法,PB提取新收款地址dadd上的比特币;

(3)离线交易完成后,离线钱包W储存新支付合同x1作为离线交易凭据,确保比特币已经被收款方B接收,其他用户在收款平台PB公开区块确认参数参考值(v',s',n')后,计算得到验证合同x2,验证离线交易u0的有效性。

2.根据权利要求1所述方法,其中步骤(1a)中付款方A通过它的付款平台PA向离线钱包W在线存入设定数量的比特币,按如下步骤进行:(1a1)付款方A向其付款平台PA提交存入离线钱包W的比特币金额Mr;

(1a2)离线钱包W定义自己的公钥:pkW=skW·gmodp,其中skW∈(0,p-1)为私钥;

(1a3)离线钱包W生成自己用来接收用户存入比特币的地址w1;

(1a4)离线钱包W初始化地址w1中的比特币数目balance=0,并向付款平台PA提交自己的地址w1;

(1a5)付款平台PA打包生成交易u1,交易u1中包含付款方A的公钥pkA、私钥skA、比特币数目Mr、离线钱包W的地址w1信息,其中,付款方A、收款方B的公私钥对按如下方式生成:付款平台PA,收款平台PB分别选择伪随机数skA,skB,且满足0<skA,skB<p-1,使用椭圆曲线加密算法分别计算付款方A的公钥pkA和收款方B的公钥pkB:pkA=skA·gmodp,

pkB=skB·gmodp;

其中,pkA,pkB∈G,G是由椭圆曲线secp256k1上面的点构成的一个交换群,g∈G是椭圆曲线secp256k1的生成元,素数p是椭圆曲线secp256k1的阶。

3.根据权利要求1所述方法,其中步骤(1b)中离线钱包W从第一个区块C1中提取交易u1的区块确认参数(v,n,s),按如下步骤进行:(1b1)支付平台PA将交易u1及用于确认交易u1的区块:n-U1={C1,...Cn,Cn+1}发送给离线钱包W;

(1b2)离线钱包W检查交易u1和n-U1的脚本:

若检查通过,离线钱包W计算第一个区块与最后一个区块的时间戳差s:=tn+1-t1,并提取C1的头部信息哈希值v;

否则,离线钱包W拒绝接收交易u1及交易确认区块n-U1={C1,...Cn,Cn+1};

(1b3)离线钱包W更新其地址w1中的余额balance=balance+Mr,并储存交易u1及参数n-U1、v和s;

(1b4)离线钱包W将接收交易u1或拒绝交易u1的状态返回给支付平台PA。

4.根据权利要求1所述方法,其中步骤(2b)中收款方B在与付款方A的离线钱包W进行离线交易u0时,由收款平台PB计算原支付合同x,按如下步骤进行:(2b1)收款方B向收款平台PB提交离线交易u0所需金额Ml,平台PB对(v',s',n')进行RIPE160哈希运算得到一个哈希结果H(v',s',n'),并用ECDSA签名算法对H(v',s',n')签名,得到签名结果σB;

(2b2)收款平台PB计算原支付合同x,并将原支付合同x发送给支付平台PA:x=pkB||Ml||σB,

其中,pkB是收款方B的公钥,Ml是B规定的离线交易金额,||表示级联运算;

(2b3)平台PA检查原支付合同x中收款方B的公钥pkB、收款方B规定的离线交易金额Ml、签名结果σB是否按顺序排列,并将原支付合同x发送给离线钱包W。

5.根据权利要求1所述方法,其中步骤(2c)中离线钱包W计算新支付合同x1,按如下步骤进行:(2c1)离线钱包W验证σB的签名,同时将收款方公钥pkB、离线交易金额Ml发送给付款方A,A检查pkB、Ml的正确性,付款方A检查完毕后将检查结果告知离线钱包W;

(2c2)离线钱包W对离线交易金额Ml进行判断,若Ml≤Mr,离线钱包W计算新支付合同x1:x1=x||(v,n,s,w1),

其中,v表示当前比特币网络产生第一个区块的头部信息哈希值,n是确认交易u1的区块总个数,s是第一个区块与最后一个区块的时间戳之差,w1是离线钱包地址,||表示级联运算,Mr表示付款方A存入离线钱包W的比特币金额;

否则,离线钱包W拒绝接收原支付合同x。

6.根据权利要求1所述方法,其中步骤(2d)中离线钱包W将新支付合同x1与收款地址pkB进行绑定,生成新的收款地址dadd,是由离线钱包W输入收款方B的公钥pkB、新支付合同x1、椭圆曲线生成元g,计算新收款地址dadd:dadd=H(pkB+g·H(x1));

其中,g是椭圆曲线secp256k1的生成元,H(·)表示RIPE160函数。

7.根据权利要求1所述方法,其中步骤(2d)中离线钱包W将地址w1中的比特币存入新收款地址dadd中,是由离线钱包W生成离线交易u0并用ECDSA签名算法签名交易u0,其中离线交易u0包含交易金额Ml、离线钱包地址w1、新收款地址dadd和离线钱包W的公钥pkW信息。

8.根据权利要求1所述方法,其中步骤(2e)中收款平台PB验证离线交易u0是否合法,并提取新收款地址dadd上的比特币,按如下步骤进行:(2e1)判断离线钱包W是否接收原支付合同x:

若接收,则离线钱包W输入x1、u0及区块C1的时间戳t1,并用收款方B的公钥pkB对输入值进行加密,得到加密后的状态值c:否则,离线钱包W输入拒绝符号“reject”,并用收款方B的公钥pkB加密reject,得到加密后的状态值c:其中E(·)是安全加密算法SM2,t1是第一个区块C1的时间戳,(2e2)离线钱包W将加密后的状态值c返回给平台PB;

(2e3)收款平台PB解密状态值c,由状态值c中的原支付合同x1得到参数值(v,n,s);

(2e4)收款平台PB对参数值v,n,s,Ml进行验证,若v,n,s,Ml满足n'≤n,v≤v',s≤n'·s'≤tp-t1,Ml≤Mmax,则离线交易u0是一笔合法交易,收款平台PB储存离线交易u0,其中tp为离线交易u0所用时间,Mmax是离线交易金额上限,否则PB拒绝接收离线交易u0;

(2e5)收款平台PB将“通过”或“拒绝”状态告知离线钱包W;

(2e6)收款平台PB输入收款方B的私钥skB、支付合同x1,计算对应于新收款地址dadd的私钥dpri:dpri=skB+H(x1)。

9.根据权利要求1所述方法,其中步骤(3)中离线钱包W储存新支付合同x1作为交易凭据,是根据离线交易u0是否被收款平台PB接收来进行的:如果离线交易u0被收款平台PB接收,则离线钱包W储存新支付合同x1作为交易凭据,并更新离线钱包W中的比特币余额balance=balance-Ml,当比特币余额为0时,离线钱包W清除地址w1的私钥skW,否则,离线钱包W拒绝储存新支付合同x1。

10.根据权利要求1所述方法,其中步骤(3)中其他用户在收款平台PB公开区块确认参数参考值(v',s',n')后验证离线交易u0的有效性,按如下步骤进行:(3a)平台PB向离线钱包W公开原支付合同x、交易验证参数(v',s',n')及RIPE160哈希运算结果H(v',s',n')的签名σB';

(3b)离线钱包W输入4个参数v,n,s,w1,计算验证合同x2:x2=pkB||Ml||σB'B||(v,n,s,w1);

(3c)离线钱包W将验证合同x2与新支付合同x1进行比较:

如果x2=x1,则新支付合同x1就是正确的交易凭据,离线交易u0是有效的;

否则,离线交易u0是无效的。

说明书全文

基于比特币交易区块验证的离线交易系统及其方法

技术领域

[0001] 本发明属于密码技术领域,具体涉及一种离线比特币交易系统及其方法,可应用于离线交易中对付款方的资金财产保护和对收款方的交易保护。

背景技术

[0002] 比特币是当前虚拟经济中最具代表性的一种虚拟货币,它使用区块链作为底层技术。比特币系统通常要求交易双方的客户端在线执行交易,并且使用区块链技术来验证交易的合法性。因此在线交易时,商家可以通过监听网络,获得交易的区块确认以决定该交易是否合法;而离线场景下由于收款方无法连入网络,因此也就无法获得挖矿节点对交易的区块确认,此时付款方就可以声称自己拥有比特币去和收款方进行交易。而且,由于交易的收款地址通常是收款方从比特币地址池中选取,当收款方的设备被恶意攻击时,就有可能发生发送虚假的收款地址给付款方的情况,导致付款方的财产损失。随着比特币的应用场合增多,越来越多的人们希望即使在离线的环境中,依然能够使用比特币进行交易。因此有必要使用交易验证技术来保护收款方的权益,同时利用钱包的主公钥性质,由付款方生成新的收款地址,以保护付款方的财产安全,提高离线比特币交易的安全性。
[0003] 2013年Christian Decker等人提出通过在线检测零确认交易双花的方法来判断交易的有效性,但他们的解决方法并不适用于离线支付场景。于是2017年Alexandra Dmitrienko等人提出了基于时间的交易确认验证技术,收款方在离线交易时不仅要对交易执行基本检测,如检查交易脚本,还要限制交易的区块确认参数必须满足一定的条件。收款方通过选择合适的区块确认参数参考值,从而降低攻击者伪造交易确认而造成的和收款方成功交易的概率。但该方案的交易区块确认参数是由收款方公开发送给付款方,之后由付款方进行比对,因此付款方可以根据收款方规定的参考值去伪造合适的交易区块确认参数,以通过收款方的验证。
[0004] 2011年Gavin Andresen提议为了预防比特币交易中虚假商家向顾客发送错误收款地址的情况,可以由顾客生成商家的收款地址,但他并没有给出具体做法。于是2013年Ilga Gerhardt等人提出了Pay-to-Contract技术。该技术定义了支付合同的原则是收款地址是从支付合同中确定性生成的,顾客无需其他额外的信息就可以计算商家新的收款地址。因此该技术保证了仅有正确私钥的商家才能提取新的收款地址上的比特币,从而保护了支付方的财产安全。但由于离线“交易”更准确的是指交易双方的转账,而非普遍性的顾客-商人关系,也就是说,顾客和商人之间不再是下订单-支付商品的模式。因此该方案无法扩展到离线情况下付款方与收款方的转账。

发明内容

[0005] 本发明的目的在于针对上述现有技术的不足,提出一种基于比特币交易区块验证的离线交易系统及其方法,以防止离线交易中支付方伪造比特币与收款方进行交易,提高交易过程中对支付方财产的安全保护。
[0006] 为实现上述目的,本发明的技术方案包括如下:
[0007] (1)付款方A在线存入比特币阶段:
[0008] (1a)付款方A通过它的付款平台PA向其离线钱包W在线存入设定数量的比特币,付款平台PA将此笔存款交易u1广播至比特币网络,离线钱包W地址为w1;
[0009] (1b)比特币网络中的挖矿节点对交易u1进行验证并写入第一个区块C1,离线钱包W从第一个区块C1中提取交易u1的区块确认参数(v,n,s),其中v表示当前比特币网络产生第一个区块的头部信息哈希值,n是确认交易u1的区块总个数,s是第一个区块与最后一个区块的时间戳之差;
[0010] (2)收款方B与支付方A的离线钱包W离线交易阶段:
[0011] (2a)收款方B在与付款方A的离线钱包W进行离线交易u0之前,由收款平台PB提前规定第一个区块的确认参数参考值(v',s',n'),其中v'=1.5E+58表示由收款方规定的产生第一个区块的头部信息哈希目标值,n'∈[5,16]表示由收款方规定的确认一笔交易所需要的区块数目,s'∈[1000,1400]表示由收款方规定的生成n'个区块所需时间的上限,其单位为秒;
[0012] (2b)收款方B在与付款方A的离线钱包W进行离线交易u0时,由收款平台PB将交易u1的区块确认参数参考值(v',s',n')写入原支付合同x,并将原支付合同x通过支付平台PA发送给离线钱包W;
[0013] (2c)离线钱包W根据原支付合同x和区块确认参数(v,n,s)计算新支付合同x1,保证收款方B能将区块确认参数(v,n,s)与自己规定的参考值(v',s',n')进行比对,确认交易u1的区块确认参数(v,n,s)不是伪造的;
[0014] (2d)离线钱包W利用主公钥性质,将新支付合同x1与收款地址pkB进行绑定,生成新收款地址dadd,并将离线钱包W地址w1中的比特币存入这个新收款地址dadd,以保证只有收款方B才能提取新收款地址上的比特币;
[0015] (2e)收款平台PB验证离线交易u0是否合法,以确定付款方A是否伪造比特币与自己交易,如果合法,PB提取新收款地址dadd上的比特币;
[0016] (3)离线交易完成后,离线钱包W储存新支付合同x1作为离线交易凭据,确保比特币已经被收款方B接收,其他用户在收款平台PB公开区块确认参数参考值(v',s',n')后,计算得到验证合同x2,验证离线交易u0的有效性。
[0017] 本发明与现有技术相比,具有以下优点:
[0018] 第一,本发明由于将传统比特币在线交易中的支付合同技术Pay-to-contract与离线比特币交易中基于时间的交易确认验证机制相结合,解决了支付方通过伪造零确认交易区块确认参数值造成的伪造比特币进行离线交易的问题,收款方与付款方只需分别将交易区块确认参数的参考值与真正的参数值写入支付合同中,由收款方在交易时比对这两个参数值,就能确认支付方是否伪造比特币进行交易,提高了收款方对支付方和交易的信任度;
[0019] 第二,本发明由于利用主公钥性质去生成新的收款地址,避免了收款方给支付方发送虚假收款地址的情况发生,付款方只需用收款方公钥与支付合同去计算新的收款地址,就可以保证仅有收款方私钥的人才能计算新地址对应的私钥。

附图说明

[0020] 图1为本发明的实现总流程图;
[0021] 图2为本发明中离线比特币交易的子流程图。

具体实施方式

[0022] 下面结合附图对本发明做进一步的描述。
[0023] 参照图1,本发明的实现步骤如下。
[0024] 步骤1,初始化。
[0025] (1a)定义付款方A的公钥pkA、私钥skA由支付平台PA管理,收款方B的公钥pkB、私钥skB由收款平台PB管理;
[0026] (1b)付款平台PA,收款平台PB分别选择伪随机数skA,skB,且满足0<skA,skB<p-1,使用椭圆曲线加密算法分别计算付款方A的公钥pkA和收款方B的公钥pkB:
[0027] pkA=skA·g mod p,
[0028] pkB=skB·g mod p;
[0029] 其中,pkA,pkB∈G,G是由椭圆曲线secp256k1上面的点构成的一个交换群,g∈G是椭圆曲线secp256k1的生成元,素数p是椭圆曲线secp256k1的阶;
[0030] (1c)平台PA中有一个离线钱包W,该钱包定义自己的公钥:pkW=skW·g mod p,其中skW∈(0,p-1)为私钥;
[0031] (1d)离线钱包W生成自己用来接收用户存入比特币的地址w1:
[0032] 首先,将公钥pkW先经过SHA256算法处理得到32字节的哈希结果,再经过RIPE160算法处理后得到20字节的摘要结果;
[0033] 接着,在摘要结果后面增加比特币主网版本号0x00,得到新的摘要结果;
[0034] 最后,对新的摘要结果经过连续两次SHA256算法处理,得到64位哈希结果,取后一次哈希结果的前4字节作为校验码附在新的摘要结果后面,并对其进行Base58编码,得到字符串,即为钱包的比特币地址w1;
[0035] (1e)收款方B在与付款方A的离线钱包W进行离线交易u0之前,由收款平台PB提前规定第一个区块的确认参数参考值(v',s',n'),其中v'=1.5E+58表示由收款方规定的产生第一个区块的头部信息哈希目标值,n'∈[5,16]表示由收款方规定的确认一笔交易所需要的区块数目,s'∈[1000,1400]表示由收款方规定的生成n'个区块所需时间的上限,其单位为秒;
[0036] 步骤2,在线比特币存入。
[0037] (2a)付款方A向其付款平台PA提交存入离线钱包W的比特币金额Mr,离线钱包W向付款平台PA提交其地址w1;
[0038] (2b)付款平台PA打包生成交易u1,交易u1中包含付款方A的公钥pkA、私钥skA、比特币数目Mr和离线钱包W得地址w1信息,付款平台PA向比特币网络广播交易u1;
[0039] (2c)比特币网络中的挖矿节点首先验证交易u1的脚本,并将十分钟内接收到的所有比特币交易打包写入到第一个区块C1,根据区块C1中的信息计算下式:
[0040] version+prev_hash+merkle_root+ntime+nbits+nonce;
[0041] 其中,version是区块链版本号,prev_hash是区块C1的上一个区块的头部哈希值,是当前区块C1的头部哈希值,ntime是区块C1的时间戳,nbits是当前挖矿难度值,H是SHA256算法,nonce表示由挖矿节点选取的随机值;
[0042] (2d)挖矿节点对(2c)的计算结果进行一次SHA256哈希,并对哈希结果进行判断:
[0043] 若H(version+prev_hash+merkle_root+ntime+nbits+nonce)<TARGET成立,则挖矿节点就将第一区块C1挂到当前区块链上,此时第一区块C1就成为一个有效区块,交易u1就成为一个有效交易;
[0044] 否则,挖矿节点重复步骤(2c),
[0045] 其中,TARGET是当前比特币工作量证明的目标值;
[0046] (2e)其它挖矿节点将下一个十分钟内接收到的所有比特币交易打包成第二区块C2,并重复执行步骤(2c)和(2d),将第二区块C2挂在第一区块C1之后,此时交易u1得到1个区块的确认,以此类推,使得n≥6个区块C2...Cn+1依次挂在第一区块C1之后,此时交易u1得到n个区块的确认,成为一个不可篡改的交易,其中Cn+1是其他挖矿节点打包的第n+1个区块;
[0047] (2f)支付平台PA将交易单u1及交易u1得到的确认区块:n-U1={C1,...Cn,Cn+1}发送给离线钱包W。
[0048] 步骤3,钱包验证交易。
[0049] (3a)离线钱包W检查交易u1和n-U1的脚本:
[0050] 若检查通过,离线钱包W计算第一个区块与最后一个区块的时间戳差s:=tn+1-t1,并提取C1的头部信息哈希值v;
[0051] 否则,离线钱包W拒绝接收交易u1及交易确认区块n-U1={C1,...Cn,Cn+1};
[0052] (3b)离线钱包W更新其地址w1中的余额balance=balance+Mr,并储存交易u1及参数n-U1、v和s;
[0053] (3c)离线钱包W将接收交易u1或拒绝交易u1的状态返回给支付平台PA。
[0054] 步骤4,离线比特币交易。
[0055] 参照图2,本步骤的实现如下:
[0056] (4a)收款方B向收款平台PB提交离线交易u0所需金额Ml,平台PB对(v',s',n')进行RIPE160哈希运算得到一个哈希结果H(v',s',n'),并用ECDSA签名算法对H(v',s',n')签名:
[0057] (4a1)平台PB选择一个随机值k,计算椭圆曲线secp256k1上的点R,并根据点R的横坐标计算签名结果的前半部分f:
[0058] R=(f1,f2)=kg,
[0059] f=f1mod p;
[0060] 其中,k<p,p是椭圆曲线secp256k1的阶,g是椭圆曲线secp256k1的生成元,f1,f2分别是点R的横、纵坐标,若f=0,则收款平台PB重新选取k;
[0061] (4a2)平台PB计算签名结果的后半部分h:
[0062] h=k-1(H'(H(v',s',n'))+skBf)mod p,
[0063] 其中,skB是收款方B的私钥,H'(·)是SHA256函数,若h=0,则收款平台PB重新选取k;
[0064] (4a3)平台PB将(4a1)的f和(4a2)的h合在一起,得到签名结果σB=(f,h);
[0065] (4b)收款平台PB计算原支付合同x,并将原支付合同x发送给支付平台PA:
[0066] x=pkB||Ml||σB,
[0067] 其中,pkB是收款方B的公钥,Ml是B规定的离线交易金额,||表示级联运算;
[0068] (4c)平台PA检查原支付合同x中收款方B的公钥pkB、收款方B规定的离线交易金额Ml、签名结果σB是否按顺序排列,并将原支付合同x发送给离线钱包W;
[0069] (4d)离线钱包W验证签名σB,同时将收款方公钥pkB、离线交易金额Ml发送给付款方A,A检查收款方B的公钥pkB和收款方B规定的离线交易金额Ml的正确性,付款方A检查完毕后将检查结果告知离线钱包W;
[0070] (4e)离线钱包W对离线交易金额Ml进行判断:
[0071] 若Ml≤Mr,离线钱包W计算新支付合同x1:x1=x||(v,n,s,w1),[0072] 否则,离线钱包W拒绝接收原支付合同x;
[0073] 其中,v表示当前比特币网络产生第一个区块的头部信息哈希值,n是确认交易u1的区块总个数,s是第一个区块与最后一个区块的时间戳之差,w1是离线钱包地址,||表示级联运算,Mr表示付款方A存入离线钱包W的比特币金额;
[0074] (4f)离线钱包W输入收款方B的公钥pkB、新支付合同x1和椭圆曲线生成元g,计算新收款地址dadd:
[0075] dadd=H(pkB+g·H(x1)),
[0076] 其中,g是椭圆曲线secp256k1的生成元,H(·)表示RIPE160函数;
[0077] (4g)离线钱包W生成离线交易u0并用ECDSA签名算法签名交易u0,表明已将地址w1中的比特币存入新收款地址dadd中,其中离线交易u0包含交易金额Ml、钱包地址w1、新收款地址dadd和钱包公钥pkW信息;
[0078] (4h)判断离线钱包W是否接收原支付合同x:
[0079] 若接收,则离线钱包W输入x1、u0及区块C1的时间戳t1,并用收款方B的公钥pkB对输入值进行加密,得到加密后的状态值c:
[0080]
[0081] 否则,离线钱包W输入拒绝符号“reject”,并用收款方B的公钥pkB加密reject,得到加密后的状态值c:
[0082]
[0083] 其中E(·)是安全加密算法SM2,t1是第一个区块C1的时间戳;
[0084] (4i)离线钱包W将加密后的状态值c返回给平台PB。
[0085] 步骤5,收款方验证交易。
[0086] (5a)收款平台PB解密状态值c,由状态值c中的原支付合同x1得到参数值(v,n,s);
[0087] (5b)收款平台PB对v,n,s,Ml这4个参数值进行验证:
[0088] 若v,n,s,Ml满足n≥n',v≤v',s≤n'·s'≤tp-t1,Ml≤Mmax,则离线交易u0是一笔合法交易,收款平台PB储存离线交易u0,其中tp为离线交易u0所用时间,Mmax是离线交易金额上限,
[0089] 否则,PB拒绝接收离线交易u0;
[0090] (5c)收款平台PB将“接收”或“拒绝”状态告知离线钱包W;
[0091] (5d)离线钱包W根据离线交易u0是否被收款平台PB接收执行以下操作:
[0092] 如果离线交易u0被收款平台PB接收,则离线钱包W储存新支付合同x1作为交易凭据,并更新离线钱包W中的比特币余额balance=balance-Ml,当比特币余额为0时,离线钱包W清除地址w1的私钥skW,
[0093] 否则,离线钱包W拒绝储存新支付合同x1。
[0094] 步骤6,提取比特币。
[0095] (6a)收款平台PB输入收款方B的私钥skB、支付合同x1,计算对应于新收款地址dadd的私钥dpri:dpri=skB+H(x1);
[0096] (6b)收款平台PB检验新收款地址dadd的私钥dpri的正确性:
[0097] dadd=H(dpri·g)=H(skB·g+H(x1)·g)=H(pkB+H(x1)·g)
[0098] 其中,g是椭圆曲线secp256k1的生成元。
[0099] 步骤7,公开验证交易。
[0100] (7a))平台PB向离线钱包W公开原支付合同x、交易验证参数(v',s',n')及RIPE160哈希运算结果H(v',s',n')的签名σB';
[0101] (7b)离线钱包W输入4个参数v,n,s,w1,计算验证合同x2:
[0102] x2=pkB||Ml||σB'||(v,n,s,w1);
[0103] (7c)离线钱包W将验证合同x2与新支付合同x1进行比较:
[0104] 如果x2=x1,则新支付合同x1就是正确的交易凭据,离线交易u0是有效的;
[0105] 否则,离线交易u0是无效的。
[0106] 通过以上步骤,将基于时间的交易区块确认验证参数参考值写入原支付合同,根据原支付合同与交易区块确认参数实际值生成新支付合同,再利用确定性钱包的主公钥性质将新支付合同与新收款地址挂钩,并应用到离线比特币交易中,从而实现了收款方对钱包伪造交易确认的有效检验,同时保证了支付方资金财产的安全。
[0107] 以上描述仅是本发明的一个具体实例,并未构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明的内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修改和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。