区块链入门笔记慢雾

区块链入门笔记|慢雾

名词解释

1.公链:任何人可随时读取、发送交易且能获得有效确认的共识区块链。(去中心化、数据不可更改)

2.交易所:数字货币买卖交易平台。

  • 去中心化交易所:交易行为直接发生在区块链上,数字货币直接发回使用者的钱包或保存在区块链上的智能合约上。
  • 中心化交易所:用户使用交易所时,货币交换仅修改交易所数据库内的资产数字,用户只看到账面上数字的变化,在用户提款时准备数字货币可供汇出即可。

3.节点:区块链网络中的每个节点,就相当于存储所有区块链数据的每一台电脑或服务器。

  • 全节点:保留全网数据
  • 轻节点:保留与自己相关的交易数据

4.RPC:以太坊提供HTTP、IPC、WebSocket等RPC调用。默认在8545端口提供JSON RPC接口,数据传输采用JSON格式,可以执行Web3库的各种命令,可以向前端提供区块链上的信息。

5.钱包:管理私钥的工具,允许使用者通过钱包检查、存储、交易其持有的数字货币。

  • 冷钱包:离线钱包?
  • 热钱包:连接网络进行使用。

6.公钥:由私钥生成,通过一系列计算可以得到钱包的地址。

7.私钥:由随机算法生成,通过非对称加密算法算出公钥,公钥再算出币的地址。

8.助记词:利用固定算法,将私钥转换成十多个常见的英文单词。=私钥!!!

9.Keystore:把私钥通过钱包密码再加密得来的,可保存为文本或JSON。

10.共识:由共识算法实现在分散的节点间对交易的处理顺序达成一致。

11.PoW:去中心化区块链共识算法,要求节点参与者执行计算密集型的任务,但对于其他网络参与者易于验证。

12.PoS:权益证明机制,通过持币人的同意达成共识,目的是确定出新区块。引入Stake的概念,持币人将代币进行Staking,要求所有参与者抵押一部分他们所拥有的Token来验证交易,PoS通过选举算法,按照持币量比例、Token抵押时长,选出打包区块的矿工。矿工在指定高度完成打包交易,出块,广播区块,通过验证人验证交易然后获得出块机会,通过验证后,区块得到确认。

13.DPoS:委托权益证明,由PoS可能出现选举随机数被操纵的问题引出用投票选出出块人的方式。持币人投票选出代表(一定数量的节点或矿池)。

14.多签:多个签名才能执行的操作。

15.软分叉(soft-fork):协议升级,新节点兼容旧节点,新旧节点始终在同一条链上工作。

16.硬分叉(hard-fork):新共识规则发布后,已经升级的节点无法验证未升级节点的区块,未升级节点也无法验证已升级节点产生的区块,新旧节点互不兼容。

攻击类型

  • 恶意挖矿攻击

    劫持用户设备挖掘加密货币。

  • 无利益攻击

    当PoS系统出现分叉时,出块节点在不受任何损失的情况下,同时在两个分叉上出块。

  • 双花攻击

    利用数字特性两次或多次使用“同一笔钱”完成支付。通常将一笔Token转到另外一个地址,利用一些攻击手法对转账记录进行回滚。

    • Race Attack

      通过控制矿工费实现双花。攻击者同时在网络发送两笔交易,一笔发给自己(增加足够的矿工费),一笔发给商家。矿工优先打包矿工费较高的那笔。

    • Finney Attack

      通过控制区块的广播时间实现双花,攻击对象针对的是接受0确认的商家。

      假设攻击者挖到区块,该区块中包含着一个交易,即 A 向 B 转了一定数量的 Token,其中 A 和 B 都是攻击者的地址。但是攻击者并不广播这个区块,而是立即找到一个愿意接受 0 确认交易的商家向他购买一个物品,向商家发一笔交易,用 A 向商家的地址 C 支付,发给商家的交易广播出去后,攻击者再把自己之前挖到的区块广播出去,由于发给自己的交易先于发给商家的交易,对于攻击者来说,通过控制区块的广播时间,就实现了同一笔 Token 的“双花”。

    • Vector76 attack

      一次确认攻击,交易确认一次后仍然可以回滚。Finney Attack和Race Attack的组合。

  • 51% 攻击

    攻击者占有超过全网 50% 的算力,在攻击者控制算力的这段时间,他可以创造一条高度大于原来链的新链。那么旧链中的交易会被回滚,攻击者可以使用同一笔 Token 发送一笔新的交易到新链上。

  • 异形攻击Alien Attack

    又称地址池污染,指诱使同类链的节点互相侵入和污染的一种攻击手法,不同链的节点互相握手并把各自地址池里的已知节点推送给对方,导致节点互相污染。+

  • 钓鱼攻击

    使用硬件钱包和双因素认证

  • 木马攻击

    攻击者通过隐藏在正常程序中的一段特殊功能的恶意代码,将控制程序寄生于被控制的计算机系统中,对被感染木马病毒的计算机实施操作。

  • 供应链攻击

    包/模块的依赖十分频繁、常见,开发者默认信任市面上流通的包管理器。

  • 针对智能合约的攻击

    • 交易回滚攻击

      多发于区块链的智能合约游戏中,用户的下注动作和合约的开奖动作在一个交易内的时候,即内联交易。攻击者通过交易发生时检测智能合约的某些状态,获知开奖信息,根据开奖信息选择是否对下注交易进行回滚。

    • 随机数攻击

      针对智能合约的随机数生成算法进行攻击,预测智能合约的随机数。

    • 交易排挤攻击

      针对EOS上使用的defer进行开奖的游戏合约的一种攻击手法,通过某些手段,在游戏合约defer开奖交易前发送大量的defer交易,恶意侵占区块内的CPU资源,使defer开奖交易因资源不足无法交易,只能在下一个区块执行,而同一个defer交易在不同区块内的执行结果是不一样的。

    多发于区块链的智能合约游戏中,用户的下注动作和合约的开奖动作在一个交易内的时候,即内联交易。攻击者通过交易发生时检测智能合约的某些状态,获知开奖信息,根据开奖信息选择是否对下注交易进行回滚。

  • hard_fail状态攻击

    出现错误但没有使用错误处理器处理。构造执行状态为hard_fail的交易,欺骗链上游戏或交易所进行假充值攻击。

  • 重放攻击

    在智能合约中验证用户交易的场景越来越多。这种场景需要用户对某一条信息进行签名后上传给智能合约,然后在智能合约内部进行验签。攻击者拿着用户的签名,伪造用户发起交易,从而获利。

  • 重入攻击

    项目转账模型为先给用户发送转账然后对用户余额状态进行修改,导致恶意用户构造恶意合约,在接受转账的同时再次调用项目方的转账函数。

  • 假充值攻击False Top-up

    1.智能合约假充值攻击

    假币的假充值,EOS代币采用合约的方式进行发行,同时任何人也可以发行名为EOS的代币。只是发行的合约账号不一样,系统代币的发行合约为“eosio.token”,而其他人发行的代币来源于其他的合约账号。当合约内没有校验EOS代币的来源合约时,攻击者就能通过充值攻击者自己发布的EOS代币,对合约进行假充值攻击。波场主要是TRC10代币的假充值攻击,每一个TRC10都有一个特定的tokenid进行识别。

    2.交易所假充值攻击

    分为假币攻击和交易状态失败的假充值攻击。针对EOS可以使用名为EOS的假币的方式对交易所进行假充值攻击,如果交易所没有严格校验EOS的来源合约为“eosio.token”,攻击就会发生。以太坊会保留交易失败的记录,针对ERC20 Token,如果交易所没有校验交易的状态,就能通过失败的交易进行ERC20假充值。

  • 短地址攻击Short Address Attack

    针对以太坊ERC20智能合约的一种攻击形式,利用的是EVM中对于输入字节码的自动补全机制进行攻击。ERC20合约中transfer函数进行ERC20 Token转账时,如果攻击者提供的地址后有一个或多个0,那么攻击者就可以把地址后的零省去,提供一个缺位的地址。EVM会对缺失的字节位在编码数据末尾经行补0。地址段确实的0被数据段的0补齐了,而数据段缺失的位被EVM补齐。

  • 假币攻击 Fake Token Attack

    每个Token的识别仅根据特定的标记进行识别,EOS Token识别标记是“eosio.token”合约,波场TRC10的识别标记是tokenid,以太坊的ERC20是用合约地址作为识别标记。如果收款方对Token进行收款时没有校验这些Token特有的标记,攻击就会发生。

  • 整型溢出攻击

值为0的uint8数据,对它进行减1操作,结果会变成该数据类型所能存储的最大值。恶意用户通过下溢的操作,操纵自己的账号向其他账号发送超过自己余额数量的代币,如果合约没有对余额进行检查,恶意用户的余额就会下溢变成一个超大的数值。

  • 条件竞争攻击 Race Condition

    本质时对某个条件状态修改的竞争(重入漏洞针对用户余额这个条件进行竞争)

  • 越权访问攻击

    越权指访问或执行超出当前账户权限的操作。

    EOS上著名的BetDice为例,由于未在游戏合约内的路由中对来源账号进行严格的校验,导致普通用户通过push action的方式访问合约中的关键操作transfer函数,直接绕过转账流程进行下注,从而发生越权攻击。以太坊上没有加权限校验,未指定函数可见性也容易发生越权攻击。

  • 交易顺序依赖攻击

  • 女巫攻击 Sybil Attack

    针对服务器节点的攻击。通过某种方式,恶意节点伪装成多个节点,对被攻击节点发出链接请求,达到节点的最大链接请求,导致节点没办法接受其他节点的请求,造成节点拒绝服务攻击。

    解决方法:服务器需在系统层面上对网络连接情况进行监控,一旦发现某个ip连接异常就调用iptables屏蔽异常的IP。链开发者应在P2P模块中对单IP节点连接数量添加控制。

  • 假错误攻击通知

    EOS上在action中添加require_recipient命令,就能对指定账号通知该action,在EOS上某些智能合约中,一般会对onerror通知进行处理,但如果没对通知的来源合约是否未eosio进行检验的话,触发onerror的处理,导致被攻击合约资产遭受损失。

发布了8 篇原创文章 · 获赞 5 · 访问量 590

猜你喜欢

转载自blog.csdn.net/mtcz91/article/details/103841448