Блокчейн: как он работает, и почему эта технология изменит мир. Блокчейн алгоритм


Изучаем блокчейн на практике / Блог компании Everyday Tools / Хабр

Вы читаете эту статью потому, что, как и я, с горячим интересом наблюдаете за возрастающей популярностью криптовалюты. И вам хочется понять, как работает блокчейн — технология, которая лежит в ее основе.

Но разобраться в блокчейне не так-то просто, по крайней мере, по моему опыту. Я корпел над заумными видео, продирался через туториалы и с нарастающей досадой отмечал недостаток иллюстрирующих примеров.

Я предпочитаю учиться в процессе работы. При таком раскладе мне приходится отрабатывать тему сразу на уровне кода, что помогает закрепить навык. Если вы последуете моему примеру, то к концу статьи у вас будет функционирующий блокчейн и ясное понимание, как это все работает.

Но для начала…

Напомню: блокчейн — это неизменяемая, последовательная цепочка записей, которые называются блоками. Они могут заключать в себе транзакции, файлы и, в принципе, любые другие виды данных. Главное здесь — что они связаны друг с другом посредством хэшей.

Если вы не совсем понимаете, что такое хэш, вам сюда.

На кого рассчитано это руководство? На тех, кто без проблем может читать и писать несложный код на Python и в общих чертах представляет, как работают HTTP запросы — мы будет общаться с нашим блокчейном через HTTP.

Что будет нужно для работы? Проверьте, чтобы у вас был установлен Python 3.6+ (вместе с pip). Также вам нужно будет установить Flask и прекрасную библиотеку Requests:

pip install Flask==0.12.2 requests==2.18.4 Ах да, еще вам понадобится HTTP клиент, например, Postman или cURL. Тут подойдет любой.

Где можно посмотреть то, что получится в итоге? Исходный код доступен здесь.

Шаг первый: Делаем блокчейн

Откройте свой любимый текстовый или графический редактор, мне вот, например, нравится PyCharm. Создайте новый файл под названием blockchain.py. Мы будем работать только в этом файле, а если запутаетесь, всегда можно подсмотреть в исходный код.

Представление блокчейна

Сначала мы создаем новый класс, конструктор которого создаст исходный пустой список (где и будет храниться наш блокчейн) и еще один — для транзакций. Вот как выглядит структура класса:

class Blockchain(object): def __init__(self): self.chain = [] self.current_transactions = [] def new_block(self): # Creates a new Block and adds it to the chain pass def new_transaction(self): # Adds a new transaction to the list of transactions pass @staticmethod def hash(block): # Hashes a Block pass @property def last_block(self): # Returns the last Block in the chain pass

Класс Blockchain отвечает за управление цепочкой. Здесь будут храниться транзакции, а также некоторые вспомогательные методы для добавления в цепочку новых блоков. Давайте распишем эти методы.

Как выглядит блок?

В каждом блоке содержится индекс, метка времени (в Unix), список транзакций, доказательство и хэш предыдущего блока.

Вот пример того, как может выглядет отдельный блок:

block = { 'index': 1, 'timestamp': 1506057125.900785, 'transactions': [ { 'sender': "8527147fe1f5426f9dd545de4b27ee00", 'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f", 'amount': 5, } ], 'proof': 324984774000, 'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" } Теперь идея цепочки должна быть очевидна — каждый блок включает в себя хэш предшествующего. Это очень важно: именно так обеспечивается неизменность цепочки: если хакер повредит какой-либо блок, то абсолютно все последующие будут содержать неверные хэши.

Понятно? Если нет, остановитесь и дайте себе время усвоить эту информацию — именно в ней состоит базовый принцип блокчейна.

Добавляем транзакции в блок

Нам нужно каким-то образом добавлять в блок новые транзакции. За это отвечает метод new_transaction(), работает он достаточно просто:

class Blockchain(object): ... def new_transaction(self, sender, recipient, amount): """ Creates a new transaction to go into the next mined Block :param sender: <str> Address of the Sender :param recipient: <str> Address of the Recipient :param amount: <int> Amount :return: <int> The index of the Block that will hold this transaction """ self.current_transactions.append({ 'sender': sender, 'recipient': recipient, 'amount': amount, }) return self.last_block['index'] + 1 Когда new_transaction() добавляет новую транзакцию в список, он возвращает индекс блока, куда она была записана, следующему, с которым будет осуществляться майнинг. Позже это пригодится следующему пользователю, добавляющему транзакцию.

Помимо создания блока genesis в конструкторе, мы также распишем методы new_block(), new_transaction() и hash():

import hashlib import json from time import time class Blockchain(object): def __init__(self): self.current_transactions = [] self.chain = [] # Create the genesis block self.new_block(previous_hash=1, proof=100) def new_block(self, proof, previous_hash=None): """ Create a new Block in the Blockchain :param proof: <int> The proof given by the Proof of Work algorithm :param previous_hash: (Optional) <str> Hash of previous Block :return: <dict> New Block """ block = { 'index': len(self.chain) + 1, 'timestamp': time(), 'transactions': self.current_transactions, 'proof': proof, 'previous_hash': previous_hash or self.hash(self.chain[-1]), } # Reset the current list of transactions self.current_transactions = [] self.chain.append(block) return block def new_transaction(self, sender, recipient, amount): """ Creates a new transaction to go into the next mined Block :param sender: <str> Address of the Sender :param recipient: <str> Address of the Recipient :param amount: <int> Amount :return: <int> The index of the Block that will hold this transaction """ self.current_transactions.append({ 'sender': sender, 'recipient': recipient, 'amount': amount, }) return self.last_block['index'] + 1 @property def last_block(self): return self.chain[-1] @staticmethod def hash(block): """ Creates a SHA-256 hash of a Block :param block: <dict> Block :return: <str> """ # We must make sure that the Dictionary is Ordered, or we'll have inconsistent hashes block_string = json.dumps(block, sort_keys=True).encode() return hashlib.sha256(block_string).hexdigest() Вышеприведенный код, вероятно, в пояснениях не нуждается — я добавил кое-где комментарии и докстринги, чтобы было понятнее. С представлением блокчейна мы практически закончили. Но сейчас вы, должно быть, задаетесь вопросом, как происходит процесс создания, встраивания и майнинга блоков.

Разбираемся с доказательством работы

Алгоритм доказательства работы служит для создания новых блоков в блокчейне (это процесс еще называется майнингом). Цель доказательства работы — вычислить нужное значение, чтобы решить уравнение. Это значение должно быть сложно рассчитать (с математической точки зрения), но легко проверить любому участнику системы. В этом заключается основная идея доказательства работы.

Чтобы стало яснее, давайте рассмотрим очень простой пример.

Допустим, хэш некоторого числа X, помноженного на другое Y, должен оканчиваться на 0. Соответственно, hash(x * y) = ac23dc...0. Для этого упрощенного примера установим x = 5. Прописываем все это на Python:

from hashlib import sha256 x = 5 y = 0 # We don't know what y should be yet... while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0": y += 1 print(f'The solution is y = {y}') Правильный ответ здесь: y = 21; именно при таком значении получается хэш с 0 в конце:hash(5 * 21) = 1253e9373e...5e3600155e860 В биткойне алгоритм доказательства работы называется HashCash и не особенно отличается от простенького примера, приведенного выше. Это уравнение, которые майнеры наперегонки пытаются разрешить, чтобы создать новый блок. В целом, сложность определяется тем, сколько символов нужно вычислить в заданной последовательности. За верный ответ майнеры получают вознаграждение в виде одной монеты — в ходе транзакции.

Проверить их решение для системы не составляет труда.

Пишем простое доказательство работы

Теперь давайте пропишем подобный же алгоритм для нашего блокчейна. Условия возьмем в духе вышеприведенного примера:

Найдите число p, которое, будучи хэшировано с доказательством предыдущего блока, дает хэш с четырьмя нулями в начале.

import hashlib import json from time import time from uuid import uuid4 class Blockchain(object): ... def proof_of_work(self, last_proof): """ Simple Proof of Work Algorithm: - Find a number p' such that hash(pp') contains leading 4 zeroes, where p is the previous p' - p is the previous proof, and p' is the new proof :param last_proof: <int> :return: <int> """ proof = 0 while self.valid_proof(last_proof, proof) is False: proof += 1 return proof @staticmethod def valid_proof(last_proof, proof): """ Validates the Proof: Does hash(last_proof, proof) contain 4 leading zeroes? :param last_proof: <int> Previous Proof :param proof: <int> Current Proof :return: <bool> True if correct, False if not. """ guess = f'{last_proof}{proof}'.encode() guess_hash = hashlib.sha256(guess).hexdigest() return guess_hash[:4] == "0000" Мы можем варьировать сложность этой задачи, меняя количество нулей в начале. Но четырех вполне достаточно. Вы можете сами убедиться, что один-единственный дополнительный нолик значительно замедляет процесс поиска решения.

Работа над классом почти завершена и теперь мы готовы начать взаимодействие с ним при помощи HTTP запросов.

Шаг второй: Блокчейн как API

Здесь мы будем использовать Python Flask — микрофреймворк, который облегчает процесс соотнесения конечных пунктов с функциями Python, что позволяет нам осуществлять диалог с блокчейном по Сети при помощи HTTP запросов.

Создаем три метода:

  • /transactions/new для создания новой транзакции в блоке
  • /mine для майнинга нового блока на сервере
  • /chain для возвращения полной цепочки блокчейна.
Настраиваем Flask

Наш «сервер» сгенерирует один-единственный узел сети в блокчейн-системе. Давайте напишем немного шаблонного кода:

import hashlib import json from textwrap import dedent from time import time from uuid import uuid4 from flask import Flask class Blockchain(object): ... # Instantiate our Node app = Flask(__name__) # Generate a globally unique address for this node node_identifier = str(uuid4()).replace('-', '') # Instantiate the Blockchain blockchain = Blockchain() @app.route('/mine', methods=['GET']) def mine(): return "We'll mine a new Block" @app.route('/transactions/new', methods=['POST']) def new_transaction(): return "We'll add a new transaction" @app.route('/chain', methods=['GET']) def full_chain(): response = { 'chain': blockchain.chain, 'length': len(blockchain.chain), } return jsonify(response), 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) Краткие пояснения к тому, что мы добавили:

Строка 15: Инстанцирует узел. Подробнее о Flask можно почитать здесь. Строка 18: Создает произвольное имя для узла. Строка 21: Инстанцирует класс Blockchain. Строки 24-26: Создает конечную точку /mine, то есть запрос GET. Строки 28-30: Создает конечную точку /transactions/new, то есть запрос POST, так как именно туда мы и будем отсылать данные. Строки 32-38: Создает конечную точку /chain, который возвращает блокчейн целиком. Строки 40-41: Запускает сервер на порту 5000.

Конечный пункт для транзакций

Вот как будет выглядеть запрос на транзакцию. Именно это пользователь отсылает на сервер:

{ "sender": "my address", "recipient": "someone else's address", "amount": 5 } Метод класса для добавления транзакции в блок у нас уже есть, поэтому дальше все легко. Давайте напишем функцию для добавления транзакции:import hashlib import json from textwrap import dedent from time import time from uuid import uuid4 from flask import Flask, jsonify, request ... @app.route('/transactions/new', methods=['POST']) def new_transaction(): values = request.get_json() # Check that the required fields are in the POST'ed data required = ['sender', 'recipient', 'amount'] if not all(k in values for k in required): return 'Missing values', 400 # Create a new Transaction index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount']) response = {'message': f'Transaction will be added to Block {index}'} return jsonify(response), 201Конечный пункт для майнинга

Именно в этой конечной точке творится вся магия, но ничего особо сложного в нем нет. Она должна делать три вещи:

  1. Рассчитывать доказательство работы
  2. Выдавать майнеру (то есть нам) вознаграждение, добавляя транзакцию, с ходе которой мы получаем одну монету
  3. Встраивать новый блок в цепочку
import hashlib import json from time import time from uuid import uuid4 from flask import Flask, jsonify, request ... @app.route('/mine', methods=['GET']) def mine(): # We run the proof of work algorithm to get the next proof... last_block = blockchain.last_block last_proof = last_block['proof'] proof = blockchain.proof_of_work(last_proof) # We must receive a reward for finding the proof. # The sender is "0" to signify that this node has mined a new coin. blockchain.new_transaction( sender="0", recipient=node_identifier, amount=1, ) # Forge the new Block by adding it to the chain block = blockchain.new_block(proof) response = { 'message': "New Block Forged", 'index': block['index'], 'transactions': block['transactions'], 'proof': block['proof'], 'previous_hash': block['previous_hash'], } return jsonify(response), 200 Обратите внимание, что в качестве получателя созданного блока указан адрес узла. Большая часть того, что мы тут делаем, сводится к взаимодействию с методами нашего класса Blockchain. По завершению этого шага основная работа закончена, можно начинать диалог.

Шаг третий: Диалог с блокчйном

Для взаимодействия с API в рамках системы можно использовать старый-добрый cURL или Postman.

Запускаем сервер:

$ python blockchain.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) Давайте попробуем создать блок, отправив запрос GET по адресу localhost:5000/mine: Теперь создаем новую транзакцию, отправив запрос POST, содержащий ее структуру, по адресу localhost:5000/transactions/new: Если вы работаете не с Postman, вот как сформулировать аналогичный запрос в cURL:$ curl -X POST -H "Content-Type: application/json" -d '{ "sender": "d4ee26eee15148ee92c6cd394edd974e", "recipient": "someone-other-address", "amount": 5 }' "http://localhost:5000/transactions/new" Я перезапустил сервер и создал еще два блока, чтобы в итоге получилось три. Давайте изучим получившуюся цепочку через запрос localhost:5000/chain:{ "chain": [ { "index": 1, "previous_hash": 1, "proof": 100, "timestamp": 1506280650.770839, "transactions": [] }, { "index": 2, "previous_hash": "c099bc...bfb7", "proof": 35293, "timestamp": 1506280664.717925, "transactions": [ { "amount": 1, "recipient": "8bbcb347e0634905b0cac7955bae152b", "sender": "0" } ] }, { "index": 3, "previous_hash": "eff91a...10f2", "proof": 35089, "timestamp": 1506280666.1086972, "transactions": [ { "amount": 1, "recipient": "8bbcb347e0634905b0cac7955bae152b", "sender": "0" } ] } ], "length": 3 }

Шаг четвертый: Консенсус

Все это очень здорово. У нас есть простой блокчейн, который позволяет осуществлять транзакции и создавать новые блоки. Но блокчейн имеет смысл только в том случае, если он децентрализован. А если сделать его децентрализованным, как мы вообще можем гарантировать, что везде будет отображаться одна и та же цепочка? Это называется проблемой консенсуса. Если мы хотим, чтобы в системе было больше одного узла, придется ввести алгоритм консенсуса.

Распознаем новые узлы

Прежде чем внедрять алгоритм консенсуса, нам нужно что-то предпринять, чтобы каждый узел в системе знал о существовании соседних. У каждого узла в системе должен быть реестр всех остальных узлов. А значит понадобятся дополнительные конечные точки:

  1. /nodes/register, который будет принимать список новых узлов в URL формате
  2. /nodes/resolve для внедрения алгоритма консенсуса, который будет разрешать возникающие конфликты и отслеживать, чтобы в узле содержалась правильная цепочка.
Нам нужно подкорректировать конструктор блокчейна и обеспечить метод для регистрации узлов:... from urllib.parse import urlparse ... class Blockchain(object): def __init__(self): ... self.nodes = set() ... def register_node(self, address): """ Add a new node to the list of nodes :param address: <str> Address of node. Eg. 'http://192.168.0.5:5000' :return: None """ parsed_url = urlparse(address) self.nodes.add(parsed_url.netloc) Заметьте: мы использовали set() для хранения списка узлов. Это нехитрый способ гарантировать, что при добавлении новых узлов будет соблюдаться индемпотентность — то есть сколько бы раз мы ни добавляли какой-то конкретный узел, он будет засчитан только единожды.

Внедряем алгоритм консенсуса

Как я уже упоминал, конфликт происходит тогда, когда цепочка одного узла отличается от цепочки другого. Чтобы его устранить, мы введем такое правило: прерогатива всегда у той цепочки, которая длиннее. Иными словами, самая длинная цепочка в системе рассматривается как фактическая. Используя такой алгоритм, мы достигаем консенсуса среди всех узлов системы:

... import requests class Blockchain(object) ... def valid_chain(self, chain): """ Determine if a given blockchain is valid :param chain: <list> A blockchain :return: <bool> True if valid, False if not """ last_block = chain[0] current_index = 1 while current_index < len(chain): block = chain[current_index] print(f'{last_block}') print(f'{block}') print("\n-----------\n") # Check that the hash of the block is correct if block['previous_hash'] != self.hash(last_block): return False # Check that the Proof of Work is correct if not self.valid_proof(last_block['proof'], block['proof']): return False last_block = block current_index += 1 return True def resolve_conflicts(self): """ This is our Consensus Algorithm, it resolves conflicts by replacing our chain with the longest one in the network. :return: <bool> True if our chain was replaced, False if not """ neighbours = self.nodes new_chain = None # We're only looking for chains longer than ours max_length = len(self.chain) # Grab and verify the chains from all the nodes in our network for node in neighbours: response = requests.get(f'http://{node}/chain') if response.status_code == 200: length = response.json()['length'] chain = response.json()['chain'] # Check if the length is longer and the chain is valid if length > max_length and self.valid_chain(chain): max_length = length new_chain = chain # Replace our chain if we discovered a new, valid chain longer than ours if new_chain: self.chain = new_chain return True return False Первый метод valid_chain() отвечает за проверку цепочек на валидность, проходя каждый блок и верифицируя и хэш, и доказательство.

resolve_conflicts() — метод, который прорабатывает все соседние узлы: скачивает их цепочки и проверяет их описанным выше способом. Если при этом найдена валидная цепочка длиннее, чем наша, производится замена.

Давайте введем в наш API две конечные точки, один для добавления соседних узлов, другой для разрешения конфликтов:

@app.route('/nodes/register', methods=['POST']) def register_nodes(): values = request.get_json() nodes = values.get('nodes') if nodes is None: return "Error: Please supply a valid list of nodes", 400 for node in nodes: blockchain.register_node(node) response = { 'message': 'New nodes have been added', 'total_nodes': list(blockchain.nodes), } return jsonify(response), 201 @app.route('/nodes/resolve', methods=['GET']) def consensus(): replaced = blockchain.resolve_conflicts() if replaced: response = { 'message': 'Our chain was replaced', 'new_chain': blockchain.chain } else: response = { 'message': 'Our chain is authoritative', 'chain': blockchain.chain } return jsonify(response), 200 На данном этапе, если хотите, можете привлечь другие машины и насоздавать разных узлов для вашей системы. Или добиться того же используя разные порты на одной машине. Я создал новый узел на другом порте той же машины, и позволил исходному узлу его распознать. Таким образом, получилось два узла: localhost:5000 и localhost:5001. В узел номер два я добавил побольше блоков, чтобы цепочка получилась однозначно длиннее. После чего вызвал GET /nodes/resolve в первом узле — и алгоритм консенсуса заменил его цепочку на цепочку второго. Ну, вот и все. Теперь собирайте друзей и тестируйте вам блокчейн совместными усилиями.

Надеюсь, этот материал вдохновит вас на новые идеи. Лично я с большим энтузиазмом наблюдаю за развитием криптовалюты: я уверен, что блокчейн перевернет наши представления об экономике, управлении государством и хранении информации.

В будущем я планирую выпустить вторую часть статьи, где мы добавим в блокчейн механизм валидации транзакций и поговорим о том, как все это можно использовать в продуктах.

habr.com

Что такое технология блокчейн, работа алгоритма простыми словами

Про работу алгоритма блокчейн простыми словами

На моем блоге, следуя вашим запросам, я уже опубликовал более десяти материалов, посвященным инвестициям в криптовалюты. С самого начала у меня вызывала интерес базовая технология, на которой они создаются. Тем более что сама по себе технология блокчейн (blockchain) не менее интересна, чем её производные. Она гораздо шире, чем мы можем подумать и имеет бесконечное множество предназначений в бизнесе, IT-системах и взаимодействии между людьми. Так получилось, что о биткоине мы узнали раньше, чем о технологической платформе, на которой он создан. Сегодня я постараюсь исправить этот пробел.

История возникновения технологии блокчейн

курс ленивого инвестора Доходность моих инвестиций за 2017 год составляет около 30% годовых, ознакомиться с последними новостями моих вложений можно в еженедельных отчетах. Рекомендую каждому читателю пройти обучение на курсе ленивого инвестора. Первая неделя абсолютно бесплатная. Подробнее

Система для децентрализованного обмена данными, именуемая блокчейн, изначально была создана как часть алгоритма биткоина, обеспечивающая механизм записи в реестр данных. Уже тогда она вызвала огромную волну споров. Ясно одно: это технологический прорыв, который сопоставим по влиянию разве что с появлением интернета. Стимулом для изобретения блокчейна стал кризис 2008 года, когда люди разуверились в традиционных финансовых институтах и инструментах. Банки и государство лишились доверия.

Альтернатива не заставила себя ждать, и она была предложена в виде математического алгоритма, не требующего посредников в лице государства, банков, юристов и бухгалтеров. Этот алгоритм не требовал комиссий за транзакции, заключения договоров с контрагентами, работал абсолютно анонимно и демократично. Он получил название блокчейн, от английского «цепочка блоков». Автор идеи известен под именем Сатоши Никамото, которое, с большой вероятностью, является псевдонимом или даже собирательным образом команды из нескольких человек. С японского имя можно перевести как «фундамент просветленного мышления».

Говорят, что увидеть создателя блокчейна – все равно что встретить живого Деда Мороза или заглянуть под маску Гая Фокса. Кто-то считает его финским ученым-программистом, другие находят его следы в Ирландии и в США.  С 2011 года он ни разу не выходил на связь со своего email и на то были свои причины: обладание сотнями тысяч биткоинов ранних выпусков и отсутствие личной жизни у публичного лица плохо сочетались с его планами. Не могут или не хотят сказать, где сейчас Сатоши, и члены его первой команды.

Технически блокчейн – это распределенная по всему миру и управляемая автономно база данных. Устройства их хранения и обработки не замкнуты на какой-то единый сервер. База данных состоит из архивов упорядоченных записей (блоков), каждый из которых содержит в себе кодированный номер и так называемый hash, соединяющий пазлы цепочки между собой.

Блоки можно сравнить с файлами реестра вашего компьютера, с той разницей, что эти файлы хранятся одновременно на миллионах компьютерах и являются публичными. В алгоритме применяется шифрование, которое решает две задачи:

  • Гарантирует безопасность данных пользователя, который владеет закрытым ключом, подтверждающим подлинность цифровой подписи;
  • Обеспечивает синхронизацию копий распределенной цепочки блоков у пользователей по всему миру.

Блокчейн описание

Таким образом, созданная Сатоши система исключает ошибочные транзакции, она проверяет сама себя каждые 10 минут. В зависимости от целей пользователей, система блокчейн позволяет реализовать в себе как минимум две функции:

  1. Через раскрытие криптографического кода своего ключа в интернете, владелец может предоставить доступ к информации, размещенной в блоке.

Например, руководитель секретного проекта может безопасно расшарить данные своей команде; врач — отправить конфиденциальную историю болезни специалистам. Технология идеально подходит для организации работы кадастровых баз, ведь блокчейн есть не что иное, как распределенный реестр. Наконец, производителю программного обеспечения не нужно опасаться нелегального копирования, ведь в отсутствие локального сервера, его данные нельзя взломать.

  1. Если по адресу, указанному в ключе, хранятся данные, эквивалентные сумме в криптовалюте, вы можете провести анонимную и бесплатную регистрацию перевода материальных ценностей. То есть сделать самостоятельно то, что сейчас обычно делают банки и платежные системы за деньги.

При этом вам не нужно связывать себя юридическими контрактами, так как контракт уже прописан в коде транзакции и без подтверждения цепочки со стороны всей мировой сети, платеж будет отвергнут.

Единственное, что необходимо для безопасности, как и прежде, – проверенные площадки, а также хранение в надежном месте персонального кода, который дает доступ к вашему криптографическому кошельку. Но такая защита, согласитесь, стоит дешевле, чем банки и юристы. Обратной стороной технологии блокчейн является то, что все гарантии заключаются в ней самой и вам не стоит полагаться ни на государство, ни на бумажные договоры.

Как блокчейн и криптовалюты регулируются законодательно

телеграм канал Самое интересное из жизни автора блога читайте в Телеграм-канале. Подпишись, чтобы быть в курсе.

Государства мира по-разному относятся к блокчейну и особенно основанным на нем криптовалютам. У любого государства анонимность и возможность действовать независимо вызывают ревность и непонимание. Налоговые службы видят в блокчейне средство уклонения от налогов, ЦБ – обналичивание теневых средств через криптовалюту, спецслужбы – финансирование терроризма. С другой стороны, все понимают, что за этой технологией будущее, и если ты не можешь остановить процесс, то его нужно это возглавить. Главная цель — ввести хайп, связанный с блокчейном, в правовое поле и поставить под контроль. Перелом в признании криптовалют наступил в 2013 году, в течение которого биткоин вырос с 13 до 1000$ и приобрел миллионы поклонников в разных странах. Однако участились и случаи мошенничества в этой сфере.

  • В 2013 году ФБР раскрыла крупную сеть по торговле запрещенными наркосодержащими препаратами, оплата за которые принималась в биткоинах.
  • В феврале 2014 крупнейшая на тот момент биржа криптовалют mt.gox.com была взломана и с кошельков пропало более 700к BTC у 127к владельцев.
  • Недавно перестала работать биржа BTC-e;
  • В России в 2014 году прошла волна проверок и обысков силами УБЭП, ФСБ и налоговиков у десятков юридических лиц. Предлагался к принятию закон, запрещающий не только оборот криптовалюты, но и её эмиссию (майнинг) как для юридических лиц, так и для физических. Для последних планировался штраф до 50к р.

Но если посмотреть на эти события внимательно, то мы увидим, что за все время существования того же биткоина ни разу не было сбоев. Все известные взломы и хищения были результатом действия человеческого фактора: ошибок в сервисах, написанных поверх системы блокчейн для обслуживания биржевой торговли. Второй распространенной причиной является халатное отношение самих пользователей к хранению уникального кода своего кошелька. Перечислим основные модели государственного регулирования криптовалют.

  • Сингапур, Швейцария, частично Люксембург: официально разрешены обмен и торговля.
  • Япония, частично Южная Корея: биткоин признан средством платежа.
  • США, Германия: организаторы ICO законодательно приравнены к эмитентам классических IPO.
  • Китай: нет формального запрета для физических лиц, но незаконно для банков и госкомпаний.
  • Россия: за криптовалютами признан статус цифрового товара или актива, но не средства платежа. Пока никак не регулируется, готовится законодательный пакет.

Какое будущее ждет технологию блокчейн

Если кто-то думает, что блокчейн – это будущее, он ошибается: будущее уже наступило. Первый признак – рост количества ICO в геометрической прогрессии. В будущем технология будет охватывать все новые сферы бизнеса и человеческих отношений. Неизбежно будет развиваться инфраструктура в виде банкоматов, бирж, сервисов кошельков, терминалов оплаты. Компании по всему миру все чаще будут переводить своих сотрудников на оплату их труда криптовалютой, если они этого пожелают. Все больше экспертов предрекают, что в будущем не будет банков с их комиссиями и дорогими кредитами. Не останется места инфляции и финансовым кризисам, которые начинаются из-за необеспеченной эмиссии денег центральными банками.

Будущее блокчейн

Алгоритм блокчейна сам регулирует количество денег в системе, и никто не сможет на него повлиять. С появлением блокчейна исчезает проблема двойной транзакции, когда деньги могут быть ошибочно отправлены двум разным получателям. За этим следят тысячи людей в банках и платежных системах, работу которых вы как отправитель перевода оплачиваете. В системе блокчейн за это никому платить не нужно, уникальный код присваивается автоматически, а «следят» за этим майнеры, которые вычисляют блоки транзакций и тем самым подтверждают или отклоняют операцию. Таким образом, блокчейн берет на себя важнейшие функции, которые сегодня исполняют многочисленные посредники:

  • Регистрация и занесение в реестр сделок между участниками системы;
  • Верификация личности и удостоверение её цифровой подписи;
  • Регистрация авторских прав;
  • Заключение смарт-контрактов и др.

Последняя из перечисленных функций является наиболее интересной и перспективной, и не только для футурологов. Крупнейшие корпорации, в том числе из финансового сектора, на котором блокчейн в будущем «ставит крест», уже всерьез инвестируют в разработку этой технологии. Например, инвесторы смогут полностью автоматизировать заключение сделок, учет и выплату дивидендов.

Кредиты станут более доступными, прозрачными и дешевыми, за счет отсутствия в цепочке кредитования менеджеров, бухгалтеров, кассиров, коллекторов. При этом исчезает необходимость в депозитарии, внешних гарантах, банковских услугах по вводу и выводу средств. Совместный проект Сбербанка и IBM по устранению «лишних» звеньев в лице тысяч банковских юристов, только подтверждает тенденцию. Уже сейчас аналитиками проведены расчеты, согласно которым совокупная мощность пользовательских устройств и майнерских ферм такова, что её не сможет превзойти мощности целых государств. Можно издавать ограничительные законы, но техническое противостояние будет не в пользу правительств.

Блокчейн, даже при наличии политической воли, невозможно не только разрушить, но и внести небольшое изменение: для подмены информации во всей сети потребуются гигантские вычислительные мощности. Поскольку блокчейн – это открытый код, он постоянно трансформируется во что-то новое. Сегодня уже создана и начала внедряться система blockchain 3.0.

Одна из проблем блокчейна, которые в будущем предстоит решить, это скорость транзакции. С этой целью недавно было произведено разделение биткоина по протоколу segwit2x. Она вполне удовлетворительна для денежных переводов и заключения смарт-контрактов, но непригодна для оплаты покупок в ритейле. Транзакция по банковской карте проходит на кассе в доли секунды. Продавец получит деньги на счет через несколько дней, но это уже не волнует покупателя: он не будет ждать. В случае с криптовалютой, придется дождаться подтверждения цепочки всей сетью блокчейна, а это может занять около часа.

В заключение, хочу порекомендовать книгу канадских авторов Дона и Алекса Тапскотт «Революция блокчейн», которая считается лучшим на сегодняшний день раскрытием темы. Сейчас её можно бесплатно скачать на складчинах, либо заказать на Amazon (на английском).

Всем профита!

Хочешь быть в курсе ленивых новостей блога? Подпишись!

smfanton.ru

Объяснение блокчейна для веб-разработчиков / Хабр

Предисловие переводчика

Предлагаю читателям Хабрахабра перевод статьи «The Blockchain Explained to Web Developers, Part 1: The Theory» за авторством Francois Zaninotto. Эту статью я нашел в блоге компании Marmelab. Статья представляет собой отличное введение в технологию блокчейн «с нуля», но может оказаться интересной и для тех, кто уже «в теме». Она касается не только того, как работает блокчейн, но и перспектив его развития, а также с чего начать, если вы хотите создать свой проект, использующий блокчейн.

Объяснение блокчейна для веб-разработчиков, Часть первая: Теория

Блокчейн – это новая популярная технология. Даже если вы не слышали о ней, вы, вероятнее всего, знаете о Bitcoin. Блокчейн — это одна из фундаментальных технологий на которых основан Bitcoin. Эксперты говорят, что блокчейн вызовет революцию схожую с той, которую некогда вызвал Интернет. Но что это на самом деле и как его можно использовать для создания приложений? Эта статья является первой в серии из трех, рассказывающей о феномене Блокчейна. Мы обсудим теорию, покажем фактический код и поделимся своим опытом, основанным на реальном проекте. Для начала попытаемся понять что из себя представляет Блокчейн.

Что такое Блокчейн, Часть первая

Несмотря на то, что блокчейн создан для поддержки Bitcoin, идея блокчейна может быть определена независимо от экосистемы Биткоина. Литература обычно определяет блокчейн следующим образом:Блокчейн – это журнал с фактами, реплицируемый на несколько компьютеров, объединенных в сеть равноправных узлов (P2P). Фактами может быть что угодно, от денежных операций и до подписания контента. Члены сети — анонимные лица, называемые узлами. Все коммуникации внутри сети используют криптографию, чтобы надежно идентифицировать отправителя и получателя. Когда узел хочет добавить факт в журнал, в сети формируется консенсус, чтобы определить, где этот факт должен появиться в журнале; этот консенсус называется блоком. Я не знаю как у вас, но у меня после чтения этих определений все еще оставались проблемы с пониманием блокчейна. Давайте заглянем немного глубже.

Упорядочивание фактов

Децентрализованные сети с равноправными узлами не новы. Napster и BitTorrent — это P2P сети. Просто вместо обмена фильмами, участники сети блокчейна обмениваются фактами. Так в чем же реальная особенность блокчейна?

P2P-сетям, как и прочим распределенным системам, приходится решать очень сложную проблему информатики: разрешение конфликтов, или согласование. Реляционные базы данных предлагают ссылочную целостность, но такой особенности нет в распределенной системе. Если два несовместимых факта прибывают в одно и тоже время, система должна иметь правила для определения того, какой факт считать правильным.

Возьмем, к примеру, проблему двойного расходования: у Алисы есть 10$ и она отсылает их дважды Бобу и Чарли. Кто будет иметь 10$ в итоге? Для того чтобы ответить на этот вопрос, лучший способ это упорядочить факты. Если два несовместимых факта появятся в сети, то победит тот, который будет первый записан.

В P2P сетях, два факта отправленные примерно в одно время могут прибыть в разном порядке в удаленные узлы. Тогда как всей сети согласовать какой же факт пришел первым? Чтобы гарантировать целостность в P2P сети, вам нужен способ согласования порядка фактов. Вам нужна система консенсуса.

Алгоритмы консенсуса для распределенных систем это очень активное поле для исследований. Возможно, вы слышали о алгоритмах Paxos или Raft. Блокчейн реализует другой алгоритм, консенсус, основанный на доказательстве выполнения работы (proof-of-work), использующий блоки.

Блоки

Блоки – это хитрый трюк, чтобы упорядочить факты в сети с недоверенными узлами. Идея проста: факты группируются в блоки, и есть только одна цепочка блоков, реплицируемая по всей сети. Каждый блок ссылается на предыдущий. То есть, если факт F находится в блоке 21, и факт E в блоке 22, то факт E рассматривается всей сетью как следующий за фактом F. Перед добавлением к блоку, факты находятся на рассмотрении, т.е. не подтверждены.

Майнинг

Некоторые узлы в цепочке создают новые локальные блоки с неподтвержденными фактами. Они соревнуются, чтобы узнать, станет ли их локальный блок следующим блоком в цепи для всей сети, путем броска игральных костей. Если узел выбрасывает две шестерки, то он получает возможность опубликовать его локальный блок, и все факты в этом блоке становятся подтвержденными. Этот блок посылается всем узлам в сети. Все узлы проверяют, что блок правильный, добавляют его к их копии цепи и пытаются построить новый блок с новыми неподтвержденными фактами.

Но на самом деле узлы не просто бросают пару игральных костей. Задача, которую решают майнеры в блокчейне подразумевает бросок огромного количества игральных костей. По замыслу, обнаружение случайного ключа для проверки блока маловероятно. Это предотвращает мошенничество и делает сеть безопасной (до тех пор, пока злоумышленник не имеет контроль более чем над половиной узлов в сети). Как следствие, новые блоки будут публиковаться в цепь через фиксированный интервал времени. В Bitcoin блоки публикуются, в среднем, каждые 10 минут.

В Bitcoin, задача представляет из себя двойной SHA-256 хэш строки из непроверенных фактов, идентификатора предыдущего блока и случайной строки. Узел выигрывает, если его хэш содержит как минимум n ведущих нулей.

// проигрышный хэш для Bitcoin 787308540121f4afd2ff5179898934291105772495275df35f00cc5e44db42dd // выигрышный хэш для Bitcoin, если n=10 00000000009f766c17c736169f79cb0c65dd6e07244e9468bc60cde9538b551e

Число n время от времени корректируется, чтобы сохранить длительность вычисления блока, несмотря на изменение количества узлов. Это число называется сложностью. Другие реализации блокчейна используют специальные методы хэширования, которые препятствуют использованию графических процессоров для вычислений (например, требуют передачи больших объемов памяти).

Процесс поиска блоков называется майнингом. Все дело в том, что так же как и добыча золота (прим. перев. Mining — добыча (англ.)), майнинг блоков приносит экономическое вознаграждение — некоторую форму денег. Вот почему людей, которые содержат узлы в блокчейне, называют майнерами.

Примечание: По умолчанию, узел не майнит – он просто получает блоки, которые майнят другие узлы. Это добровольный процесс — превращение узла в узел майнер.

Деньги и криптовалюты

Каждую секунду, каждый майнер тестирует тысячи случайных строк, чтобы сформировать новый блок. То есть работа майнера в блокчейне требует огромное количество компьютерных ресурсов (памяти и CPU). Вот почему вы должны платить, чтобы записывать факты в блокчейн. С другой стороны, чтение фактов бесплатно: вам достаточно запустить собственный узел и вы будете получать полную историю фактов созданную другими узлами. Итак, подведем итог:
  • Чтение данных бесплатно
  • За добавление фактов взимается небольшая комиссия
  • Майнинг блока приносит деньги в размере комиссионных за все факты, входящие в блок
Речь здесь идет не о реальных деньгах. Как факт, каждый блокчейн имеет свою собственную (крипто-)валюту. Она называется bitcoin (BTC) в сети Bitcoin, ether (ETH) в сети Ethereum, и т.д. Чтобы совершить платеж в сети Bitcoin, вы должны заплатить небольшую комиссионные в bitcoin'ах – так же как вы должны были бы заплатить комиссионные банку. Однако, откуда взялись первые деньги?

Майнеры получают вознаграждение за поддержание работы и безопасности сети. Каждый раз, когда они успешно формируют блок, они получают фиксированное количество криптовалюты. В Bitcoin вознаграждение – 25 BTC за блок, в Ethereum– 5 ETH за блок. Таким образом, блокчейн сам генерирует свои собственные деньги.

Криптовалюты быстро стали конвертируемы в реальные деньги. Их номинальная стоимость определяется только спросом и предложением, поэтому криптовалюта — это объект спекуляции. К моменту написания статьи, процесс майнинга bitcoin все еще требовал меньше расходов на энергию и оборудование, чем деньги которые вы можете получить, продавая монеты, полученные за него. Вот почему люди добавляют новых майнеров каждый день, надеясь превратить электричество в деньги. Однако колебания в стоимости BTC делают майнинг все менее и менее выгодным.

Контракты

До сих пор, мы в основном говорили о блокчейне как о хранилище фактов, но он также может исполнять программы. Некоторые блокчейны позволяют каждому факту содержать мини программу. Такие программы реплицируются вместе с фактом, и каждый узел выполняет их, получая факт. В Bitcoin это используется для совершения транзакций с условиями, например: Боб получит 100 BTC от Алисы только если сегодня 29 февраля.

Другие блокчейны разрешают более сложные контракты. Например, в Ethereum каждый контракт несет в себе мини-базу данных и предоставляет методы для изменения ее данных. Поскольку контракты реплицируются по всем узлам, то и их базы данных тоже. Каждый раз, когда пользователь вызывает метод из контракта и, соответственно, изменяет данные, эта команда реплицируется и повторяется всей сетью. Это позволяет создать распределенный консенсус для выполнения обещаний.

Эта идея сопряжения блокчейна с реальным миром при помощи заранее запрограммированных условий и их передачи всем узлам называется умный контракт. Контракт — это обещание, которое стороны подписывают, чтобы закрепить его юридически. Умный контракт – это то же самое, только закрепление происходит «технически», а не «юридически». Благодаря этому отпадает необходимость в нотариусе или любом другом полномочном лице, признаваемом обеими сторонами.

Представьте, что вы хотите сдать ваш дом на неделю за 1000$ c 50%-ой предоплатой. Вы и арендующий подписываете контракт, вероятнее всего, написанный юристом. Вам также нужен банк для получения платежа. В начале недели вы просите о депозите в 5000$; арендующий предоставляет вам чек на него. В конце недели он отказывается заплатить оставшиеся 50%. Вы также узнаете, что он сломал окно, и чек с депозитом ведет на пустой счет. Теперь вам понадобится адвокат, чтобы передать ваш договор на аренду в суд.

Умные контракты в блокчейне позволяют вам обойтись без банка, юриста, адвоката и суда. Просто напишите программу, которая определяет, сколько денег должно быть передано в случае определенных условий:

  • Две недели перед арендой: передача 500$ от арендующего к владельцу
  • Отмена владельцем: передача 500$ от владельца к арендующему;
  • Конец периода аренды: передача 500$ от арендующего к владельцу
  • Доказательство механических повреждений после периода аренды: передача 5000$ от арендующего к владельцу
Добавьте этот умный контракт в блокчейн и больше никаких проблем. Ко времени указанному в контракте произойдет передача денег и, если владелец сможет представить доказательства механических повреждений, он автоматически получит 5000$ (и нет никакой нужды в депозите).

Вероятно, вы задаетесь вопросом, как получить доказательства механических повреждений. Здесь в дело вступает «интернет вещей» (IoT). Для взаимодействия с реальным миром блокчейну необходимы датчики и приводы. Блокчейн революция невозможна без IoT революции.

Такие приложения, опирающиеся на умные контракты, называются децентрализованными приложениями или DApps.

Умные контракты легко расширяются на умную собственность и многие другие умные вещи. Запомнить надо только одно: «умные» означает «нет посредников» или «исполняется технически». Блокчейн – это новый способ ведения бизнеса без посредников – также как продажа музыки в Интернете.

Что такое блокчейн. Часть вторая

Как мне кажется, лучший способ понять блокчейн – это взглянуть на него с разных сторон.

Что он делает? Блокчейн позволяет безопасно распространять и/или обрабатывать данные между несколькими лицами через недоверенную сеть. Данными может быть что угодно, но наиболее интересным вариантом данных является возможность передачи информации, которая требует наличия третьей доверенной стороны. Примерами такой информации являются деньги (требуют участия банка), права на собственность (требуют участия нотариуса), договор на заем и т.д. В сущности, блокчейн устраняет необходимость в участии третьего доверенного лица.

Как он работает? С технической точки зрения, блокчейн является новшеством, которое опирается на три понятия: P2P сети, асимметричная криптография и распределенный консенсус, основанный на решении математической задачи. Ни одна из этих идей не является новой сама по себе. Если вы не разбираетесь во всех, не беспокойтесь: немногие люди обладают необходимыми знаниями, чтобы разработать блокчейн (что является проблемой). Но отсутствие полного понимания блокчейна не мешает вам использовать его, так же как вы можете создавать веб-приложения, не зная о медленном старте TCP или центрах сертификации.

На что он похож? Блокчейн можно рассматривать как (слабо)синхронизированную базу данных реплицируемую столько же раз, сколько узлов в сети, или как суперкомпьютер, образованный комплексом всех CPU/GPU входящих в него узлов. Вы можете использовать этот суперкомпьютер для хранения и обработки данных, т.е. также как вы можете использовать удаленный API. Отличие только в том, что вам не нужно создавать бэкэнд, и вы можете быть уверены, что данные надежно защищены и обрабатываются в сети должным образом.

Практические следствия

Факты, хранящиеся в блокчейне, не могут быть утеряны. Они остаются там навсегда, реплицируясь на каждый узел. Даже более того, блокчейн не просто хранит конечное состояние, он хранит и все предыдущие состояния. Поэтому каждый может проверить правильность конечного состояния, пересчитывая факты с самого начала.

Фактам в блокчейне мы можем доверять, т.к. они технически подтверждаются консенсусом. Даже если в сети находятся злоумышленники, вы все равно можете доверять ее суждению в целом.

Помещение данных в блокчейн достаточно медленная операция, поскольку она требует достижения распределенного консенсуса.

Подсказка: Если у вас есть 20 свободных минут для более глубокого понимания, посмотрите это прекрасное вводное видео о Bitcoin, которое также объясняет, как работает блокчейн.

Почему это важно

«Блокчейн это самая потрясающая технология из тех, которые я когда либо видел.» Salim Ismail «Самая интересная интеллектуальная разработка в Интернете за последние 5 лет.» Julian Assange «Я думаю тот факт, что благодаря Bitcoin вселенной, алгоритм замещает функции [государства] … это действительно очень круто.» Al Gore Эти умные люди увидели огромный потенциал в блокчейне. Потенциально блокчейн может заменить всех посредников, которые необходимы для установления доверительных связей. Давайте взглянем на несколько приложений которые построены на блокчейне и реализуют идеи отказа от посредника.
  • Monegraph позволяет авторам закрепить права на свою работу и установить правила (и выплаты) за использования их работы.
  • La Zooz это децентрализованный Uber. Предлагай свою машину, найди перевозчика без платы Uber’у.
  • Augur – это онлайн букмекер. Делай ставки и получай выигрыш.
  • Storj.io – это P2P хранилище данных. Сдавай свое неиспользуемое место на диске или найди самое дешевое онлайн хранилище.
  • Muse – это распределенная, открытая и прозрачная база данных специально для музыкальной индустрии.
  • Ripple позволяют проводить недорогие трансграничные платежи в банки
На сегодняшний день многие успешные интернет предприятия являются посредниками. Подумайте о Google: им удалось стать посредником между вами и всем интернетом. А Amazon? Они стали посредником между продавцами и покупателями любых типов товаров. Вот почему технология, которая позволяет устранить посредников может взорвать Интернет.

Получат ли выгоду пользователи, которым больше не понадобятся посредники для обмена товарами и услугами? Пока нельзя сказать точно. Интернет и ранее ориентировался на отсутствие посредников. Тем не менее, Google удалось построить свой рынок, будучи посредником. Вот почему крайне важно инвестировать в блокчейн быстро, потому что победители и проигравшие следующего десятилетия определяются прямо сейчас.

Вы не захотите создавать свой блокчейн

Технологии, на которых строится блокчейн, используют передовую криптографию, пользовательские сетевые протоколы и оптимизацию производительности. Все это слишком сложно, чтобы разрабатывать это каждый раз, когда проекту требуется блокчейн. К счастью, помимо Bitcoin, есть еще несколько реализаций блокчейна с открытым кодом. Вот самые передовые:
  • Ethereum: платформа блокчейна с открытым исходным кодом от Ethereum Foundation
  • Hyperledger: другая открытая реализация, только от Linux Foundation. Первая реализация была опубликована совсем недавно.
  • Eris Industries: Инструменты, помогающие использовать Ethereum,Bitcoin или полностью независимые блокчейны, в основном для создания частных сетей. Их инструкции и руководства являются отличной отправной точкой для обзора блокчейна.
Сложность этих реализаций сильно различается. Если вам необходимо создать приложение прямо сейчас, мы советуем:
  • Eris для небольших частных блокчейнов или для того, чтобы поиграться с технологией и общего ознакомления.
  • Ethereum для крупных блокчейн проектов
Кроме того, Bitcoin это не лучший выбор для платформы разработки. Он был разработан для денежных транзакций и только, хотя вы и можете запрограммировать псевдо-умные контракты. В настоящее время сеть испытывает серьезный кризис роста, транзакции ждут в очереди до часа, чтобы быть помещенными в блок. Майнеры часто выбирают транзакции с наибольшими комиссионными, так что передача денег в Bitcoin становится дороже, чем в банке. Сообщество разработчиков находится на грани войны, и спекуляции с криптовалютой делают номинальную стоимость слишком изменчивой.

Цифры

Насколько велик блокчейн сегодня? Взглянем на некоторые цифры.

Bitcoin:

Ethereum:

Заключение

Технология блокчейна одновременно интригующая и захватывающая. Станет ли она революцией, которую предсказывают компьютерные гуру? Или это просто экономический пузырь опирающийся на непрактичные идеи? После изучения большого количества информации на эту тему мы все еще не можем сформировать окончательное мнение.

Когда мы сталкиваемся с неопределенностью, мы знаем отличный способ с ней разобраться: пробовать. Это как раз то, что мы решили делать. Читайте следующую статью в серии, чтобы увидеть, что мы узнали, создавая приложение работающее на блокчейне.

Послесловие переводчика

Перевод этой статьи и нескольких других источников я выполнял, чтобы разобраться, как же все-таки работает блокчейн. И этот цикл статей, пожалуй, лучшее, что я нашел в Интернете о блокчейне. Но все же, эта статья не дает ответ на очевидный вопрос: «Решение сложной математической задачи уменьшает вероятность одновременной публикации блоков, но что же произойдет, если все же несколько узлов решат ее одновременно?». Ответ прост: блокчейн разветвится, и поэтому для таких ситуаций в блокчейне существует специальное правило: «выбирать наиболее длинную ветвь». Есть вероятность того, что несколько узлов решат одну задачу одновременно, но вероятность того, что они сделают это два или более раз подряд сильно снижается, поэтому, рано или поздно, появится наиболее длинная ветвь, которая и будет помещена в блокчейн, т.е. блокчейн быстро стабилизируется. Более подробно об этом и влиянии ветвления на безопасность транзакций можно узнать из видео, которое уже предлагалось раньше.

habr.com

как он работает, и почему эта технология изменит мир / Блог компании ITI Capital / Хабр

Портал Spectrum, который освещает новости в мире технологий, опубликовал материал о блокчейн. В этой статье рассказано, какие есть подводные камни в работе технологии и почему её нельзя использовать повсеместно. Мы подготовили русскоязычную адаптацию этой статьи.

Развитие технологии

Биткоин был придуман как акт неповиновения. Криптовалюта появилась вскоре после мирового экономического кризиса и рекламировалась, как средство от несправедливости и коррумпированности традиционной финансовой системы. Создатели были уверены, что когда биткоин станет более популярным, он будет конкурировать с реальными деньгами и в конечном итоге вытеснит те институты, которые привели к кризису.

Неофициальный лозунг биткоина: «Верим в криптографию», прямо говорит о том, кто виноват в проблемах экономики: посредники, банкиры, «доверенные» третьи стороны, которым на самом деле нельзя доверять. Эти люди просто создают проблемы другим, уменьшая прибыль и усложняя транзакции.

Биткоин стремился заменить услуги, предоставляемые этими посредниками с помощью специального кода и криптографии. Когда человек оплачивает ипотеку, между его банком и другими финансовыми организациями в фоновом режиме происходит ряд операций, благодаря которым деньги снимаются со счёта пользователя. Банк может поручиться, что с деньгами всё хорошо, так как он хранит информацию о том, куда и как была потрачена каждая копейка со счета.

Биткоин и другие криптовалюты заменяют эти фоновые операции и транзакции при помощи программного обеспечения — распределенной и защищенной базы данных, называемой блокчейном. При этом процесс смены владельцев токена биткоина контролируют множество компьютеров. Право на использование криптовалюты может быть передано абсолютно любому человеку, независимо от его национальности и места проживания.

Спустя 8 лет после создания блокчейна, технологию пытаются применить к процедурам и процессам не связанным с передачей денежных средств.

Может ли блокчейн связать людей, которые сдают жильё, с путешественниками и предложить сторонам прозрачную платформу для оплаты? Может ли блокчейн выступать в качестве хранилища и площадки для воспроизведения фильмов, шоу и других цифровых средств массовой информации, сохраняя при этом отчисления и передавая их создателям контента? Может ли блокчейн автоматически проверять авиарейсы и выплачивать компенсации путешественникам, чьи самолёты не вылетели вовремя?

Если это так, то технология блокчейн поможет избавиться от Uber, Netflix и, например, страховых компаний.

Это не предположения, а лишь некоторые вещи, которые сейчас строятся на Ethereum — блокчейн-платформе, которая дистанционно размещает программное обеспечение на распределенной компьютерной системе, называемой Ethereum Virtual Machine. Блокчейн Ethereum, на котором работает криптовалюта эфир, на данный момент наиболее открыт для экспериментов.

Но эта открытость не всегда играет на руку. Новые схемы блокчейна создаются каждый день, в том числе и крупнейшими техническими корпорациями. Microsoft предлагает своим клиентам инструменты для экспериментов с криптовалютой в своем облаке Azure. IBM, Intel и другие сотрудничают с хабом Hyperledger — открытой платформой для разработки бизнес-ориентированных блокчейнов. Крупнейшие банки, — те самые, которых хотели вытеснить создатели криптовалюты, — придумали свою версию технологии, пытаясь опередить тенденции.

И даже биткоин, который работает на первом и самом успешном блокчейне, модернизируется для приложений, о которых его создатели никогда не мечтали.

Но ни один блокчейн не может похвастаться массовым использованием. Никакая концепция или стратегия еще не привела к революции ни в одной отрасли. Биткоином пользуется не более чем 375 000 человек в мире в день.

Какие блокчейн-платформы сохранятся, а какие начнут медленно опускаться на дно? Чтобы сделать какой-либо прогноз, нужно понять, что такое блокчейн и логически соотнести его с биткоином.

Как работает блокчейн

В 2009 году анонимный хакер (или группа хакеров), под псевдонимом Сатоши Накамото, создал первую цифровую валюту. В этой системе деньги были лишь инструментом учета, методом абстрагирования стоимости, назначения собственности и предоставления средств для совершения сделок.

Для выполнения этих функций исторически использовались денежные средства. Обладание физическими токенами — монетами, позволяет людям лично заключать сделки между собой. Наличные деньги достаточно трудно скопировать, поэтому нет необходимости в полном учете того, кому принадлежит определенная часть денежной массы.

Тем не менее, если создать таблицу, в которой указано, кому и сколько принадлежит денег, монеты и купюры станут ненужными. Банки и обработчики платежей уже частично сублимировали физическую валюту в цифровые записи, отслеживая и обрабатывая транзакции в своих закрытых системах.

Биткоин завершил преобразование, создав единый универсальный цифровой регистр, называемый блокчейном. Эта технология получила такое название, потому что похожа на цепь — внести в неё изменения можно только в конец блоков. Каждое новое дополнение содержит набор новых транзакций. Например, если Саша заплатит Юле за биткоин, эта транзакция появится в конце цепи. А в блоках до этого будет указано, что Саше заплатил Миша, а Мише Оля.

Блокчейн для биткоина, в отличие от книг бухгалтерского учёта, которые ведут традиционные финансовые учреждения, расположен на компьютерах по всему миру. Эти данные доступны для всех, у кого есть подключение к интернету. Майнеры, — владельцы компьютеров, на которых хранится информация блокчейна, — отвечают за обнаружение запросов транзакций от пользователей, их объединение, проверку и добавление в блокчейн в виде новых блоков.

Процесс валидации устанавливает, что человек фактически владеет биткоинами после транзакции, и что он еще не потратил их в другом месте. Собственность в блокчейне определяется двумя криптографическими ключами. Первый ключ находится в блокчейне в открытом доступе. Второй доступен только его владельцу. Такие ключи используются для шифрования электронных сообщений. Когда кто-то отправляет зашифрованное сообщение, он использует открытый ключ. Получатель при открытии письма использует закрытый ключ и расшифровывает сообщение.

В технологии блокчейн транзакции подписываются при помощи закрытых ключей, соответствующих открытым ключам, присвоенным монетам, которые хотят потратить. И когда транзакция обрабатывается, этим монетам присваивается новый открытый ключ.

Когда в оформлении операции участвует несколько лиц, становится важен вопрос необратимости. Если бы блокчейн управлялся одним банком с набором известных валидаторов, работающих в рамках одной юрисдикции, то выполнение транзакций было бы простым делом.

Но для биткоина нет центрального банка, обеспечивающего соблюдение правил. Майнеры работают анонимно во всем мире, несмотря на разнообразие культур, различие правовых систем и нормативных обязательств. Поэтому нет способа привлечь их к ответственности. Необратимость операции обеспечивает код биткоина. Он использует схему, которая называется доказательством работы.

Как доказательство работы делает технологию блокчейн надёжной

Для того чтобы создавать новые блоки, майнерам необходимо владеть всей информацией о транзакциях. Они конкурируют между собой, так как майнер, первым создавший блок, получает оплату за эту услугу. Вопрос в том, что мешает майнеру удалить предыдущие транзакции в блокчейне. Хотя он и не сможет таким образом украсть монеты, зато сможет совершить одну и ту же транзакцию несколько раз. Например, оплатить товар, а после этого удалить информацию о транзакции.

Чтобы это избежать, у всех майнеров в сети должна быть одинаковая копия блокчейна.

Когда майнер, добавляет новый блок, он должен предоставить криптографическое доказательство транзакции. Чтобы получить доказательство, майнер проводит блок через несколько раундов хэш-функции — вычисления, которое берет часть данных произвольного размера и переводит их в бессмысленную буквенно-цифровую строку с фиксированной длиной, которая называется хешем. Чтобы сделать процесс более надёжным, алгоритм блокчейн требует, чтобы полученный хеш начинался с определенного количества нулей. Невозможно заранее предсказать, какой хеш будет выдавать заданный набор данных, поэтому майнеры запускают вычисления снова и снова, каждый раз вставляя случайное число в набор данных. Когда это число изменяется, возникает новый хэш. В итоге майнеры получают правильное количество нулей.

Майнер, который находит правильный хеш, отправляет блок другим майнерам. Они его проверяют и добавляют к полной версии блокчейн, содержащуюся на их компьютерах.

Это можно сравнить с закрыванием двери. Предположим, у человека есть замок, и набор ключей, один из которых может его закрыть. Он должен попробовать все ключи, прежде чем найдёт правильный. И после этого оставить его в замке, чтобы другие могли проверить, что ключ подходит.

Майнеры тратят свои средства на поддержку сети — покупают оборудование и платят за электроэнергию. Чтобы изменить блок в блокчейне и провести одну и ту же транзакцию дважды, им придётся потратить в два раза больше своих денег, поэтому обманывать становится невыгодно.

Кроме того, с каждым новым блоком возрастает стоимость изменения предыдущих. Новые блоки хранят хеш стоящего перед ними блока. Любые изменения в старых блоках приведут к недействительным хэшам для всех последующих блоков. Следовательно, невозможно вставить фиктивные модификации в предыдущий блок без повторения всей работы, которая была выполнена после этого блока. Если провести аналогию с замками, получится, что замок в конце цепи связан со всеми предыдущими. Если изменить замок в середине цепи, придётся искать новые ключи для каждого замка после него.

Получается, что майнеры предоставляют дорогостоящие доказательства, а затем получают деньги за свою работу. Таким образом Сатоши создал первую жизнеспособную одноранговую цифровую валюту. Но он также решил более общую проблему, которая на протяжении десятилетий беспокоила ученых. Биткоин, который за 8 лет ни разу не отключался от сети на длительный период, надежно стимулирует майнеров выполнять работу добросовестно, обеспечивая единую сеть. В итоге получается защищённая, постоянно растущая цепочка данных, которую любой, у кого есть подключение к интернету, может проверять и дополнять.

Как использовать блокчейн в других сферах

Технология блокчейн может быть полезна не только для совершения транзакций. Практически сразу после появления биткоина, люди начали думать, как применить эту технологию в других сферах. Когда майнеры проверяют транзакции, они запускают небольшие программы, которые обрабатывают и предоставляют необходимые для транзакции данные. Но что, если запустить более сложные программы, например, программное обеспечение для социальных сетей? Или использовать блокчейн для предоставления данных для онлайн-форумов?

Эти идеи появились сразу после создания биткоина, но только спустя несколько лет, девятнадцатилетний студент из Торонто внёс вклад в их развитие. В 2013 году Виталик Бутерин разработал совершенно новую технологию под названием Ethereum. Благодаря ей блокчейн можно было использовать не только для совершения транзакций.

В отличие от биткоина, Ethereum использует мини-программы, называемыми смарт-контрактами. Они могут быть написаны с неограниченной степенью сложности. Пользователи могут взаимодействовать с программами, отправляя им транзакции с инструкциями, которые затем обрабатывают майнеры.

Это означает, что любой может встроить программу в транзакцию и быть уверенным в том, что она останется неизменной и доступной для цепочки блоков. Теоретически, с Ethereum можно заменить Facebook, Twitter, Uber или любую другую цифровую службу новыми версиями, которые были бы прозрачны, неуязвимы для цензоров и не требовали вмешательства человека.

Что такое распределённый реестр

Параллельно с попытками Бутерина использовать технологию для создания компьютера, охватывающего весь мир, развивалась идея закрытой и контролируемой версии блокчейна. В сентябре 2014 года группа финансовых институтов, в том числе Barclays, Goldman Sachs и JP Morgan сформировала консорциум под названием R3 для изучения того, как блокировки могут повысить эффективность расчётов между банками.

Открытая структура блокчейнов, таких как биткоин и Ethereum, противоречит потребностям этих организаций. В первую очередь вызывает вопросы анонимность пользователей, данные которых представлены буквенно-цифровыми общедоступными адресами, без указаний их реальной идентичности. Банковское законодательство в США и ​​других странах запрещает такую ​​анонимность. «Мы должны знать, кто участники и контрагенты находящиеся на этих платформах», — говорит Тим ​​Свансон, директор по исследованиям рынка в R3.

Финансовые учреждения также юридически обязаны защищать данные о клиентах и ​​контролировать их экспорт по национальным или региональным линиям. Учитывая, что публичные блокчейны содержат всю информацию о транзакциях на многих компьютерах в сети, невозможно ограничить цепочку хранения при их использовании.

Таким образом, появился подход распределённого реестра к технологии блокчейн. В распределённом реестре известна идентификация людей, добавляющих блоки, а данные в системе доступны только для избранных сторон. Поскольку право создавать новые блоки назначается людьми, которые запускают код, а не лотереей, нет необходимости проверки работы майнеров.

Такая система предназначена для ситуаций, когда все участники блочной цепи уже имеют небольшую степень доверия, но хотят выполнить услуги для нейтральной третьей стороны, как это может быть в случае с банками при урегулировании международных банковских переводов.

В прошлом году проект R3, который недавно привлек $107 млн из более чем 40 учреждений, выпустил свой первый распределённый реестр Corda. И у него уже появился конкурент: JP Morgan, который покинул консорциум R3 прошлой весной, выпустил свой собственный реестр, получивший название Quorum.

Подход работы с распределённым реестром также распространяется в другие отрасли, которые хранят конфиденциальные данные клиентов. Многие из этих проектов построены с помощью инструментов, предоставляемых Hyperledger. Он создает продукты для компаний, которые хотят работать со смарт-контрактами, но не решаются использовать открытые блокчейны, такие как Ethereum и биткоин.

«Люди должны понимать фактические проблемы и нормативные требования, которых должны придерживаться такие организации, как банки, страховые компании и отрасли здравоохранения. Они не могут позволить себе риск и неопределенность, которые внедряются некоторыми открытыми системами», — говорит Джонатан Леви, создатель системы управления доступом к блокчейнам Hacera.

Как будут работать смарт-контракты

Независимо от того, какой вариант блокчейна победит, смарт-контракты потребуют целого ряда поддерживающих технологий. Эти дополнительные технологии в настоящее время разрабатываются. И они будут очень важны для расширения технологии блокчейн.

«Как только у нас появятся смарт-контракты, возникнет целый ряд проблем», — говорит Ари Джуэлс, содиректор IC3 Корнеллского университета. Эти проблемы делятся на несколько категорий.

Во-первых, блокчейны не смогут хранить много данных. Это будет проблемой для многих проектов, которые, например, предлагают хранить и передавать потоковое видео. Им просто напросто не хватит места для хранения.

Технология блокчейн записывает входы и выходы каждой монеты в сеть, а также содержимое дополнительного поля, которое позволяет провести до 40 байтов метаданных для каждой транзакции. Это все.

Еще одна проблема блокчейна заключается в том, что технология сама по себе не знает, что происходит в реальном мире. Это важно в случае, если смарт-контракт — это система страхования авиабилетов. Блокчейн должен знать, когда самолет взлетает или приземляется, а для этого нужно запрашивать данные веб-сайтов.

В идеале разработчики будут создавать блокчейны для хранения и доступа к данным с учётом слабых сторон — уязвимости к цензуре и возможности отмены блокировок. Для этого нужно тщательно рассмотреть, каким «доверенным сторонам» можно фактически доверять.

Проблема хранения данных может быть решена с помощью распределенных служб обмена файлами, таких как децентрализованная система облачных хранилищ, протоколов Labs Interplanetary Database или Storj Labs. Это системы, которые позволят людям во всем мире получить дополнительное пространство на своих жестких дисках. Такие схемы будут работать для системы смарт-контрактов на основе блокчейна, поскольку данные будут храниться на нескольких компьютерах по всему миру и всегда будут доступны.

Импортировать данные в режиме реального времени можно будет при помощи «оракулов». Это службы, которые получают оплату за надежный запрос данных в реальном времени и подачу их на смарт-контракты блокчейн.

В IC3 Джелус разработал систему обеспечения защищенного датафида для смарт-контрактов Town Crier. Она защищает вводимые в блокчейн данные от подделки. Процесс работы построен на использовании доверенного программного обеспечения на процессорах Intel.

Финансирование

Чтобы перевести все современные услуги на технологию блокчейн, нужны большие деньги на технику и исследования

Вопрос в том, как получить финансирование на проект, который уничтожит многие крупные корпорации. В идеале нужно создать открытые блокчейны, как Ethereum, и доверить хранение данных тем людям, которые его создали. В таких условиях компания не может выжить из бизнес-модели, которая собирает и продает поведение браузера, историю покупок или данные о местоположении. Также компании блокчейн не могут полагаться на ограниченное владение своей интеллектуальной собственностью, поскольку программы находятся в открытом доступе.

Тем не менее, уже появился потенциальный механизм финансирования для блокчейнов — Initial coin offering или ICO. Он оказался чрезвычайно прибыльным, хотя и юридически сомнительным.

Например, человек решил использовать приложение. Но он не может расплатиться обычной валютой, ему нужно купить специальные монеты для этого приложения, которые заранее выпустили на рынок, и расплатиться ими.

В реальном мире это бы работало так: кто-то открыл прачечную и выпустил билеты, которыми можно оплатить стирку. Владелец заранее продаёт все билеты людям, а они потом, при необходимости, перепродают их другим.

На сегодняшний день более полумиллиарда долларов вложено в продажу токенов, и в последнии месяцы эти цифры только растут. Например, блокчейн Tezos в июле установил рекорд, собрав более 200 миллионов долларов через ICO.

Из-за таких огромных инвестиций появились жалобы пользователей на лицемерие создателей биткоинов. «Создатели блокчейнов, которые продвигают эти схемы, на самом деле демонстрируют всю скупость и алчность, приписываемую ими стандартным финансовым услугам и поддерживаемым правительством валютам, — говорит Престон Бирн, соучредитель Monax Industries — открытой платформы для разработчиков блокчейнов, — когда деньги начинают течь в их направлении, они становятся такими же небрежными в отношении общественности, которой они когда-то были».

Другие утверждают, что ICO, как новый класс инвестиционных инструментов, столь же разрушителен, как и финансируемые приложения.

«Деньги не являются корнем зла. Равенство является корнем зла», — говорит Джоэл Монегро — создатель Placeholder — нового фонда, посвященного технологиям блокчейн.

Он считает, что предоставление основателям и сотрудникам капитала компании побуждает их накапливать богатство, а не использовать его для улучшения своих продуктов.

С другой стороны ICO — не только финансовый инструмент, но и средство доступа к технологии блокчейн. Из этого следует, что чем больше людей используют услугу, тем больше будет спрос на токен, необходимый для доступа.

«Мой стимул заключается не в том, чтобы извлечь больше прибыли, а в том, чтобы больше людей использовали приложение, потому что стоимость токена зависит от стоимости использования услуги. Вы полностью переворачиваете стимулы», — говорит Монегро.

В Соединенных Штатах использование ICO, вероятно, подходит к концу. В конце июля Комиссия по ценным бумагам и биржам США предупредила о том, что многие ICO попадают в категорию ценных бумаг и поэтому должны работать по определённым правилам.

«Времена изменились и очень быстро. Некоторые из ранних последователей биткоина испытывали трудности с финансами три и четыре года назад, но держались за свои убеждения и свои монеты и очень хорошо сейчас себя чувствуют, — говорит Джонатан Леви, создатель Hacera, — нам по-прежнему необходимо, чтобы биткоин и Ethereum работали в более крупных масштабах, поэтому предприятиям необходимо децентрализовать данные и обеспечить их конфиденциальность. Сейчас мы сталкиваемся с новой задачей: учитывая огромные суммы вложенных денег, еще предстоит выяснить, сколько старожилов и новичков останется верными делу и продолжат работать, чтобы изменить мир с помощью технологий, которые уже изменили их».

Другие материалы по теме финансов и технологий от ITI Capital и не только:

habr.com

что такое блокчейн / Блог компании Emercoin / Хабр

В 2017 году блокчейн стал предметом научного интереса, когда в Торонто открылся первый институт исследований блокчейна. Около 30 ведущих экспертов приступили к разработке различных проектов, связанных с этой технологией.

Блокчейн — это надёжный способ хранения данных о сделках, контрактах, транзакциях, обо всём, что необходимо записать и проверить. Сегодня блокчейн проник практически во все сферы жизнедеятельности, готов в корне изменить финансовую систему государства и в разы упростить работу среднего и крупного бизнеса. Блокчейн не секретная технология: в сети огромное количество статей о том, как он устроен и по какому принципу работает. Мы собрали самые интересные и нужные факты в одну статью, на которую можно давать ссылку, когда вас спросят: «Что же такое блокчейн?» Эта технология начала завоёвывать внимание с 2008 года. Поначалу блокчейн ассоциировался лишь с криптовалютой Биткоин. Но кто-то вовремя разглядел его многофункциональность и большие возможности.

Принцип работы

Суть работы блокчейна как цепочки блоков можно сравнить с пазлом. Блок — массив данных, в него вносится информация о транзакциях, которые попали в сеть после создания предыдущего блока (примерно за последние 10 минут). Каждый новый блок данных крепится к предыдущему с помощью сложных математических алгоритмов, что позволяет скрепить эти блоки на века. Чтобы создать новый блок, необходимо вычислить его криптографический отпечаток (хеш), удовлетворяющий определённым условиям.

Этот процесс производится большим количеством разных компьютеров, работающих в одной сети, которые решают некую сложную криптозадачу, в ходе которой необходимо рассчитать хеш (выходные данные) заголовка блока в блокчейне. Другими словами, подобрать особый код, который позволит получить хеш, содержащий определённое количество нулей в начале этого хеша. Процесс поиска блоков называется майнингом. Когда задача решена, формируется новый блок, который нельзя ни удалить, ни изменить. Зато каждый пользователь сети может увидеть всю информацию, находящуюся в блокчейне. Как если бы вы собирали пазлы по онлайн-трансляции перед многомиллионной аудиторией.

На криптографических хешах держится вся надёжность и защищённость блокчейна. Хеш выдаётся системой в формате огромного числа. Для заданного набора данных хэш-функция даёт один хеш, который обладает двумя крайне важными свойствами:

  • первое заключается в том, что, даже обладая ключом, нельзя узнать исходный набор данных;
  • второе свойство — практически невозможно найти другой набор данных, дающий такой же хеш.
Здесь тот случай, когда у медали две стороны: открытость и защищённость. К тому же при малейших изменениях данных результирующий хеш полностью меняется.

Это одно из главных правил технологии. Все данные блокчейн-блоков открыты для всех и всегда. Их легко проверить, легко отследить любое изменение информации. Поэтому вам не придётся гадать о том, насколько достоверны интересующие вас сведения — проверка их подлинности проста и доступна.

Техническая сторона более-менее понятна. А как это выглядит в реальном действии для обычных пользователей? Всем известно, как работает электронная почта. Представим, что одно письмо равно одной денежной единице, и мы можем отправить эти деньги конкретному адресату. Только, в отличие от электронной почты, у нас есть определённый лимит на письма (наличие денежных средств) и одно письмо мы можем отправить лишь одному адресату. После чего лимит наших писем сразу уменьшится, а информация об отправленном переводе зафиксируется как у отправителя, так и у получателя. При этом все письма надёжно защищены. Информацию о проведённой транзакции нельзя ни удалить, ни изменить. К тому же её видят все пользователи сети — адресаты вашей электронной книги.

Наше «письмо» может быть не только денежной единицей, но и ценной бумагой, акцией. Всем, чем угодно, что необходимо записать и проверить.

Блокчейн полностью децентрализирован, над ним не стоит никакой орган власти, который может запретить транзакции или заблокировать доступ к блокчейну. Не нужна никакая третья сторона для подтверждения передачи информации. Если мы передаем деньги, то необходимо подтверждение банка, если отправляем права на собственность, то требуется участие нотариуса. Блокчейн полностью исключает необходимость участия третьего доверенного лица.

Сегодня блокчейн перестаёт ассоциироваться с биткоином и становится самостоятельной технологией, которая ложится в основу новых приложений и систем. Эксперты уверены: как в своё время конные повозки уступили место автомобилям, так и блокчейн становится логичным эволюционным продолжением традиционных инструментов учёта. К тому же, если раньше о блокчейне говорили, как о хранилище данных, то теперь его возможности становятся гораздо шире, потому что он также может исполнять программы. Некоторые блокчейны позволяют каждому факту содержать мини-программу. В криптовалюте это можно проследить при совершении транзакций с условиями, например: пользователь А передаст пользователю B 12 BTC, если сегодня 15 апреля, 13:30.

В блокчейне нет магии, лишь математика. И всё же одно важное свойство этой технологии не перестаёт удивлять даже самых видных экспертов: возможности блокчейна ограничены лишь человеческой фантазией. Поэтому время покажет, на что ещё способен блокчейн.

Алгоритмы

2002 год. Америка. Агентство национальной безопасности США объявляет о создании хеш-функции SHA-2. Криптография выходит на новый уровень.

Пройдёт шесть лет, и алгоритм SHA-256 (один из видов SHA-2) ляжет в основу самой первой в мире криптовалюты, и до сегодняшнего дня останется той самой классикой, которую не истребят даже новомодные разработки.

Хеширование необходимо для того, чтобы преобразовать входные данные какой угодно длины в битовую или иначе выходную строку определённого размера. Происходит это преобразование благодаря хеш-функции или функции свёртки.

Применяется хеширование в различных приложениях, созданных для защиты информации. Не обошлось без хеш-функции и в блокчейне.

Чтобы закрыть блок, необходимо перебрать различные комбинации и подобрать правильный хэш. На первый взгляд, кажется, что хэш — это случайная последовательность букв и цифр. Но на самом деле это надёжная гарантия того, что, если в блоке изменится хотя бы один бит, каждый узел быстро узнает о попытке фальсификации истории транзакций.

Технически алгоритм SHA-256 работает так: исходное сообщение разбивается на блоки, затем каждый блок делится на 16 слов. Каждый блок сообщения алгоритм пропускает через цикл с 64 или 80 раундами. Результаты обработки каждого блока складываются, полученная сумма и является значением хеш-функции.

Для данного алгоритма необходимо мощное оборудование, тогда процесс будет эффективным. Сильное железо способно вычислять более 2 миллиардов хэшей в секунду. SHA-256 стал прототипом для самого массового алгоритма хеширования.

С целью противодействия вычислениям хеша на специализированном оборудовании (ASIC), был изобретён алгоритм хеширования под названием Scrypt. Его задача та же: найти хеш, только здесь упор сделан не на мощность оборудования, а на оперативную память и время, которое требуется для вычисления хеша.

Данный алгоритм во время производимых операций хранит в памяти более одной тысячи различных значений хэша. На выходе он комбинирует все значения и даёт конечный результат. Поэтому, по сравнению с SHA-256, здесь необходим большой объем памяти для вычисления scrypt-хэшей.

Есть и ещё один довольно популярный вид алгоритмов группы Х, и его разновидности Х15, Х13, Х11. Цифра после Х — это то количество последовательных функций, которые используются для вычисления блока. Эти алгоритмы достаточно часто используют различные форки криптовалют. Такие криптовалюты очень нравятся майнерам-любителям, так как эти криптовалюты можно майнить на видеокартах, без затрат на покупку специализированного оборудования.

Следующий алгоритм называется Blake. Как и SHA-2, BLAKE имеет два варианта: первый использует 32-битные слова, используемые для вычисления хешей длиной до 256 бит, а второй использует 64-битные слова, используемые для вычисления хешей длиной до 512 бит. Преобразование базового блока объединяет 16 слов ввода с 16 рабочими переменными, но между блоками сохраняется только 8 слов (256 или 512 бит).

На этом алгоритмы не заканчиваются, каждый год программисты придумывают что-то новенькое. Постепенно популярность набирают алгоритмы крипто 2.0: N-Scrypt, Scrypt-jane и CryptoNote.

Зачем так много и так часто? Создатели криптовалют стремятся создать алгоритмы, которые было бы трудно перевести на специализированное оборудование, ASIC. Мы в этом подходе видим сразу четыре потенциально слабых места:

  1. Асики всё равно делают, и уже сделаны асики под Скрипт и N-Скрипт;
  2. Ошибочно полагают, что таким образом можно избежать централизации. На самом деле в любом бизнесе, а майнинг это бизнес, централизация неизбежна;
  3. Алгоритмы, выполняемые на процессорах общего назначения, это неиссякаемый источник мотивации для вирусописателя-ботнетовода;
  4. Новые алгоритмы, созданные «на коленке», серьёзно не тестированы, какие там могут быть уязвимости и дыры, неизвестно.

Что такое PoW и PoS?

Каждому из нас хотя бы раз приходилось отчитываться о проделанной работе. Кто-то это делает постоянно, кто-то — от случая к случаю, но, так или иначе, если хочешь получить зарплату, докажи, что усердно работал. К чему бы вся эта демагогия? Так проще понять, что такое PoW.

Мы уже писали об одном потрясающем свойстве блокчейна — децентрализации. Чтобы подтвердить транзакцию или сделку, не нужна третья сторона. Но необходим особый алгоритм. Proof of Work или доказательство выполнения работы — принцип защиты распределённых систем от хакерских атак или спама. Главное назначение Proof of Work — проверить вычисления, произведённые при создании нового блока. Из-за того, что процесс вычисления блока сложен и случаен, нельзя точно предсказать, какой из майнеров решит задачу и закроет блок. Чтобы блок признали истинным, нужно, чтобы значение его хеша было меньше, чем текущая цель. Таким образом, каждый блок показывает, что была проделана работа по его нахождению.

В первой части мы писали, что все блоки имеют хеш предыдущего блока. Изменить какой-либо блок нельзя, но возможно создать новый. Для этого нужно найти все предыдущие блоки. Высокая сложность этого процесса и защищает блокчейн от хакерских атак и несанкционированных модификаций.

Для более простого понимания приведём пример: какой-то человек совершает сложную и долгую работу, затем результаты этой работы отправляет в систему на проверку. У этой системы есть специальный «шаблон проверок», благодаря которому правильность решения устанавливается за секунды. Важная особенность этого алгоритма заключается в разности затрат времени — большой срок запроса и быстрая скорость ответа. Очень долго что-то вычисляем, но быстро проверяем. Но, помимо преимуществ, у алгоритма есть и недостатки. Главный минус — огромные затраты вычислительных мощностей. Многие видные обозреватели крипто и блокчейн технологий сравнивали PoW со страшным монстром, который день и ночь пожирает электричество.

Альтернативу долго ждать не пришлось. Многие майнеры возликовали, когда появился новый алгоритм под названием Proof of Stake, или, иначе, подтверждение доли. И здесь важны не мощность вашей техники, не количество затраченного времени, а баланс вашего кошелька. Это тот принцип, когда деньги делают деньги: чем больше денег у вас есть в кошельке, тем большую прибыль вы получите. Если приводить примеры, то PoW-модель — это когда вы идёте на работу и зарабатываете деньги (работник), а PoS-система — это когда вы свои сбережения кладете в надёжный банк и живёте на проценты (рантье).

Степень защиты от атак при PoS гораздо выше. Так как, чтобы провести атаку, нужно хорошенько потратиться. Но если купить 51% монет, то рынок отреагирует быстрым ростом цены. Кроме того, какой смысл делать атаку на сеть, если большая часть ресурсов атакующего вложены в виртуальные монеты этой же сети, и атака ударит по самому больному — по кошельку? Если у атакующего найдётся много средств, и он её произведёт, то он сам же и пострадает от атаки, поскольку это нарушит устойчивость криптовалюты. Минусы у Proof of Stake, к сожалению, тоже имеются.

Поэтому кому-то из гениев блокчейн сообщества пришла в голову идея — найти золотую середину, объединив два алгоритма Proof of Stake и Proof of Work.

Гибридная схема PoW + PoS

Ресурсы, расходуемые на хеширование блоков при алгоритме PoW, огромны и намного превышают мощности крупнейших суперкомпьютеров. К тому же PoW-криптовалюту можно атаковать, временно арендовав огромные вычислительные мощности.

PoS-криптовалюты потенциально уязвимы для других видов атак. К примеру, атакующий захотел создать форк блокчейна — более длинную альтернативную цепочку за счёт траты «несуществующих» ресурсов. К тому же он может получить поддержку других майнеров, ведь им также не придётся расходовать «подлинные» ресурсы.

С помощью форка атакующий может блокировать те или иные транзакции и производить атаки «двойного расхода». Подобные атаки могут делиться на ближние и дальние. При ближних атаках происходит замена большинства последних блоков, а в момент дальней атак атакующий может заменить всю историю сети.

Гибридный же механизм наиболее безопасен, поэтому и лёг в основу проекта Emercoin и ряда других.

При стандартной гибридной схеме блокчейн состоит из двух типов блоков. Одновременно ищутся как блоки PoW, так и PoS. «Доказательство работы» можно сравнить с пропускным пунктом, ведь в основном PoW используется для распределения новых монет. Подтверждение доли необходимо для защиты транзакций, то есть в качестве основного средства для генерации блоков транзакций. Для успешной атаки на проект с гибридным механизмом атакующий должен иметь 51% всей вычислительной мощности сети и 51% всей денежной массы. Это создаёт для атакующего два барьера разной природы, которые и защищают сеть от компрометации.

Как мы уже упоминали, Emercoin имеет гибридный механизм консенсуса, но в нашем проекте упор больше сделан на PoS. По сути, Emer является PoS-криптовалютой, в которой механизм PoW оставлен по соображениям безопасности, и играет хоть и важную, но вспомогательную роль, а примерно 80% блоков закрываются именно PoS-ом.

habr.com

Подтверждение доли и доказательство работы / Блог компании Bitfury Group / Хабр

Блокчейн — это распределенная система, в которой могут находиться тысячи участников. В отличие от обычных распределенных баз данных, в блокчейне почти всегда отсутствует центральный администратор, который конфигурирует узлы сети, поэтому получается, что архитектура блокчейна не просто распределена, но децентрализована. В связи с этим для блокчейна является актуальной задача распределенного консенсуса:

«Как узлам сети достичь одинаковой точки зрения на журнал транзакций блокчейна в распределенной сети при условии, что произвольные узлы могут «падать» или зависать, руководствуясь лишь общими правилами обработки сообщений в сети?»

О том, как достигается консенсус в блокчейнах, мы поговорим в нашем сегодняшнем материале.

/ изображение jgbarah CC

Структура и узлы блокчейн-сетей

В любой блокчейн-сети передаются два основных типа сообщений — транзакции и блоки (которые, в свою очередь, являются списками транзакций). Транзакции формируются участниками системы и их алгоритм консенсуса не касается: для того чтобы инициировать, скажем, отправку биткойнов, никакого соглашения не надо, достаточно знать правильный ключ. Блоки — совсем другое дело. Они являются основным продуктом алгоритма консенсуса и определяют, в каком порядке транзакции будут включены в журнал транзакций.

Зачем нужны эти сложности? Оказывается, без согласования между узлами сети возможна повторная трата средств (double spending). Предположим, у Евы есть 1 биткойн. Она может сформировать две транзакции, согласно которым этот биткойн переходит Алисе и Бобу. Если Алиса и Боб никак не согласовывают свою историю транзакций, они оба примут платеж Евы, поскольку транзакции будут подписаны электронной подписью Евы, а до выполнения транзакции у Евы действительно был этот биткойн! Поэтому участникам сети нужно согласовывать журналы транзакций. Тогда успешно выполнится только одна из транзакций Евы, а вторая станет некорректной — средства Евы будут уже потрачены.

Можно ли обойтись без блоков, включая транзакции в журнал по отдельности? Теоретически да, но на практике блоки экономят объем трафика и вычислительные ресурсы узлов сети. Кроме того, у них есть и другие преимущества в контексте конкретных алгоритмов консенсуса — оказывается, что со слишком частыми блоками работа блокчейна становится нестабильной.

Блоки создаются особой категорией узлов сети блокчейна — так называемыми узлами консенсуса. В случае биткойна и других криптовалют эти узлы называют майнерами, поскольку они вознаграждаются за свою работу (майнинг) генерацией новых порций криптовалюты. Майнеры активно участвуют в формировании блокчейна, постоянно группируя входящие транзакции в блоки и распространяя их по сети.

Второй тип — узлы аудита. Они не участвуют в процессе консенсуса, однако имеют у себя полную копию блокчейна. «Аудиторы» регулярно проверяют работу майнеров и занимаются распределением нагрузки по сети, выполняя функцию своеобразной сети доставки контента (CDN) для данных блокчейна.

Третий тип узлов — это легкие клиенты. Легкими они называются потому, что не имеют полной версии блокчейна и содержат лишь те данные, которые важны для узла. По этой причине они являются хорошим вариантом для организации криптовалютного кошелька — всей картины сети такой клиент не даст, но позволит эффективно отслеживать баланс пользователя. Легкие клиенты требуют меньше вычислительных ресурсов и объемов памяти, поэтому могут работать на мобильных платформах.

/ Роли узлов в блокчейн-сети. Узлы консенсуса и конечные клиенты могут быть «отгорожены» друг от друга

Биткойн-блокчейн является одним из крупнейших блокчейнов. По данным сайта bitnodes, 8 апреля 2017 года в биткойн-сети наблюдалось 7025 узлов с полной копией блокчейна. Большая часть из них — это узлы аудита; продуктивных майнеров в сети не так уж много — несколько десятков. Отметим, что количество узлов в несколько раз меньше числа участников сети биткойн (которых более 13 миллионов). Так получается потому, что пользователи не обязаны хранить локальную копию блокчейна для отправки транзакций — достаточно хранить закрытые ключи, при помощи которых транзакции подписываются.

Консенсус

Задача распределенного консенсуса не специфична для блокчейнов и имеет хорошо проверенные решения для многих других распределенных систем (например, баз данных NoSQL). Даже задача консенсуса, в котором узлы могут вести себя «по-плохому», — задача византийского консенсуса — впервые была сформулирована в 80-х годах прошлого века, а методы её решения появились в конце 90-х.

Но биткойн и другие блокчейны от предыдущих наработок отличаются условиями работы сети. В обычных алгоритмах византийского консенсуса у узлов сети есть «личности», выражаемые через цифровые подписи или сходные криптопримитивы, а сам список узлов известен заранее или меняется редко, но предсказуемо. В биткойн-блокчейне все наоборот.

Участники сети не только заранее неизвестны, но и могут свободно подключаться или отключаться от сети. При этом блокчейн, являясь децентрализованной системой, имеет определенные свойства: устойчивость к цензуре (никто не может запретить майнить криптовалюту) и объективность (для определения текущей версии журнала транзакций не нужно доверие неким авторитетным источникам — корень доверия находится в самом блокчейне).

Из-за этого обычные алгоритмы византийского консенсуса для блокчейна не подходят. Поэтому было предложено множество различных алгоритмов, среди которых выделяются две основные категории: алгоритмы на основе доказательства работы (proof-of-work) и алгоритмы на основе подтверждения доли (proof-of-stake).

Доказательство работы — PoW

Доказательство работы было «изобретено» задолго до биткойна еще в начале 90-х и применялось в ином контексте: для защиты от спама. Например, один вариант доказательства работы (Hashcash) был предложен английским криптографом Адамом Бэком (Adam Back), который сейчас является генеральным директором одного из крупнейших блокчейн-стартапов.

В случае доказательства работы хеш сообщения, объединенного со специальным полем (nonce), должен быть меньше определенного значения (или начинаться с определенного числа нулевых битов). Nonce не несет смысла для самого сообщения — это поле перебирается автором доказательства, пока не будет найдено подходящее значение. Название «доказательство работы» отражает тот факт, что для нахождения nonce надо совершить вычислительную работу, ожидаемое количество которой измеримо. Например, если нужно, чтобы первые 16 бит хеша равнялись нулю, то в среднем нужно перебрать 65536 значений nonce.

Проиллюстрировать это можно с помощью программы на Python:

import itertools from hashlib import sha256 # Интерпретирует последовательность символов как little-endian число to_long = lambda x: sum(ord(b) << (8*i) for i, b in enumerate(x)) # Комбинирует nonce и сообщение для вычисления хэша. combine = lambda nonce, msg: str(nonce) + ":" + msg # Проверяет доказательство работы def verify_pow(msg, nonce, difficulty): h = sha256(combine(nonce, msg)).digest() # Равны ли первые difficulty битов хеша нулю? return to_long(h) % (1 << difficulty) == 0 # Создает доказательство работы для сообщения def create_pow(msg, difficulty): for nonce in itertools.count(0): if verify_pow(msg, nonce, difficulty): return nonce msg = "blockchain" nonce = create_pow(msg, 16) combine(nonce, msg), sha256(combine(nonce, msg)).hexdigest() #43952:blockchain 000027b5022f88d2da21bd2802268966050f5a0b031058ce4562939c13727303 Уточнение насчет ожидаемого количества работы является важным. Теоретически, при сильном везении, подходящий nonce можно найти очень быстро. Если программу выше запустить с сообщением «Bl0Ckchain», то получится, что значение nonce равняется 6571, а это в десять раз меньше ожидаемого. Поэтому, глядя на доказательство работы, можно лишь оценить затраченные на него ресурсы, однако для высокой сложности доказательства (то есть ожидаемого количества выполненной работы) эта оценка будет достаточно точна.

Доказательство работы похоже на цифровые подписи — оно обеспечивает целостность сообщения, так как вероятность того, что один и тот же nonce подойдет для различных сообщений, очень мала. Доказательства также легко проверяются — достаточно провести лишь одну операцию хеширования. В отличие от подписей, создание доказательства работы не требует знания секретов, но «потребляет» больше вычислительных ресурсов. Например, в приведенной выше программе на создание доказательства работы для сообщения «blockchain» сложностью 32 бита требуется несколько часов вычислений на обычном персональном компьютере, однако проверяется это доказательство практически мгновенно.

sha256("5263268363:blockchain") = 000000007cf39dfc8fccae534b39b5f362c16891abca02d0e7b1dbd5a129ee17

PoW и консенсус

Использование PoW для консенсуса — пожалуй, самая большая инновация оригинальной статьи о биткойне. Соответствующий алгоритм консенсуса получил вполне академическое название — консенсус Накамото. Сатоши (автор или авторы статьи) предложил «подписывать» каждый создаваемый блок доказательством работы, сложность которого зависит от общей вычислительной сложности сети биткойна. Такой подход дает несколько преимуществ:
  • Консенсус Накамото решает главный бич анонимных сетей — атаки Сибиллы, в которых злоумышленник создает кучу фейковых узлов, чтобы «задавить» получившимся большинством мнение честных пользователей. Чтобы обладать мнением в консенсусе Накамото, нужно обладать реальной вычислительной мощностью, которую нельзя подделать, и которая не требует никакой дополнительной аутентификации — она сама по себе привязывает узлы к реальному миру.
  • Доказательство нельзя подделать и «перенести» на другие блоки. Таким образом, майнеры не могут воровать доказательства друг у друга.
  • Более того, доказательства нельзя заготовить впрок — в каждый блок входит ссылка на предыдущий, поэтому начать работать над доказательством можно только после появления предыдущего блока в сети.
  • Доказательства работы обеспечивают честность — награда каждого майнера пропорциональна его вычислительной мощности (хешрейту). Если у майнера есть 10% хешрейта от всей сети, то он будет в среднем создавать 10% блоков и получать 10% награды.
  • Поскольку на создание доказательства тратятся реальные ресурсы (которые в случае биткойна измеряются тысячами долларов в минуту), у майнеров возникает совершенно новый стимул действовать в рамках протокола — нечестное поведение немедленно лишает их реальных денег.
Доказательства работы используются узлами биткойна для определения состояния системы. Актуальный журнал транзакций определяется как цепочка блоков с наибольшей суммарной сложностью доказательств работы. Майнеры, соответственно, должны искать блок поверх этой цепочки. Но, теоретически, никто не запрещает создавать новые блоки на основе какого-то старого блока (иногда случаются расщепления — форки — блокчейна, потому что два майнера находят новый блок практически одновременно). Однако намеренные форки невыгодны экономически, потому что блоки из побочных ветвей блокчейна никем не учитываются и не приносят их создателям никакой прибыли — одни затраты на нахождение доказательства работы.

Консенсус Накамото обеспечивает два ключевых требования к блокчейну, которые мы выделили ранее. Из-за того, что доказательство работы не привязывается к личностям майнеров (в отличие от цифровых подписей/сертификатов), обеспечивается устойчивость к цензуре. А за счет того, что доказательства работы быстро проверяются и не требуют для проверки ничего, кроме блокчейна, достигается объективность протокола.

Консенсус Накамото устойчив к атакам на сеть блокчейна, причем его безопасность достаточно хорошо исследована теоретически (в отличие от более новых предложений для блокчейнов). В оригинальной статье отмечено, что сеть биткойна продолжит адекватно функционировать, даже если половина майнеров начнет злонамеренную активность. Если же среди майнеров появится злонамеренное большинство (так называемая атака 51%), они смогут игнорировать блоки от всех остальных майнеров, чтобы забрать себе всю награду в сети, или, например, мошенничать, производя повторную трату средств за счет намеренных форков блокчейна. Однако при этом отметим, даже если все майнеры в сети сговорятся, они не смогут обойти базовые механизмы безопасности биткойна — например, не смогут похитить биткойны пользователей.

Биткойн — самая мощная сеть, использующая доказательство работы. За одну секунду майнеры биткойна вычисляют более трех квинтиллионов (3∙1018) хешей. 32-битное доказательство (которое вычисляется на компьютере несколько часов) — это минимальная сложность в биткойне, которую можно было наблюдать лишь в самом начале работы сети. Это связано с тем, что сложность доказательства автоматически регулируется так, чтобы биткойн-сеть находила в среднем один блок в 10 минут. При увеличении хешрейта сети растет и сложность — сейчас сложность одного доказательства составляет около 70 бит. Соответственно, hex-запись хеша блока должна начинаться с 17 нулей.

/ Мощность биткойн-сети растет по экспоненте. Это обеспечивает высокую стоимость атаки на сеть

Альтернативы для PoW

У консенсуса Накамото есть свойство, которое многими воспринимается как большой недостаток, — для обеспечения безопасности нужно «работать», то есть производить доказательства работы. Вычисления, которые выполняются в рамках PoW, не служат никакой полезной цели, и это архитектурная особенность. Оказывается, очень сложно придумать доказательство работы, которое бы выполняло общественно полезную роль. Поэтому может показаться, что ресурсы (прежде всего, электричество) на майнинг тратятся впустую (если не считать, что они тратятся на обеспечение безопасности).

Помимо этого, майнинг все же подвержен проблеме централизации. Более 70% хешрейта биткойна на данный момент находится в одной стране — Китае. Многие криптовалюты пытаются децентрализовать майнинг за счет использования доказательств работы, которые экономически невыгодно вычислять на специализированном оборудовании, однако с таким подходом возникает другая проблема — если сделать выгодным майнинг биткойнов с помощью домашних компьютеров, то арендовать оборудование для атаки (или создать для нее ботнет) станет существенно дешевле и проще.

Пытаясь решить эти проблемы, сообщество предлагает множество алгоритмов консенсуса, которые не требуют «работы». Самая популярная категория таких алгоритмов основана на доказательствах доли (proof-of-stake, PoS). Доказательство доли похоже на доказательство работы, только вместо совершения определенной работы автор показывает, что у него есть доля в системе (например, в виде ненулевого баланса криптовалюты). Получается, что для майнинга с PoS достаточно «запастись» криптовалютой, после чего просто получать с нее «проценты».

Однако у доказательства доли есть неприятный недостаток в сравнении с PoW: поскольку доказательства доли базируются не на реальном мире (вычислительная мощность), а на чём-то внутри самого блокчейна (баланс криптовалюты), задача построения надежного PoS-алгоритма оказывается нетривиальной.

В простейших вариантах PoS-консенсуса возникают проблемы с базовыми свойствами. Оказывается, что в них самым экономически выгодным поведением является размножение форков блокчейна для повторной траты средств. Были созданы более сложные варианты доказательства доли, без явных дыр в безопасности; такие алгоритмы возвращают в консенсус фактор экономической ответственности за счет обязательного залога, который конфискуется в случае некорректного поведения участника.

У криптографического сообщества все еще остаются сомнения насчет возможности надежных алгоритмов с доказательством доли. Возможно, планируемый переход на доказательство доли блокчейна Ethereum — второго по объему рынка публичного блокчейна — расставит все точки над i.

Кроме доказательства доли, блокчейн-энтузиасты экспериментируют и с другими алгоритмами «proof-of-*». Например, Брэм Коэн (Bram Cohen), создатель протокола BitTorrent, недавно предложил использовать для консенсуса в блокчейнах доказательство локального хранения файлов (proof-of-space), то есть заменить вычислительную мощность в PoW на дисковое пространство. Однако по степени зрелости подобные инициативы еще сильнее отстают от алгоритмов доказательства работы, чем proof-of-stake.

P.S. А вот еще небольшая подборка наших материалов:

habr.com

Blockchain / Хабр

Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.

Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

В таких системах есть три группы действующих лиц:

  • источники событий (транзакций)
  • источники блоков (фиксаторы транзакций)
  • получатели (читатели) блоков и зафиксированных транзакций.
В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:

  • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
Для того чтобы понять, как можно выполнить требование на запрет модификации, стоит разобраться со следующими вопросами:
  • Каким образом гарантируется, что внутри блока нельзя поменять информацию?
  • Каким образом система гарантирует, что уже существующую цепочку блоков нельзя перегенерировать, тем самым исправив в них информацию?
Ответ на первый вопрос прост: нужно снабдить каждый блок хеш-суммой от его содержимого. И эту хеш-сумму включить в качестве дополнительной полезной информации (тоже хешируемой) в следующий блок. Тогда для того, чтобы поменять что-то в блоке без разрушения доверия клиентов к нему, нужно будет это сделать таким образом, чтобы хеш-сумма от блока не поменялась. А это как раз практически невозможно, если у нас используется криптографически стойкая хеш-функция. Либо поменять в том числе и хеш-сумму блока. Но тогда придётся менять и значение этой хеш-суммы в следующем блоке. А это потребует изменений, в свою очередь, в хеш-сумме всего второго блока, а потом и в третьем, и так далее. Получается, что для того, чтобы поменять информацию в одном из блоков, нужно будет перегенерировать всю цепочку блоков, начиная с модифицируемого. Можно ли это сделать?

Тут нужно ответить на вопрос, как в подобных системах защищаются от возможности перегенерации цепочки блоков. Мы рассмотрим три варианта систем:

  • централизованный с доверенным центром
  • централизованный с недоверенным центром
  • децентрализованный вариант с использованием доказательства работы

Централизованный blockchain с доверенным центром

Если у нас есть доверенный центр, то мы просто поручаем ему через определённый промежуток времени (или же через определённый набор транзакций) формировать новый блок, снабжая его не только хеш-суммой, но и своей электронной подписью. Каждый клиент системы имеет возможность проверить, что все блоки в цепочке сгенерированы доверенным центром и никем иным. В предположении, что доверенный центр не скомпрометирован, возможности модификации журнала злоумышленником нет.

Использование технологии blockchain в этом случае является избыточным. Если у нас есть доверенный центр, можно просто обращаться к нему с целью подписать каждую транзакцию, добавив к ней время и порядковый номер. Номер обеспечивает порядок и невозможность добавления (удаления) транзакций из цепочки, электронная подпись доверенного центра – невозможность модификации конкретных транзакций.

Централизованный blockchain с недоверенным центром

Интересен случай, когда выделенный центр не является доверенным. Точнее, не является полностью доверенным. Мы ему доверяем в плане фиксации транзакций в журнале, но хотим быть уверенными, что выделенный центр не перегенерирует всю цепочку блоков, удалив из неё ненужные ему более транзакции или добавив нужные.

Для этого можно использовать, например, следующие два метода.

  • Первый метод с использованием дополнительного доверенного хранилища. После создания очередного блока центр должен отправить в доверенное и независимое от данного центра хранилище хеш-код от нового блока. Доверенное хранилище не должно принимать никаких изменений к хеш-кодам уже созданных блоков. В качестве такого хранилища можно использовать и децентрализованную базу данных системы, если таковая присутствует. Размер хранимой информации может быть небольшим по сравнению с общим объёмом журнала.
  • Второй возможный метод состоит в дополнении каждого блока меткой времени, сгенерированной доверенным центром временных меток. Такая метка должна содержать время генерации метки и электронную подпись центра, вычисленную на основании хеш-кода блока и времени метки. В случае, если «недоверенный» центр захочет перегенерировать часть цепочки блоков, будет наблюдаться разрыв в метках времени.
    • Стоит отметить, что этот метод не гарантирует, что «недоверенный» центр не будет генерировать сразу две цепочки блоков, дополняя их корректными метками времени, а потом не подменит одну другой.

Децентрализованный blockchain

Наибольший интерес для нас (и – наименьший для компаний, продающих blockchain-решения) представляет децентрализованная система blockchain без выделенных центров генерации блоков. Каждый участник может взять набор транзакций, ожидающих включения в журнал, и сформировать новый блок. Более того, в системах типа BitCoin такой участник (будем его назвать «майнером», от англ. to mine — копать) ещё и получит премию в виде определённой суммы и/или комиссионных от принятых в блок транзакций.

Но нельзя просто так взять и сформировать блок в децентрализованных системах. Надёжность таких систем основывается именно на том, что новый блок нельзя сформировать быстрее (в среднем) чем за определённое время. Например, за 10 минут (BitCoin). Это обеспечивается механизмом, который получил название доказательство работы.

Механизм основывается на следующей идее. Пусть есть криптографически стойкая хэш-функция и задан некоторый параметр (от англ. target – цель). , где — размер выхода хэш-функции в битах. Корректным новым блоком blockchain-сеть будет признавать только такой, значение хэш-суммы которого меньше текущего заданного параметра . В этом случае алгоритм работы майнера выглядит следующий образом:

Для каждой итерации цикла вероятность получить корректный блок равна . Так как обычно мало, то майнерам нужно сделать большое количество итераций цикла, чтобы найти нужный . При этом только один (обычно — первый) из найденных блоков будет считаться корректным. Чем больше вычислительная мощность конкретного майнера, тем больше вероятность, что именно он первым сумеет найти нужный .

Зная суммарную вычислительную мощность blockchain-сети, участники могут договориться о таком механизме изменения параметра , чтобы время генерации нового корректного блока было примерно заданное время. Например, в сети Bitcoin параметр пересчитывается каждые 2016 блоков таким образом, чтобы среднее время генерации блока было 10 минут. Это позволяет адаптировать сеть к изменению количества участников, их вычислительных мощностей и к появлению новых механизмов вычисления хэш-функций.

Кроме задания параметра можно оперировать другими величинами, так или иначе относящимися к мощности вычислений.

  • Hashrate — количество хешей, которые считают за единицы времени конкретный майнер или сеть в целом. Например, в ноябре 2017 года общий hashrate для сети Bitcoin составлял примерно хэшей в секунду.
  • Difficulty — сложность поиска корректного блока, выражаемая как , где — некоторая константа сложности, а t — текущая цель (англ. target). В отличие от параметра t, который падает с ростом вычислительной мощности сети, d изменяется вместе с hashrate, что делает его более простым для восприятия и анализа человеком.

В случае примерно одновременной генерации следующего блока двумя и более майнерами (когда информация о новом блоке публикуется вторым майнером до того, как ему придёт информация о новом блоке от первого) в направленном графе блоков происходит разветвление. Далее каждый из майнеров выбирает один из новых блоков (например – какой первый увидели) и пытается сгенерировать новый блок на основе выбранного, продолжая «ответвление» в графе. В конце-концов одна из двух таких цепочек становится длиннее (та, которую выбрало большее число майнеров), и именно она признаётся основной.

В случае нормального поведения системы на включение конкретных транзакций в блоки это влияет мало, так как каждый из добросовестных майнеров следует одному и тому же алгоритму включения транзакций в блок (например, в сети BitCoin – алгоритму максимизации комиссии за блок). Однако можно предположить, что какой-нибудь злоумышленник захочет «модерировать» распределённый blockchain, включая или не включая в блоки транзакции по своему выбору. Предположим, что доля вычислительных ресурсов злоумышленника (направленных на генерацию нового блока) равна ( 0% < < 50%). В этом случае каждый следующий сгенерированный блок с вероятностью будет сгенерирована мощностями злоумышленника. Это позволит ему включать в блоки те транзакции, которые другие майнеры включать не захотели.

Но позволит ли это злоумышленнику не включать что-то в цепочку транзакций? Нет. Потому что после его блока с вероятностью будет следовать блок «обычного» майнера, который с радостью (пропорциональной комиссии-награде) включит все транзакции в свой блок.

Однако ситуация меняется, если мощности злоумышленника составляют более 50% от мощности сети. В этом случае, если после блока злоумышленника был с вероятностью сгенерирован «обычный» блок, злоумышленник его может просто проигнорировать и продолжать генерировать новые блоки, как будто он единственный майнер в сети. Тогда если среднее время генерации одного блока всеми мощностями , то за время злоумышленник сможет сгенерировать , а легальные пользователи блоков, . Даже если с некоторой вероятностью легальные пользователи сгенерируют 2 блока быстрее, чем злоумышленник один, последний всё равно «догонит и перегонит» «легальную» цепочку примерно за время . Так как в blockchain есть договоренность, что за текущее состояние сети принимается наиболее длинная цепочка, именно цепочка злоумышленника всегда будет восприниматься правильной. Получается, что злоумышленник сможет по своему желанию включать или не включать транзакции в цепочки.

Правда, пользоваться чужими деньгами злоумышленник всё равно не сможет – так как все блоки транзакций проверяются на внутреннюю непротиворечивость и корректность всех включённых в блок транзакций.

Кроме концепции «доказательство работы» используются и другие. Например, в подходе «доказательство доли владения» (англ. proof of stake), используемой в сетях Etherium и EmerCoin, вероятность генерации блока пропорциональна количеству средств на счетах потенциальных создателей нового блока. Это намного более энергоэффективно по сравнению с PoW, и, кроме того, связывает ответственность за надёжность и корректность генерации новых блоков с размером капитала (чем больше у нас средств, тем меньше мы хотим подвергать опасности систему). С другой стороны, это даёт дополнительную мотивацию концентрировать больше капитала в одних руках, что может привести к централизации системы.

Механизм внесения изменений в протокол

Любая система должна развиваться. Но у децентрализованных систем нельзя просто «включить один рубильник» и заставить участников системы работать по новому – иначе систему нельзя назвать полностью децентрализованной. Механизмы и способы внесения изменений могут выглядеть на первый взгляд нетривиально. Например:
  • апологеты системы предлагают изменения в правилах работы
  • авторы ПО вносят изменения в программный код, позволяя сделать две вещи:
    • указать участникам системы, что они поддерживают новое изменение
    • поддержать новое изменение
  • участники системы скачивают новую версию и выставляют в новых блоках транзакций (или самих транзакциях) сигнальные флаги, показывающие их намерение поддержать изменение
  • если к определённой дате определённое число блоков содержат сигнальный флаг (обратите внимание на привязку числа голосов к числу сгенерированных блоков), то изменение считается принятым, и большая (по числу новых блоков) часть участников системы в определённую дату включают эти изменения
  • те участники, которые не приняли изменения, или приняли изменения вопреки отсутствию согласия на них большей части участников, в худшем случае начнут генерировать свою цепочку блоков, только её признавая корректной. Основную цепочку блоков они будут считать неверно сгенерированной. По факту это приведёт к дублированию (разветвлению, форку) системы, когда в какую-то дату вместо одного журнала транзакций появляется два, ведущимися разными людьми. Это журналы совпадают до определённой даты, после чего в них начинаются расхождение.
Подводя итоги, Сатоши Накамото (псевдоним), автор технологий blockchain и bitcoin, сумел предложить работающий децентрализованный механизм, в котором и само поведение системы, и изменения к этой системе проходят через явный или неявный механизм поиска консенсуса участников. Для получения контроля над системой в целом злоумышленнику придётся получить контроль как минимум над 50% всех мощностей системы (в случае PoW), а без этого можно лишь попытаться ограничить возможность использования системы конкретными участниками.

Однако созданная технология не лишена недостатков. Существуют оценки, согласно которым использование метода PoW для системы bitcoin приводит к затратам энергии, сравнимой с потреблением электричества целыми городами или странами. Есть проблемы и с поиском консенсуса – сложный механизм внесения изменений, как считают некоторые эксперты, может привести к проблемам роста (например, из-за ограниченности числа транзакций в блоке), и, в будущем, к отказу использования механизма как устаревшего и не отвечающего будущим задачам.

Хотелось бы узнать у сообщества, про какие ещё технологии стоит рассказывать студентам. С одной стороны, им обязательно надо рассказать про базовые вещи — классическую криптографию и криптографию на открытых ключах. Но хочется дать понятие и про современные вещи, которые, возможно, не станут лишним грузом знаний и через пять-десять лет. С текущим содержание учебной программы можно ознакомиться здесь.

История изменений

  • 2017-11-17: Добавлено указание лицензии CC-BY
  • 2017-11-18: Уточнёна и расширена информация про механизм proof-of-work и связанные определения

habr.com