主页 > imtoken国内苹果版下载教程 > 基于比特币交易区块验证的离线交易系统及其方法和流程

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

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

背景技术:

比特币是当前以区块链为底层技术的虚拟经济中最具代表性的虚拟货币。 比特币系统通常需要交易双方的客户在线执行交易,并使用区块链技术验证交易的合法性。 因此,商家在进行在线交易时,可以通过监控网络获取交易的区块确认,从而判断交易是否合法; 在离线场景下,由于收款方无法连接网络,因此无法获取到挖矿节点的交易区块。 确认,此时付款人可以声称自己拥有比特币与收款人进行交易。 而且,由于交易的收款地址通常是收款方从比特币地址池中选择的,当收款方的设备受到恶意攻击时,可能会出现错误的收款地址被发送给付款方,造成付款方财产损失的情况。 随着比特币应用的增多,越来越多的人希望即使在离线环境下,仍然可以使用比特币进行交易。 因此,需要利用交易验证技术保护收款人的权益,同时利用钱包主公钥的性质,由付款人生成新的支付地址,保护财产安全付款人并提高离线比特币交易的安全性。

2013 年,christiandecker 等人。 提出通过在线检测零确认交易双花来判断交易的有效性,但其方案不适用于线下支付场景。 于是在2017年,Alexandradmitrienko等人提出了一种基于时间的交易确认验证技术。 收款方不仅要对交易进行基本的检测,比如检查交易脚本,还要限制交易的区块确认参数满足一定的条件。 . 收款人选择合适的区块确认参数参考值,从而降低攻击者伪造交易确认而导致与收款人成功交易的概率。 但该方案的交易区块确认参数是由收款人公开发送给付款人,然后由付款人进行比对,因此付款人可以根据收款人指定的参考值伪造合适的交易区块确认参数。 通过收款人的验证。

2011年,gavinandresen提出,为了防止虚假商家在比特币交易中向客户发送错误的支付地址,客户可以生成商家的支付地址,但他没有给出具体方法。 于是在2013年,ilgagerhardt等人提出了pay-to-contract技术。 该技术定义了支付合约的原理,即支付地址由支付合约确定性生成,客户无需任何其他附加信息即可计算出商户的新支付地址。 因此,该技术确保只有拥有正确私钥的商家才能提取新收款地址上的比特币,从而保护付款人的财产安全。 不过,由于线下“交易”更准确的是指双方之间的转账,而不是一般的客商关系,也就是说,客商之间不再是订单-支付的模式。 因此,该方案不能推广到线下付款人和收款人之间的转账。

技术实现要素:

本发明的目的是针对上述现有技术的不足,提出一种基于比特币交易区块验证的离线交易系统及其方法,以防止付款方伪造比特币和收款方与收款方进行交易在线下交易,提高交易效率。 过程中对付款人财产的安全保护。

为实现上述目的,本发明的技术方案包括:

(1) 付款人a在线存入比特币:

(1a) 付款人a通过其支付平台pa向其离线钱包w在线存入一定数量的比特币,支付平台pa向比特币网络广播存款交易u1,离线钱包w地址为w1;

(1b) 比特币网络中的矿工节点验证交易u1并写入第一个区块c1,离线钱包w从第一个区块c1(v,n,s)中提取交易u1的区块确认参数,其中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,通过支付平台pa将原始支付合约x发送至离线钱包w;

(2c) 离线钱包w根据原支付合约x和区块确认参数(v,n,s)计算新的支付合约x1,确保收款人b能够匹配区块确认参数(v,n,s) ) 与自己比较交易u1的参考值(v', s', n'),确认交易u1的区块确认参数(v, n, s)没有被伪造;

(2d) 离线钱包w利用主公钥的性质将新的支付合约x1与接收地址pkb绑定,生成新的接收地址dadd,将离线钱包w地址w1中的比特币存入新的收款地址Address dadd,确保只有收款人b才能在新的收款人地址上提取比特币;

(2e)收款平台pb验证线下交易u0是否合法,判断支付方a是否伪造比特币与自己进行交易。 如果合法,pb在新的支付地址dadd上提取比特币;

(3) 离线交易完成后,离线钱包w存储新的支付合约x1作为离线交易凭证,确保比特币已被收款人b收到,其他用户公示区块确认参数参考值(v ',s',n'),计算验证合约x2,验证离线交易u0的有效性。

与现有技术相比,本发明具有以下优点:

首先,由于本发明将传统比特币线上交易中的支付合约技术pay-to-contract与线下比特币交易中基于时间的交易确认验证机制相结合,解决了支付方通过以下方式确认交易区块的问题锻造零确认。 对于参数值引起的线下交易伪造比特币的问题,收款方和付款方只需要分别将交易区块确认参数的参考值和真实参数值写入支付合约,收款方在交易时进行参数比对。交易。 对于这两个参数值,可以确认支付方是否伪造比特币进行交易,提高了收款方对支付方和交易的信任;

第二,本发明避免了收款人利用主公钥的性质向付款人发送虚假收款人地址生成新收款人地址的情况,付款人只需使用收款人的公钥即可与支付合约进行通信。 计算新的接收地址保证只有拥有接收方私钥的人才能计算出新地址对应的私钥。

图纸说明

图1为本发明的实现总体流程图;

图2为本发明离线比特币交易子流程图。

详细说明

下面结合附图对本发明作进一步说明。

参见图1,本发明的实现步骤如下。

第一步,初始化。

(1a)定义付款人a的公钥pka和私钥ska由支付平台pa管理,收款人b的公钥pkb和私钥skb由支付平台pb管理;

(1b) 支付平台pa和收款平台pb分别选取伪随机数ska和skb,满足0<ska,skb<p-1,采用椭圆曲线加密算法计算支付方公钥pka a和收款人分别是b的公钥pkb:

pka=ska gmodp,

pkb = skb gmodp;

其中,pka,pkb∈g,g为椭圆曲线secp256k1上的点组成的交换群,g∈g为椭圆曲线secp256k1的生成元,素数p为椭圆曲线secp256k1的阶数;

(1c) 平台pa中有一个离线钱包w,定义了自己的公钥:pkw=skw·gmodp,其中skw∈(0,p-1)为私钥;

(1d) 离线钱包w生成自己的地址w1,用于接收用户存入比特币:

首先,公钥pkw先经过sha256算法处理得到32字节的哈希结果,再经过rip160算法处理得到20字节的摘要结果;

然后在汇总结果后加上比特币主网版本号0x00,得到新的汇总结果;

最后将新的摘要结果连续两次进行sha256算法处理,得到64位的哈希结果,并将后面的哈希结果的前4个字节作为校验码追加到新的摘要结果中,base58为对其执行。 编码得到一个字符串,即钱包的比特币地址w1;

(1e) 在收款人b与付款人a的离线钱包w进行离线交易u0之前,收款人平台pb预先指定第一个区块的确认参数参考值(v', s', n'), 其中其中,v'=1.5e+58表示收款人指定的头信息哈希目标值生成第一个块,n'∈[5,16]表示确认收款人指定的一次兑换所需的块数,s'∈[1000,1400]表示收款人指定的生成n'个区块所需时间的上限,单位为秒;

第二步,在线比特币存款。

(2a) 付款人a将存入离线钱包w的比特币数量mr提交给支付平台pa,离线钱包w将地址w1提交给支付平台pa;

(2b) 支付平台pa打包生成一笔交易u1,交易u1包含付款人a的公钥pka、私钥ska、比特币编号mr和离线钱包w的地址w1信息,支付平台pa将交易u1广播给比特币网络;

(2c) 比特币网络中的挖矿节点首先验证交易u1的脚本,将十分钟内收到的所有比特币交易打包写入第一个区块c1,并根据区块c1中的信息计算出如下模式:

version+prev_hash+merkle_root+ntime+nbits+nonce;

其中,version为区块链版本号,prev_hash为区块c1的前一个区块的header hash值,

为当前区块c1的header hash值,ntime为区块c1的时间戳,nbits为当前挖矿难度值,h为sha256算法,nonce代表挖矿节点选择的随机值;

(2d) 挖矿节点对(2c)的计算结果进行sha256哈希,判断哈希结果:

如果h(version+prev_hash+merkle_root+ntime+nbits+nonce)<target成立,则挖矿节点会挂上当前区块链上的第一个区块c1,第一个区块c1成为有效区域区块,交易u1成为有效交易;

否则,挖矿节点重复步骤(2c),

其中,target为当前比特币工作量证明的目标值;

(2e) 其他挖矿节点将接下来十分钟内收到的所有比特币交易打包到第二个区块c2中,重复步骤(2c)和(2d),将第二个区块c2挂在第一个区块c1之后,交易u1得到确认此时1个区块的,以此类推,使得n≥6个区块c2...cn+1依次挂在第一个区块c1之后,交易u1得到n个区块的确认成为不可变交易,其中cn +1为其他挖矿节点打包的第n+1个区块;

(2f) 支付平台pa将交易订单u1和交易u1获得的确认块:n-u1={c1,...cn,cn+1}发送至离线钱包w。

第三步,钱包验证交易。

(3a) 离线钱包 w 检查交易 u1 和 n-u1 的脚本:

如果校验通过,离线钱包w计算第一个块和最后一个块的时间戳差s:=tn+1-t1,并提取c1的头部信息的哈希值v;

否则,离线钱包w拒绝接收交易u1和交易确认块n-u1={c1,...cn,cn+1};

(3b) 离线钱包w更新其地址w1中的余额balance=balance+mr,并存储交易u1和参数n-u1、v、s;

(3c)离线钱包w向支付平台pa返回接受交易u1或拒绝交易u1的状态。

第四步,线下比特币交易。

参考图2,该步骤的实现如下:

(4a)收款人b向收款人平台pb提交线下交易u0所需的金额ml,平台pb对(v',s',n')进行rip160哈希运算,得到哈希结果h(v' , s ',n'),并使用ecdsa签名算法对h(v',s',n')进行签名:

(4a1)平台pb选取一个随机值k,在椭圆曲线secp256k1上计算点r,根据点r的横坐标计算签名结果的前半部分f:

r=(f1,f2)=公斤,

f = f1modp;

其中,k<p,p为椭圆曲线secp256k1的阶数,g为椭圆曲线secp256k1的生成元,f1和f2分别为点r的横纵坐标,若f=0,采集平台pb重新选择 k;

(4a2)平台pb计算签名结果的后半部分h:

h=k-1(h'(h(v',s',n'))+skbf)modp,

其中,skb为收款人b的私钥,h'(·)为sha256函数,若h=0,则支付平台pb重新选择k;

(4a3) 平台pb结合(4a1)的f和(4a2)的h得到签名结果σb=(f,h);

(4b)收款平台pb计算原始支付合约x,将原始支付合约x发送给支付平台pa:

x=pkb||ml||σb,

其中,pkb为收款人b的公钥,ml为b指定的离线交易金额,|| 代表级联操作;

(4c) 平台pa检查原始支付合约x中收款人b的公钥pkb、收款人b指定的线下交易金额ml、签名结果σb是否顺序排列,发送原始支付合约x 到离线钱包 w ;

(4d)离线钱包w验证签名σb,同时将收款人公钥pkb和离线交易金额ml发送给付款人a,a核对收款人b的公钥pkb和离线交易金额ml由收款人b核对正确性,付款人a核对后将核对结果告知离线钱包w;

(4e) 离线钱包w判断离线交易金额ml:

若ml≤mr,离线钱包w计算新的支付合约x1:x1=x||(v,n,s,w1),

否则,离线钱包w拒绝接收原始支付合约x;

其中,v代表当前比特币网络生成的第一个区块的头部信息哈希值,n为确认交易u1的区块总数,s为第一个区块与最后一个区块时间戳的差值,w1为离线钱包地址,|| 表示级联操作,mr表示付款人a存入离线钱包w的比特币数量;

(4f) 离线钱包w输入收款人b的公钥pkb、新的支付合约x1和椭圆曲线生成器g,计算出新的收款地址dadd:

dadd=h(pkb+g·h(x1)),

其中,g为椭圆曲线secp256k1的生成元,h(·)代表rip160函数;

(4g) 离线钱包w生成离线交易u0,并用ecdsa签名算法对交易u0进行签名,表示地址w1中的比特币已经存入新的支付地址dadd,离线交易u0包含交易金额ml,钱包地址w1,新的Receipt地址dadd和钱包公钥pkw信息;

(4h) 判断离线钱包w是否收到原始支付合约x:

如果收到,离线钱包w输入x1、u0和区块c1的时间戳t1,用收款人b的公钥pkb对输入值进行加密,得到加密后的状态值c:

否则,离线钱包w输入拒绝符号“reject”,用收款人b的公钥pkb对reject进行加密,得到加密状态值c:

其中e(·)为安全加密算法sm2,t1为第一个区块c1的时间戳;

(4i) 离线钱包w返回加密状态值c给平台pb。

第五步,收款人验证交易。

(5a) 收款平台pb解密状态值c,从状态值c中的原始支付合约x1中获取参数值(v,n,s);

(5b)采集平台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;

(5c)收款平台pb通知离线钱包w状态为“接受”或“拒绝”;

(5d)离线钱包w根据收款平台pb是否收到离线交易u0进行如下操作:

如果离线交易u0被收款平台pb接收到,离线钱包w存储新的支付合约x1作为交易凭证,并更新离线钱包w中的比特币余额balance=balance-ml。 当比特币余额为0时,离线钱包ww清空地址w1的私钥skw,

否则,离线钱包 w 拒绝存储新的支付合约 x1。

第六步,提取比特币。

(6a)收款平台pb输入收款人b的私钥skb和支付合约x1,计算新的收款地址dadd对应的私钥dpri:dpri=skb+h(x1);

(6b) 收款平台pb检查新收款地址dadd的私钥dpri的正确性:

dadd=h(dpri·g)=h(skb·g+h(x1)·g)=h(pkb+h(x1)·g)

其中,g是椭圆曲线secp256k1的生成器。

第七步,公开验证交易。

(7a)) 平台pb向平台公开原始支付合约x的签名σb'、交易验证参数(v', s', n')和rip160哈希运算结果h(v', s', n')离线钱包 w ;

(7b) 离线钱包w输入4个参数v,n,s,w1,计算验证合约x2:

x2=pkb||ml||σb'||(v,n,s,w1);

(7c) 离线钱包 w 将验证合约 x2 与新的支付合约 x1 进行比较:

若x2=x1,则新的支付合约x1为正确的交易凭证,离线交易u0有效;

否则比特币区块的校验标准具体有哪些,离线交易u0无效。

通过以上步骤,将基于时间的交易区块确认验证参数参考值写入原支付合约,并根据原支付合约和交易区块确认参数的实际值生成新的支付合约,然后确定性钱包的主公钥属性将用于将新的支付合约链接到新的支付地址比特币区块的校验标准具体有哪些,应用于线下比特币交易,从而实现收款人对钱包伪造交易确认的有效验证,同时确保付款人的资金和财产安全。

以上所述仅为本发明的一个具体示例,并不构成对本发明的任何限制。 显然,对于本领域的技术人员来说,在理解了本发明的内容和原理之后,可以在不脱离本发明的原理、结构的情况下,在形式和细节上做出各种修改和变化,但这些基于本发明构思的修改和变化,仍在本发明权利要求的保护范围之内。

技术特点:

技术概要

本发明公开了一种基于比特币交易区块验证的离线交易系统及方法,主要解决现有技术中收款方仅对离线比特币交易进行常规验证,不对交易确认区块进行验证的问题。 付款人伪造比特币的问题,实现步骤为:系统初始化,付款人在线将比特币存入钱包,钱包验证存入交易; 付款人通过钱包与收款人进行线下交易,验证入金交易区块参数写入支付合约,并使用支付合约生成新的收款地址; 收款人验证离线交易,并使用私钥提取新接收地址中的比特币。 本发明将交易区块的确认参数绑定到支付合约上,然后使用支付合约生成新的支付地址,避免了支付方伪造比特币与收款方进行交易,同时有效地防止了伪造比特币的付款人。 泄漏可用于防止付款人在离线支付交易中伪造比特币。

技术研发人员:李雪莲; 王海宇; 高俊涛; 李伟

受保护技术用户:西安电子科技大学

技术研发日:2017.12.01

技术公告日期:2018.07.06