Дымков Аркадий Андреевич
Программист / системный и бизнес аналитик
Блокчейн— как секс в старших классах. Все говорят о нем по углам, единицы понимают, а занимается им только препод. Статьи о децентрализованных пиринговых системах делятся на два типа: это либо талмуд с формулами и сложными объяснениями, которые я ни разу не смог дочитать даже до половины первой половины, либо статьи и видосы на тыртюбе, как майнить сто триллионов миллиардов BitCoin в наносекунду, скупая все видеокарты Nvidia в мире.
Это введение для тех, кто хочет наконец-то разобраться в блокчейне простым языком, без криптографии, протоколов, не сильно вникая в хэш-функции, зато с примерами из реальной жизни.
Технология, которая, по-видимому, окажет наибольшее влияние на развитие в различных областях экономики в ближайшие 10 лет, уже существует! И это не BigData, не соцсети, не робототехника и даже не Machine Learning. Это технология, лежащая в основе криптовалют, цепочка блоков транзакций- блокчейн. Сейчас именно блокчейн является инструментом для создания нового поколением интернета, и он несет огромный потенциал для любого бизнеса.
Скорее всего вы будете удивлены, узнав, что :
Блокчейн != биткоин.
Можно ли применить распределенный реестр в огороде у бабушки?
Как одна технология переворачивает всю устоявшуюся индустрию бизнеса и экономики?
Так, теперь давайте определимся, что мы узнаем в part.1 :
Как работает эта технология? Проблема централизации на Олегах
Как работает магическая машина или же хэш-функция
Что такое майнинг
Алгоритм защиты от модификаций печатных номеров
Настолько ли идеален блокчейн? Уязвимости идеальной системы
Как это работает?
Блок 1: Проблема централизации на Олегах
Сначала определимся, какую проблему решает технология?
Давайте представим, что у вас есть лучший друг Олег, который путешествует по всему миру. Он звонит вам в Сызрань с просьбой перекинуть немного мани, т.к. кэш Олега куда-то исчез. Вы, как порядочный друг, соглашаетесь помочь Олегу и идете в банк. Там вы сообщаете, что вам надо перевести N-ую сумму на счет Олега.
Банкир проверяет ваш текущий баланс на предмет наличия этой суммы и переводит деньги на счет Олега. Вы с чувством выполненного долга звоните Олежке и сообщаете, что лавэ перечислены.
И так, что сейчас произошло? Давайте рассмотрим ситуацию более детально.
Вы и Олег доверили банку управлять вашими деньгами. Не было никакой физической пересылки. Нужно всего лишь было изменить реестр, который не контролируешь ни ты, ни Олег. И это проблема существующих систем. Для установления доверия между людьми мы зависим от третьей стороны, которой может выступать банк. Мы зависимы от посредника для установления доверия друг с другом.
Блок 2: Какую угрозу несет централизация?
Такие системы подвержены взломам, и случай такого системного сбоя может привести к потери средств и личной информации пользователей этой системы, и это уже происходило не раз. Если приводить реальный пример из истории, то на ум сразу приходит развал СССР в 1991 и потери 40-ка млн вкладов пользователей банков.
Централизованная / Децентрализованная системы
Блок 3: Какая система позволит решить эти проблемы?
Существует ли система, которая будет содержать реестр между юзерами этой системы, исключая посредников? Да, существует. И наверное, как вы уже догадались, это решение — блокчейн. Для существования P2P систем нужно достаточное количество пользователей желающих не зависить от третей стороны. И такое минимальное количество юзеров: 3 человека — для учета и содержания реестра.
Как это работает?
Блок 1: Давайте рассмотрим принцип работы на примере
Возьмем 10 людей, которые решили отказаться от банков и других систем третей стороны.
По общему согласию каждый из 10-и постоянно имеет все подробности счетов других участников, но без знаний их личности
Шаг 1: Пустая папка
Каждый из 10 участников будет иметь пустую папку, которая будет заполняться страницами. Эта коллекция страниц формирует реестр транзакций.
Шаг 2: Транзакции
Каждый сидит с пустым листом и ручкой в руке и готов записать любую транзакцию, которая произойдет внутри этой системы.
Для создания транзакции, номер 2 сообщает всем: « Я, номер #2 пересылаю #5 10$». Каждый из участников системы проверяет, имеет ли #2 достаточный баланс для произведения данной транзакции. В случае, если баланс номера #2 позволяет это сделать, то каждый делает запись у себя на странице. Это происходит до того момента, пока на странице не закончится место для записи новых транзакций
Предположим, что страница имеет вместимость 10 транзакций. Т.к. все заполняют одну и ту же информацию, место на страницах у всех кончится одновременно.
И вот настало время, всем отправить заполненную страницу в папку и создать новую страницу для ведения учета транзакций. И так повторять начиная с шага №2.
Шаг 4: Хранение страниц
Перед тем, как отправить страницу в папку на хранение, мы должны ее согласовать со всеми, идентифицируя ее уникальной печатью. Ставя такую печать на страницу, мы можем быть уверенны, что эту страницу никто не сможет изменить, отправляя ее в папку. Если все доверяют печати, значит и все доверяют содержимому страницы. И этот процесс самый затруднительный.
В терминологии блокчейна этот процесс называется «майнинг», но для простоты понимания на примере, обозначим его как процесс запечатывания.
Ранее посредник давал нам обещание, что написанное в реестре никогда не будет изменено. В распределенной и децентрализованной системе печать предоставляет доверие. Перед тем как понять, как мы будем продолжать это процесс дальше, нам надо ознакомиться с тем, как работает одна магическая машина.
Магия Хэш-фунцкий
Давайте представим, что у нас есть машина, которая защищена от внешнего воздействия. Если мы отправим коробку с неким содержимым на вход, то на выходе получим коробку с другим содержимым на выходе. Эта магическая машина называется хэш-функция.
Предположим, мы отправили на вход цифру 4, на выходе мы получим «cbaja». Как эта функция конвертировала цифру 4 в «cbaja»? Никто не знает. Более того, этот процесс необратимый. По конечному результату нельзя сказать, что было подано на вход. Но каждый раз, когда вы будете загружать цифру 4, на выходе вы будете всегда получать один и тот же результат.
Давайте рассмотрим другой случай. Что надо будет подать на вход это машине, что бы получить результат «c56c0ah»? Есть только один способ это узнать — перебрать все возможные значения, пока не получим данный результат.
Будем оптимистичны, и допустим через несколько тысяч попыток мы нашли это значение. В реальных условиях найти его экстремально сложно.
Основываясь на полученной информации, давайте сформулируем главные свойства этой машины.
Невероятная сложность нахождения input по output (входящего значения по полученному результату)
И простота проверки правильности входящего значения
Давайте запомним свойства этой машины или хэш-функции
Как использовать хэш-функцию для создания печатей?
Представим, что на вход мы подаем два значения. Первое значение «KEK», второе —рандомное значение, которое мы добавим к значению из первой коробки и направим на вход хэш-функции, а на выходе получим «Validol». Сможете ли вы угадать, какое значение содержится в второй коробке? Ситуация напоминает ранее рассматриваемый случай. Единственный способ вычислить это число — подбор всех чисел подряд.
Опять будем оптимистичны, и через сколько то тысяч попыток мы нашли значение второй коробки. Это значение было «LOL». Когда бы добавим «LOL» к значению «KEK» на выходе машины мы получим требуемое значение «Validol».
Т.е. значение «LOL» будет являться печатью к значению «KEK».
Мы создали страницу с значением «KEK». Что бы пропечатать эту страницу, т.е. защитить эту страницу от правок, мы ставим на ней печать с значением «LOL»
В терминологии блокчейна печатный номер это POW(Proof-of-Work). Он означает, что это значение есть доказательство проделанной работы для вычисления этого значения.
Если кто то из нашей группы захочет проверить было ли изменено содержимое страницы с транзакциями, все что ему требуется, это загрузить эту страницу и печатный номер этой страницы в магическую машину. Если на выходе будет требуемое значение, то содержимое страницы с транзакциями не изменено, но если output не соответствует требуемому результату, то эту страницу можно выкидывать, т.к. ее содержимое было изменено и ее больше нельзя использовать.
После определения печатного числа, на страницу ставится печать. Если кто нибудь когда нибудь попробует изменить страницы с транзакциями, то печатный номер позволит каждому проверить целостность информации на странице.
Теперь, когда мы знаем, как ставится печать на страницы, мы можем вернутся к тому моменту, когда у нас закончилось место на странице.
Майнинг
После того, как у всех закончилось место на странице, участники системы соревнуются между собой в вычислении печатного номера к странице, для того что бы ее вложить в папку. Как только первый участник вычислил этот номер, он уведомляет всех оставшихся. Все остальные в свою очередь проверяют правильность обнаруженного числа. Печатный номер, с которым соглашается большинство и будет являться подлинной печатью.
Тут перед нами встает логичный вопрос: почему же тогда каждый тратит ресурсы на вычисление, когда не знает, что кто то другой объявит его. Почему бы просто ждать объявления номера? Тут как раз таки в ход вступает стимулирование. Каждый, кто является частью системы блокчейна имеет возможность получать награду за проделанную работу. Первый, кто вычислит печатный номер будет награжден за потраченные ресурсы в виде вычислительной мощности и электроэнергии.
Допустим, один из участников сети, первым вычислил номер, за что будет награжден виртуальной валютой, за которую соревнуется каждый из участников сети, которая по большому счету берется из не откуда. То есть его счет увеличился на n-сумму виртуальной валюты без уменьшения баланса других участников. Награды способствуют продолжения работы сети.
А теперь давайте переведем нашу аналогию в реальные примеры. Страницы это блоки, а папка это цепочка страниц. Следовательно все это превращается в цепочку блоков — блокчейн.
Еще одно «НО»
Представим, что у нас уже есть 5 страниц с печатями в папке. Что если я вернусь назад к второй странице и изменю ее содержимое в свою пользу? Печатный номер позволит каждому определить несогласованность транзакций. Опять же, что если я подготовлюсь и заранее вычислю новый печатный номер для измененных транзакций и поставлю печать со своим выселенным номером на нем. Для предотвращения этой проблемы есть особенность в алгоритме вычисления печатного номера. Это есть защита от модификаций печатных номеров.
Вспомним пример с коробками. На деле мы подаем не две, а три коробки на вход магической машине. Одна содержит страницу с транзакциями, вторая печатный номер, который следует вычислить, а третья будет содержать печатный номер от предыдущей страницы.
С этим алгоритмом, мы будем уверены в том, что каждая страница зависит от предыдущей. Если кто то захочет изменить содержимое старой страницы, то ему необходимо будет изменить содержимое и печатный номер всех последующих страниц, что бы сохранить цепь согласованной.
Что произойдет, если из одной честной страницы, обманщик создаст новую нечестную цепь. На деле, он не сможет бороться в вычислительной мощи с другими 9ю честными участниками сети, и его цепочка никогда не сможет обогнать честную цепь, а истинной является та цепь, которая имеет наибольшую длину.
Атака 51%
Все системы имеют бэкдоры, и блокчейн не исключение. Самая известная уязвимость блокчейна это атака именуемая «Атака 51%».
Если пытаться объяснить ее простым языком, то рассматривая защиту от модификаций печатных номеров, которая приводилась выше, можно задать вопрос: А если у одного нечестного юзера вычислительная мощь будет больше, чем у остальных 9ых, то он сможет через n-ое время создать цепочку блоков начиная с 1-ого листа, которая сможет обогнать главную истинную цепь блоков.
Да, такая уязвимость есть. Сама идеология блокчейна подразумевает, что большинство участников сети не намерены «играть» не честно.
Для упрощения абстракции проблемы приведенной выше, скажем, что у каждого участника цепи вычислительные мощи одинаковые. Соответственно, когда 6/10 участников блокчейн системы сговорятся и захотят обмануть оставшихся 4ех юзеров, то через n-ое время они установят новую истинную цепочку блоков. Отсюда и идет название этой уязвимости. Как только количество нечестных юзеров станет 50%+, то блокчейн системе грозит опасность быть «обманутой».
Надо понимать, что в реальности сделать это практически нереально. Как говорится, время лучший показатель, и за все 11 лет существования BitCoin он ни разу не был «обманут» и не выводился из строя, при том, что на эту систему проводились атаки.
Так же, существует ещё пара теоретических уязвимостей блокчейна, с которыми вы сможете ознакомиться самостоятельно. Ссылка для ознакомления: Что угрожает блокчейн-сетям
Материала и мыслей, которые хочется донести очень много, и если все изложить в одну статью, будет скучно читать и может смешаться в кашу.
До встречи!
Комментарии (7)
Revertis
26.07.2021 14:05+2В терминологии блокчейна этот процесс называется «майнинг», но для простоты понимания на примере, обозначим его как процесс запечатывания.
"Запечатывание" в общем случае может быть каким угодно, не обязательно майнингом. В случае криптовалют, и конкретно в случае Биткоина, майнинг сделан для возможности однозначного выбора одного блока из нескольких. У кого Work выше, тот и выбирается.
Banzaiko
26.07.2021 17:11Саму идею я в целом понял, но вот как согласованный набор блоков становиться например биткоином (доги-коином, шиба-коином, я-в-душе-не-шарю-каким-еще-коином), и в чем разница между моим биткоином и биткоином соседа? Я просто как-то не понял что я получаю как один из десятки когда я первый нашел и согласовал блок и закрыл файл. Надеюсь разбор будет дальше.
defuz
26.07.2021 21:59Как только вы нашли новый блок, необходимо разослать его остальным майнерам (тут используется классический p2p протокол), иначе магии не случится.
Как только другой майнер получает ваш блок, при условии что он валидный, он сразу же переключается на майнинг нового блока, следующего за вашим. Он делает это потому, что всегда выгоднее майнить начиная с самого большого значения суммарно проделанной работы, если только мы не собрались злонамеренно устроить Split of Brain атакой 51% или перерезав атлантический интернет-кабель.
В блоке, который вы смайнили, вы вписываете свой собственный адрес кошела ("coinbase" транзакция), на который, согласно протоколу, вам положена награда за проделанную работу.
Если говорить о блокчейнах "первого поколения" (Bitcoin), то все что содержат блоки – это только списки транзакций, где у каждой транзакции N входящих адресов и M исходящих, причем сумма входящих денег всегда равна сумме выходящих денег + комиссия (добровольное поощрение майнеру).
Чтобы понять, сколько денег у вас на счету, прийдется пролистать весь реестр с самого начала и учесть каждую транзакцию, в которой принимал участие ваш адрес.
Чтобы потратить полученные вами деньги, нужно просто подписать транзакцию вашим приватным ключем, хеш публичного ключа которого является буквально идентификатором вашего кошелька о том, что вы намереваетесь перевести деньги на какой-либо другой адрес, и анонсировать эту транзакцию в сеть (отправить майнерам по p2p протоколу). Майнеры включат вашу транзакцию в блок только если она валидна (правильно подписана и у вас действительно есть средства на основании истории предыдущих транзакций), иначе весь их блок будет некорректным и они не получат награду. Так же, майнеры замотивированы включить вашу транзакцию в блок, поскольку за это им достанется комиссия, которую вы назначали в теле транзакции.
Все биткоины однажды были смайнены майнерами и только затем оказались на кошельках "обычных" пользователей. Биткоин как валюта – это абстрактная единица измерения, как метр, и потому ваш биткоин от биткоина соседа принципиально ничем не отличается, так же как не отличается один квадратный метр вашей квартиры и одного квадратного метра его квартиры (хотя площадь квартир может отличаться).
Важно понимать, что при описании того как работают блокчейны, фраза "согласно протоколу" имеет, скажем так, волшебное действие более серьезной силы, чем в классическом не дентрализованном ПО. Дело в том, что как только какой-либо из узлов делает что-либо в противоречие протоколу (например, присваивает себе ваши деньги), хеши его состояния перестают совпадать с хешами всей остальной сети, и остальные участники системы не идентифицируют его как участника сети. Во многих блокчейнах поведение узлов в разрез протокола предусматривает наказание в виде косвенных либо прямых убытков (опять же, согласно протоколу, которому следуют оставшиеся честные участники).
Именно по-этому на блокчейне ваши деньги – ваши, это так "согласно протоколу" и согласно предположению, что участники сети ведут себя как рациональные агенты. Сложность построения блокчейн-систем состоит именно в том, чтобы описать такой протокол, в котором наиболее выгодным (в эгоистическом смысле) поведением любого участника сети будет корректное (честное, правильное) поведение.
Биткоин был не первой попыткой создать децентрализованные деньги, но первой системой, в которой пазл сложился воедино правильно, как раз за счет правильной "инсентивизации" (системы поощрения) тех, кто поддерживает корректную работу сети – майнеров.
derikn_mike
28.07.2021 10:47чем блокчейн отличается от той же горизонтально децентрализовано масштабированной кафки?
Germanjon
Да, такая уязвимость есть. Сама идеология блокчейна подразумевает, что большинство участников сети не намерены «играть» не честно.
Напомните, пожалуйста, статистику скам-проектов
JekaMas
Вы путаете уровни абстракций. В статье речь поо уровень консенсуса, вы же говорите про уровень приложений.
Достаточно осознать, что любой чейн - это просто база данных и ничего более, и станет проще. Вы же не будете говорить, что PostgresQL какой-то подозрительный из-за того, что его используют scum проекты?