Именно отсутствие точки отказа и есть одно из главных преимуществ децентрализованных систем. Вернемся к примеру Швейцарии: известно, что федеральный президент или какой-либо иной политический институт этого государства не имеет права отдавать приказ о капитуляции в условиях внешнего военного вторжения. А если такой приказ и будет отдан, то закон категорически запрещает жителям страны его исполнение. Таким образом, агрессору придется иметь дело чуть ли не с каждым швейцарцем по отдельности. То же самое касается и сети интернет. Даже если какая-то страна своим политическим решением захочет отключить интернет, то с большой вероятностью технологически осуществить это намерение будет возможно лишь на своей территории (за исключением узлов, подключенных к интернету по спутниковой связи, при условии, что спутник принадлежит другому государству). Возможно, пострадают пользователи в других странах, магистральные каналы из которых подключены к транзитным узлам страны, решившей отключиться от глобальной сети. Но вся остальная сеть в мире сохранит работоспособность.
Фактически для того, чтобы уничтожить интернет, необходимо отключить почти все его узлы, что само по себе представляет организационную и технологическую сложность, граничащую с практической невозможностью исполнения задуманного. То есть мы можем говорить о теоретической неуязвимости сети, построенной на базе распределенной топологии без единого управляющего центра. Но если мы обратимся на уровень сервисов, построенных на базе сети интернет, то мы увидим, что подавляющее их большинство построено на технологии «клиент – сервер», то есть технологии централизованной.
Все мы давно привыкли пользоваться различными интернет-сервисами. Порталы поддержки сервисов электронной почты, системы облачного хранения данных (например, документов или фотографий), доступ в систему «банк – клиент» для управления своими счетами и совершения платежей, бронирование отелей и авиабилетов, торговые платформы для осуществления сделок на финансовых рынках и многое другое – все эти сервисы построены на базе централизованной инфраструктуры. При использовании каждой такой системы, чтобы получить доступ к ресурсам и услугам, необходимо посетить специальный сайт поставщика конкретной услуги, ввести свой логин и пароль и подключиться к центральному серверу, где хранятся данные клиента или его активы. Однако в случае, если центральный сервер поставщика услуг по какой-то причине отключится, мы не сможем воспользоваться данной услугой, и нам придется ждать, пока сервер восстановит свою работоспособность. В данном случае мы сталкиваемся с главной проблемой централизованных систем – наличием «точки отказа». Отказ в обслуживании может быть результатом действия различных факторов: технологических проблем в виде выхода оборудования из строя, ошибок в программном обеспечении, злоупотреблений внутри структуры самого поставщика услуг, различных внешних хакерских атак или действия компьютерных вирусов. Не последнюю роль могут играть также результаты репрессивного воздействия государственных силовых или регулятивных структур на территории юрисдикции, где физически расположен поставщик услуг.
Все эти факторы, результатом влияния которых становится отказ в обслуживании, заставляют задуматься о том, каким образом можно технологически или организационно избежать подобных ситуаций. Ответом на этот вопрос стало возникновение технологии блокчейн, основанной на построении децентрализованной системы для хранения и обмена данными, что исключает все негативные факторы, естественным образом возникающие при централизации сервисов. На смену сетевой топологии «звезда», лучи которой от всех узлов-пользователей в обязательном порядке сходятся к центральной точке – узлу-серверу, пришла форма организации сети, в которой понятие «центральный сервер» отсутствует как таковое, а все взаимодействие осуществляется между узлами-клиентами напрямую между собой. Такие сети еще называют «одноранговыми» или «пиринговыми». Все узлы в подобной сети в большинстве случаев равноправны, и каждый из них может выполнять как клиентские, так и серверные функции. Подобная децентрализованная топология сети устраняет фактор «точки отказа», повышая степень надежности и работоспособности системы до величин, близких к абсолютным.
Однако у читателей может возникнуть вполне резонный вопрос: если серверы в сети как таковые отсутствуют, то каким образом в подобной системе хранятся общие данные, как они распространяются по сети и каким образом они защищены от несанкционированного доступа или модификации? А также каким образом подобные системы обслуживаются и развиваются, если все участники сети имеют равные права? Технология блокчейн обеспечивает решение большинства из этих вопросов. Данные реплицируются (копируются) между всеми узлами системы. Защиту от изменений или от несанкционированного доступа к данным обеспечивают математические алгоритмы асимметричной криптографии. Вся система функционирует на базе заданного набора правил, с которыми соглашаются все участники системы. В случае если необходимо внести значимые изменения, решение принимается общим голосованием участников системы.
Следует отметить, что администрирование децентрализованных систем на порядок сложнее, чем централизованных. Но это стоит рассматривать как плату за те преимущества, которые дает децентрализация. На текущий момент решены далеко не все проблемы, которые могут возникнуть при управлении децентрализованными системами. И мы еще неоднократно вернемся к обсуждению этой проблематики в последующих главах.
Хеширование информации
Инструмент хеширования данных является важной и неотъемлемой частью технологии блокчейн. Хеширование используется для создания адресации в блокчейн-системах, для формирования цифровой электронной подписи сообщений, а также для добычи криптомонет (так называемого «майнинга») в некоторых блокчейн-проектах, базирующихся на принципе «доказательства работы». Прежде чем рассматривать вышеупомянутые элементы блокчейн-систем, нам потребуется разобраться с тем, что же все-таки такое хеширование данных и на основе каких принципов эта процедура работает.
Начнем с определения. Хеширование – это метод преобразования набора данных произвольного размера в стандартизированную строку фиксированной длины при помощи специального алгоритма. То есть если взять какой-то набор данных, например, весь текст этой книги, то можно создать его цифровой отпечаток длиной, скажем, десять символов. При этом мы должны определить точный алгоритм преобразования входных данных и использовать его без изменения для любых других данных произвольного размера, получая на выходе стандартную строку в десять символов. Еще говорят, что в таком случае используется «детерминированный алгоритм», потому что он всегда выдает предопределенный результат. Фактически получаемый результат должен стать уникальным отображением преобразуемых входных данных. Для этого мы должны создать такой алгоритм преобразования, который ни при каких обстоятельствах не допустит получения одинакового результата преобразования для разных входящих наборов данных. То есть не создаст так называемых «коллизий». При этом малейшее изменение во входных данных, даже изменение одного их бита, должно видоизменять результирующий хеш на выходе до неузнаваемости. Вот пример работы одного из самых простых алгоритмов хеширования (SHA-1), где прообразами хешей являются два варианта написания английского слова «децентрализация», при этом во втором слове изменена всего лишь одна буква: