Author: sec-lab

“疫苗之王”写入以太坊,真的可以高枕无忧了吗?

“疫苗之王”写入以太坊,真的可以高枕无忧了吗?

6007493,区块链圈的很多同行在 7 月 22 日记住了这一串数字。

这一天凌晨 2 点 49 分,在中国社交软件微信引发刷屏的一篇文章 ——《疫苗之王》被永久写入以太坊区块高度 6007493 之上。疫苗质量是关乎每一个孩子的生死命题,该文着重讲述了疫苗生产药效不达标、相关企业作假的乱象,触目惊心的内容很快得到大规模传播,官方随后对其采取封禁和屏蔽处理。

是以太坊区块链保留了普通民众发声的权利。在这之前,中心化的内容分发平台可能迫于政治和监管压力,采取单方面删帖的粗暴措施,限制相关言论传播的自由。在《疫苗之王》写入以太坊之后,没有任何第三方可以删除这篇文章,它可以在全球范围内流通和被阅读。从技术上来讲,除非买下了全球 51% 的以太币,才有机会篡改已生成的账本数据。

实际上,这已经不是第一次涉及公共事件的内容被“好事者”记录在以太坊上。今年 4 月,北京大学一教师性侵女生案例引发众怒,文章迅速传播后遭遇删帖,同样还是借助于以太坊,当事人将文章保存在区块链上,以对抗相关方面的压力。

也不仅仅是负面消息,今年韩国和朝鲜两个长期敌对的邻邦领导人举行历史性会晤,签署的和平协议内容也被记录在以太坊上,以纪念该事件的重大意义。“历史不容篡改”的口号喊了这么多年,终于得以通过技术实现,今后政体如果试图通过修改宣传口径,歪曲事实的行为要小心了。

本质上,以太坊正在越来越多地被当成 P2P 媒体化应用,人们反抗中心化内容平台,对区块链寄予厚望。但是,政府方面是否真的对这些存储在分布式网络的文章束手无策,还是出于成本和必要性的权衡暂时处于观望态势,也就是说,现在的公链安全性已经完全经得起考验吗?

作为专注于区块链安全领域的垂直团队,BSL 实验室表示一种乐观的怀疑,业界普遍认为,现在公链还处于发展的早期,全球稳定运行依然只有比特币和以太坊两个代表,落地项目少、用户量少,缺陷爆发的可能性极低,很多想法并没有经过实践的验证,因此不能太过自信。

数字货币市场的安全危机不时发生,即便强大如以太坊,编写智能合约还是不免出现事实和逻辑炸弹,让黑客有机可乘,顺势转移数字资产。此外,在区块链网络节点之间的通讯安全层面,各国运营商一直对流量传输有实际的控制力,业界团队似乎只专注与本地算法的分布式设计和去中心化,而没有关心通讯达成共识的环节,会存在哪些风险。

总的来讲,虽然前路困难丛丛,但这些时间对区块链行业来说,依然是一个巨大的进步,只有创造更多的实际价值,而不是每天空谈概念和畅想,才能让新事物实实在在为我们服务。3 位“疫苗之王”,是 13 亿中国人的国民之殇,以太坊让历史不会忘记这件事情。BSL 希望技术能让世界各地的人民更加美好。

BTG has been through 51% Attack recently

BTG has been through 51% Attack recently

Few days ago,a malicious miner has successfully carried out a double spending attack on the Bitcoin gold network, leaving BTG under attack.

The miner gained at least 51% of hash power of BTG network in order to carry out the attack, which allowed him to temporarily control the BTG blockchain. Even on a small network like BTG, it would be very expensive to obtain such a large hash power, but he could profit from the double spending Attack.

After gaining control of the network, attackers began to load BTGs into exchanges and also tried to send them to wallets under their control. Typically, blockchain addresses this problem by adding the first transaction only to the system, but now attackers are able to undo the transaction because they have majority control power of the network.

As a result, they are able to recharge the exchange and then withdraw the money quickly,so that they can send the original BTG to another wallet.

Since May 16, the Bitcoin gold address involved in the attack has received more than 388,200 BTG (most of the deals are sending by themself). Assuming all of these transactions are related to double spending attack, attackers may have stolen up to $18.6 million worth of funds from the exchange.

Unknown Risks of Blockchain Security

Unknown Risks of Blockchain Security

Satoshi Nakamoto’s “White Paper”

Satoshi Nakamoto’s “white paper”, Bitcoin: A Peer-to-Peer Electronic Cash System, had given rise to a series of heated discussions on cryptocurrency and blockchain.

This white paper was first sent via e-mail to an obscure cryptography Email loop on November 1st, 2008, and [email protected] was the address of the very sender. And shortly afterwards, on January 3rd, 2009, Nakamoto mined first 50 bitcoins from his own computer and inscribed a short message which read, “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.” in the “genesis block”.

At that time, Alistair Maclean Darling, Chancellor of the Exchequer was under the obligation of taking a second bail-out for banks. And this short massage soon made the headline of The Times of London. That’s how the first blockchain came into being. And the social event was recorded and preserved forever, thanks to the timestamp service powered by blockchain and its proof of existence.

The exchange rate of Bitcoin first appeared on October 5th, 2009, with 1309.03 Bitcoins for one dollar. In a decade, the value of one Bitcoin had moved up to an appalling $10,000. At its peak in 2017, the value of Bitcoin reached a record high – $ 20,000! That means the total value of the 21 million Bitcoin could be worth some 420 billion dollars and if we take alternative coins into account, we may find that the net worth of cryptocurrency market could reach a trillion dollars. The impact of Bitcoin is so huge that many of us have come to realise Hayek’s theory may be correct and that science and technology can go beyond national borders as well as governments, bringing us a “denationalised money” that will soon change human lives.

Nowadays very few of us would turn to Satoshi Nakamoto’s white paper any longer because the soaring monetary value of Bitcoins have grabbed everybody’s attention. Nine-page white paper is nothing but a technical proposal in which he tried to figure out if we can make his ideal “coin” a reality. However, there is something deeper, something more essential lying in the white paper. There’s something that goes beyond software technology: could we fully achieve the “decentralisation” process of Bitcoin? Has it really been developed into a self-governing system? Are there any flaws in Satoshi’s white paper and if there are, what are they? Is it possible that Satoshi had discovered these flaws but then neglected them on purpose?

Decentralisation brings justice for the majority

Abstract: A purely peer-to-peer technology of electronic cash system would allow online payments to be sent directly from one party to another without going through any financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem by adding on timestamps while using peer-to-peer network. The network timestamps transact by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed unless recoding the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proves that it came from the largest pool of CPU power. As long as a majority of CPU powers are not cooperating to attack the network, they’ll generate the longest chain and outpace attackers. The network itself requires minimum infrastructure (should be described). Messages spread on a best effort basis, and nodes can leave and return to the network any time., The longest proof-of-work chain could be the record of what happened while they were gone.

If we closely read Satoshi’s white paper, we may find that “decentralisation” can be put in much simpler words, such as “justice for the majority”. And the best description of it’s key concept is “consensus”.

Satoshi proposed to build a “decentralised peer-peer payment system which can prevent double-spending” with no central servers (intermediaries). But here comes the question: how can we record everything in a ledger? And here’s the solution: using cryptography to prevent centralisation of servers and intermediaries.

When transaction occurs (including double-spending), we can always detect its relevant time-sequence. A single peer cannot work on two transactions the same time. So, Bitcoin system has timestamp-based hash functions to produce a number of chains that are closely related to one another. And then a linked chain using hash pointers to record the spending has been created. We call this data structure “blockchain”.

To prevent double-spending, we have to prove the availability and effectiveness of one chain and include this chain into transaction system. Thus other chains become invalid and out of forces.

There is only one way to prove the availability of one chain and decentralise: make all users involve and testify “justice for the majority”.

Proof Of Work Consensus Algorithm would determine who are “the majority”. The decision made by majorities would be set up into the longest chain. A block would spare new transactions to all peer-to-peer nodes and those nodes which received the messages would start confirming and accepting. Only the new transactions included in the very block can be accepted by other nodes.

After verifying the transaction, the node would not accept messages sent out by other blocks from other nodes. Meantime, this node would stop repeating the calculation on the same transaction over and over again. Then, Calculation on new transaction blocks will begin. Thus new chains are formed.

It is possible that more than one node would simultaneously record the same chain (forks) after receiving the transaction spare to them. The tie would be broken after the next proof came to be done. Finally, there would certainly be an ultimate chain that was accepted by all. In fact, blockchain is a process of dividing and regrouping.

Thus we replace intermediaries with consensus mechanism. Now think about it: what could happen under extreme circumstances?

Brainstorming a catastrophe

Let us image a disaster that might occur:

Some day in year 2018, 15:30 in the afternoon. All of a sudden, China’s optic cable service broken down and outbound internet had been blocked. However, the global Bitcoin system work as usual. Bitcoin mining and Bitcoin transaction remained unaffected. The only difference is that China’s disconnected Bitcoin system had been split away from the global network.

17: 40: Two hours later, the problem with cables was settled and connection with outside world restored.

During the past two hours, the hashing power in China had formed a chain that was independent from the previous chain. According to our discussion about consensus Algorithm, we know that stronger chains would naturally out-compete weaker chains; and we would have to waive the transactions in weak, obsolete chains. In the meantime, incentives would become invalid.

Since China’s hashing power made up 70% of the globe, it would not be surprising if China’s chain beat its previous chain . It’s very likely that during the breakdown, computing system abroad became utterly destroyed. Transactions within two different parts of the same chain of Bitcoin had to be recalculated. It would be a disaster to “Minority chain” Bitcoin-holders whose coins were lost. And we would see bitcoin-based commerce crashed and networks ruined.

Now we see that a mass power outage will divide Bitcoin network into two parts. Perhaps the best solution is to bring a halt to the entire Bitcoin network service as soon as possible before the breakdown occurs to prevent the network from working in isolation. Or there will be an even bigger catastrophe when the connection is restored.

In Bitcoin transactions, each transaction has to be verified by six blocks and each block needs ten minutes for confirming the transaction. Apparently, each transaction needs an hour to be verified. If the breakdown lasts longer than one hour, the damage will be simply unimaginable. The longer the breakdown takes, the greater the loss will be.

When discussing whether or not Bitcoin could stand such big catastrophes, we are usually more concerned about the multi-node backup without realising what result the mechanism of consensus would bring us: chains would isolate one another, compete with one another and devour one another in the end.

Monopoly over Hashing Power ≠ 51% Attacks

Today, our confidence on Bitcoin system is reassured by the common belief that it’s nearly impossible to obtain 51% of hashing power. However, the truth is, some ASIC miners who have actually monopolised 51% of hashing power are causing headaches for Bitcoin supporters.

Latest report on MIT Technology Review (Jan.18th, 2018) suggests that both Bitcoin and Ethereum belong to an inclusive blockchain system. In other words, anyone can be a miner. However, this may also result in the monopoly of certain groups and organisations who desire to seize vast amount of mining resources.

A weekly report shows that the four biggest Bitcoin miners take some 53% of the total amount of mining power, while Ethereum mining activities turns out to be a more “centralised” model: the top three mining pool operators are taking more than 61% of the total amount every week. This has led to an intriguing question: is the core of Bitcoin, which is “decentralisation”, being undermined by the monopoly over hashing power?

The answer is no. 51% attacks will not come from the system itself.

These big miners had tremendous investment on facilities and electricity supply for mining activities. Such an attack could possibly destroy the integrity of the system, causing the price to crash. This is clearly not good news for anyone with an interest in bitcoin, – especially miners, whose profits depend largely on the price of bitcoin. Hence, there is no reason to attack the network.

Therefore, such an attack must come from the outside.

Now back to the imagined catastrophe. We can see that attackers do not necessarily need to gain control over hashing power. The more destructive way is to disrupt network systems, which requires little labour and less investment. Attacker may take following actions:

1.Controlling the routing policy of backbone network servers.

2.Gaining network service suppliers’ back-door access.

3.Disrupting telecommunication services.

4.Breaking or disabling a nation’s firewall.

As it’s shown above, attackers do not need to be someone inside the system. And it requires little effort and electricity to start an attack by controlling the network layer. We have no difficulty, then, in finding out the deadliest flaw in the structure of Bitcoin and other cryptocurrencies: a highly-centralised network layer.

A Too Often Ignored Default Assumption: Channel Security

Peer-to-peer communication technology serves as the bottom layer of blockchain. Blockchain is in essence a P2P-based Value Delivery Protocol.

Bitcoin has adopted an Internet-based peer-to-peer network system, in which computers and nodes are equally privileged; and nodes are connected with one another in a “flat” topological structure. In the peer-to-peer network, there are no intermediary servers or centralised services; nor are there any hierarchical systems. Nodes in peer-to-peer networks work together as service suppliers of one another.

We may take a look at case of the global Internet during its early stage. Nodes in its IP networks are equally privileged, while today’s Internet had adopted a hierarchical structure (still, the flat, topological structure of IP protocols in today’s Internet remains unaltered). Document sharing is as well a typical example and one the most astounding successes of the use of peer-to-peer technology, with Napster pioneering the industry and BitTorrent bringing a revolutionary change.

The so-called Bitcoin network is in fact a whole set of nodes that operate under Bitcoin’s peer-to-peer protocols. We need to note that there are other protocols that prevail in Bitcoin network as well. Stratum Protocol, for instance, is applied to mining and Bitcoin wallets. Gateway Router Server, on the other hand, works as protocol-suppliers and install peer-to-peer protocols in Bitcoin network, allowing each node in other protocols to gain access to the network. Moreover, it bridges Stratum Protocol to Bitcoin’s peer-to-peer protocol. Here what we mean by “extended bitcoin network” is in fact the whole set of protocols, including peer-to-peer protocol, mining protocol, stratum protocol and other integrated networks that are used in Bitcoin system.

The main network where peer-to-peer protocol takes effect consists of 7000 to 10000 monitoring nodes that work for Bitcoin Core Client of different versions and hundreds of nodes that work for different sorts of applications under Bitcoin’s peer-to-peer protocol (BitcoinJ, Libbitcoin, btcd, etc.) A fraction of these nodes in the peer-to-peer network serve as mining nodes that are often involved in mining competitions, transaction confirmation and block building.

Nodes normally use 8333 port under TCP Protocol to build connection with correspondent nodes. (In Bitcoin settings, normally we would use 8333 port; other designated ports might be used as well.)

Peer-to-peer network simply offers nodes a platform for information sharing. The main part of the job is done by consensus algorithms and encryption algorithm. That means receivers have to fully trust senders and data carried by certain block should remain authentic without any alteration by any third party. In fact, this has to be based on an implied premise or a default assumption. This assumption, though rarely mentioned in Satoshi’s paper, is of grave importance:

· We assume that we fully trust blockchain softwares and that the data delivered would remain authentic and unaltered.

· We assume that we fully trust the operation system of blockchain soft wares and that the data delivered would remain authentic and unaltered.

· We assume that we fully trust the central processor intended for the network and believe that the data it carried would remain authentic and unaltered.

We all know that Bitcoin was based on the idea of “network neutrality”; but what is ironic about it is that the bottom layer of the network, which carries the decentralised system, is in fact highly centralised.

Bitcoin’s transmission protocol is accessible to us all. It is written in plain, regular characters. Because data transmission does not really matter that much to blockchain. There’s basically no need of encrypting them for fear that they might be stolen. You see, the first four characters of Bitcoin, 0xF9BEB4D9, are rather well-organised. However, Satoshi failed to realize that there’s something dangerous in the transmission protocol that may lead to 51% attack someday.

Merge attack:

What’s interesting about Blockchain is that the word “Blockchain”, used so often in Satoshi’s white-paper, was not invented by Satoshi. The word “Block” had appeared 67 times in the white-paper and “chain” 27 times. However, the author of the white-paper had not even attempted to put these two words as a whole. We all know that the word “Block” means a piece of solid material. But we should not forget that this word, when used as a verb, actually means “obstruct” or “hinder”. People simply fail to catch the hidden message in the word: Blockchain can be blocked.

Consensus mechanism lies in Bitcoin as its core. Consensus is pretty much like a voting machine supported by distributed system. Any adjustment or alteration in hosted network of distributed system will change “consensus”. This is what we call “merge attack” or “consensus attack”.

Merge attacks tear blockchain apart and divide blockchain network into two independent chains that may go beyond “Consensus Threshold” (for instance, 51% POW); and then after some while (technically speaking, after confirming transactions), the two chains will have to regroup and compete with each other.

Merge attack is essentially a certain form of combination of partition attack and delay attack. And it has been proved that merge attack is way more destructive than DDos attack and IP blocking.

· DDos’s attempts of attacking nodes and miners prove to be rather futile and fruitless. And normally its effect would not last long, for it’s not difficult for nodes and miners under attack to understand the situation when their free access to the outside world is blocked; under this circumstance, the assaulted miner may easily change his or her IP address. As a result, this sort of attack turns out to be less destructive than they seem to be for the simple reason that on changing IP address, the communication with other nodes may still be restored and transactions confirmed; the effect, therefore, would never be a devastating one.

· The way merge attack works, however, differs a good deal from that of other attacks. By tearing networks apart, two independent local area network would very naturally come into existence, the nodes in it may still communicate with one another without being conscious of danger. Exposing network layers to healing attacks may lead to the collapse of consensus mechanism: Nodes always stick to the code-is-law principle; as a result, branches and sub-chains will devour one another. If we do not stick to codes, then forks need to be created by human force and this will lead to the collapse of faith in the system. The entire network of Bitcoin would no doubt break down under several rounds of merge attacks.

It’s worthwhile to note that Bitcoin is not the only victim of merge attacks. Other cryptocurrencies (for instance, Ethereum) can be exposed to such fatal attacks as well. Ethereum, for example, used to spare no effort in encrypting its communication protocol to make safer smart contracts. However, its communication protocol is no less difficult to be identified and targeted. Attackers may still take advantage of mid-long links in network communications, overlapped heartbeat mechanisms and basic features to isolate networks and start merge attacks.

Therefore, no cryptocurrencies can stay perfectly impervious to merge attack unless certain adjustments are made on the bottom-layer of communication network to camouflage its data. And the most talked-about coins nowadays, including Litecoin, Monero, Bitcoin cash and quantum chain, are no exceptions. Claims made by such agencies seem rather groundless.

When applying consensus algorithms (POW, POS, DPOS), we need to prevent the transmission from being disturbed or disrupted. Algorithms in distributed system is used to solve the problem of consistency and validity on the premise that channels are safe. If there’s no such a premise, the consistency and validity will mean nothing.

BGP Hijacking

We know that merge attack is often used to destroy blockchains. And the most commonly launched attack is BGP hijacking. So here comes the next question: what is BGP hijacking?

Border Gateway Protocol (BGP) is a crucial component of the Internet, responsible for determining routing paths. BGP hijacking — that is, using BGP to manipulate Internet routing paths — has become more frequent in recent years. Cybercriminals and governments alike have taken advantage of this technique for their own ends, such as traffic misdirection and interception. This blog post will provide an overview to BGP and describe how BGP hijacking is performed.

BGP is a protocol used to exchange routing information between networks on the Internet. It is used to determine the most efficient way to route data between independently operated networks, or Autonomous Systems. As such, BGP is commonly used to find a path to route data from ISP to ISP. It is important to note that BGP is not used to transfer data, but rather to determine the most efficient routing path. The actual transfer is accomplished using whatever protocol is necessary, likely another member of the TCP/IP suite.

Now, assume I need to send data to the other side of the world. Eventually this data must leave the network my ISP controls, and BGP must be used. Of course, a routing path can’t be determined from one Autonomous System alone. This is where BGP peers, or neighbors, come in. Peers are Autonomous Systems that have been manually configured to share routing data. As an Autonomous System “learns” new routes, this information is propagated to its peers. By aggregating routing information received from BGP peers, the router handling the data can identify the most efficient path. This path is determined by a variety of factors, including distance and configuration settings implemented by the router administrator. Because peers, and therefore route propagation, are manually configured, it is necessary to compromise an edge router broadcasting external BGP announcements to perform Internet-level BGP hijacking. Despite this difficulty, BGP hijacking attacks are occurring in the wild. Please refer to Figure I below for a graphical overview of BGP.

Since BGP determines how data travels from its source to its destination, security is a concern. By manipulating BGP, data can be rerouted in an attacker’s favor allowing them to intercept or modify traffic. Internet-level BGP hijacking is performed by configuring an edge router to announce prefixes that have not been assigned to it. If the malicious announcement is more specific than the legitimate one, or claims to offer a shorter path, the traffic may be directed to the attacker. Attackers will frequently target unused prefixes for hijacking to avoid attention from the legitimate owner. By broadcasting false prefix announcements, the compromised router may poison the Routing Information Base (RIB) of its peers, as shown in Figure II. After poisoning one peer, the malicious routing information could propagate to other peers, to other Autonomous Systems, and onto the broader Internet.

Multiple instances of BGP hijacking have been recorded in the last three years. In several examples documented by Renesys, BGP hijacking was performed in 2013 to reroute data through arbitrary countries prior to the intended destination. One attack saw traffic, intended to go from Mexico to the United States, diverted to Belarus before reaching its destination. By advertising false BGP broadcasts, the Belarusian ISP successfully propagated illegitimate routes onto the Internet. In this case, corporate or state espionage is a likely explanation. However, there are indications of BGP hijacking being performed by non-state adversaries as well.

In a 2014 attack analyzed by Dell SecureWorks, BGP hijacking was used to intercept Bitcoin miners’ connections to a mining pool server. By rerouting traffic to a mining pool controlled by the attackers, it was possible to steal the cryptocurrency resulting from the victim’s mining. This attack collected an estimated $83,000 in cryptocurrency over a two-month period.

In July 2015, a breach of the surveillance software provider Hacking Team resulted in a leak of internal company emails. The emails revealed that, in 2013, the Italian government worked with Hacking Team and an Italian ISP to conduct BGP hijacking. After an IP block hosting a Hacking Team command and control (C&C) server went offline, the malware communicating with the C&C was also left unreachable. By fraudulently announcing the IP prefix hosting the C&C, Hacking Team reestablished access with the infected machines. This is the first documented instance of a Western government using BGP hijacking.

It’s a truth universally recognized that mining pools may work beyond geographic borders and there can be several ISP (Internet Service Suppliers) between miners and mining pools. This may bring danger. And these steps are very likely to be exposed to BGP hijackings planned by hackers.

Fatal Drawbacks: Byzantine Generals Problem & Two Generals’ Problem

Bitcoin is a large-scale social experiment with application of distributed system. It is also referred to as a practical solution to the so-called “Byzantine Generals Problem”. You can google it for more information.

Leslie Lamport, the winner of the 2013 Turing Award, first proposed the question of fault tolerance in his paper The Byzantine Generals Problem, published in the year 1980. Lamport, a master who pioneered the study of distributed system, proposed the most complicated fault-tolerance model ever in the field. Here’s a story known to many of us:

Many of us are no strangers to the history of Byzantine: Byzantine (today’s Istanbul) was the capital of the Eastern Roman Empire. The Empire had seized vast territory; and it soon felt the obligation to send fighters and soldiers to different parts of the empire. Generals of the army had to send messengers for communication. Generals, some of whom might be traitors or spies, had to reach agreement on whether or not they should attack their enemies when it came to wars and conflicts. It’s very likely that the voting result could not represent the real public opinion. So here comes the question: how should the loyal general stay unaffected by spies and reach an agreement that could represent the majority?

When discussing Byzantine Generals Problem, we do not need take messengers into consideration. Lamport had proved that it’s impossible to reach an agreement on unreliable channels where certain messages are missing.

Another problem, “Two Generals’ Problem”, is more fundamental and more intriguing.

Two armies led by two generals were about to capture a well-built town. The two armies were the stationed in different valleys near the town. Between the two valleys, there was another valley. And messengers from one army had to cross the valley to send message to the military camp of the other army. The problem is, this valley was under the control of the enemy. Some of the messages could get lost. The two generals had decided to attack together but they had not set the exact date. And they had to work together for any unilateral attempt by one army would most definitely lead to failure. So, they had to send messengers to do the communication and set a date. Moreover, the general of one army had to make sure that his partner from the other army had learned his plans by heart.

Two Generals’ Problem tries to examine the difficulties in sending message and transmitting information through an unreliable channel. This case is often used in courses for beginners to explain why TCP Protocol cannot keep both ends of communication consistent. Two Generals’ Problem may account for the failures in any point-to-point communication.

When comparing the two stories, we may find that Byzantine General Problems shares an uncanny resemblance with Two Generals’ Problem. However, it’s worthwhile to note that messengers might get caught by the enemies when they tried to travel across the valley. In other word, in the case of Two Generals’ Problem, there is actually no reliable channels. And there were no traitors in the armies. So, these two problems are essentially different.

It’s a truth universally acknowledged that the Two Generals’ Problem is the first problem to which there’s no solution in the field of computer communication. So, we have every reason to believe that there’s no way in which we may solve the Byzantine General Problem as well.

That also means during the transmission of information, it’s possible that some information may be tampered with, monitored or lost. Perhaps the solutions to these problems lie in the future “Quantum Communication”

We may leave aside the heated debate on which consensus algorithm is the best one. We must bear in mind that the most important thing is to make sure that we have a safe information channel.

The lack of consideration on the safety of communication layer is the essential defect of Bitcoin and its theory.

Blockchain Security Obscure (BSO)

Our faith in Bitcoin are built on our faith in “decentralization” i.e. we have to make sure the entire system is governed by itself and stays perfectly impervious to intermediaries. So, the success of a cryptocurrency largely depends on whether or not it has achieved perfect decentralization. Satoshi had taken everything for granted. He failed to realize the fact that the Internet is built around central servers and the importance of decentralization. Any failed attempts of decentralization will become the Achilles’ heel of Bitcoin, crushing its future.

To fully decentralize Bitcoin and make it a “value network”, we have to make sure that its network will be safe enough. In reality, we can never find a network communication that is 100% safe, open and neutral. Quantum communication still has a long way to go before it becomes a reality. So, what we can do now is to make full use of our current technology, focus on safety and cost control, and improve the peer-to-peer communication protocol. We have to figure out what is the best way to safeguard blockchain with engineering science. We have to make sure that future hackers would hardly stand the high cost of attack; and they would give up attacks of any form (intercepting, monitoring, disrupting, etc.).

Ethereum and many other cryptocurrencies began to use encryption protocols. This is of course a pretty good start. However, these protocols may still leave some traces that may be of use to attackers. Early this year, a competition was held by National Engineering Lab of Network Security. Competitors were asked to decrypt files and data. Nearly all the files and data were finally decrypted.

Therefore, we find the unavoidable necessity of designing a new version of BSO (Blockchain Security Obscure Protocol). Our goal is to obscure and “camouflage” the features of data transmission in peer-to-peer network. Attackers would find it more difficult to recognize them. And the cost of launching an attack or interception would become simply unbearable. That’s how we manage to make blockchain communication much safer.

As a security countermeasure project, normally BSO has two countermeasures. The first is a direct countermeasure. In other word, we can design a new protocol with stronger encryption which makes it hard for an intermediary to detect application services by analyzing the traffic and the flow. However, the inner features of the new protocol make it vulnerable to other attacks. The other is a circuitous, indirect countermeasure: we may camouflage application service traffic and make attackers believe that there’s nothing special about it; in the meantime, it is still works under a legal encryption protocol. In this way, we can make the traffic and flow hard to identify.

Blockchain Security Obscure Protocol is only a beginning. Obfuscation technology and machine learning will make progress together as a pair of rivals by competing with each other. And soft forks will help blockchain network develop and become better versions of itself.

An Overview of BGP Hijacking

An Overview of BGP Hijacking

Border Gateway Protocol (BGP) is a crucial component of the Internet, responsible for determining routing paths. BGP hijacking — that is, using BGP to manipulate Internet routing paths — has become more frequent in recent years. Cybercriminals and governments alike have taken advantage of this technique for their own ends, such as traffic misdirection and interception. This blog post will provide an overview to BGP and describe how BGP hijacking is performed.

Introduction to BGP

BGP is a protocol used to exchange routing information between networks on the Internet. It is used to determine the most efficient way to route data between independently operated networks, or Autonomous Systems. As such, BGP is commonly used to find a path to route data from ISP to ISP. It is important to note that BGP is not used to transfer data, but rather to determine the most efficient routing path. The actual transfer is accomplished using whatever protocol is necessary, likely another member of the TCP/IP suite.

In technical terms, a collection of IP prefixes operated by the same entity is referred to as an Autonomous System. Autonomous Systems are each assigned an Autonomous System Number (ASN) by the Internet Assigned Numbers Authority (IANA). Let’s demonstrate:

Here in Phoenix, I’m currently assigned an IP address from my ISP, Cox Communications — assume this is 70.177.9.30. This IP address belongs to the larger address space, 70.177.0.0/20, referred to as a prefix. The 70.177.0.0/20 prefix is owned by Cox Communications, and is announced as part of AS22773. AS22773 announces hundreds of prefixes, of which 70.177.0.0/20 is a part.

Now, assume I need to send data to the other side of the world. Eventually this data must leave the network my ISP controls, and BGP must be used. Of course, a routing path can’t be determined from one Autonomous System alone. This is where BGP peers, or neighbors, come in. Peers are Autonomous Systems that have been manually configured to share routing data. As an Autonomous System “learns” new routes, this information is propagated to its peers. By aggregating routing information received from BGP peers, the router handling the data can identify the most efficient path. This path is determined by a variety of factors, including distance and configuration settings implemented by the router administrator. Because peers, and therefore route propagation, are manually configured, it is necessary to compromise an edge router broadcasting external BGP announcements to perform Internet-level BGP hijacking. Despite this difficulty, BGP hijacking attacks are occurring in the wild. Please refer to Figure I below for a graphical overview of BGP.

Figure I – BGP Overview

BGP Hijacking

Since BGP determines how data travels from its source to its destination, security is a concern. By manipulating BGP, data can be rerouted in an attacker’s favor allowing them to intercept or modify traffic. Internet-level BGP hijacking is performed by configuring an edge router to announce prefixes that have not been assigned to it. If the malicious announcement is more specific than the legitimate one, or claims to offer a shorter path, the traffic may be directed to the attacker. Attackers will frequently target unused prefixes for hijacking to avoid attention from the legitimate owner. By broadcasting false prefix announcements, the compromised router may poison the Routing Information Base (RIB) of its peers, as shown in Figure II. After poisoning one peer, the malicious routing information could propagate to other peers, to other Autonomous Systems, and onto the broader Internet.

Figure II – BGP hijacking

Multiple instances of BGP hijacking have been recorded in the last three years. In several examples documented by Renesys, BGP hijacking was performed in 2013 to reroute data through arbitrary countries prior to the intended destination. One attack saw traffic, intended to go from Mexico to the United States, diverted to Belarus before reaching its destination. By advertising false BGP broadcasts, the Belarusian ISP successfully propagated illegitimate routes onto the Internet. In this case, corporate or state espionage is a likely explanation. However, there are indications of BGP hijacking being performed by non-state adversaries as well.

In a 2014 attack analyzed by Dell SecureWorks, BGP hijacking was used to intercept Bitcoin miners’ connections to a mining pool server. By rerouting traffic to a mining pool controlled by the attackers, it was possible to steal the cryptocurrency resulting from the victim’s mining. This attack collected an estimated $83,000 in cryptocurrency over a two-month period.

In July 2015, a breach of the surveillance software provider Hacking Team resulted in a leak of internal company emails. The emails revealed that, in 2013, the Italian government worked with Hacking Team and an Italian ISP to conduct BGP hijacking. After an IP block hosting a Hacking Team command and control (C&C) server went offline, the malware communicating with the C&C was also left unreachable. By fraudulently announcing the IP prefix hosting the C&C, Hacking Team reestablished access with the infected machines. This is the first documented instance of a Western government using BGP hijacking.

Future Enhancements to BGP

As of this post’s publication, BGP hijacking is difficult to prevent, largely due to the design of BGP itself. The protocol does not support the ability to verify the accuracy of routing information. Perhaps the most promising improvement to BGP comes from the Internet Engineering Task Force (IETF) in the form of BGPsec. Like DNSsec, BGPsec is an extension to BGP that introduces several new protections. Among them is Resource Public Key Infrastructure (RPKI), which will provide a way to associate Autonomous Systems with cryptographic certificates to maintain integrity. Each AS will maintain a digitally signed Route Origination Authorization (ROA) that lists IP prefixes and which AS are permitted to announce them. The implementation of a RPKI for BGP would be a significant improvement to the protocol’s security.

Conclusion

Internet-level BGP hijacking is difficult to execute, since it requires access to edge routers. An attacker would likely need to compromise an ISP, or have an accomplice employed there. Difficulty in exploitation could explain why BGP hijacking attacks have received little attention and why there is no reliable method for preventing them yet. With that in mind, BGP hijacking attacks can be expected to continue.

原文链接:http://www.bishopfox.com/blog/2015/08/an-overview-of-bgp-hijacking/
中文翻译:http://bobao.360.cn/learning/detail/594.html

比特币的闪电网络受到攻击——这对它来说是福还是祸?

比特币的闪电网络受到攻击——这对它来说是福还是祸?

是的,我们已经为闪电网络创建了一个攻击框架。

从神秘组织“BitPico”正在使用一个自动的“攻击工具包”从而阻塞运行闪电网络软件的节点。

在同一时间,一些开发人员报告说闪电节点发生了崩溃,这暂时阻止了他们使用这种为更快、更便宜的比特币交易而设计的技术来进行支付。

比特币的闪电网络受到攻击——这对它来说是福还是祸?

在闪电网络发展之际,越来越多的用户开始使用闪电网络来进行真正的交易——尽管它在发展过程中并不是一帆风顺——在几家创业公司搭建开源闪电网络的几周之后,Lightning Labs第一个运行了它的live beta版的产品。

这次的攻击是一个奇怪的事件,因为相关用户的资金是安全的,他们的钱并没有被偷走。而实际上,包括bitPico在内的那些攻击闪电网络的人甚至在发起攻击的过程中还要花一笔钱。

第一个发现这次攻击的人是Bitrefill的开发人员Justin Camarena,他发现他可以轻松的修复他所在公司被攻击的节点。

但他对对于为什么有人会不以图财为目的去攻击其它的闪电节点而感到困惑。他不知道为什么这些攻击者不直接在GitHub报告闪电网络的任何问题,这样开发人员就可以修复他们所发现的漏洞。

Camarena对CoinDesk说道:

这并不是一场以窃取资金为目的的攻击,在我的理解中他们这么做只是为了表明立场而已。

起初,许多人都有相同的印象,因为bitPico一直是一个有争议的扩容计划的支持者,即使大多数网络参与者放弃了这一努力,但是该组织仍继续支持增加区块大小参数所带来的好处。

但是,根据bitPico的说法,这次的攻击不仅仅是处于政治目的;他们这么做是都出于安全目的:

作为投资比特币的人,我们希望确保第二层的解决方案在真正使用时不会产生零日漏洞;只有我们尝试尽可能多的攻击才是唯一确定它是否安全的方法。

零日漏洞是项目开发人员不知道的安全漏洞。通常情况下这些漏洞会被黑客利用,这些黑客希望漏洞被修补之前可以从系统中窃取数据。

bitPico的攻击始于大约10天前,在更多的人开始使用它之前,这些攻击都是与对软件进行压力测试相关的。而bitPico的计划似乎正在一定程度上发挥着作用。

据bitPico称,他们已经发现了22个不同的攻击载体,而这个神秘组织计划在接下来的几周内继续对闪电网络发起攻击。

一个共同的烦恼

值得指出的是,互联网上的拒绝服务(Dos)攻击是很常见的。

这种攻击是利用网络上已被攻陷的服务器作为“僵尸”,向某一特定的目标电脑发动密集式的“拒绝服务”式攻击,用以把目标服务器的网络资源及系统资源耗尽,使之无法向真正正常请求的用户提供服务。

确实,bitPico的攻击正在促使闪电开发者针对上述问题提出各种可能的解决方案。许多开发人员相信,这些当前的攻击将使闪电网络获得成功。

例如,比特币的拥趸兼作者Andreas Antonopoulos愉快地称这些攻击为“免费测试”,而一些开发人员对此也只是一笑了之。

ACINQ公司的首席执行官Pierre-Marie Padiou说道:

坦率地说,对任何接触到互联网的服务来说,这种攻击都是意料之中的事,在我看来,这并不能算是真正的攻击。

开发人员Alex Bosworth已经开始使用名为iptables的防火墙软件来防止这种通过流量来干扰合法交易的攻击。

像bitPico这样的用户通过开通小额支付渠道发起的攻击仍在进行着,他们也必须为此支付一笔费用。(这是一种攻击者可能会在网络攻击中赔钱的方法——尽管这样做的成本不到一美分)

这是一个问题,因为Lightning Labs的客户端还不允许节点从这些垃圾邮件通道断开连接,这样就会减慢节点处理交易的速度。

Bosworth在未来希望Lightning Labs的实施将允许用户与可疑的通道断开连接。

不过,这些攻击不过仅仅只是Bosworth和Camerena所说的“烦恼”而已。Bosworth说道:

他们浪费了自己的费用来制作这个通道,这仅仅让我感到很烦。

是事故,而不是攻击

所有这一切都表明,虽然闪电网络第一次为真正的资金传递做好了准备——这是一个重大的步骤——但它仍有许多较小的问题需要解决,只有解决了这些问题才能为每天的非技术用户做好准备。

这在最近的另一个场景中这一问题得到了充分的展示:开发人员最初认为是闪电网络受到了攻击,后来证明是一个简单的错误。

在一个多星期前,Bosworth在推特上说,一个“攻击者”广播了一个旧的“通道状态”,它可以让用户有效地窃取另一个用户的资金。

Bosworth在推特上说道:

闪电网络的的拒绝服务攻击者们似乎是有组织的、有动力发起攻击的。

但该网络的规则是按程序设计的那样对用户进行了价值25美元比特币的惩罚。

正义得到了伸张。

Camarena当时在推特上写道,在看到一个恶意攻击者通过广播旧的交易来窃取他人比特币的时候,这个程序就会出来发挥作用。

Bosworth对CoinDesk说道:

这正是它应该做出的回应。这真的很有趣,因为它是真实存在的。

然而,虽然撤销过程是有效的,但它也显示了闪电网络仍然需要更多的调整,因为软件不应该让用户首先发送旧数据。

事实证明,广播旧数据是一个用户进行交易时所发生的以此意外事故,因为他有一个损坏的通道数据库,他在恢复了一个旧备份的同时关闭了他的通道。当通道关闭时,旧的通道状态被广播,他连接的节点检测到它并将其归类为欺诈行为。

尽管如此,闪电网络的开发者认为这些错误是一些好的学习经验,最终会给用户带来一个更严格更安全的网络。

Bosworth在推特中写道:

我们正得到一个很好的机会来发展强有力的点对点的部署策略。

原文:https://www.coindesk.com/bitcoins-lightning-network-attacked-good/

作者:Alyssa Hertig

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

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

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

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

高性能的专用集成电路(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

比特币源码分析-网络

比特币源码分析-网络

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

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的消耗,如果有必须使用大量计算的地方,尽量将其放到链下去处理。

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

文章来源:众享比特