Блокчейн/Уровень II · Механика/2.3 Блоки и цепочка/Урок 3
Цепочка хешей
Нерушимая связь и цена переписывания истории
МатериалыЭксплорер блоков с подробной информацией о заголовкеКалькулятор или скрипт для проверки хешей SHA-256Блокнот для записи значений хешей
Любопытство
- Почему последовательность цифровых записей защищена от подделки надёжнее, чем бумажная учётная книга?
- Почему добавление одного нового блока затрудняет изменение всех предыдущих транзакций?
- Какова вычислительная стоимость для злоумышленника, пытающегося изменить прошлую запись?
Исследование
- В 1991 году Стюарт Хабер и У. Скотт Сторнетта опубликовали статью «How to Time-Stamp a Digital Document» («Как поставить временную метку на цифровой документ»). Они предложили связывать документы в цепочку, где каждая новая запись содержит криптографический хеш предыдущей. Такая структура создавала неизменяемую историю: изменение любого прошлого документа меняло бы его хеш и разрывало связь со всеми последующими записями. Сатоши Накамото сослался на эту статью 1991 года в whitepaper Bitcoin как на основополагающий источник идеи структурной целостности блокчейна.
- Заголовок каждого блока Bitcoin содержит 32-байтовое поле «хеш предыдущего блока». Это значение — двойной хеш SHA-256 всего заголовка предыдущего блока. Майнер записывает этот хеш в новый заголовок до начала майнинга, поскольку он входит в хешируемые данные. В результате получается цепочка, в которой каждый блок криптографически фиксирует своего родителя. Без этой связи блоки были бы независимыми «островами»; с ней они образуют непрерывную последовательность, начало которой — генезис-блок от 3 января 2009 года.
- Корень Меркла в заголовке привязывает все транзакции блока к его хешу. Если злоумышленник изменит хотя бы одну транзакцию в историческом блоке, корень Меркла изменится. Следовательно, изменится и хеш самого блока. Поскольку следующий блок хранит старый хеш этого блока в поле «хеш предыдущего блока», связь разрывается. С этого места цепочка становится недействительной. Чтобы восстановить её, злоумышленнику придётся заново выполнить доказательство работы для этого блока.
- Повторного майнинга одного блока недостаточно, поскольку все последующие блоки тоже содержат хеши, которые больше не совпадают. Чтобы получить валидную цепочку, злоумышленник должен заново выполнить доказательство работы для каждого блока после изменённого. Для этого нужна огромная вычислительная мощность. Пока честная сеть продолжает добавлять новые блоки, злоумышленник вынужден с ней соревноваться. Если хешрейт злоумышленника превысит суммарный хешрейт остальной сети, он сможет обогнать цепочку и переписать историю.
- Ноды выбирают не самую длинную цепочку по числу блоков, а цепочку с наибольшим суммарным доказательством работы — так называемым «chainwork». Этот показатель учитывает корректировки сложности, из-за которых более поздние блоки труднее добыть. Ветвь с большим числом блоков, но меньшим суммарным объёмом работы не выбирается, даже если её блоки валидны. Чем глубже транзакция находится в цепочке, тем больше работы злоумышленнику придётся повторить, чтобы её изменить. Каждое подтверждение добавляет ещё один слой вычислительной работы, необходимой для того, чтобы переписать историю.
- Откройте любой эксплорер блоков и выберите недавний блок. Обратите внимание на поле «previous hash» (хеш предыдущего блока). Нажмите на этот хеш, чтобы перейти к родительскому блоку. Убедитесь, что хеш заголовка родительского блока совпадает со значением, сохранённым в дочернем. Повторите это три раза, прослеживая цепочку назад по связям. Такая ручная проверка подтверждает, что каждый блок криптографически фиксирует своего предшественника, образуя непрерывную последовательность подтверждённых работой записей, которая тянется до генезис-блока.
Ключевые факты
- Схема связанных временных меток, предложенная Стюартом Хабером и У. Скоттом Сторнеттой в 1991 году, цитируется в whitepaper Bitcoin.
- Каждый заголовок блока содержит 32-байтовый хеш заголовка предыдущего блока, что последовательно связывает блоки между собой.
- Изменение прошлой транзакции меняет корень Меркла и хеш её блока, разрывая все последующие связи.
- Ноды следуют за цепочкой с наибольшим суммарным доказательством работы («chainwork»), а не просто с наибольшим числом блоков.
- Чтобы обогнать честную сеть, злоумышленник должен заново выполнить доказательство работы для каждого блока после изменённого.
- Генезис-блок, добытый 3 января 2009 года, служит неизменным якорем цепочки.
Упражнение девять, шесть, три, один
9СобратьПеречислите 9 различных типов цифровых реестров или систем учёта. Отметьте, как каждая из них защищает исторические записи от подделки.
6СгруппироватьСгруппируйте эти 9 систем в 6 категорий по механизму обеспечения неизменности: криптографическое связывание, консенсусное голосование, аудит со стороны центрального органа, физическое резервирование, юридический договор или другое.
3Выделить главноеСведите 6 групп к 3 фундаментальным причинам, по которым большинство систем не может обеспечить историю, где любое вмешательство заметно, без доверенной третьей стороны.
1КристаллизоватьНапишите одно предложение о том, как доказательство работы (PoW) превращает связанный список хешей в экономически защищённую цепочку владения.
Проверка фактов
Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.