Blockchain
Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.
Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.
Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.
В таких системах есть три группы действующих лиц:
- источники событий (транзакций)
- источники блоков (фиксаторы транзакций)
- получатели (читатели) блоков и зафиксированных транзакций.
Основное требование к таким журналам таково:
- Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
- Каким образом гарантируется, что внутри блока нельзя поменять информацию?
- Каким образом система гарантирует, что уже существующую цепочку блоков нельзя перегенерировать, тем самым исправив в них информацию?
Тут нужно ответить на вопрос, как в подобных системах защищаются от возможности перегенерации цепочки блоков. Мы рассмотрим три варианта систем:
- централизованный с доверенным центром
- централизованный с недоверенным центром
- децентрализованный вариант с использованием доказательства работы
Централизованный blockchain с доверенным центром
Если у нас есть доверенный центр, то мы просто поручаем ему через определённый промежуток времени (или же через определённый набор транзакций) формировать новый блок, снабжая его не только хеш-суммой, но и своей электронной подписью. Каждый клиент системы имеет возможность проверить, что все блоки в цепочке сгенерированы доверенным центром и никем иным. В предположении, что доверенный центр не скомпрометирован, возможности модификации журнала злоумышленником нет.
Использование технологии blockchain в этом случае является избыточным. Если у нас есть доверенный центр, можно просто обращаться к нему с целью подписать каждую транзакцию, добавив к ней время и порядковый номер. Номер обеспечивает порядок и невозможность добавления (удаления) транзакций из цепочки, электронная подпись доверенного центра – невозможность модификации конкретных транзакций.
Централизованный blockchain с недоверенным центром
Интересен случай, когда выделенный центр не является доверенным. Точнее, не является полностью доверенным. Мы ему доверяем в плане фиксации транзакций в журнале, но хотим быть уверенными, что выделенный центр не перегенерирует всю цепочку блоков, удалив из неё ненужные ему более транзакции или добавив нужные.
Для этого можно использовать, например, следующие два метода.
- Первый метод с использованием дополнительного доверенного хранилища. После создания очередного блока центр должен отправить в доверенное и независимое от данного центра хранилище хеш-код от нового блока. Доверенное хранилище не должно принимать никаких изменений к хеш-кодам уже созданных блоков. В качестве такого хранилища можно использовать и децентрализованную базу данных системы, если таковая присутствует. Размер хранимой информации может быть небольшим по сравнению с общим объёмом журнала.
- Второй возможный метод состоит в дополнении каждого блока меткой времени, сгенерированной доверенным центром временных меток. Такая метка должна содержать время генерации метки и электронную подпись центра, вычисленную на основании хеш-кода блока и времени метки. В случае, если «недоверенный» центр захочет перегенерировать часть цепочки блоков, будет наблюдаться разрыв в метках времени.
- Стоит отметить, что этот метод не гарантирует, что «недоверенный» центр не будет генерировать сразу две цепочки блоков, дополняя их корректными метками времени, а потом не подменит одну другой.
Децентрализованный blockchain
Наибольший интерес для нас (и – наименьший для компаний, продающих blockchain-решения) представляет децентрализованная система blockchain без выделенных центров генерации блоков. Каждый участник может взять набор транзакций, ожидающих включения в журнал, и сформировать новый блок. Более того, в системах типа BitCoin такой участник (будем его назвать «майнером», от англ. to mine — копать) ещё и получит премию в виде определённой суммы и/или комиссионных от принятых в блок транзакций.
Но нельзя просто так взять и сформировать блок в децентрализованных системах. Надёжность таких систем основывается именно на том, что новый блок нельзя сформировать быстрее (в среднем) чем за определённое время. Например, за 10 минут (BitCoin). Это обеспечивается механизмом, который получил название доказательство работы.
Механизм основывается на следующей идее. Пусть есть криптографически стойкая хэш-функция и задан некоторый параметр (от англ. target – цель). , где — размер выхода хэш-функции в битах. Корректным новым блоком blockchain-сеть будет признавать только такой, значение хэш-суммы которого меньше текущего заданного параметра . В этом случае алгоритм работы майнера выглядит следующий образом:
- собрать из пула незафиксированных транзакций те, которые поместятся в 1 блок (1 мегабайт для сети Bitcoin) и имеют максимальную комиссию (решить задачу о рюкзаке)
- добавить в блок информацию о предыдущем блоке;
- добавить в блок информацию о себе (как об авторе блока, кому начислять комиссии и бонусы за блок);
- установить в некоторое значение, например, ;
- выполнять в цикле:
- обновить значение ;
- посчитать значение ;
- если , добавить в блок и считать блок сформированным, иначе — повторить цикл.
Зная суммарную вычислительную мощность 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, и, кроме того, связывает ответственность за надёжность и корректность генерации новых блоков с размером капитала (чем больше у нас средств, тем меньше мы хотим подвергать опасности систему). С другой стороны, это даёт дополнительную мотивацию концентрировать больше капитала в одних руках, что может привести к централизации системы.
Механизм внесения изменений в протокол
Любая система должна развиваться. Но у децентрализованных систем нельзя просто «включить один рубильник» и заставить участников системы работать по новому – иначе систему нельзя назвать полностью децентрализованной. Механизмы и способы внесения изменений могут выглядеть на первый взгляд нетривиально. Например:
- апологеты системы предлагают изменения в правилах работы
- авторы ПО вносят изменения в программный код, позволяя сделать две вещи:
- указать участникам системы, что они поддерживают новое изменение
- поддержать новое изменение
Однако созданная технология не лишена недостатков. Существуют оценки, согласно которым использование метода PoW для системы bitcoin приводит к затратам энергии, сравнимой с потреблением электричества целыми городами или странами. Есть проблемы и с поиском консенсуса – сложный механизм внесения изменений, как считают некоторые эксперты, может привести к проблемам роста (например, из-за ограниченности числа транзакций в блоке), и, в будущем, к отказу использования механизма как устаревшего и не отвечающего будущим задачам.
Хотелось бы узнать у сообщества, про какие ещё технологии стоит рассказывать студентам. С одной стороны, им обязательно надо рассказать про базовые вещи — классическую криптографию и криптографию на открытых ключах. Но хочется дать понятие и про современные вещи, которые, возможно, не станут лишним грузом знаний и через пять-десять лет. С текущим содержание учебной программы можно ознакомиться здесь.
Что такое блокчейн и зачем он нужен
В сознании среднестатистического пользователя само слово “блокчейн” (“цепочка блоков”) стало довольно тесно связано с термином “биткоин”, что двояко отразилось на восприятии.
С одной стороны, популярность биткоина вызывает интерес и к блокчейну, с другой стороны, в массовом сознании биткоин часто ассоциируется лишь с чем-то негативным, запрещенным и подвергаемым преследованию со стороны законодателей. Мол, зачем расплачиваться биткоинами, когда есть целый зоопарк электронных кошельков и банковских карт? Ясное дело – чтобы проворачивать какие-то темные делишки.
Блокчейн же – по сути всего лишь инструмент, с помощью которого можно хранить данные транзакций (база данных). А инструмент не может сам по себе быть заведомо хорошим или плохим: с помощью топора можно пойти и нарубить дров, чтобы согреться зимой и приготовить пищу, а можно взять тот же самый топор и сокращать народонаселение процентщиц в отдельно взятом городе. Инструмент – один и тот же, применение и последствия – разные.
Сфер применения можно найти множество, главное – чтобы существовал аналог сделки или подобного взаимодействия, партнерства между сторонами. Поэтому на технологии блокчейна сейчас работают биткоин и лайткоин, к блокчейну весьма активно присматриваются банки (осенью 2016-го Bank of America и Microsoft заявили о начале разработки финансовой блокчейн-платформы).
Первая же реальная сделка с реальными деньгами тоже состоялась осенью того же года – израильский стартап (Wave), британский банк (Barclays) и ирландский производитель молочки (Ornua) провели аккредитив на 100 000 долларов. И если ранее процесс занял бы неделю или более из-за бюрократии и проверки всех документов, то благодаря криптографии и автоматизированной верификации на все про все ушло около четырех часов.
21 декабря 2016-го сделку-аккредитив через блокчейн провели Альфа-Банк и S7.
ЦБ РФ вместе с крупными банками страны создали платформу “Мастерчейн”, цель – повысить прозрачность и эффективность существующих финансовых систем.
А Парламент ЕС в принципе задумался о реализации выборов в органы государственной власти с помощью блокчейна.
Учитывая масштаб применения и уровень игроков, которые уже начали использовать технологию в деле, считать блокчейн каким-то странным подозрительным новшеством, о котором все забудут через некоторое время, уже нельзя.
Насколько это все безопасно?
Главные преимущества использования блокчейна – это прозрачность проводимых транзакций и множественное копирование всех этих транзакций таким образом, что у каждого участника процесса всегда есть информация о каждом шаге всех партнеров.
Если попробовать описать это попроще – представьте себе большую общую папку на FTP. Вы видите все ее содержимое (никаких скрытых файлов), вы можете быстро посмотреть, кто и в какие подпапки загружал файлы. Какие именно файлы, когда и для кого.
Но при этом у всех разный доступ к данным файлам. Кто-то может лишь наслаждаться видами и просматривать список файлов в каждой папке. А кто-то (адресат конкретного файла) может скачивать данные себе. Причем никто другой не сможет получить доступ к файлу – только тот, кому он предназначался.
Или, например, большой электронный кошелек с открытой статистикой. Вы видите, что на счет поступило 50 000 рублей от пользователя А для пользователя Б. Пользователь Б через час перевел их куда-то еще в системе. При этом сами пользователи, скрывающиеся за А и Б, могут быть как анонимными, так и вполне себе идентифицированными – зависит от самой платформы и цели ее создания. Все участники цепи могут наблюдать за перемещением средств, но доступ к самим средствам будет только у пользователя с необходимыми правами (Б). Остальные же в данном случае выполняют роль наблюдателей.
Это обеспечивает должный уровень открытости сделки – вся цепочка транзакций дублируется и хранится в неизменном зашифрованном виде у каждого участника, не получится как-то подделать ее.
Блокчейн децентрализован, нет какого-то одного общего “командного центра”, взломав который получится уничтожить все данные о сделке и ее участниках или подменить их.
Например, если проводилась транзакция, в которой участвовали 100 человек, то эта блокчейн-цепочка останется рабочей и доступной для просмотра даже в том случае, если 99 компьютеров других участников будут испорчены. Ведь по сути каждое звено блокчейн-цепи – это своеобразный полный бекап данных всех транзакций всех остальных участников на это звено.
Взлом одного из таких компьютеров никак не скажется на сохранности данных на остальных (как и на их изменении).
Блокчейн сейчас и в будущем
Вполне возможно, что сейчас – именно то время, когда технология проходит обкатку вживую на весьма значимых областях общественной жизни, и в скором времени мы увидим все больше и больше проектов и платформ, использующих блокчейн. Уже сейчас банки пытаются активно внедрять это у себя (в том числе и для снижения операционных расходов), на рынке появляются все новые и новые игроки, стремящиеся популяризовать использование технологии.
Новые проекты на блокчейне будут основываться на его главных преимуществах – открытости, защищенности, безопасности.
Поэтому блокчейн станет хорошим подспорьем для любых сервисов, где пользователи могли переживать о возможном мошенничестве или о сохранности данных:
- микроплатежи
- банковские операции
- логистика
- юриспруденция
- медицина
Всего за несколько лет блокчейн уже прошел путь от новинки в технологическом мире до инструмента, которым начинают пользоваться крупные банки, корпорации и государства.
Что только укрепляет уверенность в том, что в будущем технология раскроет свой потенциал еще сильнее.
Немного о нас
Мы принимаем участие в развитии блокчейна с 2011 года (основание BitFury) и будем рады делиться с вами последними наработками и новостями.
Первые эксперименты с использованием центральных и графических процессоров для майнинга мы начали 6 лет назад, в 2011, в рамках разных проектов. Год спустя было решено сосредоточить усилия на одном – BitFury. В 2014-м майнинг был развернут уже в 3 странах (Финляндия, Исландия, Грузия) на собственном оборудовании. Планируем построить дата-центр и на территории США.
Несколько интересных проектов, которые мы уже успели осуществить к текущему моменту:
чип по 28-нанометровой технологии
Пришел на замену нашему специализированному 55-нанометровому чипу. Новый чип работал с потреблением 0,2 Джоуля на гигахэш.
16-нанометровый чип
Мы начали внедрять его в собственных дата-центрах. Данный чип уже потреблял 0,06 Джоуля на гигахэш, производительность же составляла 184 гигахэша в секунду (иммерсионное охлаждение) и 140 – при воздушном.
Большие возможности блокчейн открывает и для государственных органов – весной 2016-го мы начали работы над проектом земельного кадастра на основе блокчейна для Грузии. Помимо того, что использование блокчейна повысит уровень безопасности и весьма ускорит процесс дистанционного оформления документов, это также должно снизить и стоимость регистрации прав на землю, причем довольно ощутимо – в среднем с 50-200 $ до 5-10 центов.
За 2014 и 2015 нам удалось привлечь инвестиции в трех раундах по 20 миллионов долларов, что на тот момент являлось примерно половиной всех мировых инвестиций в развитие биткоина.
На сегодня же BitFury – один из крупнейших майнеров и создателей блокчейн-платформы. Мы собираемся и дальше сохранять лидерские позиции и активно продвигать блокчейн-технологии.
Если у вас есть какие-либо конкретные вопросы о блокчейне в целом или каком-то из наших продуктов в частности (BlockBox, 16нм ASIC-чип, блокчейн и государство) – пишите в комментариях, мы ответим в следующих постах.
Блокчейн для самых маленьких [part.1]
Блокчейн— как секс в старших классах. Все говорят о нем по углам, единицы понимают, а занимается им только препод. Статьи о децентрализованных пиринговых системах делятся на два типа: это либо талмуд с формулами и сложными объяснениями, которые я ни разу не смог дочитать даже до половины первой половины, либо статьи и видосы на тыртюбе, как майнить сто триллионов миллиардов BitCoin в наносекунду, скупая все видеокарты Nvidia в мире.
Это введение для тех, кто хочет наконец-то разобраться в блокчейне простым языком, без криптографии, протоколов, не сильно вникая в хэш-функции, зато с примерами из реальной жизни.
Технология, которая, по-видимому, окажет наибольшее влияние на развитие в различных областях экономики в ближайшие 10 лет, уже существует! И это не BigData, не соцсети, не робототехника и даже не Machine Learning. Это технология, лежащая в основе криптовалют, цепочка блоков транзакций- блокчейн. Сейчас именно блокчейн является инструментом для создания нового поколением интернета, и он несет огромный потенциал для любого бизнеса.
Скорее всего вы будете удивлены, узнав, что :
Можно ли применить распределенный реестр в огороде у бабушки?
Как одна технология переворачивает всю устоявшуюся индустрию бизнеса и экономики?
Так, теперь давайте определимся, что мы узнаем в part.1 :
Как работает эта технология? Проблема централизации на Олегах
Как работает магическая машина или же хэш-функция
Что такое майнинг
Алгоритм защиты от модификаций печатных номеров
Настолько ли идеален блокчейн? Уязвимости идеальной системы
Как это работает?
Блок 1: Проблема централизации на Олегах
Олег-путешественник звонит в Сызрань
Сначала определимся, какую проблему решает технология?
Давайте представим, что у вас есть лучший друг Олег, который путешествует по всему миру. Он звонит вам в Сызрань с просьбой перекинуть немного мани, т.к. кэш Олега куда-то исчез. Вы, как порядочный друг, соглашаетесь помочь Олегу и идете в банк. Там вы сообщаете, что вам надо перевести N-ую сумму на счет Олега.
Банкир проверяет ваш текущий баланс на предмет наличия этой суммы и переводит деньги на счет Олега. Вы с чувством выполненного долга звоните Олежке и сообщаете, что лавэ перечислены.
И так, что сейчас произошло? Давайте рассмотрим ситуацию более детально.
Вы и Олег доверили банку управлять вашими деньгами. Не было никакой физической пересылки. Нужно всего лишь было изменить реестр, который не контролируешь ни ты, ни Олег. И это проблема существующих систем. Для установления доверия между людьми мы зависим от третьей стороны, которой может выступать банк. Мы зависимы от посредника для установления доверия друг с другом.
Блок 2: Какую угрозу несет централизация?
Такие системы подвержены взломам, и случай такого системного сбоя может привести к потери средств и личной информации пользователей этой системы, и это уже происходило не раз. Если приводить реальный пример из истории, то на ум сразу приходит развал СССР в 1991 и потери 40-ка млн вкладов пользователей банков.
Централизованная / Децентрализованная системы
Блок 3: Какая система позволит решить эти проблемы?
Существует ли система, которая будет содержать реестр между юзерами этой системы, исключая посредников? Да, существует. И наверное, как вы уже догадались, это решение — блокчейн. Для существования P2P систем нужно достаточное количество пользователей желающих не зависить от третей стороны. И такое минимальное количество юзеров: 3 человека — для учета и содержания реестра.
Как это работает?
Блок 1: Давайте рассмотрим принцип работы на примере
Возьмем 10 людей, которые решили отказаться от банков и других систем третей стороны.
По общему согласию каждый из 10-и постоянно имеет все подробности счетов других участников, но без знаний их личности
Шаг 1: Пустая папка
Каждый из 10 участников будет иметь пустую папку, которая будет заполняться страницами. Эта коллекция страниц формирует реестр транзакций.
Шаг 2: Транзакции
Каждый сидит с пустым листом и ручкой в руке и готов записать любую транзакцию, которая произойдет внутри этой системы.
#2 send 10$ to #5 Transaction’s registration page
Для создания транзакции, номер 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 он ни разу не был «обманут» и не выводился из строя, при том, что на эту систему проводились атаки.
Так же, существует ещё пара теоретических уязвимостей блокчейна, с которыми вы сможете ознакомиться самостоятельно. Ссылка для ознакомления: Что угрожает блокчейн-сетям
Материала и мыслей, которые хочется донести очень много, и если все изложить в одну статью, будет скучно читать и может смешаться в кашу.
Источник https://habr.com/ru/post/335994/
Источник https://habr.com/ru/company/bitfury/blog/321474/
Источник https://habr.com/ru/post/569514/