Введение в неизменность блокчейнов

Для безопасности важна неизменность данных, хранящихся в блокчейнах. Что люди имеют ввиду, когда говорят: «Блокчейны неизменны»? В этом посте я пытаюсь объяснить ключевые понятия.

Это может быть полезно тем, кто не знаком с блокчейнами и биткойном или только что попал сюда.

Что означает неизменяемость для блокчейна?

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

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

Поэтому неизменность относительна и связана с тем, насколько трудно что-либо изменить.

Частные базы данных

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

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

Перейдём к блокчейнам.

Блокчейны

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

Хэши

Хэш-функция – это тип математической функции, которая превращает данные в их отпечаток (фингерпринт, fingerprint), называемый хэшом. Это похоже на формулу или алгоритм, который принимает входные данные (любые данные, будь то весь толковый словарь Даля или просто число «1»), и превращает их в выходные фиксированной длины, которые представляют собой отпечаток исходных данных. Существует множество типов хэш-функций, а общепринято надёжный – SHA-256 (что означает алгоритм Secure Hash Algorithm – 256 бит)

Если прогнать «Hello from Bits on Blocks!» через эту математическую функцию, то получится отпечаток 389f9ef3822e5c88f4b140db82c459064711a52182a3e438b4ebc7ecda62b9bb. Отпечаток (389f … b9bb) называется хэшем SHA-256 исходной фразы.

Два важных свойства хорошей хэш-функции:

1. Сложно посчитать исходные данные по имеющемуся хэшу;

2.Если входные данные изменяются хоть в малейшей степени, хэш изменяется непредсказуемым образом.

Хэши – основа безопасности и неизменности блокчейнов. С ними можно поиграть здесь.

Блоки

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

Создание книги транзакций с блоками, относящимися к предыдущим блокам, намного лучше, чем нумерация страниц в ней. В бумажном гроссбухе с пронумерованными страницами 1, 2, 3 и т. д. было бы легко вырвать страницу 40, заменить её другой страницей 40 с немного другими транзакциями и это было-бы сложно заметить. Целостность сохраняется, а страницы 39, 40, 41 остаются страницами 39, 40, 41 – без изменений. Кроме того, в номере страницы «40» нет ничего, что как-либо отражало бы какая информация содержится на этой странице, а нумерация страниц складывается исключительно из их номеров.

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

  • Блок с хэшем 66a045b45 (строящийся на блоке с хэшем a2c064616), за которым следует
  • Блок с хэшем 8939a3c35 (строящийся на блоке с хэшем 66a045b45), за которым следует
  • Блок с хэшем a41f02e92 (строящийся на блоке с хэшем 8939a3c35)

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

Ключевые моменты

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

    Давайте сначала посмотрим, что произойдет, если взять блокчейн Биткойна и скопировать его на USB-накопитель (на момент написания статьи блокчейн занимает около 55 ГБ, так что это возможно). Что вы могли бы сделать с данными на носителе, прежде чем передать их кому-либо, например регулятору? Можете-ли вы изменить данные?

    Блокчейн Биткойна насчитывает почти 400 000 блоков. Предположим, вы попытались бы удалить транзакцию из блока 200 000, примерно в середине блокчейна, в попытке доказать, что какой-то конкретной платёж никогда не происходил. Что случилось бы?

    1. Ошибка рассчёта хэша блока

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

    Еще читать  Разработчик Bitcoin Core считает, что увеличение размера блока не потребуется ещё несколько лет

    2. Отказ цепи

    Однако, это сломает цепь. Напомнб, каждый блок содержит хэш предыдущего блока. Если хэш хэша блока 200 000 изменится, то 200 001 будет ссылаться на не существующий больше хэш блока. Таким образом, цепочка блокчейна окажется повреждённой, что будет очевидной ошибкой. Чтобы устранить её, вам придётся перестроить и пересчитать хэши для каждого блока после измененного, последовательно заменив содержимое указателей каждого предыдущего-блока-хэша.

    Тем не менее, есть ограничители, которые делают очень сложным или даже невозможным такой пересчёт блокчейна. Эти ограничители различаются в зависимости от механизма добавления блоков и правил, принятых для разных блокчейнов. Существуют две основные схемы: целевые хэши для публичных PoW-блокчейнов; и специфические подписи для (некоторых) закрытых блокчейнов.

    3. Цепи сложно пересчитать

    В открытых PoW-блокчейнах, таких как блокчейн Биткойна, присутствует концепция сложности майнинга. В Биткойне блок считается действительным только в том случае, если блок хэша строго соответствует заданному шаблону – а именно, хэш должен быть меньше заданного числа, часто описываемого как «начинающегося с определенного количества нулей».

    Таким образом, вам не только нужно пересчитать хэш блока, но ещё и убедиться, что пересчитанный хеш получился меньше определенного числа. Вам нужно перемайнить блок, путём изменения ещё одной части, содержащейся в блоке (называемой nonce), пока не найдете хэш, который будет меньше заданного числа. Это потребует значительной вычислительной мощности. Затем вам нужно будет проделать это последовательно для каждого следующего блока. Если вкратце, вам нужно повторно пересчитать весь блокчейн с того блока, где вы внесли изменения и до текущего. Учитывая большой объем вычислительной мощности, необходимой для создания хеша, удовлетворяющего условиям, это будет проблематично. Ну и кроме того, чем раньше находится ваш блок в цепочке, тем больше времени у вас потребуется, ведь тем больше будет блоков, которые необходимо пересчитать.

    Для закрытых блокчейнов, таких как Multichain, механизм добавления блоков обычно немного другой, и вместо того, чтобы полагаться на дорогостоящее доказательство выполнения работы, правила могут быть установлены таким образом, чтобы те, кто добавляют блоки, занимались этим в порядке случайной очереди, и каждый блок подписыается цифровой подписью того, кто его добавляет. Тогда, блокчейн действителен и может быть принят только в том случае, если блоки были подписаны вполне определенными участниками. Это означает, что для того, чтобы пересчитать цепочку, вам придётся раздобыть секретные ключи тех, кто добавляет блоки. Вопрос кражи этих ключей – челлендж совсем иного характера, чем пересчёт цепочки, основывающейся на PoW.

    Обобщение

    Если бы вы сделали всё перечисленное выше, то данные на USB-накопителе стали бы внутренне согласованы и выглядели бы целостно. Но только для того, кто не может сверить его с какой-либо другой копией того же самого  блокчейна.

    Блокчейны с множеством копий

    Все вышеизложенное предполагает, что данные на носителе являются единственной версией, которую увидит регулятор. Допустим, вам удалось создать внутренне непротиворечивый блокчейн путём удаления транзакции и пересчёта хэшей всех последующих блоков – чтобы всё выглядело “по настоящему”.

    Все, что регулятору потребуется для проверки, – это сопоставить хэш последнего на текущий момент блока с хэшем этого юе блока другой копии блокчейна. Если хэш последнего блока на USB-накопителе отличается от хэша копии блокчейн любого другого участника сети (конечно, при условии отсутствия сговора), то регулятор сразу же заметит, что происходит что-то не то, а данные на USB-накопителе отличаются от данных живого блокчейна. Регулятору даже не нужно смотреть на данные в живом блокчейне. Ему просто нужно увидеть хэш последнего блока.

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

    Изменение блокчейна на лету

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

    Поэтому, если вы оттранслируете в сеть исправленный блок 200 000, то вы фактически создадите «вилку» (форк) цепочки, которая намного короче фактической цепи (длина (точнее, высота) которой составляет, скажем, 400 000 блоков). Таким образом вы получите два конкурирующих блочейна, один из которых состоит из 200 000 блоков и содержит исправленный блок, а другой – 400 000 блоков. Существующие полные узлы примут ваш блок (если он действителен), но затем сразу его проигнорируют, потому что они уже знают о сущестовании более длинной цепочки.

    Единственный способ – сделать изменения и создать более длинную цепочку, что потребует большое количество вычислительной мощности или завладения закрытыми ключами других лиц из списка, кому разрешено добавлять блоки (в зависимости от того, кому и как разрешено добавлять блоки), и продавить совершенно новую родословную блоков, которая должна быть длиннее существующей. Вам понадобится гигантское количество вычислительной мощности, чтобы появились хоть какие-то шансы опередить майнеров, которые считают блоки в PoW-сети, такой как Биткойн.

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

    Заключение

    Чрезвычайно сложно изменить данные в «автономном» блокчейне и еще сложнее в живом.

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

    Источник

    Источник


    Комментарии:

    Добавить Комментарий

    Яндекс.Метрика