There is a serious problem that exists within distributed computing. The problem is called the Byzantine Generals Problem. In short, this is an issue where there are multiple systems that need to communicate within a network, where communication channels and messages cannot be completely trusted.
The Byzantine Generals’ Problem
Imagine you are a general of an army for the Byzantine Empire. There are several other armies all camped around an enemy city, and you are all deciding when to attack. If you all attack together, you will be successful. If you all retreat together, you will successfully retreat. If only some of you attack, and some of you retreat, then you’ll fail and suffer huge casualties.
The problem lies in how the generals communicate. Each army uses the same messenger to communicate with each other. The only way for the messenger to move between armies is to sneak through the enemy city. This makes the messenger untrustworthy as there is no way of ensuring that the message you receive is true and correct. The messenger could be captured, a general could be a traitor, or you could receive no message at all.
Imagine I send a message to the other generals, “Lets attack Monday, 11 am”.
The other generals respond, “Let’s attack Tuesday, 11am”.
The message is tampered with along the way, and the message I receive says, “Agreed, let’s attack Monday, 11 am”.
I now incorrectly believe we have reached consensus. This agreement results in catastrophic casualties and failure.
This scenario is a fundamental problem in distributed computing and multi-agent systems. There are various other iterations of the Byzantine General’s Problem, but they all involve situations where there is no way for multiple systems to reach agreement with 100% confidence.
Byzantine Fault Tolerance
The characteristic described above is known as Byzantine Fault Tolerance. It is one of the most difficult class of failures in computing because it involves scenarios where one part of a system can appear to be both working successfully and failing at the same time to the rest of the system.
These failures can appear in airplane engines, nuclear power plants, submarines and many other systems that rely on multiple processes to work together. A similar problem exists in honeybee swarms. When bees want to find a new home, scouts might identify several potential homes to fly to. All the scouts and participants must then come to a consensus about which one they will fly too. If they fail to reach consensus or only half the swarm end up flying, they usually all end up dying.
Blockchain was designed as a solution to the Byzantine Generals’ Problem. Satoshi Nakamoto, the inventor of Bitcoin, describes the problem where each ‘node’ (a computer) in a blockchain network can be thought of as a general. Each message is a separate transaction that must be verified, and its authenticity confirmed. Blockchain enables this verification through a process known as consensus. Rather than each general waiting for a single messenger to deliver its message, the generals can act in concert to verify messages broadcast to each other. Provided there are more ‘good generals’ than there are ‘traitors’, then the network should be able to distill the authentic data from the bad data. This solution is known as decentralization and is critical to building blockchain networks.
Blockchains are decentralized ledgers. This means each node participating in the blockchain has an independent copy of the ledger. To confirm the validity of transactions attempting to be lodged on the ledger, a solution was needed to ensure that ‘traitors’ could not add their transactions onto the ledger.
Satoshi Nakamoto introduced the concept of ‘proof-of-work’ as his consensus algorithm in the Bitcoin Blockchain. This ‘proof-of-work’ solution is based on dense probability and mathematical computations. The bitcoin blockchain uses the ‘Hashcash’ proof-of-work system to verify transactions and link blocks in the chain.
Hashcash forms part of a mining algorithm where each node runs a series of increasingly difficult mathematical equations to uncover the next ‘block’ and a unique cryptographic ‘hash’ value for that block. Once they uncover the block, they broadcast their work to the network as ‘proof’. The hash functions take messages and convert them into alphanumeric values. These functions are nearly impossible to invert, meaning fraudulent actors cannot reverse engineer blocks. These hash values are then combined in sequence to form the next block.
The blocks itself contains a series of data sets that record updates to the ledger in the form of transactions (i.e. sending Bitcoin from one person to another). Each block also contains the unique hash of the preceding block which links them together in a ‘chain’.
To change a block or tamper with the data, a fraudulent actor would need to recreate the same block (with the same hash) and regenerate all the successors to that block (including redoing the work that they contain). This system protects the block from tampering and makes it increasingly more difficult to manipulate data.
Blockchain technology has been praised as the next internet of value and will redefine how we transact and engage with businesses. It is a way of achieving consensus and coming to agreement about a state of affairs through decentralized systems and distributed power.
Bitcoin and cryptocurrencies are just one small application of blockchain technology. Blockchain’s greatest asset is its ability to create trust. Participants who may not necessarily trust each other can engage with each other with confidence that a distributed network will verify and authenticate data shared between them. It won’t be long before we see blockchains being implemented across multiple industries including finance, healthcare, education, logistics, real estate and countless others.