Содержание статьи
info
Это вторая статья из цикла, посвященного техническим основам устройства криптовалют. Первая носит название «Крипта с нуля. Разбираемся с алгоритмами в основе криптовалют».
3 января 2009 года, где‑то около семи вечера по Гринвичу, на ничем не примечательном компьютере запускается программа. Через несколько минут она генерирует первый блок данных и записывает в него короткую фразу — заголовок из свежей газеты The Times: «Канцлер на грани второго спасения банков». Автор программы — человек, которого никто никогда не видел, — подписывается псевдонимом Сатоси Накамото и вскоре исчезает из публичного пространства, оставив после себя технологию, ставшую основой крупнейшей криптовалютной экосистемы мира.
Это известная история, затертая до дыр, ее пересказывают в каждой второй статье про криптовалюты. Я вспомнил о ней не в качестве очередного экскурса в прошлое, а ради одной детали — той самой газетной цитаты, вбитой в первый блок, так называемый генезис‑блок блокчейна. Накамото поместил ее туда не из литературных соображений — это была подпись, доказательство, что блок создан не раньше 3 января 2009 года, потому что до указанной даты этого номера The Times просто не существовало. И одновременно — манифест: банковская система трещит по швам, мы строим другую. С этой фразы и начался биткоин.
Точнее, не сам биткоин, а блокчейн — технология, которую Накамото подробно описал в своей работе «Bitcoin: A Peer-to-Peer Electronic Cash System», опубликованной в интернете 31 октября 2008 года. Если говорить кратко, то блокчейн — это технологическая основа, поверх которой могут быть запущены различные приложения, а биткоин всего лишь одно из них. Фактически история технологий сделала очередной виток: когда‑то одним из первых прикладных приложений, работающих поверх интернета, стала электронная почта, и только потом к ней подтянулись браузеры, файлообменники и прочий полезный софт. Сейчас на блокчейне построено столько всего, что голова идет кругом: от криптобирж и NFT до систем голосования, земельных кадастров и цепочек поставок фармацевтики. Биткоин просто был первым приложением, построенным на этой технологии.
Генезис‑блок задает стартовую точку блокчейна и не ссылается на предыдущий блок, потому что его попросту нет в природе. Именно поэтому точная дата создания этого самого первого блока критически важна. Его параметры жестко зашиты в исходный код биткоин‑клиента, чтобы каждая нода начинала проверку цепочки с одной и той же основы.
Как устроен блокчейн
Если отбросить маркетинговую шелуху — а ее вокруг темы накопилось на пару товарных вагонов и маленькую тележку, — блокчейн устроен довольно просто: это база данных. Не самая быстрая, не самая удобная, с кучей ограничений, но у нее есть одно ключевое свойство, которого нет ни у одной классической СУБД: записи в ней невозможно отредактировать задним числом. Это математически невозможно, даже если этим займутся на досуге АНБ, ЦРУ и парочка правительств каких‑нибудь мировых сверхдержав. Причем реализовано это не с помощью какой‑то древней черной магии, а посредством трех давно известных инженерных трюков, использованных в правильном порядке.
Вторая особенность вытекает из первой: раз никто не может подделать записи, то и доверять одному конкретному хранителю базы больше не нужно. Можно раздать копии всем желающим, и, если кто‑то попытается жульничать, остальные моментально это заметят. В блокчейне нет главного сервера, нет администратора с правами root, нет банка, который однажды решит, что твой счет пришло время заблокировать. Это звучит как анархистская утопия, но технология работает — уже много лет подряд, без единого серьезного сбоя сети (отдельные биржи и кошельки — это совсем другой разговор, к самому блокчейну отношения не имеющий).

Ну а теперь давай заглянем этому самому блокчейну под капот, разберемся, что такое блок и почему его называют именно «блок», а не, скажем, «запись» или «строка». Посмотрим, как блоки соединяются в цепочку и почему эта сцепка крепче любого амбарного замка. Поймем, как тысячи независимых компьютеров умудряются договариваться о единой версии истории транзакций без начальника и арбитра. И в конце разложим по полочкам три разновидности блокчейнов — публичные, приватные и консорциумные, а заодно поймем, почему за одним словом скрываются принципиально разные концепции.
Что такое блок и из чего он состоит?
Слово «блок» звучит монументально — и поэтому сбивает с толку. На самом же деле это просто пакет данных с определенной структурой, почти как в обычной базе данных. Возьмем для примера блокчейн, на котором построен биткоин: здесь блок состоит из двух частей — заголовка и тела.
С телом, занимающим самый большой объем блока, все просто: оно содержит список транзакций. «Аня отправила Диме 0,01 BTC», «Вася отправил Маше 0,3 BTC» — и так далее, сколько влезет. В один блок блокчейна в сети биткоин помещается две‑три тысячи транзакций, иногда больше. К слову, самая первая пользовательская транзакция с биткоином произошла 12 января 2009 года: Сатоси Накамото отправил 10 BTC американскому программисту и криптографу Хэлу Финни, и эта операция была подтверждена в блоке № 170. Короче, если представить, что блок — это железнодорожный вагон, доверху наполненный зерном, то зерно (составляющее основную массу и полезное содержимое вагона) — это как раз записи о транзакциях.

А вот заголовок — штука поинтереснее. Он маленький, всего 80 байт, но именно в нем спрятана вся механика, на которой работает блокчейн. В сети биткоин заголовок содержит шесть полей:
- Версия протокола — техническое поле, содержимое которого сообщает другим узлам сети, по каким правилам обрабатывать блок.
- Хеш предыдущего блока — а вот это самое важное поле во всей конструкции. Именно оно превращает набор разрозненных блоков в цепочку. Каждый блок хранит в себе «отпечаток пальца» предыдущего — 256-битный хеш, вычисленный по алгоритму SHA-256. Зачем — подробно разберем в следующем разделе, пока просто запомни: это поле и есть самое важное звено в цепи.
- Корень Меркла (Merkle root) — это хеш всех транзакций в теле блока, свернутый в одно 256-битное число. Работает это так: транзакции разбиваются на пары, от каждой пары считается хеш, потом хеши снова разбиваются на пары, снова хешируются — и так до тех пор, пока не останется одно значение. Получается дерево, где корень — единственное число, которое изменится, если изменить хотя бы один бит хоть в одной транзакции. Зачем такие сложности? Затем, что хранить в заголовке тысячи транзакций целиком физически невозможно, а корень Меркла позволяет одним значением «запечатать» все тело блока, сделав невозможным его незаметное изменение.
- Временная метка — Unix timestamp, показывает, сколько секунд прошло с 1 января 1970 года. У генезис‑блока, того самого, с цитатой из газеты, метка имеет значение 1231006505 — 3 января 2009 года, 18:15:05 UTC. Метка нужна для порядка и для корректировки сложности майнинга: сеть следит за тем, как быстро появляются новые блоки, и при необходимости корректирует процесс.
- Биты сложности (difficulty target) — компактная запись значения, ниже которого должен оказаться хеш блока, чтобы сеть его приняла. Чем меньше это число, тем сложнее найти подходящий хеш. Именно это поле регулирует скорость майнинга и поддерживает среднее время появления нового блока. Биты сложности показывают, насколько трудно сейчас найти новый блок в сети биткоин. Сеть настроена таким образом, чтобы новый корректный блок в цепочке появлялся примерно раз в десять минут, над этой задачей трудятся майнеры. Если в какой‑то момент майнеров становится много и общая вычислительная мощь сети возрастает, сеть автоматически делает задачу труднее, если мощности стало меньше, задача упрощается. Биты сложности как раз и позволяют управлять этим процессом.
- Нонс (nonce, от number used once) — четырехбайтовое число, которое майнер перебирает вслепую, пытаясь подобрать такое значение, чтобы хеш всего заголовка оказался меньше целевого порога сложности. Этот процесс называют «вычислительной работой», proof of work: иного тривиального способа найти нонс не существует, только перебор. Майнер меняет нонс, считает SHA-256 от заголовка, смотрит результат — и, если он не подошел, меняет снова, миллиарды раз подряд, пока не повезет.
Вот, собственно, и весь блок: тело с транзакциями и заголовок с шестью полями.

Обрати внимание на два поля заголовка: хеш предыдущего блока и корень Меркла — это так называемые криптографические хеши. Они намертво привязывают блок к двум вещам: к предыдущему блоку и к собственному содержимому. Измени один байт в любой транзакции — изменится корень Меркла. Изменится корень Меркла — изменится хеш всего заголовка. А этот хеш записан в следующем блоке, поэтому при его изменении цепочка разорвется, что и делает любое изменение содержимого блокчейна задним числом физически невозможным.
Скованные одной цепью
Когда майнер собирает новый блок, он включает в его заголовок хеш предыдущего блока, который добавляется в поле prev_block_hash. Всё, связь установлена. Блок № 638 201 содержит хеш блока № 638 200, тот — хеш блока № 638 199, и так далее вниз, до самого генезис‑блока с газетным заголовком из The Times. Получается что‑то вроде бусин на нитке — с той разницей, что нитка здесь не физическая, а математическая. Каждая бусина «помнит» значение предыдущей, причем абсолютно точно, до последнего бита.
А теперь давай на минуточку представим, что кто‑то вдруг захотел подправить старую транзакцию. Например, в блоке № 638 100 записано, что Вася отправил Пете 2 BTC. Злоумышленник хочет эту запись стереть — сделать вид, что перевода не было, и потратить те же монеты еще раз.
Злоумышленник открывает блок № 638 100 и меняет транзакцию. В тот же момент меняется корень Меркла — потому что дерево хешей пересчитывается снизу вверх и любое изменение в любом месте блока меняет это значение. Изменился корень Меркла — изменился заголовок. Изменился заголовок — изменился хеш блока. А этот хеш записан в заголовке следующего блока № 638 101. Значит, блок № 638 101 теперь содержит неправильную ссылку: любая нода сети проверит хеш, и, если он не сойдется, блок будет отвергнут.
Ладно, думает злоумышленник. Я пересчитаю и блок № 638 101 тоже, подставлю новый хеш, подберу новый нонс, чтобы блок снова удовлетворял порогу сложности. Но тогда изменится хеш блока № 638 101 — а он записан в блоке № 638 102. Значит, пересчитывать нужно и его, и следующий, и следующий за ним — все блоки от точки подделки до конца цепочки.
И вот тут вступает в игру экономика. На момент написания этой статьи (апрель 2026 года) в цепочке биткоина содержится 945 339 блоков. Каждый из них был найден майнерами путем перебора нонсов, и это потребовало колоссальной вычислительной работы — собственно, в этом и кроется суть майнинга: он защищает сеть от злодеев, желающих что‑то поменять в блокчейне.

Пересчитать один блок — значит заново выполнить весь этот перебор, пересчитать тысячу блоков — проделать эту работу заново тысячу раз. Причем не просто пересчитать всю цепочку от точки подделки, а пересчитать ее быстрее, чем это сделает вся остальная сеть — ведь она тоже не стоит на месте. Пока злоумышленник пересчитывает старые блоки, остальные участники блокчейна продолжают майнить новые. Обогнать их физически невозможно: ни у одного злоумышленника на нашей планете нет таких вычислительных мощностей.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
