2016 год станет еще более динамичным для развития blockchain, причем технология начнет интегрироваться во многие сферы нашей жизни уверен Роман Худорожков, основатель компании Liberty Grant. По своей значимости она будет сопоставима с созданием Интернет и повсеместным распространением смартфонов, которые трансформировали современный мир и изменили все вокруг: то, как мы работаем, отдыхаем, и как общаемся друг с другом. В связи с этим не будет лишним подробнее узнать, что такое blockchain и чем же эта технология так хороша.
Почему нужна blockchain?Наша жизнь неразрывно связана с деньгами, данными и документами. Из-за этого нам приходится связываться с разнообразными посредниками, которые выдают нам эти деньги, документы и данные, проверяют их, удостоверяют их подлинность, выдают копии, проверяют достоверности копии и так далее.
Причем нас вынуждают доверять этим посредникам, хотя то и дело банкиры скрываются с деньгами клиентов, нотариусы задним числом подделывают завещания и договоры, сотрудники государственных органов и коммерческих организаций пользуются служебным положением в злонамеренных целях.
Не имея возможности доверять друг другу, мы прибегаем к помощи посредников, которые тоже не заслуживают никакого доверия. Вот бы было замечательно, если бы существовал способ обеспечить достоверность в наших отношениях при заключении сделок, исполнении контрактов, а также регистрации прав и событий!
Blockchain как раз и решает все эти проблемы.
Что такое blockchain?Blockchain – это технология надежного распределенного хранения достоверных записей, по большому счету, о чем угодно. Например, в blockchain можно хранить записи о денежных переводах. И в криптовалютах blockchain как раз используется для фиксирования информации о том, кто, кому и сколько виртуальных денег перевел. Но в blockchain можно хранить и данные о выданных кредитах, правах на собственность, нарушении правил дорожного движения, бракосочетаниях. В общем, все, что можно записать на бумаге, можно записать и в blockchain с одним лишь отличием – в blockchain просто нереально подменить или подделать записи.
Для того, чтобы понять, как же этого удалось добиться, надо поближе познакомиться с весьма хитроумным устройством blockchain.
Устройство blockchainBlockchain – это, как не сложно догадаться из названия, цепочка блоков данных, где каждый блок связан с предыдущим. Блок содержит в себе набор записей. А новые блоки всегда добавляются строго в конец цепочки.
Однако это весьма непростая цепочка, которая построена на трех очень важных принципах:
- Распределенность;
- Открытость;
- Защищенность.
Благодаря этому выключить или сломать blockchain практически невозможно, поскольку для этого надо выключить или сломать все компьютеры. Пока есть хоть один пользователь, blockchain существует. Каждый новый пользователь расширяет и укрепляет эту сеть. Причем все компьютеры равноправны, там нет организаторов, модераторов, контролеров и менеджеров. Каждый отвечает за себя сам.
Все данные blockchain – блоки и их содержимое – открыты всегда и для всех. Вы легко можете прочитать любой блок и увидеть все записи в этом блоке. Вы можете посмотреть цепочку и отследить изменение информации. Таким образом, все данные в blockchain легко проверяемы, а значит, вам не обязательно доверять другим участникам сети, ведь вы всегда можете их проверить и получить гарантированно достоверный ответ.
Для защиты данных и пользователей в blockchain широко используется шифрование. Благодаря этому вы одновременно получаете казалось бы несовместимое – открытость и достоверность при полном недоверии к остальным участникам и, возможно, даже их злонамеренном умысле.
Криптографические ключиПроще говоря, в blockchain любой может увидеть, что у кого-то есть миллион. Но вот у кого конкретно он есть – этот любой узнать не может, пока владелец миллиона не даст ему специальный ключ, тем самым подтверждая, что миллион есть именно у него.
Надежность и защищенность blockchain держится на криптографических ключах, с помощью которых можно легко проверить достоверность и корректность данных.
На самом деле ключ – это всего лишь число. Большое число. Очень большое число. Например, вот такое: 117316195423570985008687907853269984665640564039457584007913129639935.
Его рассчитывают с помощью специального алгоритма, который называют хэш-функцией. Хитрость в том, что для заданного набора данных хэш-функция дает строго один ключ, который обладает двумя очень важными свойствами:
- Обладая ключом, нельзя узнать исходный набор данных;
- Найти другой набор данных, дающий такой же ключ, практически нереально.
Есть еще одна важная особенность ключей, которую следует упомянуть. Даже при минимальном изменении исходных данных ключ меняется полностью.
Исходные данные |
Ключ |
просто строка с любыми данными. |
1672738941421626349……... |
просто строка с любыми данными! |
7452308507701029857……... |
просто строка с любыми данными? |
3891821463731365823……... |
просто строка с любыми данными- |
2462786558714469272……… |
Как вы видите, изменение одного лишь символа в исходных данных порождает полное изменение ключа. И мы еще не раз вспомним про эту особенность.
Сеть blockchainВсе данные blockchain хранятся на компьютерах пользователей blockchain-сети. Все пользователи сети равноправны и, вообще говоря, могут делать все, что угодно, в том числе безуспешно пытаться обмануть других пользователей. Запретить им никто не может, потому что все находятся в равных условиях, обладают равными правами и могут в равной степени исполнять и даже нарушать свои обязанности.
Таким образом, пользователю blockchain-сети не нужны никакие посредники, например, банки, госорганы, аудиторы, контролеры, страховые компании или регистраторы. Потому что тут не у кого просить разрешения, ничья удобно занятая позиция не дает никаких дополнительных прав или возможностей, ничей авторитет не защищает вас больше, чем вы сами себя можете защитить.
Войдя в blockchain-сеть, пользователь подключается к другим компьютерам сети для того, чтобы обмениваться с ними данными: блоками и записями. Важно, что эта сеть никак не привязана к географии, то есть пользователь из Москвы может одновременно подключиться к пользователям из Пекина, Лондона, Нью-Йорка и Буэнос-Айреса. И это, кстати, также защищает его от любых региональных особенностей.
Получив новые данные, каждый пользователь проверяет их корректность, и, убедившись в достоверности, сохраняет их у себя, а также передает дальше по сети. Таким образом, в сети может курсировать два вида данных – поддельные и настоящие – которые распространяются, соответственно, злонамеренными и добропорядочными участниками. Каждый из добропорядочных участников, обнаружив поддельные данные, дальше их не передает. В итоге поддельные данные блуждают только между злонамеренными участниками, а добропорядочные участники обмениваются только корректными данными.
Участники сети делятся на две группы: обычные пользователи, которые создают новые записи, и майнеры, которые создают блоки. Дело в том, что создание блока – это очень ресурсоемкий и сложный процесс, и поэтому далеко не все могут и хотят этим заниматься.
Обычные пользователи создают и распространяют по сети записи, например, «пользователь с ключом А переводит 300 денег пользователю с ключом Б» или «человек с ключом А взял в кредит автомобиль с ключом Х». Как вы видите, все записи открыты, но зашифрованы. Если вы знаете ключ автомобиля, то вы можете узнать, находится ли он в кредитном залоге, но не узнаете имя его владельца или наименование банка-залогодержателя, если они сами не решили разместить эти данные в открытом виде.
Причем у одного человека может быть несколько ключей, поэтому, даже зная ключ автовладельца А.Б. Иванова, нельзя узнать наличие ипотечного кредита у А.Б. Иванова, хотя это один и тот же человек.
Далее майнеры собирают записи, проверяют их и записывают в блоки, а затем рассылают эти блоки по сети. После чего обычные пользователи получают блоки и сохраняют их у себя, чтобы можно было корректно создавать свои и достоверно проверять чужие новые записи.
Пока новая запись не внесена ни в один блок, она не считается достоверной. Любой участник сети может ее использовать только на свой страх и риск, поскольку есть вероятность, что это некорректная или даже поддельная запись, а также что ее могут отменить. Поэтому обычно участники просто пересылают новые записи, чтобы она рано или поздно дошла до майнера, который включит ее в блок. И лишь когда запись сохранена в блоке, можно быть уверенным, что она проверена и корректна и отменить ее уже нельзя. Вот так и функционирует blockchain.
Структура блокаБлок в blockchain состоит из заголовка и тела.
Тело блока – это просто список записей. Их мы детально рассмотрим чуть позже. А пока обратим внимание на заголовок, потому что главные секреты хранятся именно здесь. Блоки в blockchain связаны с помощью ключей, поскольку в заголовке каждого блока хранится ключ предыдущего блока. Это очень важное и вместе с тем технически элегантное решение обеспечивает защищенность и невзламываемость blockchain.
Во-первых, ключ каждого блока рассчитан на данных всего блока и ключе предыдущего блока. А это значит, что в ключе любого блока закодированы не только записи этого блока, но и все предыдущие блоки. Любое, даже самое незначительное, изменение данных в любом блоке вызывает полное изменение его ключа, что, в свою очередь, потребует изменения ключей всех последующих блоков.
И таким образом, видя весь blockchain и ключи, вы легко можете проверить корректность любых данных, в частности, удостовериться, верна ли последовательность блоков, не пропущен ли блок – или, может быть, в середину цепи вставлен новый блок, а также – соответствует ли ключ блока хранимым в нем данным. Проще говоря, вы без труда и сложностей всегда можете убедиться, что вас не обманывают.
Во-вторых, ключ блока должен удовлетворять важным правилам безопасности, устанавливающим уровень защищенности сети, который, кстати, может меняться по мере роста сети..Например, в bitcoin ключи первых блоков начинались с десяти нулей – и это устанавливает степень сложности создания нового блока: как поддельного блока, так и совершенно корректного нового блока.
Однако, как вы помните, для любого набора данных всегда существует строго один – и только один – ключ. Как тогда можно требовать, чтобы ключ начинался с нулей, если он начинается, например, с «23786485….»?
Таким образом, мы плавно подошли к процессу майнинга (mining) или добычи ключей.
Добыча (mining) ключейМайнер – это такой же пользователь blockchain-сети, как и все остальные. Но, кроме проверки и распространения данных, он еще занимается созданием новых блоков.
Получив новые записи от других участников сети, майнер собирает их вместе, формирует заголовок будущего блока и рассчитывает ключ блока. Допустим, после первого расчета ключ получился вот таким «3117316195423570985008687907853269984665640589182146373136582». Однако, по правилам, ключ должен начинаться с десяти нулей. Чтобы изменился ключ, необходимо изменить исходные данные. Для этого в заголовке блока предусмотрено специальное поле, которое называется nonce. При первом расчете оно равно 0. Поэтому майнер меняет значение на 1 и снова рассчитывает ключ. Теперь он полностью изменился и равен «6879078532698231173161098500814698466564058913731365829542357». То есть опять начинается не с нулей. Тогда майнер увеличивает nonce до 2 и перерасчитывает ключ. Чтобы найти подходящее значение ключа, майнерам приходится делать миллиарды и триллиарды перерасчетов. И когда подходящий ключ все-таки найден, майнер сохраняет блок и отправляет его другим участникам сети. Теперь все записи в блоке подтверждены и защищены ключом, который весьма нелегко подделать. Причем, как вы помните, в ключе блока закодирован и ключ предыдущего блока, который теперь подделать уже просто нереально.
Хитрость майнинга ключей заключается еще и в том, что этот процесс не имеет прогресса. Проще говоря, неважно, когда вы начали искать ключ, сколько записей входит в блок, сколько времени вы уже считаете, сколько ключей вы уже перебрали – вероятность нахождения ключа на любой итерации всегда одинакова. А это значит, что вы не можете сделать предрасчет, не можете купить ключи, не можете создать склад ключей – все это бессмысленно, а все участники равноправны. И у каждого майнера есть только одна возможность получить подходящий ключ – это считать, считать и считать.
Вот этим и занимаются майнеры. За каждый созданный блок они получают плату. Кто первым нашел ключ, тот создал блок и заработал. Остальные не получили ничего. Затем они все вместе принимаются за поиск ключа для нового блока.
Таким образом, замысловатая процедура расчета ключей, конечно, усложняет создание блока, но еще больше она усложняет создание поддельных блоков, делая это почти невозможным.
И все же попытаемсяПодделать цепочку или изменить записи в блоке не получится, потому что изменятся ключи – и это будет сразу видно. Что же произойдет, если злоумышленник все-таки попытается подделать blockchain? Рассмотрим на конкретных примерах.
Пусть в цепи уже создана последовательность блоков.
Поддельный блок
Руководствуясь своими подлыми целями, злоумышленник решил вставить свой поддельный блок с нужными ему записями между двумя уже существующими блоками и тем самым подделать историю.
В заголовок своего блока он вставляет ключ предыдущего блока и рассылает информацию о новом блоке всем остальным участниками. Однако они сразу же выявят подлог, потому что в ключе блока 126 (и всех последующих тоже) не учтен ключ поддельного блока.
Единственная возможность обмана – злодей должен сделать повторный майнинг всех последующих блоков. Но это невозможно, потому что скорость генерации новых блоков добросовестными участниками точно такая же, как скорость генерации поддельных блоков злоумышленниками (потому что именно так задуман алгоритм майнинга). «Злодеи» просто никогда не догонят «хороших».
Стоит признать, что строго теоретически шанс так называемой «атаки 51%» (когда «злодеев» больше, чем «хороших») все же остается. Но на практике ее воплотить почти невозможно.
Поддельные записи
Пусть весь блок подделать не удается, но можно ли вставить поддельные записи в блок? Это также не получится из-за ключей.
При изменении тела блока, где находятся записи, изменится и ключ всего блока. Но в последующих блоках уже сохранено правильное значение ключа. Поэтому любой участник легко может проверить, что присланный ему блок 126 на самом деле не настоящий, а поддельный.
Смотрим в записиТеперь понятно, что подделать записи или вставить фиктивный блок в blockchain практически нереально. Но раз все пользователи равноправны, что мешает пользователю А создать запись «перевести деньги пользователя Б на счет пользователя А»?
К счастью, записи также защищены путем связывания в цепочку, причем даже более изощренным способом. Каждая запись содержит ссылку на предыдущую запись (источник), а также блокирующее условие и разблокирующее правило.
Источник – это ссылка на результат из предыдущей записи. А результат – это будущий источник для следующей записи. В содержании операции в формализованном виде описана суть данной операции, например, «перевести 100 биткойнов» или «выдать кредит 1000 рублей». Каждый результат защищен блокирующим условием, благодаря которому кто угодно не сможет внести новую запись. Только тот, кто знает разблокирующее правило, имеет право продлить цепочку записей и тем самым изменить информацию в blockchain.
Рассмотрим этот хитроумный механизм на простом примере. В предыдущей записи пользователю А перечислили деньги с блокирующим условием «Ключ пароля равен 50086879078532699846656405891…». Чтобы потратить эти деньги, пользователь А должен создать новую запись, указав в ее разблокирующем правиле тот самый пароль, а само правило будет выглядеть примерно так: «Рассчитать ключ от пароля АБВГД». Результат исполнения разблокирующего правила новой записи подставляется в блокирующее условие предыдущей, и если оно соблюдается, то новая запись считается корректной, а значит, она дойдет до майнера, который включит ее в блок. Если же условие не выполняется, например, потому что введен неправильный пароль, то все добропорядочные пользователи не будут передавать эту запись, а майнер не включит ее в блок. А значит, операция будет отвергнута blockchain-сетью.
Для описания правил и условий используется довольно мощный язык программирования, который позволяет задавать весьма сложную логику и правила взаимодействия участников. Кроме того, источников и результатов в каждой записи может быть несколько, то есть запись может преобразовать несколько записей-источников в несколько записей-результатов. Таким образом, blockchain приводит нас к «умным контрактам» (smart contracts), позволяющим формализовать отношения не только между людьми, но и между роботами и программами.
Не так уж и далеко то время, когда ваш холодильник, выявив нехватку нужных вам продуктов, будет через blockchain заключать «умный контракт» с интернет-магазином, а также с дроном, который и доставит вам продукты на дом.
Подводя итогТеперь вы знаете, как устроен blockchain. Эта надежная и открытая технология скоро изменит нашу жизнь. Например, когда выдача банковских кредитов будет фиксироваться в blockchain, то никто уже не столкнется с кредитным мошенничеством. Да и «дыры» в банковских балансах также будут наглядно видны, поэтому и крупных банкротств удастся избежать. Аферы с ипотечными квартирами и кредитными автомобилями будут просто невозможны – и многие люди избегнут проблем и денежных потерь. Даже государственные сервисы, связанные с оформлением документов, выдачей и подтверждением прав и справок, можно реализовать в виде удобного и открытого реестра на базе blockchain.