Блокчейн на чистом русском

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

Дабы не отставать от вездесущих тенденций посмотрим – что у него внутри!

 

Зачем все усложнять?

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

Представьте, что я ваш лучший друг! Трудно? А вы представьте…

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

Вы мне ответили, что вышлите в ближайшее время и повесили трубку.

Потом открываете свой интернет банк и отправляете мне 1000 долларов на карточку. Платежка пишет: «Будет исполнено, мой господин!»

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

Получив уведомление о исполнении платежа, вы звоните мне и говорите: «Готово, дружище…»

Я вам – «…люблю, целую…» - и побежал снимать, а затем тратить деньги.

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

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

Как получить свои деньги обратно? Кому после этого доверять? А где же их теперь хранить?

 

Можно ли обеспечить отправку денег без банка?

Очень хороший вопрос. И прежде, чем ответить на него, давайте разберемся, что значит «отправить деньги»? Это же просто запись в реестре…

Может быть лучшим вопросом будет: «А можем ли мы вносить записи в реестр без участия третьих сторон?» И ответ, наверное, уже сам напрашивается на ум. Блокчейн – это тот инструмент, который нам поможет в этом. Это способ хранить реестр распределено между собой без обращения к дополнительной помощи!

 

Отлично! Но как это работает?

Для начала нужно понимать, чтобы это работало, мы должны объединиться идеей независимости от третьей стороны. Распределять реестр ведь нужно между кем-то. И минимальный состав этой группы должен равняться трем.

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

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

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

1.Теперь человек №2 хочет отправить 10 долларов человеку №9,

2. Для этого он должен сообщить всем: «Я хочу отправить 10 долларов человеку №9»,

3. Каждый человек из сети должен проверить – достаточно ли средств на балансе у человека №2,

4. И все должны записать у себя на листочках эту транзакцию,

5.Теперь транзакция считается законченной!

 

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

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

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

 

Интересно, как происходит опечатывание, подпись документов?

Для начала, давайте разберемся как вообще работают подписи, печати.

 

Коробка фокусника

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

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

Для тех, кто уже что-то понимает, поясню… эта коробка олицетворяет хэширование, а метод которыми оно производится – необратимая функция.

Положив туда снова 7, на выходе получим «впаы». Но положив «впаы», мы не получим 7, выйдет что-то другое.

А, давайте засунем туда что-то другое. Например, цифру 9…

На выходе получили «09ыак». Интересно. Мы видим, что на выходе могут быть и цифры.

А что, если мы хотим получить фразу, в которой первые три цифры являются нулями «000…», как нам этого добиться, если мы не можем предсказать, что выходит наружу?!

Старый способ перебора. Да это тяжело, это требует много попыток, но это работает.

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

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

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

 

Итак, для чего нам эта информация? Как нам подписать нашу страницу?!

Как всегда, представим себе ситуацию. У нас есть число 2342.

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

После десятков тысяч попыток мы найдем это число, например, 21412. Прибавив его к 2342, мы получим 23754. А засунув это число в нашу волшебную коробочку для извлечения хэшей, мы получим, например, 00023!

Таким образом, мы нашли искомый результат. И это число 21412 и будет нашей подписью-печатью для наших документов. Это число на нашем жаргоне называется «Proof Of Work» - доказательство работы. Эту фразу вы будет часто слышать, а теперь и понимать, что она обозначает.

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

Так мы и подписываем документы в нашей папке транзакций.

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

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

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

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

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

Но если кто-то один, например, человек №4, при помощи вычисленной подписи, не произведет необходимого действия?

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

- человек, участник сети, мог не услышать по техническим причинам информацию от транзакции,

- также он мог не записать эту транзакцию,

- и наконец, он мог попытаться обмануть нас всех, пытаясь записать в реестр какую-то мошенническую транзакцию.

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

 

Другой вопрос: зачем всем участникам сети заниматься вычислениями подписи, тратить свое время и ресурсы? Может быть проще дождаться, когда это сделает кто-то другой?

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

Просто представьте, что человек нашедший необходимое число, которое будет использовано для подписи документов, получит за это деньги, без изменения баланса других участников сети! Деньги из воздуха!

Так и появился Биткойн – первая валюта на основе распределенного реестра (блокчейн). И для поддержания энтузиазма участников сети им выплачивались Биткойны.

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

Заработок участников приводит к работоспособности этой сети.

Описанная нами страничка с транзакциями – это блок транзакций. А папка – это цепочка (chain) таких страниц (блоков). Так и родилось слово – Блокчейн.

 

И еще кое-что я вам пока не сказал…

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

Чтоб никто не возвращался и не исправлял блоки есть особый секрет вычисления подписи!

 

Защита изменений подписей

Помните, мы засовывали в нашу коробку фокусника число, потом еще одно, а на выходе получали подпись, соответствующую определенным условиям (три нуля в начале). И подписав таким ключом нашу страницу, мы помещали ее в реестр.

А для защиты от изменений предыдущих записей мы дополнительно добавим к этому пазлу подпись предыдущей страницы!

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

 

А что если большая часть участников сети станет злоумышленниками?

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

Такая проблема зовётся «атакой 51%».

Аналогично, если злоумышленник построит дубликат нашей сети с бо́льшим количеством участников, чем у нас, его сеть поглотит нашу!

И на данный момент, это единственная из известных проблем технологии Блокчейн. Его базовые принципы строятся на аксиоме: «толпа всегда права»!

Как решить такую проблему? Есть варианты… и о них напишу как-нибудь в следующий раз…

 

Иван Пинтийский

Комментарии (0)

 
                        

Разрешённые теги: <b><i><br>