安装杀毒软件就能泄密?美国情报人员因转移机密被判刑

2018-09-27

据法新社和路透社报道,一名美国情报工作人员因将绝密材料从办公地点转移到家中而被判入狱。美国检方称,俄罗斯情报机构很有可能已经窃取了相关绝密材料,理由是此人家用电脑上使用了俄罗斯杀毒软件卡巴斯基。

微信图片_20180927104618.jpg

美国国家安全局NSA的徽章

据报道这名工作人员是现年66岁的越南裔Nghia Hoang Pho,他曾在国家安全局精英黑客部门内任职10年以上。美国检方称,Pho在2010年至2015年间,他把他们称之为“大量宝藏”的最高机密数据带回家,存放在自己家中的私人电脑上,他在去年12月与检方达成了认罪协议,在9月25日被法庭以故意保留机密国防信息为由判处他66个月监禁。

微信图片_20180927104623.jpg 

俄罗斯杀毒软件卡巴斯基

Pho将这些机密信息保存在他的家用电脑上,该电脑受到流行的卡巴斯基反病毒程序的保护。美国情报部门认为,俄罗斯情报部门能够通过卡巴斯基软件访问Pho的电脑窃取他们想要的秘密资料。美国检察官Robert Hur称:“由于他的行为,Pho泄露了我们国家一些让对手最密切关注的情报类型,并迫使美国国安局放弃了一些重要的举措,以极大的经济压力和运营成本保护自己及其维持其运营。”

微信图片_20180927104628.jpg

此次泄密让美国国安局随时惨重

该事件被认为是美国政府去年禁止在政府电脑上使用卡巴斯基软件的一个关键原因。美国媒体称,为了运行卡巴斯基反病毒程序,必须要给软件授予计算机所有者的全部权限。然后,它会将反病毒扫描结果传达给位于莫斯科的卡巴斯基总部。然后俄罗斯情报机构会从上报的代码中筛选出自己感兴趣的文件和程序。2017年12月12日美国政府警告称,该这家俄罗斯反病毒软件公司怀疑与俄罗斯情报部门有关,并要求美国境内的政府部门禁止购买和使用卡巴斯基的反病毒软件。不过,卡巴斯基公司完全否认了其与俄罗斯政府或其间谍机关有任何联系。

西安软件开发、西安APP开发、西安软件外包、西安软件开发、西安网站建设、电商软件开发、社交软件开发、直播软件开发、西安网站制作、西安区块链开发

说了太多要做好,你知道怎么玩坏一条区块链吗

2018-09-27

当我们谈论区块链的时候,我们一再强调着区块链上的数据是多么难以篡改,我们讲述着一个去中心化的美好乌托邦,在这里我们可以更好的保护我们的隐私和个人财产,让它们不受任何强权、财团、大公司的控制,我们更自由了。

但是现实总会无情的打脸,乌托邦不过存在于我们的想象中。在区块链的token经济下,智能合约漏洞和黑客攻击,包括系统规则的考虑不周,导致的资金的损失比例,可能比法币体系下腐败、剥削、犯罪导致的损失更大。

这是是个非常尴尬的事情。如果你经历过2014年MT.GOX的上亿盗窃案,或者被黑客炸骗盗币后,却因为“不可篡改性”只能眼睁睁看着黑客逍遥自在的,花着你的血汗钱的时候,你一定会彻底对区块链描述的乌托邦失望。这就是所谓的“安全”,这就是所谓的“自由”。区块链只保护了技术的“强者”。

微信图片_20180927103646.jpg

这些安全的挑战来自于很多地方,不仅仅是区块链本身的不完善,还包括一些钓鱼网站、对交易所的DDOS攻击,甚至是欺诈、威胁恐吓的老把戏。区块链是个新生的技术,虽然他自带了加密和分布式的一系列安全光环,但是我们目前的确可以找到一百种方法来玩坏一条区块链。

在这里,我们就来看看目前惯用的攻击有哪些?

从而更好的保护我们的财产。

目前对于区块链的攻击可以分成三个维度:

第一个维度是双花攻击。双花,就是同一笔钱花了两次。

任何一个有关价值的系统,首要的问题便是避免价值的双花,这样价值才能得到保障,显然传统互联网是无法避免双花的。通常来说,如果利用区块链技术,双花问题可以解决。因为区块链只承认第一笔交易为有效的交易。但是我们却能找到不少的办法攻击区块链从而实现双花,包括我们熟悉的51%攻击,以及重放攻击等等,这足以撼动一条区块链的信任基础,破坏性非常强大。

第二各维度是对区块链系统的可用性的攻击,类似于传统的DDOS攻击,让区块链停止处理网络中的有价值的交易和数据,从而让整个系统停摆。这包括抬高处理交易成本堵塞区块链的粉尘攻击,拒绝打包交易的空块攻击,破坏对等网络的信誉系统的女巫攻击,以及在一些特定共识算法下的强行分叉攻击“无利害关系”。

第三个维度是对区块链上规则的攻击,对智能合约的攻击。这可能是目前最要命的攻击方式,也是目前安全问题的重灾区,特别是针对目前的ERC20协议下的各种token来说,已经有好几个token因为合约漏洞“被增发”,直接导致了token价值归零。代码总是会有错误和没有考虑周到的地方,有缝隙的地方黑客就可以利用,比如”the DAO”事件里的无限调用攻击。

微信图片_20180927103651.jpg

其实在这三个维度之外还有一些攻击,比如直接针对区块链下的经济体系的攻击,比如“贿赂攻击”等等,以及一些对中心交易所的各种传统互联网的攻击方式,乃至钓鱼和诈骗网站等等。由于这些并不是区块链本身的不完善,导致了攻击的可能,我们在此不多做讨论。

双花攻击

双花攻击就是同一笔钱被花费了两次。比如在最近的一次交易里,攻击者转账到你的账户100个BTC,换取了你500w人民币。钱到手后,攻击者又发送了一个转给自己100BTC的交易,不管他用了什么方法,最后最长的链上包含了这个攻击者转给自己的交易,而他和你之间的交易却因存在于较短的分叉中而被认为是“没有发生过”的。

51%算力攻击

双花攻击有多种实现的方法,成本其实不高,大家比较熟悉的就是51%算力攻击,这种攻击是通过控制网络51%的算力实现双花。如果攻击者控制了网络中51%以上的算力,那么在他控制算力的这段时间,他有非常大的可能追上当前区块产生的速度,从而将区块逆转,进行反向交易,实现双花。

具体的实现逻辑如下图:

微信图片_20180927103655.jpg

在比特币的白皮书中,就讲述过这个攻击的可能,理论上是无法通过技术来防范51%攻击发生的,中本聪选择了使用经济学原理从根源上避免了51%攻击的可能,达到全网的51%算力的成本是非常之高的,付出如此高的成本进行双花攻击后,因为信任的崩溃,token会变得一文不值,攻击者不会做花费100元诈骗5元的蠢事,当时有这么多的算力进行诚实的挖矿,获得的收益相对更多。

我们一再强调51%的攻击的成本之高,以至于从经济上来讲它很难发生,比特币的51%攻击是不可能发生的,但现实中51%攻击的成本没有我们相信的那么高,特别是对小规模的山寨币来说。这里大概讲述了几种低成本下如何进行51%算力攻击的方法.

1.贿赂攻击:不用为了进行双花攻击去花大成本掌握51%的算力,只要拿出足够丰厚的奖励收买挖矿节点做特地的事情就好了。下面是贿赂攻击的基本流程。

微信图片_20180927103658.jpg

这里有个很有意思的事情,矿工们明明知道接受贿赂,攻击区块链导致分叉是不好的行为,可能会影响到自己未来的挖矿收益,为什么还要贪图这些小利呢?

因为攻击者的贿赂声明是经过地址加密私发给每一个矿工的,并且告诉矿工,我只告诉了你一个人,你能挖出这个区块奖励就是你一个人的,你不会告诉别人来分走自己的奖励吧。这时候就出现了一个囚徒困境的博弈难题,矿工为了自己的利益不会告诉其他节点自己接受了贿赂,并且相信只有自己对区块链攻击,起不到什么关键作用,不会造成严重问题。但是鸡贼的攻击者会把这条消息发送给起码51%以上的矿工,所以最后双花总是会完成的。

如何防范:引入有保证金和惩罚措施的改进版挖矿机制。每个区块链的矿工都有保证金押在链上,如果贿赂者进来告诉你去做出对原来区块链不利的决策,你会损失你所有的保证金,这样做是得不偿失的,这也提高了攻击者的贿赂成本。未来以太坊的Gasper共识算法就会采取抵押保障金的方式进一步增加作恶成本。

2.币龄累积攻击:这种攻击主要针对“POW+POS”混合共识机制的区块链,在这种共识之下,挖到区块的可能性不仅与当前的算力有关,同时也与你账户上持有的币的数量和每个币的持币时间相关。你拥有的币越多,持币时间越长,对于你来说挖矿的算力难度就越低,越有可能挖到区块。这就导致,部分节点买入一定数量币后,持有足够长时间后,就有能力利用币龄的增加,近乎的达到51%的算力,从而控制整个网络。

如何防范:对持币数量和持币时间的最大值进行约束和预警,打到51%临界情况时,系统可以自动进行一次奖励清算,清空持币时间,而不是等待这个节点的权力随着时间无限的增长。

3.通用挖矿攻击:这种攻击主要是针对还未形成挖矿规模的币种的攻击,特别是一些主流币种的山寨分叉币,当你投资的时候一定要注意。目前部分不同的币因为架构和共识算法的问题,矿机是可以进行通用挖矿的,比如早期挖BTC的矿机也可以挖BCH,而且BTC的全网算力比BCH的大了好几十倍,这时候如果挖掘BTC的大矿场突然转而去挖掘某种山寨分叉币,马上就可以拥有山寨币全网的51%以上的算力,这时候对山寨币进行双花攻击,变现后继续回去挖掘BTC就好了,山寨币归零也和攻击者没有关系了。这对攻击者来说是没有任何成本的,这也就是所谓的,不存在封闭的经济系统。

攻击案例:2016年8月份,基于以太坊的数字货币Krypton遭受来自一个名为“51% Crew”的组织通过租用Nicehash的算力,进行51%攻击,导致该区块链损失约21,465 KR的代币。

如何防范:修改代码,更新共识算法,使得其他区块链上的矿机无法在本区块链上进行通用挖矿行文。同时对投资者来说,尽量选择技术实力强,背后算力背书强的币进行投资,山寨币被攻击的成本太低,安全性堪忧,甚至对部分山寨币,通过租用亚马逊云服务就可以发动数次51%攻击。

芬尼攻击

这个双花攻击实现起来比较简单,攻击对象针对的是接受0确认的商家。芬尼攻击主要通过控制区块的广播时间来实现双花,需要等待攻击者挖到一个包含了自己转给自己的区块后,扣住区块不广播从而进行攻击,所以也叫扣块攻击。

微信图片_20180927103704.jpg

>0确认是指一笔交易被广播到全网,即将被打包进入区块前的状态。因为区块链目前的出块时间过慢,交易确认需要等待的时间较长,部分商家为了节省时间提高效率接受0确认的交易,也就是你把交易信息填写好之后广播到全网就可以了,不需要等待打包入区块。

如何防范:非常简单,不接受0确认就好,起码接受一个确认后再交割现金。

种族攻击

这种方式主要通过控制矿工费来实现双花,同样是针对接受0确认的商家。挖矿的矿工都是逐利的,他们会首选筛选手续费高的交易进行打包处理,种族攻击正是利用这一点进行攻击。

微信图片_20180927103708.jpg

如何防范:商家不接受0确认,至少需要等待一个确认。

分割攻击

边界网关协议(BGP)是因特网的关键组成部分,通过劫持BGP来操纵互联网的路由路径。因为区块链是基于互联网的信息传递的,劫持BGP可以实现对区块链节点流量的误导和拦截。节点的流量一但被接管,又能对整个区块链网络造成巨大的影响,破坏共识机制,破坏交易等各种信息。

>从2016年11月5日至2017年,通过对节点网络的分析统计发现,目前大多数比特币的节点都托管在少数特定的几个互联网服务提供商上,而60%的比特币连接都是在这几个服务商。所以这几个服务商的角度可以看到60%的比特币流量,完全可以接管这部分流量,对区块链造成巨大的破坏。其他的币种这个情况更加严重。

攻击者可以利用BGP劫持,将区块链网络包括网络中的节点划分成两个或多个无法通信的独立网络,此时的区块链会分叉为两条或多条并行链。这时候可以在并行的分差上消费代币的转账行为,在攻击停止后,区块链会以最长的链为主链重新统一起来,其他的分叉将被废弃,这些链上的交易将全部无效。从而就实现了双花,甚至是多次花费。

微信图片_20180927103712.jpg

 

微信图片_20180927103716.jpg

如何防范:针对的区块链建立其专用的网络,不再让互联网服务提供商代理网络,这个专用的区块链网络同样需要去中心化,减少被单点劫持后造成巨大破坏的可能。同时设立算力监控网站,实时汇报全网算力变化情况,算法发生激烈变化就可以检查和其他节点之间的通信。

重放攻击

指攻击者再次全网广播一个在区块链网络上窃听截取到的交易消息,进行欺诈实现多次收账,形象一点就是一张支票多次兑现,从转账方处多次“偷钱”,算是一种广义上的“双花”,重放攻击能导致多次付款,却不需要来自付款者的同意。

使用UTXO结构的区块链是天然抵抗重放攻击的,因为转账是基于每一笔UTXO(未花费交易输出)进行的原子级别操作,不存在一笔UTXO被重复扣除的情况,这是不合法的。但是在比如以太坊的账户结构中,交易是通过余额判断合法性的,只要余额足够就可以进行重复扣款转账,一笔交易的信息进行多次广播的重放攻击是可行的。

上述讲述的基于传统网络系统中的一条区块链上的重放攻击,还有一种区块链语境下才有的特殊重放攻击,是同时在几条链上进行的。我们进行分类说明。

1.一条区块链上的重放攻击:

在以太坊等账户体系下的区块链中,重放攻击一笔交易会导致转出账户中的余额反复减少,收款账户中的余额反复增多。攻击者首先进行一笔收款的交易,比如从交易所提现,然后在网络中抓取此条交易的数据,对时间戳等进行修改后(此时交易的hash值已经发生巨大变化,网络会认为是一个新交易),再次在全网中进行广播。矿工接受到这个交易,因为交易中私钥签名和公钥加密齐全,判定为受害者发送来的交易,检查余额也足够,视为合法交易,进行打包。这样攻击者就又从受害者处收到了一笔转账,这样多次进行,直到扣完受害者商户余额为止。

微信图片_20180927103720.jpg

如何防范:在以太坊的账户机构中存在一个参数nonce,他的值等于从这个账户中发出的交易的数量,交易其它验证通过和执行完成后,发送者账户中的nonce会自动增加1。当一笔交易被矿工验证是否合法的时候,矿工会比对交易包含的nonce的值,并与该交易的发送者账户中的nonce值进行比较,相等才算作合法交易,对它进行打包出块。重放攻击是无法修改发送者账户的数值的,只有发送者有这个权利,因此当接受到重复交易时,矿工会直接判它无效,从而阻止了重放攻击。

交易延展性攻击:UTXO结构下的区块链,比如比特币是天然抵抗重放攻击的,但是有种针对交易所的交易延展性攻击是可行的,和重放攻击的攻击方式非常相似。解释一下“交易延展性”,在现实生活中,纸币在使用中,可能由缺角或污迹,但这张纸币的购买力没变,只是外观看上有些不同,我们还可以用它进行交易,这就是纸币的“交易延展性”。在比特币中,因为矿工验证交易签名使用的openssl兼容多种编码格式,所以在交易发出后、确认前,对交易的签名进行编码格式的调整,虽然签名没有变化,但是交易的Hash得到的交易ID却发生了巨大的变化,会被矿工误认为是一个新交易。黑客利用比特币的这个“交易延展性”,在交易所提现,在到账前,通过篡改签名编码格式获得交易ID不同的交易,进而欺骗交易所称未收到转账,实现多次提现。

攻击案例:2014年2月25日,日本时间上午11点,MT.GOX交易所(俗语门头沟)因收到重放攻击损失85万枚比特币,当时币价值近4.54亿美元,这直接导致了MT.GOX的倒闭。MT.GOX是当时比特币最大的交易所,一度交易量达到所有比特币交易的80%,,这次攻击导致了更严重的后果,直接导致了比特币价格暴跌到原来1/3的位置,低迷持续了一整年,很多人没有熬过这个寒冬。

2.在分叉链上进行的重放攻击:

存在分叉币的情况下才会出现的重放攻击。在进行分叉产生新币种之后,代码修改的较少,导致在其中一条链上的交易在另一条链上很可能是完全合法的。所以你在其中一条链上发起的交易,攻击者可以复制到另一条链上去重新广播,也会得到确认。这就是区块链特色的“重放攻击”。

普通用户在主链分叉为两条链的时候,同时拥有了两条链的资产,分叉链上的重放攻击可能导致一条链上的资产被盗取。在交易所中的分叉币之间,不断存取一种币,可能会导致另一种分叉币无故流失,这也可以通过重放攻击实现。这里就介绍一下怎么对交易所进行重放攻击。

微信图片_20180927103725.jpg

如何防范:最简单的办法就是在刚开始分叉时就对代码进行足够多的修改,起码要做到分叉链和主要链之间的交易信息不通用,这就可以避免损失。但是有部分分叉比较有“脾气”,比如ETC和ETH,都觉得自己是最纯正的一支,决绝修改代码做出妥协,所以还是建议在分叉之后立马对不同链上的财产进行转移,不要再存在分叉前的地址里。

对可用性的攻击

让区块链停止处理网络中的有价值的交易和数据,从而让整个系统停摆。方法和逻辑都比较简单,比如给发送大量垃圾交易堵塞网络,或者恶意分叉让节点无法寻找最长链。

粉尘攻击

大量交易额小到根本不可能、毫无意义的垃圾交易占领区块空间,导致正常有价值的交易无法被处理,从而造成区块堵塞;于此同时为了抢占交易被打包的机会,市场会自然的抬高交易手续费以及GAS费用,回发生上千倍的增长,导致交易成本过大,基于区块链之上的落地应用,比如游戏等会因为操作成本过高,遭受毁灭性打击。

实现粉尘攻击有多重手段,有的是作为交易的发起者,在全网发送很多手续费高但是转账金额非常小的交易,矿工就会优先打包这些交易,从而堵塞区块链,如此成本较高;或者直接由矿池进行攻击,挑选自己发出的无意义交易进行打包,如此攻击成本基本为0。

攻击案例:在过去去两年中,比特币一直在被迫处理很多垃圾交易,背后有6到7个矿池向网络发送了大量垃圾交易,导致比特币网络拥堵。在2016年之前比特币的垃圾交易很少被矿工打包,直到2016年下半年,有7大矿池突然开始接受这些垃圾交易,这7家矿池分别是:1-Hash、Antpool、BitClubNetwork、BTC.com、HaoBTC、KanoCKPool以及ViaBTC。

这很诡异,为什么这么多矿池突然接受了垃圾交易?有心人发现这和比特币的一件大事有关:2016年6月27日HaoBTC给比特币Core开发组的公开信中,提出了比特币区块大小扩容到2M的硬分叉方案。而这些接受垃圾交易的矿池都是此次扩容分叉的支持者,这很有可能是他们故意为之,从而向BTC的社区施加压力。

一个有趣的例子:教你玩坏朋友的EOS账户。,向你的朋友发送很多比0.00001EOS的转账,你并且每次都把转账备注里的128个字符写满,这样这些交易就会发送到你的朋友的账户上,占满他的账户的4KB的内存,从而无法进行任何操作,他的EOS账户必须购买RAM才能继续进行操作,这样就玩坏了你朋友的账户。

如何防范:很需要矿工们达成共识,决绝打包交易量过低的垃圾交易,为了区块链的价值更多的打包有价值的交易,这样币才会进一步升值,属于用经济原理解决问题。还有种方法,类似于ETH的gas费用设计,交易费 = gas消耗数量 *gas单价,并人工的设定一个gaslimit,这是单个区块允许的最多gas总量,以此可以用来决定单个区块中能打包多少笔交易。但是这样还是会导致gas单价保障抬高交易成本,当前这个问题很难解决。

空块攻击

挖矿的矿工拒绝打包网络中的交易,在成功挖出的区块中,除了挖矿奖励的coinbase交易外,没有其他交易,这就产生了一个”空块”;对BTC网络来说,有整整10分钟系统处于拒绝访问的情况。个别情况下偶尔出现一次空块,是没有问题,但短期内频繁空块就属于空块攻击了,其效果是使待确认交易内存池变大,交易平均确认时间变长。

在比特币挖矿的早期,打包空块可能比打包满块的出块速度更快,矿工更有可能获取出块奖励,因此比特币挖矿的早期存在者很多的空块。目前因为挖矿基本采用加入矿池的形式,Hash运算和对交易的打包是在不同的计算机上并行完成的,往往都是交易以及打包完成,还需要等待Hash运算出随机数。

当然可能会存在进行恶意攻击的矿工,这种情况下类似一51%算力攻击,而且空块攻击相比是没有任何受益的,矿工没有理由这么做,这是利用了经济学原理。

女巫攻击

又称Sybil攻击,攻击者通过创建大量的假名标识来破坏对等网络的信任基础,并对一致的共识的达成造成巨大影响,破坏了系统的冗余策略,比如操纵区块链选举,“刷赞”“灌水”等。

还有一种解释,在区块链这种对等网络中,因为节点可以随时加入退出,为了维持网络稳定,同一份数据通常需要备份到多个分布式节点上,这就是数据冗余机制。如果网络中存在一个攻击者,这个攻击者可以创建多重身份,攻击者可以掌握很多个“马甲”节点,原来需要备份到多个节点的数据,被攻击者欺骗,全部备份到了由攻击者创建的节点上。

因为在对等网络中,节点是一个抽象的概念,并且因为隐私问题,节点和拥有节点的人是割裂的,所以一个远程的节点可以识别另一个节点,却不必知道这个节点与物理世界的人的对应关系。

微信图片_20180927103731.jpg

如何防范:POW共识算法下,女巫攻击是无效的,因为所有的“投票”都是用计算量说话的,就算你可以创造一万个马甲,可是算力并没有改变,攻击者在全网的权力没有变大。女巫攻击主要是针对使用BFT拜占庭容错协议的区块链,在这种情况下有两种解决方法:

基于第三方的身份认证: 每加入一个新的节点都需要与某一个可靠的第三方节点进行身份验证;

纯分布式的身份认证: 每加入一个新的节点都需要获得当前网络中所有可靠节点的认证,这种方法采用了随机密钥分发验证的公钥体制的认证方式,需要获得网络中大多数节点的认证才能加入该网络。

无利害关系

出块者可以无成本地选择接受多个分叉,以获取更多的收益,导致市场不知道哪个链是真正的账本。

这是只有POS机制才会存在的问题,在POS共识机制下,节点持有的token的数量决定了挖出区块的可能性,也就是挖矿“算力”。当区块链中出现分叉时,链上资产都会1:1的“复制”到多条分叉上,同时1:1“复制”的是挖矿的“算力”,所以无论是该分叉是偶然的还是恶意的,对于任何正在验证交易的节点来说,不管哪条分叉成为最长链,矿工都会得到奖励,所以最佳策略是在每条链上进行”挖矿”。

由于他们没有花费物质上的算力,只用token进行投票,“挖矿”是0成本的。不管哪条分叉成为最长链,矿工都会得到奖励,没有必要回归最长链,这变向鼓励了分叉的出现,这种情况下,任何的交易都可能出现上文讲的分割攻击的情况,当前区块链已经不再可信。

如何防范:ETH上,提出了Casper的POS/POW混合共识机制,这是一种基于保证金的经济激励共识协议,可以惩罚所有的恶意行为,恶意分叉的代价是非常大,避免了“无利害关系”攻击。

矿工想要挖矿必须抵押一定数量的ETH所谓保障金。开始验证区块后,矿工需要时刻选择最长链工作,他们将押下保障金作为赌注来担保最长链。数个确认后,最长链被确认,按赌注比例奖励矿工。其他在分叉上工作的矿工,如果采用恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,权益被没收,并惩没保障金。

规则以及智能合约层面的攻击

区块链存在一种“代码就是法律”的精神,智能合约具有强约束力,但创造一个完全无误差的代码是不可能的,代码书写的合约具有法律效力,并且在一个不可改变的公开的区块链中存储信息,这造就了巨大的风险和问题。这是区块链安全问题的重灾区,光2018年上半年,因为代码问题导致的损失就有12亿美元左右。

微信图片_20180927103736.jpg

整数溢出攻击

在程序语言中,对整数类型的变量一般都会有最大值和最小值。智能合约本质上也是一份程序代码,合约中的整数也会有相应的最大值和最小值。一旦变量所存储的值超过了最大值就会发生整数上溢错误,导致变量最后存储的值为0,反之则是整数下溢错误,变量最后存储的值为变量最大值。当然,溢出的情况并不限于以上整数上溢或者整数下溢,还可能会在计算、转换等过程中发生溢出。

在智能合约中的余额,通常由无符号整数表示,在ETH的编程Solidity中,通常有256比特数字。当无符号整数下溢或上溢时,它们的值立马就改变了。现在我们来看一个常见的下溢的例子。

这里很容易就会发现一个问题,减去一个比余额还要大1的数会导致下溢,结果余额会得到一个很大的数65535,凭空就创造出了很多的token。

攻击案例:基于以太坊的多个ERC20智能合约就遭受过整形溢出漏洞的影响,说个智能合约之外的例子:2010年8月15日,有人在比特币区块链的第74638块上发现了一条让人震惊的交易,这笔交易里竟然出现了1844亿个比特币,其中各有922亿个比特币被发送到两个比特币地址。这次攻击的根本原因就是比特币的验证机制中存在大整数溢出漏洞,由于大整数溢出为负数,网络各个节点对黑客的交易均验证通过,导致了比特币区块链中凭空出现了大量比特币。

微信图片_20180927103741.jpg

如何防范:书写代码时总是检查代码中的下溢或上溢,最好的方法是看更新的状态是否在字节范围内。我们可以添加参数来检查我们的代码,作为最后一层保护。使用安全库协助检查,例如SafeMath或者OpenZeepelin。

可重入攻击

此种攻击非常危险,如果一个智能合约的功能模块在完成运行前,被调用了很多次的话,这就给了可重入攻击的可能。

举个例子:当智能合约A需要调用另一个智能合约B的函数F1时,智能合约B可以在F1函数中写入一个“使智能合约A调用智能合约B”的代码,这样合约A为了获得调用结果,就必须按照合约B的吩咐再次调用合约B的F1函数,就造成了可重入攻击。

微信图片_20180927103746.jpg 

攻击案例:不得不提及区块链历史上最臭名昭著的“The Dao”事件,北京时间2016年6月17日,由于智能合约存在着重大可重入缺陷,区块链业界最大的众筹项目TheDAO遭到攻击,已导致300多万ETH资产被分离出The DAO的资产池。The DAO的智能合约中有一个split DAO函数,split DAO函数被第一次合法调用后会非法的再次调用自己,然后不断重复这个自己非法调用自己的过程。这样的递归调用可以使得攻击者的DAO资产在被清零之前,数十次的从TheDAO的资产池里重复分离出来理应被清零的攻击者的DAO资产。

如何防范:我们看到上面智能合约A中的函数情况,当合约在发送资金前未能更新其状态(用户余额)时,攻击者可以连续调用撤回功能来耗尽合约的资金,所以会发生攻击。为了防范此类攻击,我们需要让合约的余额状态在资金发送之前更新,而不是之后,这样就不会存在多次重复调用,不断转账的情况。同时对智能合约的Gas进行验证,如果出现无限调用的情况,会拒绝执行。

交易顺序依赖攻击

智能合约的执行会随着当前交易处理顺序的不同而产生不同的结果。

比如,攻击者发布一个解题合约,在合约中写给出丰厚的解题奖励。等有人提交了正确答案后,答案再经过其他节点的确认,合约才会执行奖励操作。此时攻击者可以提交一个将奖励额度调低的交易,这笔交易肯定是在奖励操作的后面,理论上不会造成给答题人带来损失。

但是,在区块链项目中,交易顺序并不是一成不变的,例如在以太坊中,交易顺序就会随着交易发布者的gas(交易费)的高低来决定先确认哪笔交易。此时若攻击者更改奖励额度的交易给的交易费比较高,验证节点会先执行这笔交易,最终会导致答题人最后得到的奖励额度是调低的额度。而攻击者以一个较低的成本就买到了正确答案。

时间戳依赖攻击

在区块链中,时间戳是由矿工生成的,合约不需要为了核心操作依赖于数据块的时间戳,例如把它用作生成随机数的种子。矿工处理一个新的区块时,如果新的区块的时间戳大于上一个区块,并且时间戳之差小于900秒,那么这个新区块的时间戳就是合法的。这是以太坊协议所规定的。时间戳依赖顾名思义就是指智能合约的执行依赖当前区块的时间戳,随着时间戳的不同,合约的执行结果也有差别。

攻击案例:如果有一个抽奖合约,要求由当前的时间戳和其它可提前获知的变量计算出一个“幸运数”,与“幸运数”相同的编码的参与者将获得奖品。那么矿工在挖矿过程中可以提前尝试不同的时间戳来计算好这个“幸运数”,从而将奖品送给自己想给的获奖者。

调用深度攻击

在合约虚拟机中,会对智能合约的互相调用的深度定一个阈值,超过这个深度调用就会失败,例如在以太坊EVM中,调用深度被限制为1024。如果攻击者发起一系列的递归调用,让栈深度到达了1023,之后它再调用你的关键函数,就会自动导致这个函数所有的子调用失败。

西安软件开发、西安APP开发、西安软件外包、西安软件开发、西安网站建设、电商软件开发、社交软件开发、直播软件开发、西安网站制作、西安区块链开发

调用深度攻击可以让合约调用失败,即使这个调用在逻辑上不存在任何问题,但是在虚拟机层面以及不被允许了,因为调用深度达到了虚拟机中的阈值,超过阈值不再往下执行。攻击者可以通过控制调用深度,来使某些关键操作无法执行,例如:转账、余额清零等。

攻击案例:比如在区块链上实现一个拍卖的智能合约,由于拍卖过程中可能存在多次竞价,需要很多次的调用合约中的出家函数,可能会出现有用户恶意刷出价次数,直到虚拟机中的调用深度达到1023次的临界值,然后再成交,发送转账请求,此时调用转账的sent()函数就会失败,导致财产损失。

互联网如何助中国制造走向“智造”

2018-09-27

随着我国劳动力等要素成本上升,以及全球贸易保护主义抬头,中国制造正面临诸多严峻挑战。专家认为,不仅要尽可能保持并扩大中国制造业门类全、配套能力强的规模优势,同时还要加快推动制造业和互联网深度融合,争取由大到强,实现高质量发展

veer-142050717.jpg

  “中国低成本要素发展时代已经结束,从2008年到2017年不到10年间,一些国家出台贸易保护措施多达800余项。中国制造业受封锁、打压还会持续相当长的历史时期。”日前,在由国务院参事室等单位主办、新华网承办的“2018国是论坛”上,河北省政府参事王福强指出,业界对此应有清醒的认识。面对挑战,中国制造如何由大变强,由高速发展进入高质量发展时代?

  “规模效应和产业配套能力,是我国制造业重要的竞争优势。”国务院发展研究中心产业经济研究部第四研究室主任许召元指出,要尽可能保持并扩大中国制造业的规模,保持门类全、配套能力强的优势,防止在制造业质量还没有提高到一定水平时,出现大规模低端产业转移,造成产业“空心化”现象。

  在保“大”的同时,中国制造更迫切需要解决如何变“强”的问题。“目前互联网在流通领域的应用深入人心,减少了相关的交易费用,但对提升产品质量、品质的帮助还不够。”国务院参事陈全生说,应推动制造业和互联网深度融合,让制造业“插上互联网的翅膀”,以解决产能过剩等问题。

  “2010年,三一集团实现100亿元利润用了7万人;今年同样完成100亿元利润只用了3.1万人。”三一集团董事、总裁唐修国介绍,三一通过发展工业互联网,重塑商业模式,变成了为全行业服务的平台;数字化工厂对装备和客户数据进行挖掘,提升了效率。

  中国电子信息产业发展研究院副院长刘文强认为,目前单个企业创新做得很好,但要建成世界级先进制造业集群,就必须集聚全球资源,搭建支撑整个制造业发展的创新体系。此外,比如航空工业要解决飞机叶片所需耐高温材料的问题,我国在软件、集成电路等方面还有很多弱项,这些都需要加强工业基础。

  互联网技术的蓬勃发展,也为从需求端拉动制造业质量提升提供了手段。“很多消费者到日本去买其实是中国生产的马桶盖,说明并不是国内的产品不行,而是消费者对国货的信心不足。”许召元认为,要提升消费者信心,必须充分利用大数据等技术手段,加强市场监测和信息完善,保护消费者权益,营造让消费者买得放心、安心、省心的环境。

  西安软件开发、西安APP开发、西安软件外包、西安软件开发、西安网站建设、电商软件开发、社交软件开发、直播软件开发、西安网站制作、西安区块链开发

  阿里研究院副院长杨健也认为,过去制造业更注重产品质量和功能。到了数字经济时代,“90后”“00后”消费者越来越注重产品设计、生产环节以及购物、使用过程中的体验,制造业一定要抓住需求新变化,为消费者“量身定制”。

  互联网对制造业水平的提升作用,还体现在远程教育帮助提高工人素质。“要从中国制造走向中国创造、中国智造,亟需一大批熟练的技术工人。但是,目前产业大军主体还是初中及初中以下文化程度的农民工。”陈全生说,庞大的产业工人队伍只能靠自己培养。

  世界银行全球营商环境评价报告显示,从2013年到2017年我国开办企业便利度排名大幅提升了65位。国家市场监督管理总局登记注册局副局长陈烨表示,下一步我国将推动“证照分离”改革,进一步优化市场准入的各项管理制度,同时力争2019年上半年实现全国企业开办时间压缩到8.5天以内,通过优化营商环境,促进企业更好发展。

64岁图灵奖得主破解区块链“不可能三角”

2018-09-26

区块链自问世以来就被形容成一项无所不能的科技,被看好能影响各行各业,甚至重塑生产关系。然而区块链自身,却存在著称为“不可能三角”的技术瓶颈,至今仍远远无法施展它的潜能。

所谓的区块链“不可能三角”,也称为“三元悖论”,就是指区块链网络无论采用哪种共识机制来决定新区块的生成方式,皆无法同时兼顾扩展性(Scability)、安全性(Security)、去中心(Decentralization)这三项要求,至多只能三者取其二。

1.jpg

图|区块链“不可能三角”

64 岁的图灵奖得主、美国麻省理工学院计算机科学与人工智能实验室(MIT CSAIL)教授希尔维奥·米卡利(Silvio Micali)提出了一个解决方案——Algorand,宣称已能破解这一不可能三角!

这个大胆宣称、加上图灵奖光环,让 Algorand 今年初正式问世以来,就备受万众瞩目。所有人都亟欲揭开 Algorand 面纱,了解米卡利究竟如何实现把不可能化为可能。

米卡利于 9 月初访华,连走上海、北京数站现身说法,几乎场场爆满,在中国开发者社区掀起一阵旋风。DT 君在此期间独家专访米卡利及其团队核心成员,揭开 Algorand 诞生过程,并提出外界对 Algorand 最常有的三大关键疑问,米卡利都一一释疑,包含首度对外透露 Algorand 的代币发行规划。

2.jpg

 图|米卡利出席上海区块链周

“区块链的应用之广是没有限制的,它确实是非常理想的技术,但却有一个很大的“但是”(but),就是著名的不可能三角”,米卡利对 DT 君说,在目前的状况下,我们通常只能得其二,无法三者兼得。

现有著名公链皆无法同时满足三项要件

以比特币为代表的 POW(Proof of Work, 工作量证明)共识机制,理论上可以在大量算力的基础上,对安全性和去中心化有较高保障。但缺点就是难以提升扩展性,速度慢、成本高。更别提还会造成能源浪费、且实际上也已被证明算力非常集中。

较新型态的 POS(Proof of Stake, 权益证明),则是以太坊目前正在融合发展的方向。其基本理念是持有股份愈多、时间愈长,则权利愈大。这在一定程度上提升效率、减少了挖矿能源浪费,但却难以避免中心化的问题。

而其它更新型态的共识机制如 DPOS(Delegated Proof of Stake, 股份授权证明)或 PBFT(Practical Byzantine Fault Tolerance, 拜占庭容错算法),同样存在各自局限,不能完全解决问题。

微信图片_20180926102353.jpg

表|现有著名公链皆无法同时兼顾安全性、扩展性与去中心

揭秘 Algorand 在 MIT CSAIL 如何诞生

但米卡利认为,区块链要想实现大规模应用,就一定要能同时满足扩展性、安全性和去中心这三个条件。

米卡利坦言,自己最初和许多人一样,曾经相当排斥比特币这回事。然而,当他在 2013 年终于真正认识了比特币后,就立刻发现它的命题令人赞叹,只是,“解决方案不够优美(elegant)。”

他试图找寻其它更好的解决方案,却没有任何一个令他满意。于是,他决定自己从头开始打造一个。不仅如此,他更号召麾下门徒一同效力。其中,最核心的早期成员之一,就是他的一名中国博士生、当时已在纽约州立大学石溪分校(SBU)任教的陈婧。

“米卡利是在 14、15 年就把我拽回去的”,现为 Algorand 首席科学家的陈婧对 DT 君透露,Algorand 并非一朝一夕简单架构出来,最刚开始是 MIT CSAIL (麻省理工学院计算机及人工智能实验室)里一群 7、8 人的早期团队,从最根本开始分析问题,直到 2017 年底才把原型设计出来,400 万美元的种子融资也大约同时到位。

4.jpg

图|Algorand 首席科学家陈婧毕业于清华大学,是区块链领域中极其少见的女性开发者。她不仅是 SBU 计算机科学助理教授,同时研究领域也横跨分布式账本、博弈理论,以及演算法,是区块链领域中少见具有如此广泛研究背景的人才。

Algorand 由“algorithm”(算法)和“random”(随机)两个字组合而成。其测试网已在今年 7 月宣布上线,开放申请测试。由其原型可看出,米卡利想要采取创新的思路来解决目前基础公链的普遍难题,而他的构想主要可以从三个角度来说明。

独创“纯粹的权益证明”(Pure Proof of Stake)

第一,Algorand 是一个“纯粹的权益证明”(Pure Proof of Stake)。每一枚代币都拥有相同权利,不需要提出作为抵押。新的区块是透过投票产生,每个人都可以参与或授权,并通过适当的激励机制来鼓励参与。

超快速拜占庭协议,“即时发起与确认”达成共识

其次,Algorand 通过“即时发起与确认”(Immediate Propose-and-agree)来形成共识。陈婧形容,这是一种“新的超快速拜占庭协议(Byzantine Agreement)”。拜占庭协议是普遍运用于区块链的通讯协议模式,主要是处理在分散式对等网络中如何达成共识协议并保证网络不被破坏的问题。

Algorand 的共识机制分成两个步骤,分别是“发起”(Propose)与“协议”(Agreement)。

在第一个步骤“发起”,系统会随机选择一个代币,公布其公钥,由公开持有者签名并发起一个新的区块,关键是这一过程可以非常快速。

而在第二个步骤“协议”,系统会再由用户中随机选出 1000 名验证者并公布其公钥,由这 1000 名用户达成共识并进行签名,新的区块便得以生成。

而这些过程将以 Algorand 独创的加密抽签(cryptographic sortition)技术来随机选择用户,无法事先预知是哪些人会被选中。

5.jpg

能够持续“演化”的区块链

第三,通过这种共识机制,Algorand 也解决了区块链中最令人头痛的分叉问题,使其成为一个可以持续“演化”的公链。

由于区块链的去中心化设计,每个节点都必须保持一致,这使得单纯的系统升级在区块链上很难做到,每当改变规则,动辄就会导致系统分叉。但 Algorand 却是几乎不会出现分叉的分布式账本,因为其分叉的概率低至仅为 10 的-18 次方。

“我不想夸称这是一个革命,但这确实是一个很大的进步”,米卡利在上海一场开发者见面会上如此自信地说。

米卡利认为,基础公链必须要解决分叉问题,能够持续演化。因为区块链是人为设计的产物,不可能完美,一定会存在很多缺点。“就像一艘船出海,可能有天气、有船身、有船员的问题。最好的解决办法就是要让它有持续进化的可能”

兼顾扩展、安全与去中心,Algorand 克服区块链不可能三角!

回到区块链的不可能三角来检视,Algorand 通过所有代币权利相等、每个步骤皆随机替换参与者,来确保整个网络可以最大程度去中心化。

Algorand 借由加密抽签组建临时验证委员会来减轻工作量、提升效率,也保证了网络的可扩展性。

且因验证者皆为随机秘密选出,即便“敌对者”可以瞬间加以腐化,但也来不及篡改或撤回他们对外发出的消息,而下一轮又将是新一批随机选出的参与者。所以也让安全性有极大的保证。

6.jpg

话虽如此,Algorand 并非完美无瑕。DT 君在专访中直接对米卡利提出外界对 Algorand 最主要的三大疑问。

关键提问 1:Algorand 缺乏激励机制设计,难以吸引参与者?

首先,Algorand 最常被质疑的一点就是其模型中缺乏激励机制的设计。正如比特币是靠着 POW 机制,每生成一个区块就发放若干枚比特币作为奖励,吸引矿工提供算力来验证链上交易。激励机制在绝大多数区块链基础公链中都堪称是最核心、最不可或缺的要素之一。

一位重量级区块链平台的核心开发人员就私下对 DT 君分析,Algorand 的设计确实很“优雅”,但缺少奖励的区块链,很难吸引到足够的参与者。

对此米卡利强调,Algorand 并非没有激励机制,而是将会提出一套更安全的激励机制。事实上他认为,激励机制是长期被忽略的一块,自从有加密货币以来,激励机制就没有被好好设计过。但如果激励机制不够安全,那还不如没有激励。

“过于简单的激励设计是有问题的。并不是有激励机制,就可以驱使人们做应该做的事情。因为人们只会想要极大化自身利益,未必会按照你的设想去行动”,米卡利指出,比特币就是最好的例子。现在我们所看到的大型矿池、算力集中,绝对不是中本聪当初所设想的情形。

“激励机制若设计不当,可能会解决一个问题,但却创造另一个问题”,陈婧也说。

那么 Algorand 将会设计什么样的激励机制呢?米卡利解释,Algorand 想要做的是激励参与者,而且是所有人的参与,我们想要奖励的,不是矿工挖矿的这一行动,而是驱使整个社会都为采取这一行动做好准备,“这是一个非常核心的概念”。换句话说,也就是让整个激励机制不是只能吸引少数专业矿工,而是能够尽可能地吸引更多一般人参与。

他更透露,相较于现在比特币挖矿门槛已经高到不是任何一般人所能轻易参与,Algorand 将保证“工作”将会非常轻松,轻松到所有人在家用自己的电脑,也能完成所有的工作。

有多轻松?米卡利举例说,有人会为了省电而不自己在家收发电子邮件吗?绝对不会!根本没有这个需要。因为现在电子邮件系统所消耗的算力与电费,基本上低到可以忽略不计。Algorand 想要做到的,就是让区块链的“工作”也能变得如此轻量化。

关键提问 2:Algorand 如何募资?如何发行代币?

同时,外界亦高度关注 Algorand 的代币发行规划。过去甚少谈及这一块的米卡利,在本次专访中明确告知 DT 君,Algorand 的种子轮募资是通过股权的方式来融资,因为这是一个完全合规的募资管道。这意味着,只有合格投资人、创投与天使投资人,才能参与到 Algorand 的募资。

他强调,现阶段,团队将负责完成 Algorand 基础开发工作。未来团队不会销售代币,而团队所分配的代币也会长期持有。

往后,Algorand 的代币 Algo 将会通过设立在新加坡的基金会进行代币发行,方式是透过一系列的拍卖(auction),对象是所在国家可以合法进行代币购买的机构和个人。米卡利指出,拍卖的好处是,Algorand 团队不会决定价格,而是由市场来决定价格。任何机构和个人只要通过KYC(know your customer)审核,都可以参与 Algo 拍卖。

当然,除了经由拍卖的方式来取得代币,用户也可以通过参与 Algorand 的工作、对生态作出贡献的方式来获得奖励。

关键提问 3:Algorand 是学院派创业,商业化实践能力有待商榷?

此外,外界还常有的一个疑问是,Algorand 是学院派创业,商业化执行能力恐值得怀疑。

对此陈婧指出,Algorand 团队从很早就已将商业化实践纳入考量,并经由天使投资人延揽到曾是成功创业家的首席执行官,以及拥有多年产业经验的工程长(Head Of Engineering),强化团队产品化能力。“就连米卡利本人也有过其它创业经验”,陈婧强调。

并且,Algorand 的原创性极高,也使得这个项目很可能只有它的设计者本人才能加以实践出来。

“Algorand 并非借用他人基础,而是完全从零开始做起”,米卡利对 DT 君解释,要想把这个想法实践出来,需要一个真正有能力的团队。“所以我们创立了 Algorand,在一个公司的架构下,我们可以更明确、更负责地将这个项目开发出来。”

西安软件开发、西安APP开发、西安软件外包、西安软件开发、西安网站建设、电商软件开发、社交软件开发、直播软件开发、西安网站制作、西安区块链开发

陈婧补充,Algorand 脱胎自 MIT CSAIL,开发能力极强,同时这是一个她所看过“默契最好、工作流程最顺畅的团队。”

但米卡利也说,与其说 Algorand 是一家公司(company),更好的说法是一个团队(team)。Algorand 真正想做的并不仅仅是一个创业,而是把构想给实践出来。

采访最后,他清晰地说,“我们会尽可能持续最久的时间以一个团队的状态工作,对这个项目负责。”