Month: March 2018

开发人员和矿机厂商的战争——门罗币即将修改算法

开发人员和矿机厂商的战争——门罗币即将修改算法

开发人员们正在竭尽全力保卫世界上最大的数字货币之一的门罗币免受企业集团的侵害?

开发人员和矿机厂商的战争——门罗币即将修改算法

高性能的专用集成电路(ASICs)矿机多年来一直被用于验证比特币交易,但矿机制造商比特大陆近日公布了蚂蚁X3新型矿机,专为用来挖掘门罗币。

然而,门罗币并没有因此特别的关照而打算欢迎这种新矿机。他们制定了计划,将在四月份进行紧急软件升级,改变算法规则专门对付这种矿机。这是门罗币与ASIC矿机之战的第一枪,此次升级将抹平蚂蚁矿机X3的特效。不仅如此,为了防止硬件厂商迎头赶上,网络还计划每两年进行一次算法升级。

在此之前,门罗币的算法cryptonight是足以抵御ASIC矿机的,使得大众可以在消费级的笔记本电脑上挖门罗币,但随着矿机竞争的不断升级,电脑挖矿恐怕要消亡了。

开发人员们并没有把这当作小事,核心程序员Riccardo Spagni在Github上承诺:

“我会想尽一切办法帮助社区,防止包括ASIC在内的因素,导致门罗币网络的中心化。”

蚂蚁X3类型的矿机目前只有比特大陆一家生产,很多人担心这会导致网络攻击。如果某些矿池掌握了某个数字货币的大部分算力,就可以制造虚假交易记录,重复消费或审查交易。虽然也有论调认为,ASIC可以让门罗币更安全,但门罗币社区大多都站在反对面。

另一位核心程序员moneromooo说道:

“如果你担心有人使用亚马逊的服务器来发动51%攻击,那就不应该硬分叉和远离ASIC矿机;但如果你担心比特大陆这一类公司发起攻击,不分叉你就完蛋了,因为比特大陆很快就可能拥有51%算力。”

对比特大陆的质疑

当然,影响决策的关键,是开发团队和比特大陆(及其联合CEO和主要发言人吴忌寒)之间的长期不信任。

令人担心的事情在去年发生过,比特大陆通过ASICBoost功能,偷偷利用了比特币工作证明算法的弱点,让他们家矿池的挖矿效率比竞争对手高了20%。这场争论后不久,又有人发现比特大陆曾经故意在他们家的矿机里植入了一个叫Antbleed的芯片漏洞,此漏洞可以强行关闭矿机。然后,去年年底比特大陆又开发了一款ASIC矿机,专门挖掘Siacoin这个小币种,大多数人认为这是比特大陆吃掉(强行兼并)了Siacoin。

这一切都促使Spagni一心想提高门罗币的ASIC抵抗力,他在推特上说到:

“他们对比特币社区的行为,和最近对Sia社区的行为,都是坏蛋的行为。”

门罗币的开发人员binaryfate解释道,即使不担心吴忌寒和比特大陆,让门罗币暴露在ASIC矿机之下仍然有很大的风险,因为抗审查能力是门罗币成功的关键。他说到:“去中心化是保证门罗币抗审查能力的关键,相较于其他数字货币更是如此。”具体来说,审查会破坏隐私币的一个重要特性 ——可替代性,换而言之,每一枚币都和其他的币完全一样。

门罗团队在一份公告中,推断了ASIC矿机造成的中心化风险。博客中写到:

“如果ASIC矿机不是广泛分布的,它就有很高的安全风险,包括潜在的政府干预,和关闭远程矿机的(死亡开关),这种风险有可能摧毁整个网络。”

对Cryptonight算法的批判

因此,门罗币会继续和矿机作斗争。binaryFate说:

“我觉得这件事为未来树立了一个先例,显示出我们抵抗ASIC矿机的决心,受到逼迫我们可以迅速反应,我们不在乎矿机厂商赔钱。在可预见的未来,我不相信还有任何ASIC厂商敢在门罗币身上尝试。”

然而,人们对此举的意见也是有分歧的,门罗币的工作证明算法也不是没有批评之声的。当你提高了一个数字货币的亲民程度,你就降低了发动攻击的成本。举个例子,在网络安全公司Check Point去年十一月的研究报告种,一个用Java语言脚本编写的,在门罗币协议层执行的恶意软件Coinhive,被列为全球第六大最流行的恶意软件。此外,在今年二月,该算法导致僵尸网络攻击了超过五十万台矿机。

以太坊研究人员Philip Daian,在推特上评价了社区针对ASIC矿机的举动:

“这就是一个小市值币种,通过拼命反抗规模经济,最终反而损害了自己的安全性。”

与此相呼应的是,Blockstream公司的数学家Andrew Poelstra在2015年的一篇研究论文中主张道:“虽然修改算法可以拖延ASIC厂商,但最终这些抵抗都是徒劳的。”此外,还有人担心,对底层算法的重复修改可能会削弱代码,为漏洞留出空间。为了解决这个问题,程序员iamsmooth建议采用对ASIC矿机友好的策略,将重点放在降低硬件成本和亲民程度上。甚至连moneromooo也在对话中同意,两年一度的修改算法不是什么好主意。

不过,Spagni以及其他一些人仍然为门罗币的举动辩护,他在Github和推特中说到:

“这是在僵尸网络和ASIC矿机之间,两害相权取其轻。可能在总体上会变得不那么安全,但是社区已经做出了艰难的决定。我不做任何决定,社区做决定。”

原文:https://www.coindesk.com/crypto-kill-switch-monero-going-war-big-miners

作者:Rachel Rose O’Leary

币圈用户请小心!WebInjects可以清空你的加密货币账户

币圈用户请小心!WebInjects可以清空你的加密货币账户

网络犯罪分子正在尝试各种各样的方法来将他们的“罪恶之手”伸向广大用户的加密货币钱包。研究人员发现,攻击者正在利用能够劫持浏览器(中间人攻击的一种)的恶意软件来劫持目标用户的在线账号,并实时进行欺诈交易,而这种攻击技术名为WebInjects(即Web注入)。

币圈用户请小心!WebInjects可以清空你的加密货币账户

向目标站点中注入恶意脚本

从今年年初开始,来自SecurityScorecard的研究人员发现了两个僵尸网络,这两个僵尸网络分别由ZeusPanda和Ramnit恶意软件家族驱动,主要针对的是Coinbase.com和Blockchain.info这两款加密货币钱包。

需要注意的是,当用户在访问那些受这种恶意软件感染的网站时,恶意软件能够检测到用户的访问活动,并在后台悄悄注入经过混淆处理的恶意脚本,然后修改目标页面中所的呈现内容。

如果目标站点是Coinbase的话,恶意脚本会让原网站中邮件地址和密码的输入文本域失效,并创建一个新的恶意按钮然后叠加在“登录”按钮之上。这样一来,当用户输入了登录凭证并按下所谓的“提交”按钮之后,他们会认为自己完成了登录,但此时他们的凭证信息将发送给攻击者所控制的服务器。实际上,恶意软件还会假装登录受限,并要求用户进一步完成双因素身份验证:

币圈用户请小心!WebInjects可以清空你的加密货币账户

当攻击者获取到目标用户的凭证数据之后,攻击者会利用这些数据来访问用户账号,并修改相应的安全设置以便进行之后的欺诈交易。研究人员Catalin Valeriu和Doina Cosovan解释称:“在大多数情况下,攻击者在获取到凭证之后,需要立刻使用数据来访问用户账号。尤其是WebInjects攻击在实现针对加密货币钱包的欺诈交易时,往往在登录账号之前需要完成双因素验证,因此攻击者在拿到凭证之后需要立刻响应并获取用户的双因素验证码。在此之前,老版本的Zeus恶意软件会使用Jabber即时消息软件来告知僵尸网络管理员成功接收到了用户凭证,但这种新型的恶意软件变种似乎使用的也是类似的机制。”

有趣的是,当攻击者成功修改了目标账号的安全设置之后,他们还可以通过屏蔽设置页面和错误信息来确保用户不会把设置改回来。

研究人员表示,当攻击者禁用了目标账号的多因素验证功能并且用户无法访问设置页面后,攻击者就可以随意进行各种加密货币交易了。

根据研究人员对当前恶意软件变种的分析结果显示,目前WebInjects还不能自动化完成加密货币窃取或交易。很明显,攻击者现在的主要目标是入侵用户账号并通过修改安全设置以备后续入侵。但是研究人员攻击者迟早会实现自动化的加密货币窃取,一切只是时间问题。

这种攻击技术还可以用来入侵Blockchain.info钱包。在这种攻击场景下,攻击者同样需要给目标用户呈现伪造的登录页面:

币圈用户请小心!WebInjects可以清空你的加密货币账户

完成登录之后,恶意脚本会迅速初始化一个交易页面,并用伪造的加密货币钱包地址替换原始的合法地址,然后修改交易的加密货币类型以及金额。当用户完成了加密货币交易之后,恶意脚本会发送一个通知并告诉用户当前服务不可用,而此时用户根本不会意识到自己的钱包已经被“榨干”了。

如何保护用户的安全?

随着加密货币生态系统的不断成长,针对加密货币的恶意软件也会随之发展壮大。随着本文所分析的恶意软件变种(WebInjects)只会对Coinbase.co以及Blockchain.info这两款加密货币钱包进行攻击,但其他的WebInjects变种很可能会转向其他的加密货币交易所。

WebInjects这种攻击技术之所以会如此吸引攻击者,主要是因为这项技术能够快速适应目标服务的架构代码,并允许攻击者轻松修改代码以攻击新的加密货币交易服务。

广大用户可以查看自己的加密货币交易账号是否可以正常访问安全设置页面,是否收到了莫名其妙的多因素验证消息,或者是否收到了“服务不可用”的通知来判断自己是否受到了影响。如果你觉得自己的账号已经被入侵,请立刻在其他电脑上修改自己的密码。因为很多高级恶意软件会在入侵目标设备后实现持久化感染,因此同一设备很可能仍然是不安全的。

* 参考来源:helpnetsecurity

Nick Szabo : 货币,区块链和社会可扩展性

Nick Szabo : 货币,区块链和社会可扩展性

引言

区块链现在十分地流行。它们当中最古老,最大的区块链就是比特币了。在比特币八年的历史间,它的价值从10000比特币一个披萨(在比特币交易所能将比特币兑换成法定货币之前)到现在其价值已超过1000美元每比特币。截至本文发布时间,比特币的市值已超过160亿美元。比特币运行的八年间,在其区块链上几乎没有发生任何的经济损失,可以说,它是这个世界上最安全和可靠的金融网络。

比特币成功的秘诀绝不是它的计算效率,或其在资源消耗方面的可扩展性。比特币的硬件是由一群高薪聘请来的专家们设计的,它只执行一个特定功能,重复解决一个非常具体且极其昂贵的计算谜题。这个谜题被称为工作量证明,这个计算的唯一输出只是证明这个电脑完成了一次昂贵的计算。比特币解密的硬件可能会总共消耗500兆瓦的电力。这不是比特币唯一一个特点会让那些关注着如何使资源消耗最小化的工程师和商人们,显得那么的不切实际。与其一味地减少协议消息,不如每个运行比特币的计算机使用冗余的大量“库存向量”(inventory vector)信息包来向互联网传播,以确保所有消息能准确地通知尽可能多的其他比特币计算机。因此,比特币区块链不能像传统的支付网络(如PayPal或Visa)一样能处理每秒很多笔的交易。也正因如此,比特币伤害了那些有资源保护意识以及性能测量最大化的工程师和商人们的感情。

相反,比特币成功的秘诀在于其众多的资源消耗和较差的计算可扩展性,正被用来换取更有价值的东西:社会扩展性。社会扩展性是指一个机构的能力——一种关系或者在共同的努力下,许多人反复参与其中,以限制或者鼓励参与者的行为的习惯、规则和其他特征——来克服人类思想中的缺点,和激励或约束所述机构中多少人能够成功地参与其中。社会可扩展性是指当这些机构的参与者的数量和类型增加之时,参与者们能够思考和对机构和同伴回应的方式和程度会随着关系的密切而增加。这是关于人类本身的极限,而不是科技的极限或者物理资源的极限。比如一些独立的工程类学科:计算机科学,用于评估技术本身的物理极限,包括利用技术处理更多用户或更高使用率所需的资源能力。这篇文章的主题不是工程学的可扩展性,而是工程学可扩展性和社会可扩展性的对比。

社会可扩展性更多的是关于心理的认知极限和行为倾向,而不是关于机器的物理资源极限,就这一点来说是非常有意义的,并且学会思考和探讨技术的社会拓展性对于促进一个制度的成长是至关重要的。一个制度的技术的社会扩展性取决于这个技术在制度中是如何激励或者限制参与者的,也包括保护参与者和制度本身免遭不利的参与者的进攻。评估一个制度技术的社会可扩展性的方法,是看有多少人能够有益地参与在这个制度中。评估社会可拓展性的另外一个方法,是看这个制度赐予或者强加在参与者身上额外的利益和危害,在此之前,由于认知和行为上的原因,参与机构的预期成本和其危害的增长速度快于其利益。能够有所收益的参与在这个机构制服中的文化和所属地的差异也是非常重要的,特别是在互联网全球化的环境下。一个制度越多的依靠当地的法律、习俗或语言,其社会可拓展性就越低。

没有过去的制度和技术创新,能够共同参与一项努力的人通常最多不超过150个人—也就是有名的“邓巴数字”。在互联网时代,新的发明创新持续地在扩大我们的社会能力。在这篇文章中,我将会讨论区块链,尤其是公有链,是如何在计算效率和计算可扩展性大大降低的情况下,能实现加密货币,并增强社会可扩展性。

Nick Szabo : 货币,区块链和社会可扩展性

认知能力— 在这里,以一个物种的大脑皮层的相对大小形式,限制了灵长类动物的认知能力大小。维持动物或者人类群体的亲密关系,需要广泛的情感上的沟通以及感情上的投入。比如说给灵长类动物打扮,说闲话,和他们讲故事,进行其它的对话,唱歌,和他们一起玩游戏等等。克服人类对于有谁或者有多少人能够参与在制度中的认知极限 — 150个人,著名的“邓巴数字”— 需要制度和技术的双重创新。(来源)

社会可扩展性的创新包括了技术和制度的改进,将功能从想法转移到纸上或者机器上,降低认知成本,增强心智之间流通的信息价值,减少脆弱,寻找和发现新的互利互惠的参与者。阿尔弗雷德·怀特海德(Alfred North Whitehead)说:“我们总是会去重复所有书本中的东西或名人的话语,这是一个非常错误的误解,我们应该培养思考我们正在做什么事情的习惯。事实应该恰恰相反。“社会文明通过延伸我们能做,却不需要多想的一系列重要执行操作而得以前进”。 Friedrich Hayek补充说道:“我们不断使用公式,符号,和规则,这些公式,符号,和规则我们通常不太理解,但是通过使用它们,我们在不是自己所拥有的知识的帮助下,受益不浅。我们自己建立的制度和实践,是建立在已被证明是成功的习惯和他人制度的基础之上,这些,都变成了我们现如今人类文明的基础。”

各式各样的创新减少了我们对参与者,中间人,和局外人的脆弱性,从而降低了我们对于缺乏认知能力的担心,担心越来越多的各种各样的人可能会产生哪些不好的行为。另一类改进方法,促使在越来越多的参与者中间,也能够精确收集和传输有价值的信息。同样的,这样也会使得更广泛或者更多种多样的互利互惠的参与者能够发现对方。所有这些创新都在人类史前史和历史的过程中改善了社会的可扩展性,使我们的现代文明在全球这么巨大的人口下,是可以继续保持的。现代信息技术(IT),特别是利用历史上最近发现的计算机科学,通常可以发现一些互利互惠的竞赛,可以改善信息质量,并可以减少在某些类型的机构交易中的信任需求,对于越来越多的人和各式各样的人的出现,也因此能够用一些方式增强社会可拓展性。

心智之间的信息流动 – 我称之为主体间协议 – 包括口头和书面的词语,习惯(传统),法律内容(规则,习俗和案例先例)各种其他符号(例如在线信誉系统中的“星星”),以及市场价格,等等。

信任的最小化降低了参与者之间,参与者与外部人之间,参与者与中间人之间潜在伤害行为的脆弱性。大多数体制经历了长期的文化演变,例如法律(降低了暴力,欺诈,和盗窃)和技术安全,像这样,我们需要去信任我们同胞的脆弱性对比在制度和技术进步之前,我们之间的脆弱性关系大大平衡了。在大多数情况下,一个充分可信的制度(例如市场)取决于其参与者的信任,这也通常表明了另一个充分可信的制度(例如合同法)。这些受信任的制度在传统而言通常实施着各种会计、法务、安全和其他的控制角色,通过最小化他们对体制内参与者的脆弱性(例如会计 ,律师,监管机构和调查员)来促进客户机构的功能,使其更可信。创新只能部分地消除某些类型的脆弱性,即减少信任他人所需承担的风险。这个世界上不存在任何一个完全无需信任的制度或者技术。

即使我们拥有最为强大的安全技术和加密方式,也不存在完全无需信任的制度。虽然一些加密协议能够确保某些特定数据具有极高概率对抗超高算力的对手,当所有参与者的行为都需要考虑的时候,它们也不能完全保证。例如,加密可以强力地保护电子邮件免受第三方的窃听,但是发送方依旧要信任接收方不会转发,否则就会直接或间接地泄露文件的内容给到第三方。再举一个例子,在我们最厉害的共识协议中,参与者或中间人的某些部分不足100%(通过算力,权益,个人化和计算来衡量)的有害行为,可能会危及参与人之间交易或信息流之间的完整性,从而伤害到参与者。计算机科学史上最近的一次历史突破可以非常显著地减少脆弱性,但它们远远没有消除遭遇潜在攻击者伤害行为的所有脆弱性。

互相匹配(Matchmaking)能够帮助互利的参与者们互相发现对方。匹配也可能是互联网最优秀的社会可扩展性代表。像Usenet News,Facebook和Twitter这样的社交网络,促进了志同道合的人能够走到一起(甚至未来的配偶)。在他们允许人们可以互相发现彼此之后,社交网络在个人投资等各层面起到了促进关系的作用,从偶然到频繁到上瘾。Christopher Allen等人做了一些有趣而详细的分析,是关于在线游戏和社交网络上的团队规模以及花在互动上的时间。

eBay,Uber,AirBnB和在线金融交易所通过商业配对大大提高了社会可扩展性:搜索,寻找,汇集,和促进互利的商业谈判。这些相关服务还会促进付款、运货等行为,以及确认陌生人在这些交易中履行自己应尽的其他义务,并且讨论这些服务的质量(如“星级评定”系统,Yelp的评论等)。

虽然说,互联网的社会可扩展性的好处是相互匹配,区块链最主要也最直接的社会可扩展性好处是信任问题的最小化。区块链可以通过锁定一些重要性能(例如货币的创建和支付)的完整性,以及一些重要的信息流来减少脆弱性,并且在将来,在重要的匹配功能的完整性上,可以减少脆弱性。对私有的秘密计算和任意可变活动的信任,可以由对一般不变的公共计算的行为的可验证置信来代替。本文将重点关注这种脆弱性的降低,和促进对各种潜在交易对手行业标准的制定,也就是说:信任问题最小化的货币。

货币与市场

货币和市场,通过市场匹配买方和互惠的卖方,在广泛接受和标准化的报价(货币)下进行交易,它们会让每个特定贸易的参与者受益。亚当·斯密说过:市场不是把买家和买家聚集在一起的一个特定地方或者服务(虽然它有时会涉及到这些),而是一组典型的交换配对,通过供应链使产品之间更加地协调。

货币和市场也激励创造更加准确的价格信号,来减少谈判成本和参与者在交易过程中会产生的错误。货币和市场的有效结合,使得参与者能够协调其经济活动的数量,这些数量远远超过之前进行交易制度下进行经济活动的数量,之前的制度更像是双边垄断而不是市场竞争。

市场和货币涉及配对(集合了买方和卖方),信任问题减少(信任自我利益而不是熟人或者陌生人之间的利他主义),可扩展的性能(通过金钱这一种被广泛接受还可以重复使用的性能介质),以及质量信息流(市场价格)。

关于货币和市场最大的早期思想家应该是亚当·史密斯。在英国工业革命的黎明,史密斯在“国富论”中提到,即使是最谦虚的产品,也会直接或间接地依赖于大量的各种各样的人。

考察一下文明而繁荣的国家最普通技工或日工的日用物品罢;你就会看到,用他的劳动的一部分(虽然只是一小部分)来生产这种日用品的人的数目,是难以数计的。例如,日工所穿的粗劣呢级上衣,就是许多劳动者联合劳动的产物。为完成这种朴素的产物,势须有牧羊者、拣羊毛者、梳羊毛者、染工、粗梳工、纺工、织工、漂白工、裁缝工,以及其他许多人,联合起来工作。加之,这些劳动者居住的地方,往往相隔很远,把材料由甲地运至乙地,该需要多少商人和运输者啊!染工所用药料,常须购自世界上各个遥远的地方,要把各种药料由各个不同地方收集起来,该需要多少商业和航运业,该需要雇用多少船工、水手、帆布制造者和绳索制造者啊!为生产这些最普通劳动者所使用的工具,又需要多少种类的劳动啊!复杂机械如水手工作的船、漂白工用的水车或织工用的织机,姑置不论,单就简单器械如牧羊者剪毛时所用的剪刀来说,其制造就须经过许多种类的劳动。为了生产这极简单的剪刀,矿工、熔铁炉建造者、木材采伐者、熔铁厂烧炭工人、制砖者、泥水匠、在熔铁炉旁服务的工人、机械安装工人、铁匠等等,必须把他们各种各样的技艺联结起来。同样,要是我们考察一个劳动者的服装和家庭用具,如贴身穿的粗麻衬衣,脚上穿的鞋子,就寝用的床铺和床铺上各种装置,调制食物的炉子,由地下采掘出来而且也许需要经过水陆运输才能送到他手边供他烧饭的煤炭,厨房中一切其他用具,食桌上一切用具,刀子和叉子,盛放食物和分取食物的陶制和锡蜡制器皿,制造面包和麦酒供他食喝的各种工人,那种透得热气和光线并能遮蔽风雨的玻璃窗,和使世界北部成为极舒适的居住地的大发明所必须借助的一切知识和技术,只及工人制造这些便利品所用的各种器具等等。总之,我们如果考察这一切东西,并考虑到投在这每样东西上的各种劳动,我们就会觉得,没有成千上万的人的帮助和合作,一个文明国家里的卑不足道的人,即便按照(这是我们很错误地想象)他一般适应的舒服简单的方式也不能够取得其日用品的供给。

这是在1776年连续的工业革命和全球化浪潮之前,劳动力的分工被精炼,细分以及扩大了很多次。比起信任来自陌生人的不确定的利他主义,市场和货币创造了很多互惠互利的匹配,从而促进了市场网络中不相识的人们之间的互利行为:

在文明社会中,人们做任何事都需要大量的合作和帮助,然而他们一生中在和别人建立友谊方面缺乏高效性。相比起其他动物,人们更经常遇到需要和别人互相帮助的情况,只期待别人的善举是苍白无力的。以物易物这种行为让我们获得遥远的但有需要的物品。不是屠夫,酿酒师或者面包师的善举让我们获取了食物,而是这些是出于他们对自身利益的考虑。

史密斯接着描述了劳动力的分工方式,即劳动生产力,是如何随着这类两两交换行为所涉及的关系网络的变化扩大而变化的:“因为这是一种能够给予分工以机遇的有关交换行为的力量,所以分工的扩张必须跟从这种力量的扩张而受到限制,换句话说,这种力量即是市场的扩张。“因为国家内和国际间的交换网络在发展,而这种网络之中必然涉及了一大批不同的生产者,所以它也促进了劳动力分工和生产力的发展。

货币作为一种结算工具和媒介的存在,为这类交换提供更多的机遇,从而促进了社会拓展性的发展。此外,货币作为一种被广泛接受的和可循环使用的一种财富积累和转换的介质,减少了交换中的偶然性问题的出现(交换中买卖双方的需求偶合,以及单边转移中的需求和供给偶合),从而降低了交易成本,使得更多人,更多商品,更多服务能出现在交换之中。

各种各样的媒体,从口头语言本身,粘土,纸,电报,无线电和计算机网络,都被用来进行交流沟通,接受,由此产生的交易和价格,以及性能监控和其他商业通信。在由市场和价格中产生的价格网络中最有见识的观察之一可以在Friedrich Hayek的论文“散在社会的知识之利用”中找到:

在一个关于相关事实的知识掌握在分散的许多人手中的体系中,价格能协调不同个人的单独行为,就象主观价值观念帮助个人协调其计划的各部分那样。下面,我们有必要来看一个简单而常见的例子,以弄清楚价格体系的作用。假设在世界某地有了一种利用某种原料——例如锡——的新途径,或者有一处锡的供应源已枯竭,至于其中哪一种原因造成锡的紧缺,于我们关系不大——这一点非常重要。锡的用户需要知道的只是,他们以前一直使用的锡中的一部分,现在在另外一个地方利用起来更能盈利,因此他们必须节约用锡。对于其中大部分用户来说,甚至不必知道这个更需要锡的地方或用途。只要其中有些人直接了解到这种新需求,并把资源转用到这种新需求上,只要了解到由此产生的新缺口的人转而寻求其他来源来填补这个缺口,则其影响就会迅速扩及整个经济体系;而且,这不仅仅影响到所有锡的使用,它还影响到锡的替代品的使用,以及替代品的替代品的使用,还要影响所有锡制品的供应,其替代品,替代品的替代品的供应等等;而那些有助于提供替代品的绝大部分人,一点也不知道这些变化的最初原因。所有这些构成了一个市场,并非因为任一市场成员都须对市场整体全部了解,而是因为他们每个有限的视野合在一起足以叠盖整个市场。所以,通过许多中介,有关的信息就能传递到全体成员。一个掌握所有信息的单一管理者本来可以通过下面这个事实得出解决办法,即任何商品都只有一个价格,或更确切他说,各地的价格是相互关联的,其差别取决于运输费用等等。但是事实上,没有一个人能掌握全部信息,因为它们全分散在所有有关的人手里。

网络安全的社会可拓展性

很久以前,人类社会还只是处于陶器时代,之后进入了纸质时代,而至现在,随着电子的发展,各种程序和网络协议进入了我们的电脑,数据网络也在大多数的现代商业交易中被广泛使用。这类工具已经在很大的程度上帮助优化了过去的匹配系统以及数据流,不过,因为以网络为媒介的有害行为的存在,这类工具的弱点也更加显著,所以导致了使用这类工具的成本的增加。

随着网络的发展,更多的缺少人际之间互相理解的人,以及对人类行为的局限也都随之增加了。网络的发展,导致社会上出现了更多的缺少人际之间相互理解的人,也催生了更多的对于人们行为的局限。基于可信任访问控制的安全协议,是为了那些像贝尔实验室一样的,工作人员都是众所周知的以及整体的收入和支出都是被纸质条约而非计算机中记录的电子版的条约充分控制的那种组织机构而设计的。该类安全协议因为是以纸质文件为媒介,所以在组织机构变得更加庞大,组织边界更错综复杂,以及更有价值更集中的资源(比如说货币)通过计算机被投入使用的时候,逐步成为了一个高效有用的安全机制。当一个人收到更多陌生人发来的电子邮件时,这个人就更有可能收到网络钓鱼攻击或者是恶意捆绑软件的攻击。传统的计算机安全并不具有很好的社会可拓展性。就像我在自己的书《可信任计算的黎明》中描述道的一样:

当我们正在使用一部连接着蜂巢网络或者因特网的智能手机或者笔记本电脑的时候,除本机之外另外的信息交互终端也会是其他的计算机(计算机系统),比如说网络服务器。实际上,这些所有的机器都具有类似的架构体系,它们被设计出是为了使这些机器能被一个人或者是一个互相信任的同阶层人群控制。就远程网络或者是应用程序用户而言,这类的架构体系都是基于一个未知的根管理员/最高权限管理员的完全信任权限而构建的,根管理员能够控制所有在伺服器上发生的事情:他们能按照意愿读取,更改,删除或者屏蔽任何在计算机中的数据。即使数据在网络传输的时候是被加密的,但是传输到另一台电脑的时候也终会以整体的形式被解密。人们完全信任现在网络服务,但是因此它也是脆弱的。在当前的网络服务下,计算机会无条件的执行管理者(包括用户和黑客)的任何命令和付款等行为。如果有人在另一个终端企图忽略或者篡改你的网络指令,同时又没有行之有效的安全措施可以阻止他们,有的只是不可靠和昂贵的人类制度,而且这些制度往往被国界所影响。

很多服务器因为没有价值所以不会被内部或者外部的攻击者所攻击,但是越来越多的服务器因含有有利用价值的资源而被频繁攻击。中心化根信任安全机制不再有效。随着计算机内管理的资源变得越来越有价值,传统的根信任安全机制越来越像现实世界中的“呼叫警察”。幸运的是,有了区块链,我们可以在重要的计算上做得更好。

区块链和加密货币

可扩展的市场和价格需要价格可扩展的货币。价格可扩展的货币需要可扩展的安全性,以便形形色色的人能够使用这个货币而不用担心通货膨胀,防盗窃和假冒伪劣。

2009年,中本聪将比特币带入了互联网,使得个人和群体可以在比特币上进行沟通。中本聪发明的货币的突破是在信任问题最小化的情境下给群众提供社会可扩展性:减少交易对手和第三方的脆弱性。用昂贵且自动化安全的计算算力来代替廉价但是却在制度上昂贵的计算算力,中本聪增加了良好的社会可扩展性。一组部分信任的中间人代替了一个单一且完全信任的中间人。

Nick Szabo : 货币,区块链和社会可扩展性

计算类固醇的财务控制:区块链作为一个由机器人组成的军队,互相检查着对方的工作。

当我们可以通过计算机科学而不是传统的会计师,监管机构,调查人员,警察和律师来确保金融网络的最重要的功能时,我们会选择一个自动化,全球化和更安全的系统而不是手动的,本地的和不一致的安全系统。当加密货币在公有链上正确运行时,能够代替大批由银行官僚主义组成的计算机大军。“这些区块链上的计算机能够让我们把在线协议最重要的组成部分放在一个更安全和可靠的基础之上,使我们之前不敢在全球网络上不敢实行的交互成为可能。(来源)

区块链技术,特别是比特币技术中,最具特色的特点有:

区块链高水准的安全性和可靠性可以在没有人为干扰的情况下保持。如果没有这么高的安全性,区块链只是一个免费又浪费的分布式数据库技术,并且要和地方官僚主义紧密的绑定在一起来保持这个网络的完整性。

Nick Szabo : 货币,区块链和社会可扩展性

自20世纪中期以来,计算效率得到了显著的提高,但是人类还是使用着之前相同的大脑。这也为人类突破极限创造了可能,也为基于人类思维,具有计算能力,包括在安全性上能做到最好的制度。结果就是,人类没有更多的原始心理能力来扩大我们现有的制度。但是,通过计算机来代替一些人类的决策,能有很大的潜力来改善社会的可扩展性。(一个重要标注:这个探讨取决于人类能力线的斜率,而不是人类能力线的绝对位置。上面显示的绝对位置是任意的,这取决于我们测量的人类”算力)。

一个全新的中心化金融实体,一个没有被传统金融机构雇用的“人类区块链”的可信第三方,处于成为下一个Mt. Gox的高风险之中。如果没有官僚机构,它不会成为一个值得信赖的金融中介。

电脑和网络都很便宜。可扩展的计算资源需要便宜的额外资源。以可靠和安全的方式扩大人类传统机构,需要增加会计师,律师,监管机构和警察,同时也会增加这个机构的官僚主义和风险及压力。聘请律师是昂贵的,监管比较遥远,计算机科学保证货币的安全性,要远远好于会计师,警察和律师。

在计算机科学中,存在基本的安全性与性能折衷。比特币的自动化健全来自于其性能、资源使用方面的高成本。没有人能发明一个更好的方法来提高比特币的计算可扩展性。例如,它的交易吞吐量,这种改进会损害到比特币的安全性。

对于比特币区块链来说,没有那么大还能保持其完整性的性能改进存在,这也可能是无法避免的权衡之一。与现有的金融IT比较,中本聪做出了有利于安全和性能的重大权衡。看似浪费的采矿过程是这些权衡中最为明显的一个。但是比特币也会做其他的权衡。其中之一就是它在其消息传递中需要高度冗余。 数学可证的完整性将需要在所有节点之间完整广泛的传播。比特币不能实现这点,但是要得到一个最为接近的近似值需要高水平的冗余。1MB的区块消耗资源远远比1MB的网页消耗的资源多。因为它必须以高冗余度传输,处理和存储,以实现比特币的自动完整性。

这些有必要的权衡,会牺牲性能来实现全球无缝连接、独立运行、自动化和保持完整性的安全性。这也意味着比特币区块链自身在保持自动完整性的基础上,它无法与传统的金融系统相比,它无法与Visa每秒处理的交易数相比。相反,比起比特币的区块链,一个信任要求不高的外围支付网络(可能是闪电网络)能用来承担大量低价的比特币交易,使用比特币的区块链来承担周期性地结算一个高价值的交易。

比特币的交易费率比Visa和Paypal都要低。但是由于他强大的自动化安全性,这些可能会更为重要。任何有智能手机和联网的地方都可以支付 0.20美元- 2美元的交易费用—大大降低了当前的汇款费用—可以在全球的任何一个地方访问比特币。在比特币外围网络上需要实施较低交易费的低价值交易。

当涉及到小写的bitcoin,也就是比特币这个货币,你可以像使用法币一样用比特币来支付很多东西 。还有一些聪明的方法来做比特币外围支付。小额支付在链外进行,并且周期性的在大写B的比特币区块链网络上进行结算。这种区块链将发展成为高价值的结算层,我们将看到这外围网络将被用来进行小额的比特币零售交易。

当我设计比特金(Bit Gold)的时候,我已经知道共识并没有扩展到大额交易吞吐量的安全性上,所以我设计了两层架构:(1)比特金本身,结算层,(2)Chaumian数字现金,外设支付网络,这将为零售支付提供高的吞吐量性能及隐私保障(通过Chaumian blinding),但这需要VISA是值得信赖的第三方,因此需要一个“人类区块链”的会计师来诚信经营。外围支付网络只可以涉及小额的交易,因此只需要很少的人力来避免重写Mt. Gox的命运。

Nick Szabo : 货币,区块链和社会可扩展性

Ralph Merkle:公钥密码学的先驱者和分层哈希树状结构的发明家。(梅克尔树-Merkle trees)

货币在被设计的过程中通过安全性能需要社会可扩展性。例如,任何参与者或者中间人都很难伪造假币(来稀释供应链的线条以防不适当或者意料之外的通货膨胀)。黄金实际上在任何地方都具有价值,它能有效避免极度的通货膨胀,因为它的价值并不依赖于中央权威机构。在这些方便,比特币都很擅长,并且能在网络上运行,使阿尔巴尼亚的某人能够在信任问题最小化的情况下使用比特币支付给津巴布韦的某个人,在没有支付垄断利润的中间人的情况下,减少与第三方中介的脆弱性。

现在外面有对“区块链”各种各样的定义,他们当中,几乎所有的人都习惯了市场上“炒作疯”。我建议应该给“区块链”一个清晰的定义,它可以传达给不太懂区块链的人。如果它既有区块(block),也有链(chain),“链”也应该是梅克尔树(Merkle trees)或者其他保持功能完整性和不可伪造特性的密码学结构的,那么它就是区块链。此外,由一个个区块保护的交易和数据的完整性应该被复制下来,以尽可能多的能够应对最坏情况下的恶意问题和行为(通常,系统可以表现如文章前述部分,在1/3-1/2的服务器想恶意推翻使它,它还能正常运行)。

Nick Szabo : 货币,区块链和社会可扩展性

在计算机科学领域而非法律法规范围,比特币的社会可扩展的安全性允许进行跨国界的支付,例如非洲的客户付款给在中国的供应商。一个私有链无法同样轻易地完成这样的交易,因为这样的交易需要一个鉴定方案、证书认证以及分享在不同管辖权之间的公钥基础设施。

因为这个分类,并且(我希望很少)因为需要更新软件的需求—因不合法的优先块而导致的需求— 产生了一种叫做硬分叉的更危险的情况,区块链也需要易受到政治影响的人类管理。 最成功的区块链,即比特币,它一直通过技术专家中的分散决策维持着其不可变的完整性,这种分散决策结合了强大的不可变性,用最重要和罕见的错误修复和设计改进这种方式,而非其他方式,来纠正硬分叉。这种管理会计和法律决定的理念(例如改变账户余额或撤消交易)虽然从未纠正硬分叉,但是能通过传统的管理来实现规避(例如通过法院禁令迫使比特币用户进行有效地撤消过去的操作,或者通过收回特定的密钥使得特定用户失去特定的权限)

数据是不可伪造的而且不可变的,意味着它在被提交到区块链时不能被检测到改变。相反与一些假设,例如它被提交到区块链之前,它不但保任何有关于数据的起源或者数据的真实和虚假性。因为这需要额外的协议,通常包括昂贵的传统控制。区块链并不能保证绝对真实,它只在之后的变更中保留真实和谎言,允许别人在随后进行安全性分析,因此更能够发现这些谎言。老式的计算都是进行草图勾勒但是区块链拥有更加精密的计算方式。重要数据应尽早地提交到区块链机密精算中,理想情况是直接从其生成的设备中进行加密签名,以最大化区块链在保护完整性方面的优势。

Nick Szabo : 货币,区块链和社会可扩展性

一个Merkle树含有4个交易(从tx0到tx3)。结合已被证明的工作保护下的适当复制和交易链, Merkle树可以通过协商使如交易之类的数据变的不可伪造。在比特币中,Merkle的根哈希安全地汇总这些,以用于验证在块中所有交易未改变的状态。

我个人在1998年提出的“安全财产权”架构就用的是Merkle树和复制数据的理念用来对抗错误软件和恶意使用者,但不包括(区)块。它展示了我的理论,即你可以保护全局共享数据和交易的完整性,并使用它们来设计一个比特金。但比特金并没有比比特币更高效,也并没有拥有像比特币一样的可扩展的块和分类记账系统。与此同时,它就像现在的私有区块链,安全财产权假设要求可分辨和可计数的节点。

基于51%算力攻击,限制了一些公有链(如比特币、以太坊)的重要安全目标,我们真的很希望能有人能以最强大的矿工的身份来回答这个问题:真的有人能发动51%算力攻击吗?

区块链的安全性客观地会受到限制,区块链的管理潜在地会受到51%攻击的影响。一次攻击当然不会被攻击者称为“攻击”,可能会被他们称为“开导管理”,或者“民主行动”。实际上,一些类型的软件更新需要修复错误或者改善底层协议而进行软分叉。而一些其他的软件更新需要硬分叉,这是比特币提出的一个比软分叉更安全的办法。区块链虽然比所有其他网络都减少了信任问题,但实际上还是多多少少达不到完全的信任。矿工是部分被信任的监护人,还有一些并不是开发专家或者电脑科学家,对区块链开发者专家社区有着很大的信心,在学些区块链的设计原理和代码结构,就像一个非专业的人想像一个科学研究的专家一样能够懂得这门相应学科的成果。在硬分叉期间,交易所的影响力也是非常大的,因为它们可以选择支持哪个交易符号(即代币)。

大部分的公有链(当然也不是所有的公有链),也因此能躲过“身份认证是难点”的子弹,并能更好地在高水平处理好矿工的身份不明问题,这可能会是更恰当的方式,而不是将固有的各种基于大脑的概念映射到底层协议上,PKI(公钥基础设施)正在这方面艰难的推进。

我认为一些“私有链”也是真正的区块链,其它的应该归类到“分布式账本”或者“共享数据库”的类别下。它们都和比特币或者以太坊这些公有链毫不相同,没有社会可扩展性而言。

在需要安全识别(可区分和可计算)服务器组而不是公有链中的匿名成员资格时,以下所有情况都非常地相似。换句话来说,他们需要一些其他的不够社会可拓展性的解决方案来解决Sybi(马甲)攻击问题:

  1. 私有链
  2. 侧链的“联合”模型(唉,尽管之前都这样子希望,但是现在没有人能弄清楚如何在信任问题减少化的情况下来做侧链)。侧链也可以被叫做私有链,这是一个很好的契合,因为它们在架构上和外部的依赖(例如PKI)上都是非常相似的。
  3. 基于多重签名(Multisig)的计划,即使是在基于区块链的智能合约下完成的;
  4. 阈值“Oracle”架构,能够将链外(off-chain)数据移动到区块链上。

用于识别一组服务器使用的是基于受信的认证中心机构的PKI是主要的办法,但是却不是非常具有社会可扩展性的。为了避免可信赖的第三方有安全漏洞问题,可靠的认证中心本身既昂贵又劳动密集的官僚机构,通常对他们进行广泛的背景调查或者依靠其他人(例如Dun和Bradstreet的企业)。(我曾经带领的团队设计过这样的CA)

支持PKI的私有链对于银行和一些大企业来说是一个不错的选择,因为他们已经有一些成熟的内部PKI覆盖了重要交易所需的员工,合作伙伴和私有服务器。银行的PKI相对可靠,我们还有针对Web服务器的半可靠PKI,但一般来说并不是针对Web客户端,即使自从Web被发明以来,人们一直在处理客户端证书的问题。例如,广告主希望有一个可以替代电话号码和Cookies来追踪客户身份的安全方式。但还没有找到这种替代方式。

PKI可以为一些很重要的人和事情服务。但是PKI对于小众群体来说,没有那么容易。因为他依赖于传统的身份认证官僚机构,所以它的社会可扩展性受到了局限。

Nick Szabo : 货币,区块链和社会可扩展性

在广泛的比特币生态系统中有一些重大的盗窃事件。鉴于比特币区块链本身可能是现存的网络中最安全的金融网络(确实,比特币比传统支付网络安全很多,以便维护它低管理成本和无缝跨境转账的能力),其周围基于旧的集中式网络服务器则并不安全。(来源:Author)

我们需要更多的社会可扩展的方式安全地计算节点,或者用另一种方式来尽可能多的稳定性来对抗腐败官僚,评估确保区块链完整性的功劳大小。这就是工作量证明和全网广播要做的事情:大大牺牲计算机的扩展性来提高社会可扩展性。这是中本聪最杰出的权衡。他的杰出表现在于人比计算机要昂贵的多,这种差距每年都在逐步扩大。他是杰出的,因为他允许人们在人类信任边界(如国家边界)安全地无缝工作,与像VISA或者Paypal“呼叫警察”的架构不同,Visa和Paypal依靠的是昂贵、容易出错的,有时它们还会与腐败的官僚机构一起合作。

结论

互联网的兴起被视作各种在线机构的崛起,其中包括社交网络,“长尾”零售(例如亚马逊),以及允许小型和分散的买家及卖家找到和做生意的各种服务 (eBay,Uber,AirBnB等)。这些只是充分发挥我们新的能力的最初尝试。由于近几十年来信息技术的巨大进步,现在能够活跃在在线机构中的人的种类和数量已经越来越不会受到计算机和网络的客观限制而限制,而是当心智还没有完全适应于重新设计好的新的发展,机构还没有充分地进化,这些反而会限制人们充分利用这科技的进步。

这些互联网最初的努力都是非常中心化的。区块链技术通过计算机科学来保证数据的完整性而不是通过“呼叫警察”的方式,迄今为止已经实现了信任问题最小化的货币—加密货币—并将使我们在金融领域以及其他基于在线可用数据的交易领域取得进步。

这并不是说,使机构适应我们的新能力是一件容易的事情,甚至在一些情况下是难以实现的,有些甚至是不太可能的。乌托邦计划在区块链社区非常受欢迎,但它们不是可行的选择。让我们高度进化的传统机构进行逆向工程,以全新的形式苏醒过来,这会比从头开始重新设计要好得多,也比大规划和博弈理论要好得多。中本聪验证了一个可实现的重要策略:牺牲计算的效率和可扩展性(消耗更经济的计算资源),来减少在现代机构(例如 市场,大公司和政府)中为了维护陌生人之间的关系而需要花费的人力资源成本。

原文:http://unenumerated.blogspot.hr/2017/02/money-blockchains-and-social-scalability.html
作者:NICK SZABO

老牌交易所coinbase惊现修改余额漏洞,电子加密货币恐成为极客提款机

老牌交易所coinbase惊现修改余额漏洞,电子加密货币恐成为极客提款机

电子加密货币的生态显然还没准备好迎接全球黑客的挑战。

当前所暴露出来的安全问题,显现出大量比较初级却致命的漏洞,可见整个电子加密货币的生态还处于发展初期,其安全质量没有经过过多的考虑。

2018-3-21,知名的老牌交易所coinbase(https://www.coinbase.com/)被vicompany爆出账户余额可被修改的漏洞,可以持续往coinbase钱包里免费充值。

vicompany的原文在此,但并未透露过多细节:https://www.vicompany.nl/magazine/from-christmas-present-in-the-blockchain-to-massive-bug-bounty

我们将展示我们所掌握的信息帮助大家了解这个漏洞。

关于coinbase:

自2012年建立以来,截止到2015年1月21日,Coinbase已经融资超过1.05亿美元,现已拥有约100名员工,其中50人在公司的旧金山的总部全职工作。2014年,Coinbase成立美国首家正规比特币交易所,将为包括纽约、加州在内的 25 个州提供交易服务。这意味着Coinbase 已获得美国多个州监管机构的合法执照。2016年5月,Coinbase交易所更名为GDAX,既代表着全球数字资产交易所。

漏洞细节

攻击者可通过编写智能合约,将资金转移到智能合约中,并执行智能合约将资金转入coinbase。

在转账过程中,最后会有一笔交易由于余额不足交易失败,从而引起事务回滚。

问题的关键在于,如果智能合约中有一笔交易失败,则之前所有的交易都将被撤销。

但在coinbase上,平台的开发者并没有考虑到交易回滚的情况,这些交易在coinbase上不会被逆转,这意味着攻击者可以不断执行智能合约,在coinbase中无限添加余额。

以下的合约交易请求展示了这个过程:

https://etherscan.io/tx/0x587be0cedc106b85ce8c84de73f17432e6d45531d1c33a6b8e226379f4509e1b

在交易页面,你可以看到50个成功的交易,之后发生了1个Out of gas的错误,导致整个交易链进行事务回滚,资金并没有转移给coinbase,而coinbase账户余额却成功增加了数量。

漏洞修复进展

目前漏洞已经通过hackone平台传递到coinbase,被认定为最高级别漏洞,并完成了修复:

https://hackerone.com/reports/300748

揭秘以太坊中潜伏多年的“偷渡”漏洞,全球黑客正在疯狂偷币

揭秘以太坊中潜伏多年的“偷渡”漏洞,全球黑客正在疯狂偷币

世界上有一群人,互联网对于他们来说就是提款机。

是的,过去是,现在更是,因为电子货币的出现,他们提款的速度变得更疯狂。

在2017年,我们的蜜罐监测到一起针对以太坊的全球大规模攻击事件,我们将其命名为以太坊“偷渡”漏洞

通过该漏洞,黑客可以在没有服务器权限、没有keystore密码权限的情况下,转走钱包中的所有余额。

而如此严重的漏洞,1年前就在reddit.com被曝光有黑客在利用,并且最早可追溯到2016年的2月14号就有黑客通过此漏洞窃取到比特币:

https://www.reddit.com/r/ethereum/comments/4z0mvi/ethereum_nodes_with_insecure_rpc_settings_are/

近期也有中国的慢雾安全团队揭露了这种攻击手法:

https://mp.weixin.qq.com/s/Kk2lsoQ1679Gda56Ec-zJg

在长达2年的时间里,并没有多少用户关注到,以太坊也没有进行针对性的防护措施,直到今日,以太坊的最新代码中依然没有能够抵御这种攻击。

因此我们决定将我们所掌握的详细数据公布给所有人,希望能促使以太坊的开发者承认并修复该漏洞。

漏洞成因

(以下的代码分析基于https://github.com/ethereum/go-ethereum的当前最新提交:commit b1917ac9a3cf4716460bd53a11db40384103e5e2)

以太坊目前最流行的节点程序(Geth/Parity )都提供了RPC API,用于对接矿池、钱包等其他第三方程序。

默认情况下,节点的RPC服务是无需密码就可以进行接口调用,官方实现的RPC API也并未提供设置RPC连接密码的功能,因此,一旦将RPC端口暴露在互联网,将会非常危险。

而我们所捕获的以太坊“偷渡”漏洞,正是利用了以太坊默认对RPC不做鉴权的设计。

被攻击的用户,需要具备以下条件:

  1. 节点的RPC端口对外开放
  2. 节点的RPC端口可直接调用API,未做额外的鉴权保护(如通过nginx等方式进行鉴权保护)
  3. 节点的区块高度已经同步到网络的最新高度,因为需要在该节点进行转账,如果未达到最高度,无法进行转账

当用户对自己的钱包进行了解锁(unlockAccount函数),在解锁超时期间,无需再输入密码,便可调用RPC API的eth_sendTransaction进行转账操作。

漏洞的关键组成,由未鉴权的RPC API服务及解锁账户后有一定的免密码时间相结合,以下是解锁账户的unlockAccount函数:

代码路径:go-ethereum/internal/jsre/deps/api.go

通过函数的实现代码可见,解锁账户的api允许传入超时时间,默认超时为300秒,

真正进行解锁的函数TimedUnlock实现如下:

代码路径:go-ethereum/accounts/keystore/keystore.go

当传入的超时大于0时,会发起一个协程进行超时处理,如果传入的超时时间为0,则是永久不会超时,账户一直处于解锁状态,直到节点进程退出。

详细的用法参考官方文档:https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_unlockaccount

攻击手法揭秘

1. 寻找对外开放以太坊RPC端口的服务器,确认节点已经达到以太坊网络的最高区块高度

黑客通过全球的端口服务扫描,发现RPC服务为以太坊的RPC接口时,调用eth_getBlockByNumber(‘last’, false),获取最新的区块高度。

但是由于有些以太节点是以太坊的分叉币,高度与以太坊的不一样,因此黑客即使发现节点高度与以太坊的高度不一样,也不会放弃攻击。

2. 调用eth_accounts,获取该节点上的所有账户。

eth_accounts的请求将返回一个账户地址列表:[0x1834axxxxxxxxxxxxxxxxxxxxxxxxxxx, 0xa13jkcxxxxxxxxxxxxxxxxxxxxxxxxxxx,…… ]

3. 调用eth_getBalance,查询地址余额。

这个过程黑客可在自己的服务器完成以太坊的余额查询,因为以太坊的区块链账本数据库是随意公开获取的。

有部分黑客没有搭建以太坊的全节点,没有自行查询余额,因此也会在被攻击服务器进行eth_getBalance操作。

4. 持续调用转账操作,直到刚好用户用密码解锁了钱包,完成非法转账操作的“偷渡”

黑客会构造eth_sendTransaction的转账操作,并填写余额、固定的手续费:

{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址1″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}
{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址2″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}
{“jsonrpc”:”2.0″,”id”:2,”method”:”eth_sendTransaction”,”params”:[{“from”:”受害者钱包地址3″,”gas”:”0x55f0″,”to”:”0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6″,”value”:”0x112345fc212345000″}]}

其中的value的单位是以太的最小单位:wei,计算为以太的话需要除10的18次方:

>>> 0x112345fc212345000
19758522752314920960L
>>> 19758522752314920960L/1000000000000000000
19L

黑客会持续发转账操作,并定期监控余额变化,更新转账的金额,直到用户使用钱包,输入密码解锁了钱包,此时钱包余额会立即被转走。

 

快速漏洞测试

安装python的web3库,然后连接RPC端口,发起请求,如果获取到返回结果,便可能存在该漏洞。

参考:http://web3py.readthedocs.io/en/stable/quickstart.html

from web3 import Web3, HTTPProvider, IPCProvider
web3 = Web3(HTTPProvider(‘http://ip:port’))
print web3.eth.blockNumber

 

黑客解密及IOCs情报

黑客钱包

目前我们掌握了3个黑客的钱包收款地址,未转走的账户余额为2220万美金:

https://etherscan.io/address/0x957cD4Ff9b3894FC78b5134A8DC72b032fFbC464,余额为38,076 ETH(未统计erc20 token),最早进账为2016-2-14,最新进账为2018-3-21(当前还在持续入账)

https://etherscan.io/address/0x96a5296eb1d8f8098d35f300659c95f7d6362d15,余额为321 ETH(未统计erc20 token),最早进账为2016-8-10,最新进账为2017-11-28。

https://etherscan.io/address/0xdc3431d42c0bf108b44cb48bfbd2cd4d392c32d6,余额为330 ETH(未统计erc20 token),最早进账为2018-2-06,最新进账为2018-3-20。

黑客攻击源IP

146.0.249.87(德国黑森州法兰克福)
162.251.61.133(加拿大)
190.2.133.114(库拉索)
85.14.240.84(德国北莱茵)

 

目前大部分的黑客使用https://github.com/regcostajr/go-web3进行频繁API请求,如果有看到大量user-agent为“Go-http-client/1.1”的POST请求时,请记录下请求内容,确认是否为恶意行为。

紧急响应及修复建议

  1. 关闭对外暴露的RPC端口,如果必须暴露在互联网,请使用鉴权:https://tokenmarket.net/blog/protecting-ethereum-json-rpc-api-with-password/
  2. 借助防火墙等网络防护软件,封堵黑客攻击源IP
  3. 检查RPC日志、web接口日志,是否有异常大量的频繁请求,检查请求内容是否为eth_sendTransaction
  4. 等待以太坊更新最新代码,使用修复了该漏洞的节点程序
比特币源码分析-网络

比特币源码分析-网络

在梳理代码逻辑之前,首先介绍几个比较重要的结构:

CMessageHeader

消息头包含的内容:

class CMessageHeader {
public:
    enum {
        MESSAGE_START_SIZE = 4,
        //消息开始字符串,长度4字节,就是告诉你是属于哪种消息标识,在UTF-8中无效
        //主类型(MAIN):   0xd9b4bef9
        //测试网络(TESTNET):0x0709110b
        //回归测试(REGTEST):0xdab6bffa
        COMMAND_SIZE = 12,
        //定义了通信中的各种命令,由0x20~0x7F之间的字 符串构成,
        MESSAGE_SIZE_SIZE = 4,
        //最大值是32M (0x02000000)。 不包含消息头的大小
        CHECKSUM_SIZE = 4,
        //把消息数据经过2次SHA256算法运算得到校验和
    };

Message Headers

网络传输中,所有消息的消息头格式是一样的,下面解释一下每一个消息头具体包含哪些内容:

bytes name 数据类型 描述
4 start string char[4] 告诉发送端的节点,现在可以开始发送 Magic 的消息;用于在流状态未知时寻求下一条消息。
12 command name char[12] 标识有效载荷中包含的消息类型的ASCII字符串。随后是空值(0x00)来填充字节数; 例如:version\0\0\0\0\0
4 payload size uint32_t 有效 payload 中的字节数。Bitcoin Core 在有效的 payload 中允许的当前最大字节数(MAX_SIZE)为32个有效载荷大小超过此值的消息将被丢弃或拒绝。
4 checksum char[4] SHA256的前4个字节(SHA256(payload))以内部字节顺序排列。 如果有效payload为空,如verack和getaddr消息,则校验和始终为0x5df6e0e2(SHA256(SHA256())

GetDataMsg

getdata / inv消息类型。这些号码由协议定义。

enum GetDataMsg {
    UNDEFINED = 0,
    MSG_TX = 1,
    MSG_BLOCK = 2,
    // The following can only occur in getdata. Invs always use TX or BLOCK.
    //!< Defined in BIP37
    MSG_FILTERED_BLOCK = 3,
    //!< Defined in BIP152
    MSG_CMPCT_BLOCK = 4,

    //!< Extension block
    MSG_EXT_TX = MSG_TX | MSG_EXT_FLAG,
    MSG_EXT_BLOCK = MSG_BLOCK | MSG_EXT_FLAG,
};

消息类型大致分为:

  1. MSG_TX 交易信息
  2. MSG_BLOCK 区块
  3. MSG_FILTERED_BLOCK 过滤的区块
  4. MSG_CMPCT_BLOCK 紧凑区块 //bip152

NetMsgType

namespace NetMsgType {
	const char *VERSION = "version";//获取版本信息
	const char *VERACK = "verack";//版本信息回应
	const char *ADDR = "addr";//网络节点的地址
	const char *INV = "inv";//库存清单
	const char *GETDATA = "getdata";//获取数据
	const char *MERKLEBLOCK = "merkleblock";//merkle块
	const char *GETBLOCKS = "getblocks";//获取区块
	const char *GETHEADERS = "getheaders";//获取区块头
	const char *TX = "tx";//交易信息
	const char *HEADERS = "headers";//区块头
	const char *BLOCK = "block";//区块
	const char *GETADDR = "getaddr";//获取地址
	const char *MEMPOOL = "mempool";//内存池
	const char *PING = "ping";//判断网络是否连通
	const char *PONG = "pong";//ping消息回应
	const char *NOTFOUND = "notfound";//没有获取相匹配的数据
	const char *FILTERLOAD = "filterload";//加载过滤器
	const char *FILTERADD = "filteradd";//添加过滤交易信息
	const char *FILTERCLEAR = "filterclear";//清理过滤器
	const char *REJECT = "reject";//拒绝
	//======================网络协议版本号为70002之前======================//
	const char *SENDHEADERS = "sendheaders"; //bip130 发送块头信息
	const char *FEEFILTER = "feefilter";//BIP133 feefilter
	const char *SENDCMPCT = "sendcmpct";// BIP152 发送紧凑区块
	const char *CMPCTBLOCK = "cmpctblock";// BIP152 紧凑区块
	const char *GETBLOCKTXN = "getblocktxn";// BIP152 获取紧凑区块交易
	const char *BLOCKTXN = "blocktxn";// BIP152 紧凑区块交易
};

Inv

当需要获取inventory时,发送此命令,发送时,需要指定范围。接收到此命令后,按指定范围获取inventory数据(PushGetBlocks)。

bytes name 数据类型 描述
Varies count compactSize uint inventory 条目的数量
Varies inventory inventory 一个或多个库存条目,最多50,000个条目

Inv 消息的示例:

02 ................................. Count: 2

01000000 ........................... Type: MSG_TX
de55ffd709ac1f5dc509a0925d0b1fc4
42ca034f224732e429081da1b621f55a ... Hash (TXID)

01000000 ........................... Type: MSG_TX
91d36d997037e08018262978766f24b8
a055aaf1d872e94ae85e9817b2c68dc7 ... Hash (TXID)

getdata:

getdata消息请求来自另一个节点的一个或多个数据对象。这些对象由一个 inventory 请求,请求节点通常通过inv消息预先接收这些对象。

对 getdata 消息的响应可以是 tx 消息,阻塞消息,merkleblock 消息或未找到的消息。

getdata 不能用于请求任意数据,例如不再存在于内存池中的一些历史交易。如果全节点已经从其block数据库中打包了先前的交易,这时全节点可能无法提供这些block。 出于这个原因,getdata消息通常只能通过发送inv消息向先前通告它的节点请求数据。

getdata消息的格式和最大大小限制与inv消息相同,但是消息标题不同。

merkleblock:

如BIP37所述,在协议版本70001中添加。

merkleblock 消息是对使用 inventory 类型 MSG_MERKLEBLOCK 请求块的 getdata 消息的回复。这只是答复的一部分:如果找到任何匹配的交易,它们将作为tx消息单独发送。

如果之前已经使用过滤器加载消息设置了过滤器,则merkleblock消息将包含所请求块中与过滤器匹配的所有事务的TXID以及将这些事务连接到块头的必要块所需的块merkle树的任何部分 merkle根。 该消息还包含块头的完整副本,以允许客户端对其进行 hash 并确认其工作证明。

merkleblock消息示例:

01000000 ........................... Block version: 1
82bb869cf3a793432a66e826e05a6fc3
7469f8efb7421dc88067010000000000 ... Hash of previous block's header
7f16c5962e8bd963659c793ce370d95f
093bc7e367117b3c30c1f8fdd0d97287 ... Merkle root
76381b4d ........................... Time: 1293629558
4c86041b ........................... nBits: 0x04864c * 256**(0x1b-3)
554b8529 ........................... Nonce

07000000 ........................... Transaction count: 7
04 ................................. Hash count: 4

3612262624047ee87660be1a707519a4
43b1c1ce3d248cbfc6c15870f6c5daa2 ... Hash #1
019f5b01d4195ecbc9398fbf3c3b1fa9
bb3183301d7a1fb3bd174fcfa40a2b65 ... Hash #2
41ed70551dd7e841883ab8f0b16bf041
76b7d1480e4f0af9f3d4c3595768d068 ... Hash #3
20d2a7bc994987302e5b1ac80fc425fe
25f8b63169ea78e68fbaaefa59379bbf ... Hash #4

01 ................................. Flag bytes: 1
1d ................................. Flags: 1 0 1 1 1 0 0 0

getblocks

getblocks消息请求一个inv消息,该消息提供从块链中的特定点开始的块头hash。区块同步时,发送此命令,发送时需要指定区块范围(PushGetBlocks)。接收到此命令后,根据区块范围,获取相应的区块,反馈回去。接收的数据中包含区块范围的开始区块的定位信息(CBlockLocator)、结束区块的索引,从开始区块的下一个区块开始。每次最多获取500个区块信息。满500个时,记录获取的最后一个区块的hahs值,保存到源节点的hashContinue中。

bytes name 数据类型 描述
4 version uint32_t 协议版本号;与版本信息中发送的一样。
Varies hash count compactSize uint 提供的header数量不包括stop哈希。除了整个消息的字节大小必须低于MAX_SIZE限制外,没有限制;通常发送1到200次hash。
Varies block header hashes char[32] 一个或多个块头hash(每个32字节)以内部字节顺序排列。hash应该以块高度相反的顺序提供,因此最高高度 hash 指向第一个,最低高度哈希指向最后一个。
32 stop hash char[32] 请求最后一个header hash 的头部hash值; 设置为全零以请求包含所有后续头部hash的inv消息(最多500个将作为对此消息的回复发送;如果您需要超过500个,则需要发送另一个具有更高高度头部的getblocks消息 hash 作为块头 hash 字段中的第一个条目)。

示例如下:

71110100 ........................... Protocol version: 70001
02 ................................. Hash count: 2

d39f608a7775b537729884d4e6633bb2
105e55a16a14d31b0000000000000000 ... Hash #1

5c3e6403d40837110a2e8afb602b1c01
714bda7ce23bea0a0000000000000000 ... Hash #2

00000000000000000000000000000000
00000000000000000000000000000000 ... Stop hash

getheaders

getheaders消息请求 headers 消息,该消息提供从块链中的特定点开始的块 header。接收到此命令后,获取指定的范围的区块的头,将 headers消息发送给源节点。

getheaders消息几乎与getblocks消息相同,只有一点区别:对getblocks消息的inv回复将包含不超过500个块头hash; headers 回复 getheaders 消息将包含多达2000个块 headers。

tx

tx 消息以原始交易格式传输单个交易。它可以在各种情况下发送;

  • 交易响应:Bitcoin Core 和 BitcoinJ 将发送它以响应getdata消息,该消息请求 inventory 类型为MSG_TX的交易。
  • MerkleBlock响应:Bitcoin Core 将发送它以响应getdata消息,该消息请求inventory类型为MSG_MERKLEBLOCK的merkle块。 (这是发送merkleblock消息的补充。)在这种情况下,每个tx消息提供该块的匹配交易。
  • Unsolicited:BitcoinJ会发送一个tx消息来主动发起它的交易。

headers

headers 消息将 block message 发送到先前用getheaders消息请求特定 headers 的节点。headers 消息可以是空的。

bytes name 数据类型 描述
Varies count compactSize uint block headers 的数量最多可达200​​0个。注意:headers-first sync 假定发送节点将尽可能发送最大数量的headers
Varies headers block_header block headers:每个80字节block headers采用 block headers section中描述的格式,并附加一个0x00后缀。 这个0x00被称为交易计数器,但由于头部消息不包含任何事务,因此事务计数始终为零。

示例如下:

01 ................................. Header count: 1

02000000 ........................... Block version: 2
b6ff0b1b1680a2862a30ca44d346d9e8
910d334beb48ca0c0000000000000000 ... Hash of previous block's header
9d10aa52ee949386ca9385695f04ede2
70dda20810decd12bc9b048aaab31471 ... Merkle root
24d95a54 ........................... Unix time: 1415239972
30c31b18 ........................... Target (bits)
fe9f0864 ........................... Nonce

00 ................................. Transaction count (0x00)

block

block message以 serialized blocks section 描述的格式发送单个 serialized block。

  1. 获取数据响应:节点将始终发送它以响应一个getdata消息,该消息请求存储类型为MSG_BLOCK的块(假设该节点具有可用于发送的该块)。
  2. 主动提供:一些矿工会发送未经请求的block信息,将他们新挖掘的块块广播给他们的所有同行。 许多矿池做同样的事情,虽然有些可能被错误地配置为从多个节点发送块,可能不止一次地将同一块发送给别的节点。

notfound

notfound 的消息是对getdata消息的回复,该消息请求接收节点没有可用于发送的对象。 (预计节点不会传递不再存在于内存池或发送集中的历史事务,节点也可能从较旧的块中删除已用完的事务,使它们无法发送这些块。)

notfound消息的格式和最大大小限制与inv消息相同,只有消息的headers不同。

mempool

mempool消息请求接收节点已验证为有效但尚未出现在块中的交易的TXID。 也就是说,在接收节点的内存池中的交易。 对mempool消息的响应是一个或多个包含 inventory 格式的TXID的inv消息。

当程序首次连接到网络时,发送mempool消息非常有用。 全节点可以使用它来快速收集网络上可用的大部分或全部未确认的交易; 这对试图收取交易费用的矿工尤其有用。 SPV客户端可以在发送mempool之前设置过滤器,以仅接收与该过滤器匹配的交易; 这允许最近开始的客户获得与其钱包有关的大部分或全部未确认的交易。

对mempool消息的inv响应充其量只是一个节点的网络视图 – 而不是网络上未经确认的交易的完整列表。以下是列表可能不完整的一些其他原因:

  • 在Bitcoin Core 0.9.0之前,对mempool消息的响应只有一个inv消息。 inv消息被限制为50,000个库存,所以具有大于50,000个条目的内存池的节点不会发送所有内容。 Bitcoin Core 的更新版本根据需要发送尽可能多的inv消息以引用其完整的内存池。
  • mempool消息当前不与filterload消息的BLOOM_UPDATE_ALL和BLOOM_UPDATE_P2PUBKEY_ONLY标志完全兼容。 Mempool交易不像块内交易那样排序,因此一个消耗输出的交易(tx2)可以出现在包含该输出的交易(tx1)之前,这意味着自动过滤器更新机制将不会运行,直到第二次出现的交易 tx1) – 缺少首次出现的交易(tx2)。 在Bitcoin Core issue #2381中已经提出,交易在被过滤器处理之前应该被排序。

以上是对 Data Messages 的描述,其关系图如下:

001.png

version:

version 消息在连接开始时向接收节点提供关于发送节点的信息。在这两个节点交换 version 消息之前,不会接受其他消息。

当接收节点收到version消息之后,会回复给发送节点一个verack消息,同时把所有警告也反馈回去。但是在version消息的初始化未完成之前,是不会发送verack消息的。

发送端只能发送一次获取版本的命令,重复发送时,回应拒绝命令 (reject)。发送命令后,会把发送节点的地址信息添加到节点的地址管理器中。

示例如下:

72110100 ........................... Protocol version: 70002
0100000000000000 ................... Services: NODE_NETWORK
bc8f5e5400000000 ................... Epoch time: 1415483324

0100000000000000 ................... Receiving node's services
00000000000000000000ffffc61b6409 ... Receiving node's IPv6 address
208d ............................... Receiving node's port number

0100000000000000 ................... Transmitting node's services
00000000000000000000ffffcb0071c0 ... Transmitting node's IPv6 address
208d ............................... Transmitting node's port number

128035cbc97953f8 ................... Nonce

0f ................................. Bytes in user agent string: 15
2f5361746f7368693a302e392e332f ..... User agent: /Satoshi:0.9.3/

cf050500 ........................... Start height: 329167
01 ................................. Relay flag: true

verack:

verack消息确认先前收到的版本消息,通知连接节点它可以开始发送其他消息。 接收到版本回应命令后,设置节点的接收版本。与此同时,设置接收版本号,节点的接收版本(nRecvVersion)、接收消息的报头流的版本号、接收消息数据流的版本号(nVersion)都要设置。

adddr:

addr(IP地址)消息用来表示网络上节点的连接信息。 每个想要接受传入连接的节点创建一个addr消息,提供其连接信息,然后将该消息发送给未经请求的节点,当接收端收到此命令后把接收到的地址添加到节点的地址管理器中,发送、接收的地址数量最多1000个。

bytes name 数据类型 描述
4 time uint32 在协议版本31402中添加。采用Unix纪元格式的时间。通告自己IP地址的节点会将其设置为当前时间。通告他们连接的IP地址的节点将其设置为最后一次连接到该节点的时间。发送IP地址的节点不会改变时间。节点可以使用时间字段来避免传播旧的地址信息。恶意节点可能会改变时间,甚至可能会在未来进行设置。
8 services uint64_t 节点在其版本消息中广播的服务信息。
16 IP address char IPv6地址采用大端字节顺序。 IPv4地址可以作为IPv4映射的IPv6地址提供
2 port uint16_t 端口号以大端字节顺序排列。 请注意,为了寻找自己的伙伴,Bitcoin Core只会连接到具有非标准端口号的节点。 这是为了防止其他人尝试使用网络来破坏在其他端口上运行的非比特币服务。

Ping

ping消息有助于确认接收方仍处于连接状态(判断网络是否连通)。 如果在发送ping消息时遇到TCP / IP错误(例如连接超时),则发送节点可以假设接收节点已断开连接。 对ping消息的响应是pong消息。

在协议版本60000之前,ping消息没有 payload。从协议版本60001及所有更高版本开始,消息包含一个字段即nonce。

bytes name 数据类型 描述
8 nonce uint64_t 如BIP31所述,在协议版本60001中添加。将随机数分配给ping消息。响应的pong消息将包括这个随机数以识别它正在回复的ping消息。

ping消息的nonce字段,示例如下:

0094102111e2af4d ... Nonce

pong

pong消息回复ping消息,向pinging节点证明ponging节点仍然存在。默认情况下,Bitcoin Core将在20分钟内断开任何未响应ping消息的客户端。接收到pong命令后,更新节点的ping花费时间(nPingUsecTime),所花费的时间为当前时间与节点的ping开始时间(nPingUsecStart)的差。

为了允许节点跟踪等待时间,pong的回复消息中所包含的nonce字段与ping消息的nonce是相同的。

pong消息的格式与ping消息相同;只有消息头不同。

reject

发生特殊情况时,reject 消息通知接收节点其先前消息之一已被拒绝。

特殊情况如下:

  • 重复发送获取版本信息的命令(”version”)。
  • 发送端的版本号大于最大版本号(MIN_PEER_PROTO_VERSION = 209)。
  • 接收到DDoS攻击。
  • 处理消息时发生异常(ProcessMessage)。

发送拒绝命令时,带上参数,表示拒绝的原因。

Code In Reply To Description
0x01 REJECT_MALFORMED 处理消息时发生异常(ProcessMessage)
0x10 REJECT_INVALID 块、交易信息无效
0x11 REJECT_OBSOLETE 块版本、发送端版本过期
0x12 REJECT_DUPLICATE 重复发送获取版本命令、交易信息
0x40 REJECT_NONSTANDARD 交易信息不标准
0x41 REJECT_DUST
0x42 REJECT_INSUFFICIENTFEE 交易费不足
0x43 REJECT_CHECKPOINT 与校验点有关的错误

SendHeaders

sendheaders消息告诉接收方使用 headers 消息而不是inv消息发送新的块通告,具体可参照 bip130 。

GetAddr

getaddr消息请求来自接收节点的addr消息,最好是具有大量其他接收节点的IP地址的消息。 发送节点可以使用这些IP地址来快速更新其可用节点的数据库,而不是等待未经请求的addr消息随时间到达。

接收到getaddr命令后把节点的地址管理器中的地址返回给发送端。先清空源节点的发送地址数组(vAddrToSend)。再把节点的IP地址管理器 (addrman)中的地址(CAddress)发送给源节点。

FeeFilter

FeeFilter消息是对接收方的请求,不将任何交易inv消息转发给发送方,其中交易费率低于feefilter消息中指定的费率。

在Bitcoin Core 0.12.0引入mempool限制之后,feefilter在Bitcoin Core 0.13.0中引入。 Mempool限制功能可以防止费用较低的交易的攻击,并且不会将其纳入开采块中。 feefilter消息告诉其他节点,如果你的费率低于我预先设置的费率,那你的这个交易是不允许进入我的mempool的,同时,这些节点就没必要继续把低于该费率的交易的inv消息转达给该节点。

bytes name 数据类型 描述
8 feerate uint64_t 费用率(以每千字节为satoshis)低于该费率,交易不应传递给其它节点。

接收方可以选择不过滤这笔交易,直接忽略该消息。

FeeFilter与bloom过滤器相加。如果SPV客户端加载bloom过滤器并发送FeeFilter消息,则只有通过两个过滤器才能转发交易。

但请注意,feefilter对块传播或对getdata消息的响应没有影响。 例如,如果一个节点通过发送一个包含inv类型MSG_FILTERED_BLOCK的getdata消息来请求一个merkleblock,并且它先前已经向该节点发送了一个feefilter,那么即使他们低于feefilter的费率,该节点也应该响应一个包含所有匹配bloom过滤器的交易的merkleblock。

示例如下:

7cbd000000000000 ... satoshis per kilobyte: 48,508

FilterAdd

filteradd消息告诉接收方将单个元素添加到先前设置的布隆过滤器,例如新的公共hash。 该元素直接发送给接收方; 然后其它节点使用在过滤器加载消息中设置的参数来将该元素添加到布隆过滤器。

由于该元素直接发送到接收方,因此elem不会产生歧义,也不会出现布隆过滤器提供的似是而非的隐私。希望保持更高隐私性的客户端应自行重新计算布隆过滤器,并使用重新计算的布隆过滤器发送新的过滤器负载消息。

bytes name 数据类型 描述
Varies element bytes compactSize uint 下列元素字段中的字节数。
Varies element uint8_t[] 要添加到当前过滤器的元素。最大为520个字节,这是在pubkey或签名脚本中可以压入堆栈的元素的最大大小。元素必须以它们在原始交易中出现时使用的字节顺序发送; 例如,hash应以内部字节顺序发送。

注意:除非先前使用的filterload消息设置了过滤器,否则节点将不接受filteradd消息。

示例如下:

20 ................................. Element bytes: 32
fdacf9b3eb077412e7a968d2e4f11b9a
9dee312d666187ed77ee7d26af16cb0b ... Element (A TXID)

FilterClear

filterclear消息告诉接收方删除先前设置的bloom过滤器。这也消除了将版本消息中的转发字段设置为0的效果,允许未经过滤的访问广播新交易的inv消息。

Bitcoin Core在替换过滤器加载filterload之前不需要filterclear消息。它也不需要filterclear消息之前的filterload消息。

FilterLoad

filterload消息告诉接收方需要过滤所有转发的交易,并通过提供的过滤器请求merkle块。 这允许客户接收与其钱包相关的交易。

bytes name 数据类型 描述
Varies nFilterBytes compactSize uint 以下过滤器位字段中的字节数。
Varies filter uint8_t[] 任意字节对齐大小的位字段。最大大小是36,000字节。
4 nHashFuncs uint32_t 在此过滤器中使用的hash函数的数量。该字段中允许的最大值为50。
4 nTweak uint32_t 一个任意值,用于添加到布隆过滤器使用的哈希函数中的种子值。
1 nFlags uint8_t 一组控制与匹配的pubkey脚本相对应的outpoint的标志被添加到过滤器中。请参阅下面的更新布隆过滤器小节中的表格。

示例如下:

02 ......... Filter bytes: 2
b50f ....... Filter: 1010 1101 1111 0000
0b000000 ... nHashFuncs: 11
00000000 ... nTweak: 0/none
00 ......... nFlags: BLOOM_UPDATE_NONE

sendcmpct and cmpctblock、getblocktxn、blocktxn参照BIP152.

以上是对Control Messages的描述,其关系如下:

Control Messages

下表列出了一些值得注意的P2P网络协议版本,其中最新版本列在第一位:

version Initial Release Major Changes
70015 Bitcoin Core 0.13.2 (Jan 2017) v0.14.0中对无效压缩 blocks 的新禁用行为#9026, 在#9048中回退到v0.13.2 .
70014 Bitcoin Core 0.13.0 (Aug 2016) BIP152: 增加了 sendcmpctcmpctblockgetblocktxnblocktxn 消息类型;给 getdatamessage.增加了MSG_CMPCT_BLOCK inventory 类型
70013 Bitcoin Core 0.13.0 (Aug 2016) BIP133: 增加了 feefilter message.移除了 alert message 系统. 具体参照 Alert System Retirement
70012 Bitcoin Core 0.12.0 (Feb 2016) BIP130: 增加了 sendheaders message.
70011 Bitcoin Core 0.12.0 (Feb 2016) BIP111: 在包含此版本后,filter* 消息在没有NODE_BLOOM的情况下被禁用。
70002 Bitcoin Core 0.7.0 (Sep 2012) BIP35: 增加了 mempool message. 扩展了 getdata message 允许下载内存池中的交易
60001 Bitcoin Core 0.6.1 (May 2012) BIP31: 增加nonce字段为 ping message 、增加了 pong message
31800 Bitcoin Core 0.3.18 (Dec 2010) 增加了 getheaders message 和 headers message.
31402 Bitcoin Core 0.3.15 (Oct 2010) 给 addr message添加时间字段
311 Bitcoin Core 0.3.11 (Aug 2010) 增加了 alert message.
209 Bitcoin Core 0.2.9 (May 2010) 给 message headers增加了时间字段, 增加了 verack message, 并且增加了开始的 height 给 version message.
106 Bitcoin Core 0.1.6 (Oct 2009) 给发送端的version message添加了IP地址字段,随机数和用户代理(subVer)

本文由 copernicus 团队 冉小龙 分析编写,转载无需授权!

以太坊安全漏洞最全总结及安全建议 (截至现在)

以太坊安全漏洞最全总结及安全建议 (截至现在)

以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见。如果智能合约开发者疏忽或者测试不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击。并且越是功能强大的智能合约,就越是逻辑复杂,也越容易出现逻辑上的漏洞。同时,智能合约语言Solidity自身与合约设计都可能存在漏洞。

如果说区块链也有315,那么以太坊想必榜上有名。以太坊自运行以来多次爆出过由于漏洞造成的重大安全事件。

北京时间2016年6月17日发生了在区块链历史上沉重的一次攻击事件。由于以太坊的智能合约存在着重大缺陷,区块链业界最大的众筹项目TheDAO(被攻击前拥有1亿美元左右资产)遭到攻击,导致300多万以太币资产被分离出TheDAO 资产池。

2017年7月21日,智能合约编码公司Parity警告1.5版本及之后的钱包软件存在漏洞,据Etherscan.io的数据确认有价值3000万美元的15万以太币被盗。2017年11月8日,以太坊Parity钱包再出现重大bug,多重签名漏洞被黑客利用,导致上亿美元资金被冻结。

以太坊开源软件主要是由社区的极客共同编写的,目前已知存在Solidity漏洞、短地址漏洞、交易顺序依赖、时间戳依赖、可重入攻击等漏洞,在调用合约时漏洞可能被利用,而智能合约部署后难以更新的特性也让漏洞的影响更加广泛持久。

据有关调查统计,以太坊主要漏洞情况描述如下表:

迄今为止,以太坊安全漏洞最全总结及建议

迄今为止,以太坊安全漏洞最全总结及建议

迄今为止,以太坊安全漏洞最全总结及建议  

上述漏洞目前已经广泛存在以太坊网络中,2018年2月24日,新加坡和英国几位研究员指出,3.4万多份以太坊智能合约可能存在容易被攻击的漏洞,导致数百万美元以太币暴露在风险中,其中2365份属于著名项目。

鉴于以太坊其运行时间还不到3年,如上漏洞可能只是其所有漏洞的冰山一角,为保证业务在区块链上安全可靠运行,保护数字资产的安全,采用以太坊做为区块链技术方案时必须对智能合约代码进行充分测试。在构造智能合约时,众享比特技术团队的安全建议如下:

  • 限制在智能合约中存储以太坊的数量。如果智能合约源代码、编译器或者平台有问题,这些资金可能丢失。

  • 尽可能保证智能合约中的功能小而模块化。源码质量一定要得到保证(比如限制局部变量的数量,函数的长度),程序注释尽量完整,以便方便日后的维护和增加代码的可读性。

  • 尽可能减少交易中gas的消耗,如果有必须使用大量计算的地方,尽量将其放到链下去处理。

  • 在智能合约中添加一个函数,执行一些自我检查,如“有没有以太泄漏?”。如果自检失败,智能合约会自动切换到某种“故障安全”模式,例如,禁用大部分功能,将控制交给固定和可信的第三方,或者将智能合约转换成简单的“把我的钱还给我”智能合约。

文章来源:众享比特

90%交易为刷单?okex、火币等在Medium上被爆交易量造假

90%交易为刷单?okex、火币等在Medium上被爆交易量造假

翻译:区块律动
原文作者:Sylvain ‘ArtPlay’ Ribes
原文地址:https://medium.com/@sylvainartplayribes/chasing-fake-volume-a-crypto-plague-ea1a3c1e0b5e

从众心理让投资者选择在人多、交易量大的交易所进行虚拟货币的买卖。为了让虚拟货币交易所有人气,交易所会采取多种手段来激励用户进行交易,比如免除手续费、交易排名获奖等,能在一定程度上提高交易量,使交易所在交易所排行榜上名次靠前。不过,当平台刷量也计算在里面的话,那这个交易所的真实程度就有待考证了。

上周六,一位名叫 Sylvian 的国外作者在 Medium 上发布文章,他通过公开数据分析得出结论,他认为目前全球交易量第一的 OKEX 交易所存在交易量造假的行为,「93% 的交易额为虚假交易」。除了 OKEX 之外,文章还通过数据分析指出「中国的虚拟货币交易所」火币、币安、Lbank 等都存在成交量造假行为,假交易额的数量占比 70-90%。

很快,包括李笑来在内的一些行业人士和投资者也纷纷在下面留言点赞。抛开圈内大 V 不谈,OKEX 等交易所是否数据造假?让我们通过作者对多家交易所数据的分析来一探究竟。截至发稿,原文的点赞量已经达到了 4.5K,预估阅读量为 9-10 万。

虚假交易量:揭示区块链圈子里一个惊天的骗局

在本文中,我(区块律动注:原文作者)将揭示一个惊天的骗局:价值总计超过 30 亿美金加密货币的成交量完全是虚假编造出来的!并且,按交易量排名第一的 OKEX,它上面高达 93% 的交易量压根是不存在的。本文就是通过对网络上公开数据的分析,还你一个真相。

其实从我一开始做数据分析这件事,我没想到得出如此惊人的结论。一开始,我只是想着采集数据,了解「加密资产」在网上的流动性如何。

我的分析方式是从市面上各大交易所那里收集订单,然后评估如果现在出售任意价值 5 万美金的「加密货币」,它的价格能下滑多少,即下单价格和真正成交价不一致的这个差额。,我们将其称之为「滑点」(slippage)。

在每一个交易所,我会根据它们处理不同的交易量,以及具体「加密货币」现在的市值,来在「加密货币」出售量上做或多或少的调整。

在没做这个实验之前,我的想法是这样的:当交易量越大,「滑点」程度也就越小。总的趋势是这样固然没错,但是不同的交易所,情况还会出现些许的不同。毕竟,如果你在「两种币的兑价」上面出现了巨额的成交量,那么两个市场的提供者之间将会出现竞争,来满足活跃的买家和卖家。这样竞争势必会让某些交易所的交易更加密集一些,而另外一个交易所的交易稍显寡淡一些。对吧?

那么我做出来的试验结果是什么呢?确实总体的趋势跟之前说的一致,这没错。但是在之前的估计里,两个交易所之间所呈现的微小区别,在现实层面却出现了惊人的落差。这种差别可不是什么你摆摆手就能够糊弄过去的事儿,比如你会说:「哎呀,每个交易所的用户都有各自的交易习惯啦。」之类的。不,某些数据已经夸张了 95% 的程度,绝不是刚才那种行为习惯不同的理由就能够搪塞过去的。

这里面涉及很多非常知名的交易所,这有可能会颠覆各位对区块链世界原本的认知。在这么多造假的交易所中,最严重的就是 OKEX。它目前在 CoinMarketCap 和 LiveCoinWatch 两家网站上,以总计 17 亿美金的成交量,高居榜首位置。

OKEX 现在已经是一个鬼镇

在一个完全没有监管的市场里,人为搞点作假行为,或者内部左手倒右手,其实这都是可以估计得到的。我所没想到的是它作假夸张到了如此的地步。看看下面的这张图表吧!

(区块律动图注:X轴为交易量,单位百万美元;Y轴为滑点,单位%)

我采取的:四家日交易量上 10 万美金的交易所:OKEX, Kraken, Bitfinex 以及 GDAX,在 24 小时内的成交情况。

然后选定了一些「加密货币」,它们两两之间的兑换价格平均下滑程度,以及它们之间交易量在图表上呈现出来的关系。

橘色的点代表:GDax。

深蓝色的点代表:Bitfinex。

淡蓝色的点代表:Kraken。

红色的点代表:OKEX。

你也许注意到了,在右下方的橘色点,代表着 GDAX 的兑换价格,成交量接近 2 亿美金,价格下滑程度小于 0.1%。

之所以说这张图表吓人是因为:你看前面三家交易所的数据,其实大体上是相似的,但是 OKEX 两两货币之间的兑换比率,与它们的交易量相比,「滑点」程度更高。正如我之前所说的那样:只有一个解释,OKEX 之前所声称的交易量完全是杜撰出来的。

另外,为了让问题暴露的更加明显,我在数据中,将所有价格变动下滑超过 4% 的组合进行了剔除,重新将之前未被计入的数据引入进来,从而形成了 OKEX 新的流量图,更加的荒谬可笑了!我调取了对数函数模型:

(区块律动图注:X 轴为交易量,单位百万美元;Y 轴为滑点,单位 %)

很多兑换组合,尽管 OKEX 声称交易量高达 500 万美金,如果你现在想要出售价值仅为 5 万美金的数字资产,都会让你的价格下滑超过 10%!这些组合包括了:NEO/BTC, IOTA/USD, QTUM/USD。

尽管上面的这些数据明明白白的告诉我:OKEX 上的绝大部分交易量都是伪造出来的,但是毕竟我没有亲眼见到他们是如何完成这件事的。于是,我登录到了它的平台上,查看某些货币兑换组合的交易历史记录。然后我就又笑了,他们在伪造交易量上的方式愚蠢的可笑。

看上面这个交易量的波峰、波谷、振幅如此稳定、一致,堪称完美的正弦曲线图,将它跟下面一家交易所上发生的真实交易量进行一下对比,你就知道上面的那个有多假了。

有些人就说了:“这就是来自中国的资本出逃和洗钱!” 听到这话我就又笑了。还有比搞出这么一个完美的交易曲线更假的手段吗?

那它注水造假的程度有多严重呢?

现在得出的结论是:OKEX 的交易量确实有水份,但是有多少水份?是 90%?95%?还是 99%?我是用下面的方式得到结论的:

找一些信得过的交易所,它们在交易上呈现的趋势是大体相同的:

将这些交易所的数据进行合并,并进行回归演算,这样就能从现在已观察到的价格下滑程度上,推算出当时某两个货币之间的交易量。

然后呢,将上面这个推断后的交易量,跟 OKEX 所对外声称的交易量进行对比:

我所采取的数据来自于下面的这几家交易所:Bitfinex、GDAX、Poloniex、Bistamp、Gemini 以及 Kraken。鉴于在较低成交量上,数据会出现较高的敏感性,所以我决定不抛售 5 万美金了,我选择出售 2 万美金。

请看上面的图,只要「滑点」超过了 0.7%,那么整个曲线就陡然上升。从整个图上推断,唯一合理的交易量估计不到 100 万美金。

然后,把 OKEX 的数据投放到上面的图表上,然后你就会发现有一些东西明显的不对劲儿了。

根据上图显示,对外声称的交易量跟真实发生的交易量之间的差别,高达 93.6%!

在成交量超过 10万 美金的 28 个兑换组合中,只有 11 组的下滑比率在 0.7% 以下,它们分别是:(见下表)

兑换组合/对外声称的交易量/价格下滑程度/重新估算出了的交易量/作假程度

根据上面的估算,整体作假率高达了 93.6%。

火币,紧随其后的作假者:

在中国政府出面打击线上交易所之后,火币网关停了。然后在 Huobi.pro 下,又开门营业。还是同样的办法,下面是我想给大家展示的结果:

81.8% 的作假程度!虽然不像上面的那样无耻,不过这个数字也很高了!

快速浏览一下火币的交易历史就能很容易确认其中问题,虽然火币的交易量看起来比OKEX的更煞有其事,但是仍然能够看出其中存在一个持续且低调的人为操纵手法。

中国刷单军团入场

无论你是否已经察觉,CoinMarketCap在最近列出了大量来自中国的交易所,它们都有着很高的交易量,然而不知为何从来没有人听说过它们。它们当中的大多数显然享有相同的用户界面与交易引擎。

这些来自中国的交易所的名称往往是这样的:Lbank、Exx、RightBTC、CoinEgg、Zb、BitZ、Bibox、CoinEx以及BTC-Alpha。这还仅仅是我列出的一部分,事实远不止于此。

这些平台如此公然地伪造交易量,其直白程度都不值得我再用数据来给你们演示一遍,你只要自己去看一眼全明白了。CoinMarketCap与LiveCoinWatch这样的加密货币分析网站将这些来自中国的骗子交易所与那些挣扎求生的合法交易所列在一起,对后者而言完全是奇耻大辱。

HitBTC与币安(Binance)

出于种种原因,我怀疑两位加密货币行业的TOP交易所HitBTC与Binance(币安)也有虚假交易的操作。下图就是这两者的交易量与其他可信的交易所交易量大相径庭地对比:

从图中很容易看出,在既定的交易量条件下,上述两家交易所,尤其是币安代表的橘黄色点显示出了明显的流动性缺乏,像这样的数据是很可疑的。

我们对HitBTC与Binance也进行了上文中对OKEX与火币一样的分析,得出了一些结果。首先来看看HitBTC:

这些数字也不是完全有意义的。虽然它们证明了HitBTC的流动性确实相比参考交易所来说稍弱,在其声称的交易量与我们估算的交易量之间虽然存在细微差别,但这些差别可能源于多种原因,也可能在估算值与现实交易量之间确实存在方差。

然而币安的结果就值得玩味了:

币安的交易量与我们通过数学推算出来的交易量之间存在高达70%的差别,这不得不令人担忧。不过要记住,这些数字仅仅反映出来的是在我们输入模型当中计算的那些交易对的下滑程度,并不能完全反映出所有的内生交易量情况。

事实上,从我在币安上交易的亲身经历可知,当涉及到API交易时,币安有着相当严格的政策。我曾花了一些时间与其争论为何我认为这些针对API交易的规则是十分愚蠢的,因为这些限制政策只会妨碍它们的交易量增长与流动性。

确实,因为这些限制性的交易规则,很有可能许多投资者在其他交易所采用的市场交易策略完全不能搬到币安来套用,由于不清楚不能跨越的实际界限到底何在,这些投资者在币安可能会经常被禁止交易。

由于在币安平台上专业的做市商更少,所以很容易就能看到交易订单量也变得更少,我们所引用的分析模型针对这种情况可能就不完全适用。不过这也提醒了我们在未来要密切关注币安声称的交易量,尽管目前审视他们的交易量历史还没有发现任何明显的可疑造假行为。

一些忠告

  • 虽然我对于自己上述的主张几乎毫无疑问,但是理解这些数据不应该仅仅只停留在其表面,原因如下:
  • 就像我所提到的币安针对API交易的限制那样,我们很容易就能看到在既定的交易条件下,更好的API策略可以改善流动性。
  • 交易费也至关重要。更高的交易手续费意味着做市商没有动力去给出更高的出价,从而收益差也减少了。
  • 我只收集了交易所24小时的平均样本,而且没有费心去控制方差。我不是搞这方面学术研究的,也不是统计大牛,但是看上去我计算的结果应该是没有什么问题的,欢迎与我争论。
  • 这些仅仅是交易量的冰山一角,还有隐藏订单没有覆盖到。一些被我拿来分析的数字货币交易所可能会提供给用户限价委托订单隐藏功能。不过考虑到Bitfinex也提供了隐藏限价委托订单的功能,而且它与我拿来计算分析的“参考交易所”其他部分都非常一致,我相信在大多数情况下不考虑隐藏订单对于我们所观察到的流动性的影响也是没问题的。
  • 不同的交易所拥有着不同的客户群体,其中可能存在交易行为差异,虽然从我个人的交易经验来看,这种影响微乎其微。

为什么你该关心这件事?

有人可能会说,“既然加密货币本来就不是一个受到监管的市场,这甚至都不能说是非法行为,为什么他们不能想做啥就做啥呢?”,这种想法就是错的。正是因为这个市场不受监管,市场参与者就更应该承担责任。通过传播让人们对于这种骗局有所意识,抵制支持这种做法的交易所,是我们力所能及的最起码的事情。

还有一些人可能会说,“他们又没有伤害到任何人”,这种想法依然是错的。首先,通过夸大交易量,他们就是以一种通过欺骗那些轻信的投资者的方式来巩固地位。更重要的是,即使你既不容易受骗,也不是一个风险投资者,要知道他们这种伪造交易量的行为确实会对加密货币的估值产生影响。莱特币与比特币有高达75%的交易量在上述涉嫌造假的一个或多个交易所中完成,单单是在OKEX这一家的交易量就占了这两种加密货币总量的30%以上。

通过展示这些人为的虚高交易量,对交易者来说这些加密货币看上去更有吸引力了,因为它们似乎获得了比实际更多的关注(交易量是抵御波动性风险的一剂良方)。而且通过持续的进行虚假冲销交易,可能会使人们普遍性地高估加密货币的价值。

这些不道德的交易所相比那些拥有更多实际成交量与流动性的有道德的交易所能够吸引到更多客户,并且它们还允许客户更快速地交易,对于滑点也不用付出什么代价。

最后,即使不严格地讨论交易所这种伪造交易量的做法是否违法,从事虚假冲销交易也可能预示着该平台在未来可能会有不良行为,应该鼓励用户更加谨慎地使用该平台。

结论

据我估计,每天有超过30亿美元的交易量是不存在的,实际数值可能更多。不管怎么说,这种不值得鼓励的虚假操作至少已经被那些广受欢迎的数据分析平台及其大多数用户所忽视了,真的已经到了有人站出来去揭示到底哪里出了问题的时候了。

经历了2017年的大牛市之后,加密货币市场目前正处于戏剧性的熊市之中。我相信,在我们建立起足够健全的交易环境之前,市场都暂且不能恢复生机。当我们允许这种公然的人为操纵在眼皮底下发生时,该市场的系统生态就已经被打破了。

“加密货币不需要监管!”,我们都是如此主张的,现在是时候去做些什么证明这一点了。如果放任加密货币市场被人为操纵,那么可以说加密货币本身就是自由市场失败的证明了。

Klimenko: Russia is ready to be disconnected from the global Internet

Klimenko: Russia is ready to be disconnected from the global Internet

Advisor to the President of the Russian Federation on issues related to the Internet, Herman Klimenko in interview to the program «Pozdnyakov», published on the website of the TV channel NTV, said that Russia is technically ready to be disconnected from the global Internet, although the process will not be painless.

Internet regulation – the way in which the whole world, and Russia is no exception, says Klimenko. However, the extreme variations like the North Korean or Cuban is not our choice, he said in an interview with NTV.

The publication contained the following statement Klimenko: «When they say: «And will we have a Chinese Internet?» – I honestly say: no. So the man sighs in relief. I say: because we have no Chinese. You know, any law is inconsistent with the population, right? That is always superimposed mentality, always imposed some of his features. It is the whole structure… So we will have our own Internet, it will be with its some… just like in America, and in Europe its Just… there are things for them unimaginable. That is, it’s like… I don’t know, we can blame the Australian aborigines for the manufacture of boomerangs from valuable breeds of a tree. But for them it is not real wood. For them it is a way of life.»

«Technically we are ready for any action now crashes always when switching from one technology to another. There is a good claim that any system is characterized by error and failure, and reaction to mistakes and failures… If tomorrow our colleagues will disconnect us from the switch, I don’t know if it’s painless, I promise that painless. I am sure that will not be painless. Somewhere someone’s something off. Probably, it turns out that someone stored their data abroad, although there is a decision to store here. Someone domains your hostel abroad. So they’re probably going to experience some difficulties. But on its own hardware and software and there are no contraindications that we live good and normal, even if we declare such a war as the Crimean isolation,» – said Klimenko.

«All the officials, all state institutions are so great «Chinese firewall». What all of us afraid. But all of them are alive,» – said the presidential adviser.

文章来源:http://en.israel-today.ru/klimenko-russia-is-ready-to-be-disconnected-from-the-global-internet.html

从《协议、控制和网络》(完整版)反思区块链

从《协议、控制和网络》(完整版)反思区块链

译者推荐原因:

    翻译本文有助于读者从源头重新审视网络协议从而反思当前形形色色的区块链共识机制,从网路控制即政治控制的视角以及DNA计算机的思路重新审视并反思区块链社区的“自组织”治理,重新沉下心来区别理解中心化、去中心化和分布式三者我中有你、你中有我的现实。进而,有助于反思区块链的适用价值以及自身今后的实践方向,毕竟,革命不是请客吃饭,而是先让自己思想解放?

    下一期以千千世界开源游戏的协议为例解读。


Protocol, Control, and Networks
Author(s): Alexander Galloway and Eugene Thacker Source: Grey Room, No. 17 (Fall, 2004), pp. 6-29 Published by: The MIT Press
Stable URL: http://www.jstor.org/stable/20442659 


协议、控制和网络

 

作者:AlexanderGalloway and Eugene Thacker

译者:何 聪

 

    近十多年来,网络话语体系以一种流行强度激增:点对点文件共享网络,无线社区网络,恐怖网络,生物战传染网络,政治集群和群体效应,经济金融网络,大型多人在线角色扮演游戏,个人局域网,网格计算,“生成文本”等等。网络话语体系的结构常常与参与者所看到的道德和上层建筑的层级以及垂直结构呈逆向关系,这些结构具有控制事物的技术功能,比如官僚主义、指挥链等等。“我们厌倦了树状结构,”Deleuze and Guattari写道。但是,即使超越了技术和哲学视域,网络的概念也影响了当代生活的广阔领域。正如兰德公司研究人员John Arquilla和David Ronfeldt所指出的,即使像美国军方这样的垂直金字塔层级结构的堡垒,也正在根据网络架构重新定义其内部结构。他们对“网络战”的概念是用拓扑术语来定义的:“层级结构很难对抗网络结构……需要用网络来对抗网络……谁最先掌握了网络,谁就会赢得主要优势。”简而言之,当前的全球危机是中心化垂直权力和分布式横向网络之间的不对称危机。传统思维会误导我们认为,一切危机都可以纳入一系列友好安全的沟通予以解决。但它没有告诉我们这意味着什么,或者如何起草对网络的批评。这股“网络热”有一个狂热趋势,因为我们在目前的文献中发现,忽略政治并把它放进技术黑箱中是普遍意愿。那么,接下来所需要的是在非人的机械实践的微观技术层面上对网络进行分析,而不是在宽泛的政治理论层面上。为此,我们认为在政治控制下思考作为技术的网络最有益的原则是——协议,这是一个源于计算机科学的词,对生命科学来说也是如此。网络中的行动可以由人直接引导,但有时也会偶然受到非人因素的影响,比如计算机病毒或新兴传染病。通常,滥用或利用协议,无论是有意还是无意,都可以确定网络中的政治裂痕。我们认为这个时候,虽然出现这种情况的政治原因模糊不清,但却是一种重要的具有政治色彩的“反协议”实践。正如我们将看到的,协议控制使得广泛分布的机构以复杂的方式运作从而产生了特定矛盾,进而更加关注严格的管理和控制形式。

 

算法文化的政治学

 

我们打算在这里探讨的问题是,什么样的原则将政治组织或政治控制与网络绑定在一起?像迈克尔·哈特(Michael Hardt)和安东尼·奈格里(Antonio Negri)这样的作家已经在社会政治领域帮助解答了这个问题。他们把全球政治组织原则描述为一种“帝国”。就像网络一样,帝国不能分解为任何单一的国家政权,也不能遵循一种金字塔层级结构。帝国是流动的、灵活的、动态的和广阔的。从这个意义上说,帝国的概念帮助我们开始思考网络中的政治组织。但是,尽管由于哈特和奈格里对政治哲学的贡献而有所启发,但我们更关心的是,还没有人能够在比特和原子的层面来充分回答这个问题。

那么,什么是“协议”?协议往往盛产于技术文化中。它是同时指导计算机网络、生物系统和其他媒介中技术性和政治性结构的一套综合控制机制。简而言之,协议就是在网络中治理各种关系的所有达成共识的规则和标准。这些关系通常以两台或多台计算机之间的通信形式出现,但“网络内部的关系”也可以指纯粹的生物过程,比如基因表达的系统性现象。因此,我们想通过“网络”来指代任何有互动关系的系统,无论是生物的还是信息的,有机的还是无机的,技术的还是自然的,终极目标都是消除他们彼此之间的限制性。

多年来,在计算机网络科学中,专业人员已经起草了许多用于管理电子邮件、网页等的协议,以及许多人们肉眼看不到的其他技术标准。计算机网络的第一个协议“主机软件”是由史蒂夫·克罗克(Steve Crocker)于1969年编写的。如果网络是连接人的结构,那么协议就是确保连接有效运行的规则。因特网用户通常使用HTTP、FTP和TCP/IP等协议,即使他们对此类技术标准的功能知之甚少。同样,分子生物技术研究经常利用协议将生物生命作为一种网络现象进行设计,如基因表达网络、代谢网络或细胞信号转导路径。在这样的情况下,生物和信息变得越来越沉浸在混合系统从而有了超越生物的属性:专有基因组数据库,用于医疗诊断的DNA芯片,以及为生物战进行实时检测的系统。协议是双重的;它既是促进网络的一种工具,又是一种逻辑,控制着设备内部的操作方式。虽然它的主要模式是信息网络(如互联网),这里我们将展示协议如何也有助于组织生物网络(如生物路径)。

最近的一本计算机科学手册描述了因特网上协议的实现:

该网络是由一系列智能终端系统组成而进行自决的,每个终端系统都可以与它选择的任意主机进行通信。尤其是因特网,由大量可以彼此自由通信的自治主机组成,而不是一个由中央权威控制的通信系统(如在许多私人网络中发现的)……IP(因特网协议)用一种无政府主义和高度分布的模型,使得全球因特网上的每一个设备对于任何一个其他设备来说都是彼此平等的一个节点。

这段话听起来更像是哲学而不是专门在讲科学。今天的网络科学话题往往让人联想到无政府主义,比如用根茎式、分布式和反权威来解释各种系统的互动关系。从成千上万白皮书、备忘录和手册中的这些有时显得激进的预测和大量的技术话语,我们可以得到一些我们这里所讨论的“协议”的设计应具备的基本属性:

·  协议以自治的方式促进相互连接实体之间的关系;

·  协议的优点包括稳定性、容灾性、互操作性、灵活性和异质性;

·  协议的目标是兼容一切,无论何种来源或目的地,无论何种原始定义或身份;

· 协议是通用的,它总是通过谈判达成(这意味着在未来的协议可以将不同);

·  协议是一种在网络中确保组织和控制的系统。

    以上每一个特征足以从前述的社会和技术组织模型(如等级制度和官僚制度)中区分出“协议”。它们共同构成了一套新的、复杂的分布式控制系统。作为一项技术,协议被广泛实践,因此不能简单地还原到机构、政府或公司权力领域。在最广泛的意义上,协议是一种技术,调节流量,管理网络空间,编码各种关系,并且连接各种生命形态。

网络总是同时在某处运行若干个协议。从这个意义上说,网络总是有点精神分裂,在一个地方做一件事,而在另一个地方做相反的事情。但是,协议无法描述涵盖一个无所不包的权力网络,因为网络不止一个,而是许多个,每一个协议都与军事、电信和科技产业的基础设施历史有着特定的关系。因此,协议不单独授权可能会让协议具有某种目的的人类主体(黑客流行文化的故事),而是采用混合了人类和非人类因素的多种个性化模式。但是,在协议的基本结构中包含对立因素并不只是为了多元化。对协议的控制促使我们在一个新的框架下反思批判性的和政治性的行为,这个框架下具有亚稳定网络中的多重代理节点和个性化节点。这意味着协议无关权力(约束性,纪律性,规范性),而更关乎控制(调节性、分布性、灵活性)。

 

控制社会的图论

 

    强调“控制”是德勒兹后期作品的一个重要部分。在《社会控制后记》中,一篇写于1990年的幽默短文,德勒兹定义了历史上两种不同的社会形态:第一,从主权国家统治中诞生了当代“规制社会”,可以影响到“无所不包的广阔领域”,米歇尔·福柯用这个概念很好地描述了社会构件和身体模型;第二,德勒兹称之为“控制社会”,这是在二十世纪后期基于协议、调制逻辑、超速控制自由流动发展而来的。规制的社会具有更多的物理结构特征,比如签名和文件;控制的社会具有更多非物质特征,比如密码和计算机。这些控制社会的特征可以在遗传科学和计算机网络中找到,但也表现在许多传统的网络形态中:

    控制不是规制。例如,在维修高速公路时,你不必把人们全封闭起来,而是增加控制手段,这不是高速公路独有的办法,但人们可以无限而自由地驾驶,而不被完全规制,同时仍然被很好控制。这是我们的未来。

    无论是政治路线图、病理路径、信息高速公路还是普通的老公路,德勒兹定义的“控制”是理解所有类型网络如何运行的关键。

    但是在网络背后也存在着一个完整的科学,一般被称为图论,我们在此想简单概述一下。从数学上来说,“图”是由有限边集连接起来的有限顶集。这些点被称为“节点”(nodes)或顶点,这些线被称为“边”。为了方便起见,我们将使用“G”来指一个图,“n”指图中的节点,“e”指的是它的边。因此,一个具有四个节点的简单图(例如,正方形)可以表示为

    N= { N1、N2、N3、N4 }

    和它的边

    E= {(N1,N2),(N2、N3),(N3、N4),(N4,N1)}。

    在图中,节点的数目称为“阶”(在正方形示例中,|N|=4),而边的数目称为“边数”(|E|=4)。这是一个标准连接点的情况。给定这个节点和边的基本设置,可以定量分析一系列关系。例如,节点的“度”是连接到它的边的数量。当一个图中有一个或多个节点(顶)有许多条边与其相连,就会形成“中心化”或“去中心化”的图,图中的一个或多个节点有许多边与其相连(假定一个更低的阶和更高的边数)。同样地,当图中的所有节点具有大致相同的度(假定大致相等的阶和边数的关系[阶=边数])时,就会形成一个“分布式”的图。

     我们可以用图的阶和边数之间的关系来推知什么吗?一个图论的基本定理是这样说的,对任意一个图G,所有节点的总“度”数等于边数的两倍。也就是说,如果任何一个节点的度是与它的连接的边数(节点N1有两边与其相连,则N1的度= 2),图中所有节点的度的和是图的边数的两倍。换句话说,一个网络不是简单地由一定数量的相互连接的元素组成,而是由节点间的连通性所构成并描述的。你是如何连接的,你就有什么类型的连接。对于一个正方形,节点度数的总和是8(每个节点[正方形的角]各有两个边[正方形的线]与之相连),而边的和是4。在IT领域,连通性纯粹是一种定量度量(带宽、并发数、下载容量)。然而,德勒兹和瓜塔里在其他层面描述了网络形态,比如根茎是包含节点的边(而不是相反),甚至自相矛盾的是,边没有节点。在图论中,我们看到一个图或网络的连通性与仅仅计算边数的值是重要的不同。图不仅具有节点之间的边,还有包含节点的边。

 

因此,从图论的角度看,网络显示出三个基本特征:由节点和边(点和线)组成、连通性、拓扑结构。同一套原则可能导致一个中心化的、严格的组织网络,也可以是一个分布式的、高度灵活的网络。制度、经济和互联网技术的发展是一个显而易见的例子。当分组交换技术在美国国防部ARPANET(高级研究计划局域网)表面上仅作为军事研究和安全的目标实现的时候,网络已经发展成为一个很大的商业网络。保罗·巴拉,分组交换技术的共同发明人,采用图论中的基本原理来说明,给出同样数量的节点和一组不同数量的边,可以得到三个不同的网络拓扑结构。相同的节点,不同的边,不同的网络。中心化、去中心化、分布式的网络今天已经随处可见,不仅在计算机和信息技术领域,也存在于社会、政治、经济、特别是生物网络中。

从图论的角度,我们可以暂且将网络描述为多节点多边各种组合的可变关系集。我们认为,网络形态千变万化,但常见的网络类型包括中心化的(金字塔、层级方案),去中心化的(一个主枢纽或“骨干”辐射周边),以及分布式的(没有中心或骨干的点对点的关系)。理论上,网络可以由几乎任何东西组成,电脑(互联网)、汽车(高速公路)、人(社区)、动物(食物链),股票(资本市场)、宣言(机构)、文化(离散的犹太人),等等。实际上,许多复杂动态系统和网络科学的研究更强调这种异构现象的一般数学原理。

    然而,我们要强调一点:仅仅图论对于理解网络是不够的,或者更确切地说,它仅仅是一个开始。虽然图论为许多技术网络提供了数学和技术基础(以及分析网络的工具),但图论的假设对他们忽略的东西同样具有启发性。例如,节点和边之间的划分意味着,当节点用来表述物体、位置或空间时,边对应的内涵就是由节点影响而产生的行为。当服务器是主动节点时,动作的执行要归因于被动的边(节点中内含的因果关系)。图或网络就是受离散服务器(节点)影响并形成的关系图(边)。这样,图就优先用来表示空间向量,抽象定量,以及行为者与行为之间清晰的划分。图或网络存在的悖论是,它们的几何基础(或偏见)实际上对网络作为时间中的一组关系集的理解起着反作用。

在我们说“协议的控制”的时候,我们实际在说更深远的东西。网络不仅在其总体拓扑结构上有区别,而且网络总是包含几个共存的、有时是不兼容的拓扑结构。因特网作为“技术性”拓扑结构可以描述为分布式的(比如,基于努特拉模型的p2p文件共享网络)。但这种技术性拓扑结构与其动机、功能和监管是不可分割的,这也使之成为一个社会拓扑结构(文件共享社区)、经济拓扑结构(商品分配),甚至是法律拓扑结构(数字版权)。所有这些网络结构共存,有时相互冲突,就像围绕文件共享的争论已经显现出来。因此,我们不仅要把“网络只是网络”的因素排除出对网络基础(比如动态特性),还要知道网络存在于关系中,关系要与网络的拓扑结构相匹配(无论是中心化的还是去中心化的,技术的还是政治的)。这可以通过分析两个典型例子清晰呈现:计算机网络和生物网络。

 

计算机网络中的协议

 

从技术上来看,计算机网络不过是一种描述了各种协议以及组成这些协议结构的数据的简要模型。这些协议被组织进不同层面。白皮书中经常称之为“网络主机的需求”,用来定义网络中四种基础性的协议组:

1.应用层(比如远程网络、网页);

2.传输层(比如传输控制协议TCP);

3.网络层(比如网络协议IP);

4.链接(或媒介)层(比如以太网)。

这些层级都是嵌套式的,也就是说应用层嵌套在传输层,传输层嵌套在网络层,以此类推。在每一层,优先级较高的协议解析并封装优先级较低的协议。解析和封装都是基于模式:解析(计算校验和、测量大小等等)使得数据通过各种模式,而封装添加特定模式的信息(“头”)到数据对象的初始位置。

报头之后是数据报的其余部分。但这在实践中意味着什么呢?以一般电话交谈为例。在电话通话中有好几种协议。有些是技术性的,有些是社会性的。例如,倾听一个拨号音和拨所需的电话号码,可以认为是在不同的“层”,而不是交谈本身。此外,打开和关闭电话交谈的礼貌用语——“你好”,“嗨,这是……”“好吧,我以后再跟你说,”“好的,再见,”“再见!”——不是正常对话“层”的一部分,而仅仅是建立对话的开始和结束。

互联网也是这样运行的。应用层就像电话的通话层。它负责特定技术的内容检测,例如检查电子邮件或访问网页。应用层是一个语义层,这意味着它负责维护网络传输中数据的内容。应用层不关心更大的问题,例如建立网络连接或在这些连接之间实际发送数据。它只关心它的“通话”可以正确工作。

传输层在层级结构中比应用层更进一步。它不关心信息的内容(比如电子邮件或网页),而是负责确保经过网络的数据正确到达目的地。它是一个社会性的层级,这意味着它介于传递数据的内容或意义以及传递数据的原始行为的中间位置。如果数据在传输过程中丢失,传输层有责任重发丢失的数据。

因此,我们假设的电话交谈中,如果一个人听到电话里很安静,那就可能马上会问:“你好…能听见么?”这句话不是会话层的一部分(除非你的对话碰巧是关于“能听见么”),这是一个偶然性的评论,目的是确认对话仍然通过电话线在进行。开始和结束的寒暄也都是传输层的一部分。他们确认电话已经接通,并为会话层做好了准备,同样对话快结束了也意味着这通电话即将完成。

第三层是互联网层。这一层比应用层和传输层都要大。互联网层关注一件事:数据从一个地方到另一个地方的实际运行。它对那些数据的内容(应用层的责任)或数据的一部分在传输过程中丢失(运输层的责任)不感兴趣。

第四层链路层是特定的硬件层,必须最终封装了数据传输。由于硬件和其他物理介质的诸多差异,链路层的可变性很大。例如,电话通话可以像通过普通电话线一样轻松地通过光纤电缆。然而,在每一种情况下,所涉及的技术都是完全不同的。这些特定技术的协议是链路(或媒体访问)层关注的问题。

不同协议层的不同职责确保了因特网有效地工作。例如,传输层和网络层的分工——纠错是传输层唯一的责任,路由(数据经由路由或直接发送到目的地的过程)是网络层唯一的责任——是分布式网络创建存在的条件。

因此,如果一条信息要从纽约传到西雅图,经过芝加哥的时候路由坏了,丢失的数据可以重新通过路易斯维尔发送(或是多伦多、堪萨斯、兰辛或无数其它节点),无论这个替代节点是否更小或更大,是否在一个不同的子网,是否在另一个国家,是否使用不同的操作系统。

专业的RFC请求评议文档中非常清晰地描述了这种灵活性的特征:

互联网设计的一个基本目标是容忍广泛的网络属性,比如带宽、延迟、数据包丢失、数据包重新排序和最大包大小。另一个目标是稳健抵御单个网络或网关的阻滞,以及不同主机使用的不同带宽,并在这些情况下仍然可用。最后一个目标是充分的“开放系统互连”:互联网主机之间在不同的网络路径上,必须能够稳健有效进行交互操。

只要网络上的主机符合通用网络协议——就像计算机的通用语言,接下来运输层和网络层会协调地完成好所有工作。

互联网协议的最终目标是总体性。因特网协议的优点是稳健性、容灾性、互操作性、灵活性、异质性、多样性。接受一切,无论来源、发送者或目的地。

 

生物网络中的协议

 

在计算机网络的例子里,“协议”既是一个技术术语,如我们所指出的,一般也是一种描述信息网络中“控制”的方式。什么是生物网络中的“协议”?虽然分子生物学、遗传学和生物技术领域不使用“协议”这个技术术语,但它们在几个层次上都应用了协议。结合信息学认知中关于标准化网络关系的描述,回顾我们在本文中阐述的“协议”概念。而生物技术是一个令人难以置信的多样化的产业,它被认为是基于一套通用的知识,包括细胞生物学、生物化学和分子遗传学。对于生物技术来说,可能没有比“信息”这个概念更加核心的了。正如科学史学家所指出的,战后一段时期,遗传和分子的信息视角概念源于控制论和生物学之间的跨学科交流。在人类基因组计划、基因药物、基因专利、生物恐怖主义这些概念中,遗传“密码”(code)对于理解分子水平下的“生命”依然是概念核心。

我们认为生物网络的协议可以从基因组和细胞中的生物调节与控制模式开始。这些协议有三种类型:基因表达(基因网络如何开关以产生蛋白质),细胞代谢(酶和细胞器成分如何把“食物”中的分子转化成能量),和膜信号(分子进出细胞膜的分子密码)。在每一类实例中,分子(节点)间相互作用(DNA互补、酶催化、分子结合)可以理解为构建网络关系,如DNA转录为RNA,糖分子转化为可用能量,被病毒或细菌感染。在每一种类型的协议中,我们都看到网络中的生物成分的相互作用,由“遗传密码”驱动,并被“生化信息”所介导。

毫无疑问,纵观生物学历史,生物进程中的工具性(instrumentality)是一个显著标志。我们可以在现实中长期见证生物网络,最近的例子如炭疽生物恐怖行为、严重急性呼吸系统综合症(SARS)疫情、世界知识产权法律和立法。但是,只有当我们在非医疗性的工具性背景下去观察生物技术,生物网络的协议才变得最明显。一个例子就是DNA计算这个新兴领域,或叫“生物计算”。DNA计算还很早期,尽管还没有找到自己的“杀手级应用”,但它已被用于一系列场景——网络路由的安全和加密、生物战剂手持式检测的导航问题。DNA计算是遗传科学向网络范式的更广泛转变的典范。

DNA计算技术是上世纪90年代中期莱纳德·阿德尔曼(译者注:RSA公钥加密算法创始三人中的“A”)在计算机科学中提出的一个概念验证试验。这个概念认为,DNA固有的组合可能性(而不是一个集合,而是两个并行二进制成对集合:A-T,C-G)可以用来解决特定类型的计算问题。一个著名的例子就是所谓的旅行推销员问题(更正式地称为“定向哈密尔顿路径问题”):你是一个推销员,你必须经过五个城市,每个城市你只能访问一次,而且不能走回头路。访问这五个城市最有效的路径是什么?在数学术语中,这些类型的计算被称为“NP完全”(译者注:Non-Deterministic Polynomial,非确定多项式)问题,或“非线性多项式”问题,随着变量数量的增加,涉及到的搜索域指数级增大(五个城市,每个城市有五种可能的路线)。对于硅基计算机来说,计算此类问题的所有可能性是计算上的负担。然而,对一个像DNA这样的分子来说,可以很好理解“碱基配对互补”原则(A总是与T,C总是与G),使其类似并行处理计算机,但它不是通过微电路,而是通过单链DNA的酶退火功能。你可以为每一个城市在任何一段单链DNA上进行标志(使用基因标记或荧光染料),使副本足够多以至于包含了所有的可能性(用聚合酶链反应热循环仪,一种DNA施乐复印机),然后组合。DNA会把所有的城市组合成许多线性序列,而且很可能,其中一个序列将代表你需要的“旅行推销员”问题最有效的解决方案。

作为一种“控制”的协议模式,生物计算把网络编码进入分子生物层面。网络中的节点就是DNA片段(编码为特定节点A,B,C,D,等等),边就是互补DNA片段碱基对绑定的过程(编码为重叠的A-B,B-C、C-D,等等)。实验产生的网络实际上是一组复数的网络,DNA计算机生成了大量的网络,每一个网络提供了一种可能的哈密尔顿路径。因此,网络就是一系列的DNA链的组合与重组。这种编码意味着在相关区域的重新编码和解码,从一个物质性底层网络(像素、纸、墨)转移到另一个性质不同的亚底层(DNA,G-蛋白偶联受体,克雷布斯循环)。细胞计算的前景是在这方面是最有趣的,因为它作为一门学科已经通过图示逻辑工作(生物化学与细胞代谢的研究),可以把一个网络编码为另一个网络(哈密尔顿路径上克雷布斯循环)。

生物计算,特别是DNA计算的例子,证明了生物分子、分子键和退火/变性过程这些微观层面的控制协议。DNA计算展示了如何不依赖于任何一个解决问题的“中介”从而解决问题的过程,这种问题的解决方案(数学和生物化学)基于一个分布式调控的环境。解决方案不是数学暴力运算,而是一个开放的、灵活的所有可能性的阵列。这是它成为协议的方式。NP完全问题的指数搜索域为DNA提供了一个以高度分布的方式进行碱基对互补的环境。这意味着DNA计算有助于在碱基对的节点之间形成点对点的关系集,无论是绑定还是不绑定的时候。从这个角度来说,DNA计算不需要直接的中心化的控制来执行计算。DNA计算机所需要的只是一个合适的环境和一个定义了搜索域的问题集(如哈密尔顿路径)。记得我们在讨论美国国防部的“阿帕网”时关注的一个主要问题就是,要足够稳健以避免一个或多个节点的失效所带来的冲击。阿德尔曼的哈密尔顿路径问题可以很容易地被视为一个容灾问题:通过给定一组节点集求解一个目标路径,如果一个节点是从这个节点集中删除,可能的替代路径有哪些?(译者注:即求局部最优解)

然而,这种分布式特征决不意味着不受控制。相反,在协议的特定环境中,DNA计算确定了网络活动(在一个很大的搜索域中对数学问题的计算)里可能出现的“项”(terms)。DNA计算是一种特殊的“生物”,因为只有某些特定的生物过程被隔离开来解决问题。这些基础的生物协议,基础的分子生物学的原则(基因表达、代谢、信号),形成了更为常见的传染病、器官组织捐献移植网络、生物专利体系以及生物战和生物恐怖主义的流行病学策略的生物网络基础。

 

编码生活

 

我们已经讨论了两个网络——一个计算机网络和一个生物网络——两者都是高度分布式的,强大的,灵活的和动态的。然而前者是硅基的,可以利用生物学的概念(智能代理、人工生命、遗传算法),后者是完全生物的,而且可以将自身在计算层面重新编码(生物本身就是计算,而不是进化为计算)。两种“计算机”,两种网络,两种协议?是不是这样?我们可以从理解DNA计算得知,协议控制可以是计算的也可以是生物的。在DNA计算的例子中,什么是协议?一方面,实验的目的是数学和计算,而另一方面,实现这一目标的介质是生物和生物化学。所以计算协议可能控制着DNA计算的信息组件的内部工作机制,也控制着内部的干湿之间的相互作用,以及信息和生物之间的相互作用。所以两个指令同时下达。在TCP/IP协议的例子,协议控制几乎完全是数学和计算,软件在硬件机器之外。协议有利于这两类网络的整合与标准化:一个有不同物质材料相互作用的网络(硅—碳),一个不同变量在协议中共同发挥功能的内部网络(DNA作为节点;碱基对的链接作为边)。因此,生物计算的协议可以完成双倍的工作。它实际上就是生物技术,把计算机特定的逻辑和组件整合为分子生物学特定的逻辑和组件。

我们最初就一再强调:协议是分布式控制的一种物质化表现。协议并不是“自上而下”的权力行使,尽管在域名系统中存在着明显的等级组织,在美国专利商标局中存在基因专利的模糊政策,协议也不是数据“自下而上”的无政府主义式的解放,尽管TCP/IP或基因表达的组合可能性类似一种分布式组织。协议和权力之间的关系可能是相反的:网络的分布式性质越大,可供网络进行控制从而作为网络发挥功能的量级就越大。协议回答了控制如何渗透进分布式网络这个复杂的问题。换句话说,协议告诉我们,多样的、非对称的权力关系是互联网网络或基因组网络的绝对本质,而不是它们的羁绊。

在计算机和生物网络中,协议的主要功能是引导信息流。在某种程度上这是不足为奇的,因为这两个领域都根源于第二次世界大战和战后的技术研究。同一个谱系的控制论、信息论和系统论表明,“信息”和信息学的世界观显示了物质世界的矛盾关系。一方面,信息被看作是抽象的、定量的,可简化为微积分进行管理和调控,这是上面提到的无形的、非物质的关于“信息”的概念。另一方面,控制论、信息论和系统论都显示了信息具有内在物质性,可发展成军事技术、通信媒体、甚至生物系统。在控制论的反馈回路,在通信信道,在任何一个系统的有机整体中,我们发现了信息的二元性。既是非物质也是物质化,既抽象也具体,既是行为也是事件。

简言之,我们可以说,德勒兹的控制社会提供了一种媒介,通过它,协议能够表达自己。在这种情况下,“信息”(在这个词所有有争议的含义中)构成了协议实现各种网络的能力。协议总是包含着通过信息来行动的方式。从某种意义上说,信息的概念使得各种各样的网络真正成为网络——计算、生物、经济、政治。信息是理解协议控制的组织逻辑的核心构建。协议的实质就是信息。信息使协议成为协议。

 

走向网络政治本体论

 

尽管图论和网络科学为我们提供了一套分析网络的有效原则,但这些原则也容易混淆一些网络的核心特征:暂时动态性(相比柏格森的“虚拟”网络),边和节点的同等重要性(相比德勒兹和瓜塔里的无节点的边),以及任何网络不止一个拓扑结构的可能性(内格里的“集体奇异性”)。

理想的情况是,我们的网络政治本体论为描述、分析和批判网络现象提供了一套概念。它建基于甚至需要一个给定网络的技术知识,但并不取决于它。它将网络的内在和整体功能视作控制的基本关系存在。最重要的是,这样的政治本体论将考虑到控制社会网络的双面性,同时产生新的支配形式,同时也创造许多新的可能。

第一个原则是个性化的概念。对德勒兹来说,个性化模型与个体的主体性没有什么关系,更多的是随着时间的推移而形成的聚合过程。正如他所说,“控制的数字语言是由代码构成的,这意味着特定信息的访问应该被允许或拒绝。”在现在这个时代,“我们再也不用关心集体和个体的二元性了”。相反,“个人成为个人,集体成为样本、数据、市场或‘银行’。”同样,吉尔伯特·西蒙顿在论及个性化和社会形式之间的关系时写道,我们应该“从个性化进程的视角来理解个体,而不是通过个体化的方法理解个性化的进程。”因此,网络本身也在以建设性的方式实现自身的个性化;因此,尽管整体大于部分的总和,但部分(或部分集群的本地行动)依然组成了个性化网络的可能性。然而,第一个个性化出现的方式可能与第二个发生的方式有很大不同,网络整体的个性化也不同于网络组件的个性化。此外,个性化与网络的识别与网络代理的识别有关。总之,个人和集体之间的政治差异转化为整体和多样性(电脑程序员称之为“结构”的一系列不同的数据类型)。在协议控制的概念中,个性化的问题是离散的节点(代理机构)和他们的边(行动)是如何被确定和管理为节点和边的。在给定的网络中,什么是节点或边?这是否取决于分析的粒度?什么东西对抗个性化或“个体”?什么东西支持个性化或丰富它们?

这就会导出第二个原则:网络是多样性的。它们强健而灵活。尽管网络很容易被看做个性化的,但网络总是“不止一个”。网络是多样性的,不是因为他们由众多部分拼凑起来而是因为他们是有组织的。这不仅意味着网络可以增长(增加节点或边),更重要的是,它意味着网络可以重构,也许这意味着能够进行转换和重构的网络才是真正的网络。正如德勒兹和瓜塔里所指出的,“多样性必须有,通常不是增加一个更高的维度,而是以最简单的方式,通过利用已有的可用维度,一般是n-1.”去中心尤其是分布式网络是动态的,网络的拓扑结构是通过减去中心化的节点或边而创造出来的,形成分布式集聚。多样性的技术性同义词是应急处置,也就是说一个网络内在是如何应对突发性、计划外或局部变化的(这是建立互联网的初心)。正如内格里指出,“一个活跃的社会中会有很多代理,这是多样性在起作用。与人类社会不同,多样性并不是一个统一体,而是发对把群众或平民组织起来。实际上,这是一种自组织性质的代理。”在某种意义上,网络就是为了维持差异化与统一之间的张力。人们不关心部分本身的性质,更关注部分之间彼此相互作用的条件。一个网络是在怎样的条件下如何被多样性的代理机构建立起来的?协议服务提供了条件,协议控制是让条件起作用的手段。

第三结论,运动,强调网络固有的动态特性。虽然我们已经说明了网络是一个整体也是多样性的,但这一点仍然可以描述为一个静态的、快照性质的网络视图。我们所知道的大多数网络都是动态的,经济学的、流行病学的、计算科学的都是动态的。如果有一个网络研究的真理,那就是,只有“活着的”网路才是网络,也就是当他们在做交互、嵌入或渲染操作。这同样适用于网络活动的潜力(睡眠细胞、网络停机、空闲手机),就像网络的实际情况一样。这个情况每天都很明显——交换、分布、积累、解聚、结队这些运动存在于一系列环境中,从集中性城市、跨国经济、比较文化接到移动无线技术。然而,我们绝大多数的需要定位、位置和文字标识的网络节点经常混淆“边”的动态特性。套用亨利·柏格森的话,我们往往倾向于从静态的视角理解网络的动态特性;我们从空间上理解时间。他写道:“有变化,但在变化的背后没有改变的东西,变化就不需要支持。有运动,但没有移动的对象,运动并不意味着移动”。

最后,网络特有的信息查看功能带来了一系列不同于以往的问题,如在运输或模拟通信中的非IT网络。网络流行语作为全球前沿或数字公地,访问是一种商品,传达的信息是:网络政治经济通过连通性进行管理。正如兰德研究人员约翰和大卫的评论指出的,一个旧的政治异议模式倾向于“摧毁系统”,而目前许多基于网络的政治运动对“连接”更感兴趣。

当然,还有许多其他的类似于我们说的理解网络的方式。我们的目标不是简单地用另一种更具政治性和哲学性的观点来取代当前的以科学为中心的观点。相反,我们提出了一种理解控制机制的框架,它建立在网络本身需要变得更加多维。因此,弥合网络技术和政治观点之间的差距的一种方法是,把网络看作是不断地表达自己的个性化、多样性、运动方式的模式以及从最低到最高的连接性的水平。正是由于这个原因,我们把网络视为政治本体,并将其付诸实践,同样,我们试图把这篇文章作为分析网络现实物质实践的基础,因为它同时存在于生物学和信息科学中。

文章来源:https://mp.weixin.qq.com/s/yqoHNzPI68V34KI5B22P5A