一种账户体系下的联盟链交易的重放攻击防范方法技术

技术编号:31491336 阅读:57 留言:0更新日期:2021-12-18 12:28
本申请涉及区块链技术领域,提供一种账户体系下的联盟链交易的重放攻击防范方法,包括获取客户端发送的交易请求;获取交易请求的客户端时间,若所述客户端时间早于第一参照时间点T1,则拒绝所述交易请求;当所述客户端时间晚于第一参照时间点T1,且早于或等于第二参照时间点T2时,若交易缓存池P内存在所述交易请求对应的交易,则拒绝所述交易请求;若交易缓存池内P不存在所述交易请求对应的交易,则将所述交易请求对应的交易打包至当前区块内,并将交易请求对应的交易缓存至交易缓存池P。通过滑动时间窗的设计,交易的判重速度极快,且能够满足多种场景,对于节点宕机等异常情况,交易缓存池能够快速恢复,不会影响到联盟链系统的性能。统的性能。统的性能。

【技术实现步骤摘要】
一种账户体系下的联盟链交易的重放攻击防范方法


[0001]本申请涉及区块链
,尤其涉及一种账户体系下的联盟链交易的重放攻击防范方 法。

技术介绍

[0002]区块链作为一种分布式的公共记账系统,具有防重放攻击能力是系统记账正确性的重要 保证。在目前的区块链产品中,包括公链以及联盟链,都采取了防重放攻击的一些措施防范 交易的重放攻击。交易的重放攻击是一个很严重的问题,最直观的后果是会导致转账交易的 付款方在未同意的情况下重复支出其账户中的余额。对于存在转账交易以外的其他操作类型 的区块链产品,比如以太坊,如果反复调用其合约账户中的代码,将会导致系统状态的异常, 对于Hyperledger fabric(开源区块链分布式账本),则可能会使验证实体重复做链上编码 的唤醒操作,消耗其计算资源,影响系统的数据吞吐量。
[0003]为了实现防重放攻击的功能,现有技术中,提供多种解决方案,例如,记录历史交易的 哈希值作为解决方案,在该解决方案中,系统每执行一笔交易,都会在系统中记录该交易的 哈希值,通过在验证节点维护一个已经执行过的全部历史交易哈希记录,当区块中的节点收 到一笔新交易的时候,将该交易发送至验证节点进行验证,验证节点将其与本地存储的历史 交易哈希记录进行比对,并将验证结果发送回该节点。这种解决方案的思路比较直观,容易 理解和实现。但是,随着交易规模的增大,占用本地的存储空间将急剧增大,而且查询的过 程中也需要花费大量的时间,从而会显著影响网络的数据吞吐量,不能适用于大型的以及对 交易处理吞吐量较高的场景
[0004]又例如,通过将系统设计为天然具有防重放攻击能力的系统,作为防重放攻击的解决方 案,比如在基于UTXO的账户体系模型的虚拟货币交易过程中,由于每一笔交易的输入均关联 到上一笔交易的未花费输出(UTXO),从而天然具有防重放攻击能力。但是,这种虚拟货币交 易的天然防重放能力依赖于其发币权,以及以此为基础的货币拥有权的转移,随着交易的进 行,UTXO也形成了链式的结构,从而可以进行溯源来查看每笔UTXO的来源。显然这种方式 不适用于推广到通用的联盟链产品中。且另一个客观存在的问题是,如果通过溯源的方式来 验证一笔UTXO是否有效,在该UTXO链比较长的情况下会耗费大量是时间,当下的解决方式 是在节点同步的过程中,在本地维护一个可用的UTXO池,当验证一笔交易的输入是否有效的 时候,可以直接在该UTXO池中做查询,属于以空间换时间的做法,会消耗本地较多的存储资 源。
[0005]又例如,通过构建严格的交易序列,作为防重放攻击的解决方案,比如,以太坊在每笔 交易中加入变量AccountNonce(账户随机数),并在客户端有一个Nonce(随机数)变量, 用于记录账户目前已经发送的所有交易,当一笔交易被验证是否有效的时候,通过比对交易 的AccountNonce与客户端的Nonce是否一致,如果一致,交易才会被处理,随后客户端的 Nonce自增1,当有重复交易过来的时候,就会被判定为无效。通过这种方式以太坊实现了防 重放攻击能力。这种解决方案,通过在账户下构建严格的交易序列,并在客户端设
置一个类 似于计数器的组件来串行处理账户下的交易,导致交易必须严格按照顺序执行,且容错性较 低,如果中间存在一个交易执行失败,那么客户端的Nonce将不再增加,导致该交易之后的 所有交易由于AccountNonce均大于客户端Nonce而全部不能被系统接收。

技术实现思路

[0006]为了提高分布式的公共记账系统的防重放攻击能力,本申请提供一种一种账户体系下的 联盟链交易的重放攻击防范方法。
[0007]本申请提供的一种账户体系下的联盟链交易的重放攻击防范方法,包括:
[0008]获取客户端发送的交易请求;
[0009]获取所述交易请求的客户端时间,若所述客户端时间早于第一参照时间点T1,则拒绝所 述交易请求;
[0010]判断所述客户端时间是否早于或等于第二参照时间点T2,若所述客户端时间早于或等于 第二参照时间点T2,则将所述交易请求对应的交易与交易缓存池P内的全部交易进行对比;
[0011]若交易缓存池P内存在所述交易请求对应的交易,则拒绝所述交易请求;若交易缓存池 P内不存在所述交易请求对应的交易,则将所述交易请求对应的交易打包至当前区块内,并 将所述交易请求对应的交易缓存至交易缓存池P。
[0012]可选的,在所述获取所述交易请求的客户端时间的步骤之后,还包括:
[0013]若所述客户端时间晚于或等于第一参照时间点T1,则判断所述交易请求对应的交易签名 正确,若所述交易请求对应的交易签名正确,则将所述交易请求对应的交易放入到交易池中; 若所述交易请求对应的交易签名不正确,则拒绝所述交易请求。
[0014]可选的,所述判断所述客户端时间是否早于或等于第二参照时间点T2的步骤中,还包括:
[0015]若所述客户端时间晚于第二参照时间点T2,则将所述客户端时间对应的交易请求继续保 留在交易池中;
[0016]当所述客户端时间早于或等于更新后的第二参照时间点T2,则判断所述客户端时间是否 晚于或等于更新后的第一参照时间点T1,若所述客户端时间晚于或等于更新后的第一参照时 间点T1,则将相应的交易请求对应的交易与交易缓存池P内的全部交易进行对比。
[0017]可选的,以当前区块的高度m向前取n个区块,选取第m

n个区块的构建时间作为第一 参照时间点T1。
[0018]可选的,所述一种账户体系下的联盟链交易的重放攻击防范方法还包括:
[0019]获取所述交易缓存池P内的全部交易请求对应的区块打包时间,并将区块打包时间早于 或等于第一参照时间点T1的交易请求,从所述交易缓存池P中剔除。
[0020]可选的,所述将所述交易请求打包至当前区块内的步骤中,还包括:
[0021]获取上一区块的打包时间,如果所述上一区块的打包时间小于或等于当前区块打包节点 的本地时间,则将当前区块的打包时间设置为当前区块打包节点的本地时间;
[0022]如果所述上一区块的打包时间大于当前区块打包节点的本地时间,则计算当前区块前K 个区块的平均出块时间Δk,在上一区块的打包时间上延迟平均出块时间Δk,作为
当前区块 的打包时间。
[0023]可选的,所述计算当前区块前K个区块的平均出块时间Δk的步骤,具体为:
[0024]获取当前区块前K个区块对应的K个出块时间,判断K个区块中任意连续两个区块之间 的出块间隔时间是否大于默认出块时间间隔;
[0025]若某一连续两个区块之间的间隔时间大于默认出块时间间隔,则用默认出块时间间隔替 换所述某一连续两个区块之间的间隔时间,并用替换后的出块间隔时间计算所述K个区块的 平均出块时间Δk。
[0026]可选的,包括:
[0027]定期校准各节点之间的时钟,保持各节点之间的时钟同步;
[0028]在所述将本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种账户体系下的联盟链交易的重放攻击防范方法,其特征在于,包括:获取客户端发送的交易请求;获取所述交易请求的客户端时间,若所述客户端时间早于第一参照时间点T1,则拒绝所述交易请求;判断所述客户端时间是否早于或等于第二参照时间点T2,若所述客户端时间早于或等于第二参照时间点T2,则将所述交易请求对应的交易与交易缓存池P内的全部交易进行对比;若交易缓存池P内存在所述交易请求对应的交易,则拒绝所述交易请求;若交易缓存池P内不存在所述交易请求对应的交易,则将所述交易请求对应的交易打包至当前区块内,并将所述交易请求对应的交易缓存至交易缓存池P。2.根据权利要求1所述的一种账户体系下的联盟链交易的重放攻击防范方法,其特征在于:在所述获取所述交易请求的客户端时间的步骤之后,还包括:若所述客户端时间晚于或等于第一参照时间点T1,则判断所述交易请求对应的交易签名正确,若所述交易请求对应的交易签名正确,则将所述交易请求对应的交易放入到交易池中;若所述交易请求对应的交易签名不正确,则拒绝所述交易请求。3.根据权利要求2所述的一种账户体系下的联盟链交易的重放攻击防范方法,其特征在于:所述判断所述客户端时间是否早于或等于第二参照时间点T2的步骤中,还包括:若所述客户端时间晚于第二参照时间点T2,则将所述客户端时间对应的交易请求继续保留在交易池中;当所述客户端时间早于或等于更新后的第二参照时间点T2,则判断所述客户端时间是否晚于或等于更新后的第一参照时间点T1,若所述客户端时间晚于或等于更新后的第一参照时间点T1,则将相应的交易请求对应的交易与交易缓存池P内的全部交易进行对比。4.根据权利要求1所述的一种账户体系下的联盟链交易的重放攻击防范方法,其特征在于:以当前区块的高度m向前取n个区块,选取第m

n个区块的构建时间作为第一参照时间点T1。5.根据权利要求1所述的一种账户体系下的联盟链交易的重放攻击防范方法,其特征在于,所述一种账户体系下的联盟链交易的重放攻击防范方法还包括:获取所述交易缓存池P内的全部交易请求对应的区块打包时间,并将区块打包时间早于第一参照时间点T1的交易请求,从所述交易缓存池P中剔除。6.根据权利要求1所述的一种账户体系下的联盟链交易的重放攻击防范方法,...

【专利技术属性】
技术研发人员:石宁吴怀江甘子荣赖石辉许小明李达
申请(专利权)人:南京金宁汇科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1