教程网

您现在的位置是: 首页 > 知识

区块链就能保障数字资产安全了吗?

区块链就能保障数字资产安全了吗?
区块链就能保障数字资产安全了吗?在2013-2017年期间,全球数字货币交易量迎来了巨大提升,成为世界各国投资者眼中的香饽饽,越来越多的国家开始承认数字货币的合法化。除此之外,数

区块链就能保障数字资产安全了吗?在2013-2017年期间,全球数字货币交易量迎来了巨大提升,成为世界各国投资者眼中的香饽饽,越来越多的国家开始承认数字货币的合法化。除此之外,数字货币已然被全球黑客盯上,成为黑客盗取和勒索的首选对象,黑客以攻击手段攻击网络和计算机,要求支付数字货币作为赎金。那么,区块链就能保障数字资产安全了吗?

现如今,区块链已经成为全民关注的领域,不少企业也早已深入其中研究该技术的落地情况。但目前仍有很大一部分人对区块链技术的相关概念并不熟悉,学习区块链,肯定离不开比特币,今天小编和大家一起了解下通信数据中的安全问题如何保障呢?也就是我们的数字资产的安全如何保障的?

非对称加密算法

为了让交易在无需第三方信任机构的参与之下安全进行,比特币系统采用了一种名为非对称加密的密码学技术。

对称加密算法是指在加密和解密时使用的是同一个秘钥。与对称加密算法不同,非对称加密算法需要公钥和私钥。

当使用非对称加密算法时,会生成两把配对的密钥,其中一把由私人保管,无需传输,所以称为私钥;另一把对外公布,本身就无需保密,称为公钥。

用了其中一把钥匙加密的信息,只有配对的另一把钥匙才能解密,所以公钥和私钥形成了唯一对应的关系。

正是基于这种唯一对应的关系,非对称加密首先可以用来验证信息发送方的身份。

比如你现在要发送一条信息,用非对称加密的方法加密,生成了一把私钥,一把公钥。你自己保管着私钥,接收方收到了你的公钥,因为公钥和私钥是配对的,接收方只要能用你的公钥来解密这条信息,就能确认这条信息真是由你的私钥来加密的,也就是可以验明你是不是发送者本尊。

非对称加密的另一个用法是保密传输。假设有个人想发送一条加密信息给你,你可以生成一把私钥、一把公钥,将公钥发送给对方,让他用这把公钥加密后,再将信息发送给你,唯有你才可以用手中的私钥解密。

非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,在通讯前不需要先同步秘钥,避免了在同步私钥过程中被黑客盗取信息的风险。

比特币系统中的应用

比特币系统中的私钥由随机生成器生成,再通过椭圆曲线、哈希函数等等单向、不可逆算法推导出公钥以及地址。所以说,即使将地址以及公钥公开在网络上,也无法借其推导出私钥(截至目前为止,还未有人可破解这项技术),拥有私钥就等于拥有比特币的所有权。

正因如此,比特币网络中的用户无须通过身份验证就能确保自身加密货币资产的所有权。用户使用私钥生成交易,矿工利用公开于网络的公钥进行信息验证,便能进行资产所有权的安全匿名转移。

非对称加密算法在这里承担了权威第三方的认证工作。虽然区块链技术还不完善,但其在多领域都显示出它的巨大潜能,在资产数字化方面更是“量身定制”版的技术。

随着越来越的人参与到区块链这个行业中来,为行业注入新活力的同时也由于相关知识的薄弱以及安全意识的匮乏,给了攻击者更多的可乘之机。面对频频爆发的安全事件,慢雾特推出区块链安全入门笔记系列,向大家介绍区块链安全相关名词,让新手们更快适应区块链危机四伏的安全攻防世界!

短地址攻击 Short Address Attack

短地址攻击(Short Address Attack)是针对以太坊上 ERC20 智能合约的一种攻击形式,利用的是 EVM 中的对于输入字节码的自动补全机制进行攻击。

一般而言,针对 ERC20 合约中的 transfer 函数的调用,输入的字节码位数都是 136 字节的。当调用 ERC20 中的 transfer 函数进行 ERC20 Token 转账时,如果攻击者提供的地址后有一个或多个 0,那么攻击者就可以把地址后的零省去,提供一个缺位的地址。

当对这个地址转账的时候,比方说转账 100 的 A Token,然后输入的地址是攻击者提供的缺位地址,这时候,经过编码输入的数据是 134 字节,比正常的数据少了 2 字节,在这种情况下,EVM 就会对缺失的字节位在编码数据的末尾进行补 0 凑成 136 字节,这样本来地址段缺失的 0 被数据段的 0 补齐了,而由于给地址段补 0,数据段会少 0,而数据段缺失的 0 由 EVM 自动补齐,这就像数据段向地址段移动补齐地址段缺失字节位,然后数据段缺失的字节位由 EVM 用 0 补齐。

这种情况下,转账金额就会由 100 变成 100 * 16 的 n 次方,n 是地址缺失的 0 的个数。通过这种方式,攻击者就能对交易所或钱包进行攻击,盗窃交易所和钱包的资产。

慢雾安全团队建议交易所和钱包在处理转账的时候,要对转账地址进行严格的校验,防止短地址攻击的发生。详情可参考:遗忘的亚特兰蒂斯:以太坊短地址攻击详解

假币攻击 Fake Token Attack

假币攻击(Fake Token Attack),是针对那些在创建官方 Token 时采用通用创建模版创建出来的代币,每个 Token 的识别仅根据特定的标记进行识别,如 EOS 官方 Token 的识别标记是 "eosio.token"合约,波场的 TRC10 的识别标记是 tokenid,以太坊的 ERC20 是用合约地址作为识别标记。

那么这样就会出现一个问题,如果收款方在对这些 Token 进行收款的时候没有严格校验这些 Token 特有的标记,攻击就会发生,以 EOS 为例子,由于 EOS 官方 Token 采用的是合约来发行一个名为 EOS 的 Token,标记 EOS 本身的标识是 "eosio.token" 这个发行帐号,如果在接受转账的时候没有校验这个标识,攻击者就能用其他的帐号同样发行一个名为 EOS 的 Token,对交易所或钱包进行假币充值,换取真的代币。

2019 年 4 月 11 日,波场 Dapp TronBank 1 小时内被盗走约 1.7 亿枚 BTT(价值约 85 万元)。监测显示,黑客创建了名为 BTTx 的假币向合约发起“ invest ”函数,而合约并没有判定发送者的代币 id 是否与 BTT 真币的 id 1002000 一致。因此黑客拿到真币 BTT 的投资回报和推荐奖励,以此方式迅速掏空资金池。

对此,交易所和钱包在处理转账的时候,切记要严格检验各种代币各种标识,防止假币攻击。

整型溢出攻击 Integer Overflow Attack

数据的存储是区块链上重要的一环。但是每个数据类型本身是存在边界的,例如以太坊中 uint8 类型的变量就只能存储 0~255 大小的数据,超过了就存不下了。

那么如果要放一个超过数据类型大小的数字会怎样呢?例如把 256 存进 uint8 的数据类型中,数据显示出来会变成 1,而不是其他数值,也不会报错,因为 uint8 本身能存一个 8 位二进制数字,最大值为 11111111,如果这个时候加 1,这个二进制数就变成了 100000001,而因为数据边界的关系,只能拿到后 8 位,也就是 00000001,那么数字的大小就变成 1 了,这种情况我们称为上溢。

有上就有下,下溢的意思就是一个值为 0 的 uint8 数据,如果这个时候对它进行减 1 操作,结果会变成该数据类型所能存储的最大值加 1 减去被减数,在这个例子中是 255,也就是该数据类型所能存储的最大值。

那么如果上述两种情况发生在智能合约当中的话,恶意用户通过下溢的操作,操纵自己的帐号向其他帐号发送超过自己余额数量的代币,如果合约内没有对余额进行检查,恶意用户的余额就会下溢出变成一个超大的值,这个时候攻击者如果大量抛售这些代币,就能瞬间破坏整个代币的价值系统。

慢雾安全团队建议所有的智能合约开发者在智能合约中对数据进行操作的时候,要严格校验数据边界,防止整形溢出攻击的发生。详情可参考:BEC 智能合约无限转币漏洞分析及预警。

条件竞争攻击 Race Condition

条件竞争(Race Condition)攻击的方式很多样,但是核心的本质无非是对某个条件的状态修改的竞争,如上期介绍的重入漏洞,也是条件竞争的一种,针对的是用户余额这个条件进行竞争,只要用户的余额没有归零,用户就能一直提走智能合约的钱。这次介绍的条件竞争的例子是最近发生的著名的 Edgeware 锁仓合约的拒绝服务漏洞,详情可参考:关于 Edgeware 锁仓合约的拒绝服务漏洞。

这个漏洞问题的本质在于对新建的锁仓合约的余额的这个条件进行竞争。攻击者可以监控所有链上的锁仓请求,提前计算出锁仓合约的地址,然后向合约地址转账,造成锁仓失败。

在官方没有修复之前,要防止这种攻击,只能使用比攻击者更高的手续费让自己的锁仓交易先行打包,从而与攻击者形成竞争避免攻击。最后,官方修复方案为不对锁仓合约的余额进行强制性的相等检查,而是采用大于等于的形式,避免了攻击的发生。

慢雾安全团队建议智能合约的开发者在智能合约中对某些状态进行修改的时候,要根据实际情况充分考虑条件竞争的风险,防止遭受条件竞争攻击。

过去18个月,原来由传统银行所提供的一些功能,已在加密行业生根发芽。当这些功能与信任最小化相结合时,人们称之为去中心化金融 (DeFi),其中大部分都发生在以太坊上,当然,也有一些例外。

此前有很多文章详细介绍过 DeFi 的要点和潜力,我不再赘述。我想说一个未被探索的话题:在吸储机构或加密银行中,信任能否最小化。(我完全明白,在一份名为《Bankless!》的新闻通讯中谈论银行,听起来相当讽刺!)

让我们快速回顾一下商业银行提供哪些服务,下表按重要性从高到低排列:

接受个人存款(通常银行不会保持全额储备,只保有相对较少的一部分,并基于储备发放贷款)。在许多司法管辖区,这些存款获得政府的保护,但只在一定额度下;

根据账户类型,为这些存款支付利息;

作为信用的一个来源,服务于需要信用卡、小企业贷款、透支和抵押贷款的消费者;

作为一个交易界面和代理,服务于想发送电汇、接收支票、支付账单的用户;

发行借记卡和信用卡;

让消费者能以电子存款换取现钞,或者通过分行或者通过自动柜员机。这项服务实际上是一种补贴(或者说亏本买卖),因为它通常(但不总是)对帐户持有人是免费的;

为各种物品提供物理存储空间,比如贵重品(甚至你的私钥!)。

上述这些服务,现在的加密货币交易所并不全都提供,但我还是经常称它们为「银行」,因为它们确实覆盖了吸收存款的用例,而且正涉及越来越多的其他功能。

在此我不再复述Hasu曾经写过的一篇文章,他讲了关于交易所(「加密银行」)提供的各种服务,是对该行业发展方向的一个很好概括。我关心的问题是:如果加密银行已是既定存在,而且用户们还会继续寻求这类机构的服务,那么,有没有可能将所需的信任最小化呢?与法币存款相比,加密货币存款是否更容易受到这种信任最小化的影响?

用户为什么会选择加密银行?

在我看来,加密行业当前和未来的主要关注点,是如何让用户在一系列信任模型下获得和交易各种金融资产。

比特币的诞生催生了一种新的所有权模式:一种便携式数字商品的强大所有权。对每一笔链上交易,其结算都是(概率上)最终的。这意味着,交易不会受到和数字传输相关的常规问题的影响,此前,这些问题来自付款和最终结算之间的延迟。但是,比特币和所有后来的加密货币引入了一个新问题:要求用户自行托管 他们的资产。

谨慎存储信息,这对许多人来说相当困难,于是,加密货币的托管人 (custodian) 应运而生。由于人们主要是在交易所获得加密货币,所以许多人也就选择这些交易所作为托管人。随着时间的推移,该行业发展出全额储备银行,一般称之为交易所(尽管也存在一些非交易所的专门托管机构)。这些加密银行已经控制主流加密货币供应量的很大一部分,且比例还在不断上升。随着押注、借贷和计息工具的兴起,许多用户选择了通过中心化的托管机构来试水这些新产品。

多亏了地址标记和一点侦探性的工作,我们可以估算出比特币在托管和非托管之间的供应量分布。我的计算也纳入了那些长期不活跃的供应量,许多早期币多半已丢失。

Coin Metrics 估算的已丢失的 BTC,已托管的 BTC 数据来源见下文,数据最初出现在 Macro.WTF,此处有修正

如上图所示,被托管的比特币(图中深蓝色部分)的数字上涨迅速,至少占到已挖出的总供应量的 20%,如果排除假定已丢失的比特币,这一比例还会更高。

下图我对各托管机构(交易所)持有的份额做了大致的细分(请注意,其中一些是粗略估算):

数据来源:Coin Metrics、Grayscale、XBT 供应商、Meltem Demirors/Coinshares、日本虚拟货币交易所协会

需要承认,上图的历史估计值包含了一些推论,因为我没有像 Mt. Gox 这类交易所的高质量数据,也没有 Coinbase、Xapo 等交易所的历史数据。日本的交易所特别好,他们实现了自我监管,并真实披露其持币情况。

我承认,这只是对被托管的比特币的一个下限估计,还有许多较小的交易所没有被计算在内。但我相信大体情况就是这样。而趋势相当惊人:被托管的比特币的增长速度远远快于比特币的供应速度。谁知道被托管的部分最终会达到多大份额呢?

 1/4    1 2 3 4 下一页 尾页