История блокчейна
Mastering Blockchain
Фундаментальное техническое руководство, которое признано одним из самых авторитетных и полных учебников по технологии распределенного реестра в мире.
Что мы должны узнать
Биткойн не изобрели с нуля — его собрали из идей, которые копились тридцать лет. Новой была сама сборка: она впервые решила двойную трату без доверенного центра.
Общий таймлайн: 1976 → 2009
Ключи и хеши
- 1976Диффи и Хеллман: обмен ключами
- 1978Шифрование с открытым ключом (RSA)
- 1978Лэмпорт: порядок событий, репликация автоматов
- 1979Дерево Меркла
Сеть и доверие
- 1980Меркл: протоколы для открытого ключа
- 1982Чаум: слепая подпись
- 1982Задача византийских генералов
- 1980-еTCP/IP
Эллиптические кривые
- 1985Коблиц и Миллер: криптография на эллиптических кривых
Цепочка меток времени
- 1991Хабер и Сторнетта: цепочка меток времени
- 1992Дворк и Наор: первое доказательство работы
- 1993Метки времени + деревья Меркла
Электронная наличность
- 1995DigiCash Чаума в банках
- 1998Сабо: Bit Gold
- 1998Вей Дай: b-money
Одноранговые сети
- 1999Napster
- 1999TIMESEC: служба меток времени
- 2000Gnutella: сеть без центра
- 2001BitTorrent и DHT
Доказательство работы
- 2002Бэк: Hashcash
- 2004Финни: многоразовое PoW
- 2005Аспнес и др.: PoW против атаки Сивиллы
Биткойн
- 2008Статья Сатоши Накамото
- 2009Генезис-блок: биткойн запущен
Договориться о секретном ключе с незнакомцем, даже если весь разговор кто-то подслушивает.
Протокол обмена ключами. Двое обмениваются открытыми числами и получают общий секрет, который нельзя вычислить со стороны.
Уитфилд Диффи и Мартин Хеллман, Стэнфорд. Статья «New Directions in Cryptography», 1976.
Чтобы шифровать переписку, ключ нужно заранее передать лично или с курьером.
Ключ рождается прямо в открытом канале. Отсюда идея пары «открытый — закрытый ключ».
В биткойнеадрес — это открытый ключ, тратит монеты владелец закрытого.
Диффи — Хеллман на красках
- Общая краска
жёлтый — виден всемАня и Боря открыто договариваются об общей краске. Подслушивающая Ева её тоже знает.
- Свой секрет
Аня: + красный · Боря: + синийКаждый подмешивает в общую краску свой тайный цвет и никому его не показывает.
- Обмен
оранжевый ⇄ зелёныйСмесями обмениваются открыто. Ева видит обе, но разделить краску обратно на цвета не может.
- Общий ключ
+ красный = + синийКаждый добавляет в чужую смесь свой секрет. Получается один и тот же цвет — это и есть ключ.
В математикеВместо красок — возведение в степень по модулю: вперёд считается легко, назад — практически невозможно.
Сделать пару ключей: открытый раздаём всем, закрытый храним у себя. Подписать может только владелец, проверить — любой.
Первая практичная система с открытым ключом. Умеет и шифровать, и ставить цифровую подпись.
Рон Ривест, Ади Шамир и Леонард Адлеман, MIT. Придумана в 1977 году, статья вышла в 1978-м.
Подлинность документа подтверждает подпись от руки или печать — их можно подделать.
Цифровую подпись нельзя подделать без закрытого ключа, а проверить может кто угодно.
В биткойнекаждая транзакция подписана закрытым ключом владельца монет.
RSA: подпись и проверка
- Два простых числа
p · q = nБерём два огромных простых числа и перемножаем. Умножить легко, а разложить результат обратно — работа на тысячи лет.
- Пара ключей
открытый (n, e) · закрытый dИз этих чисел получаем два ключа. Открытый публикуем, закрытый не показываем никому.
- Подпись
подпись = хеш^d mod nЧтобы подписать документ, владелец применяет к его хешу закрытый ключ.
- Проверка
подпись^e mod n = хеш?Любой применяет открытый ключ к подписи. Совпало с хешем документа — подпись настоящая.
ОговоркаВ книге этот пункт назван «изобретение открытых ключей шифрования». Сама идея — у Диффи и Хеллмана, RSA — её первая рабочая реализация.
Научить компьютеры в сети договариваться, какое событие было раньше, — без общих часов.
Логические часы и идея репликации автоматов (SMR): копии остаются одинаковыми, если выполняют одни и те же команды в одном порядке.
Лесли Лэмпорт. Статья «Time, Clocks, and the Ordering of Events in a Distributed System», 1978.
У каждого компьютера свои часы, и они расходятся. Кто был первым — непонятно.
Порядок событий задаёт протокол, а не часы. Одинаковый порядок — одинаковое состояние у всех.
В биткойнепорядок команд — это порядок блоков в цепочке.
Репликация автоматов: почему важен порядок
Команды те же, порядок разный — состояния разошлись: 15, 5 и 10. Чья версия правильная?
Порядок задают блоки, PoW делает его общим. Все исправные реплики применяют одно и то же и приходят к 15.
Заменить длинный список данных одним коротким отпечатком — так, чтобы подмену любого элемента было видно сразу.
Дерево хешей: хеши данных складываются попарно, пока не останется один — корень.
Ральф Меркл. Описал в патенте и диссертации, 1979.
Чтобы убедиться, что в списке ничего не подменили, нужно сверить его целиком.
Достаточно сверить один корень — 32 байта на любое число записей.
В биткойнекорень Меркла всех транзакций лежит в заголовке блока.
Дерево Меркла: подменим одну транзакцию
- Листья
хеш(Tx1) … хеш(Tx4)У каждой транзакции считают хеш — короткий отпечаток.
- Пары
хеш(1 + 2) · хеш(3 + 4)Хеши склеивают попарно и считают хеш от пары. И так уровень за уровнем.
- Корень
один хеш наверхуНаверху остаётся один хеш. Измени что-то внизу — он изменится тоже.
Корень — отпечаток всех транзакций. В заголовке блока лежит только он: 32 байта на любое число транзакций.
Поменяли одну цифру в Tx3 — поменялся корень. Подмена видна сразу, проверять все транзакции не нужно.
Показать, как применять открытые ключи на практике: как раздавать их, заверять и подписывать ими.
Статья «Protocols for Public Key Cryptosystems»: распространение ключей, сертификаты, подписи на основе деревьев хешей.
Ральф Меркл. Одна из восьми работ, на которые ссылается Сатоши.
Открытый ключ придуман, но непонятно, как узнать, что этот ключ действительно принадлежит Боре.
Появились протоколы: справочники ключей, сертификаты и дерево подтверждений.
В биткойнедерево Меркла в блоке сделано по этой статье — Сатоши ссылается на неё напрямую.
Протоколы Меркла: чей это ключ?
- Задача
ключ Бори = ?Аня хочет написать Боре, но получила его открытый ключ от незнакомца. А вдруг ключ подменили?
- Справочник
имя → ключМожно завести общий справочник ключей. Но тогда приходится доверять тому, кто его ведёт.
- Сертификат
подпись центра: «ключ Бори»Или пусть доверенный центр подпишет запись «этот ключ — Борин». Подпись проверит каждый.
- Дерево
корень + путь к ключуИли сложить все ключи в дерево хешей и опубликовать корень. Тогда подлинность ключа доказывается коротким путём к корню.
Зачем это биткойнуТот же приём — «корень + короткий путь» — позволяет проверить, что транзакция есть в блоке, не скачивая блок целиком.
Сделать цифровые деньги такими же анонимными, как наличные: банк подтверждает купюру, но не знает, кому её выдал.
Способ подписать документ, не видя его содержимого. Подпись при этом остаётся настоящей.
Дэвид Чаум. Статья «Blind Signatures for Untraceable Payments», 1982.
Электронный платёж всегда оставляет след: банк знает, кто, кому и сколько заплатил.
Банк гарантирует подлинность денег, но не может проследить их путь.
В биткойнеидея «цифровой наличности» — та самая задача, которую решал Сатоши.
Слепая подпись: конверт с копиркой
- Купюра
номер: случайныйКлиент сам создаёт купюру со случайным номером.
- Конверт
номер × случайное числоПрячет её в «конверт с копиркой». В математике это умножение на случайное число.
- Подпись
банк подписывает вслепуюБанк ставит подпись на конверт. Через копирку она ложится на купюру. Клиент достаёт её из конверта.
Клиент готовит купюру со случайным номером. Банк её ещё не видел.
Кладёт в конверт с копиркой. Номер спрятан — в криптографии это «ослепление» случайным множителем.
Банк подписывает конверт, не открывая. Через копирку подпись ложится на купюру.
Купюра с подписью банка. Любой проверит подпись, но банк не свяжет купюру с клиентом.
Понять, может ли сеть прийти к общему решению, если часть её участников — предатели.
Задача о согласии в системе, где узлы могут не просто ломаться, а намеренно врать — разным соседям по-разному.
Лесли Лэмпорт, Роберт Шостак и Маршалл Пиз. Статья 1982 года.
Считалось, что узел либо работает, либо сломан и молчит.
Узел может врать. Доказано: договориться можно, только если предателей меньше трети.
В биткойнепервая система, решившая эту задачу в открытой сети, где участников никто не считал.
Византийские генералы
- Осада
атаковать или отступать?Несколько армий окружили город. Победить можно, только если все ударят одновременно.
- Гонцы
генерал → генералГенералы договариваются через гонцов. Собраться вместе они не могут.
- Предатель
одному: «атакуем», другому: «отступаем»Среди генералов есть предатели. Они шлют разным соседям разные приказы, чтобы армии разошлись.
- Правило
всего ≥ 3 · предателей + 1Верные генералы всё равно договорятся, если предателей меньше трети. Например, 1 из 4.
СвязьПодробно задачу разбирали в прошлом докладе — «Распределённые системы». Здесь отмечаем только дату: 1982 год.
Соединить разные сети в одну — так, чтобы у неё не было ни хозяина, ни главного узла.
Набор протоколов: IP доставляет пакеты по адресу, TCP следит, чтобы они дошли все и в правильном порядке.
Сети разных организаций говорят на разных языках и друг друга не понимают.
Любые два компьютера в мире могут обменяться данными. Так появился интернет.
В биткойнеузлы сети находят друг друга и обмениваются блоками поверх TCP/IP.
TCP/IP: как письмо доходит до адресата
- Пакеты
сообщение → 1 · 2 · 3 · 4Сообщение режут на небольшие пакеты. Каждый подписан: откуда и куда.
- Маршрут
узел → узел → узелКаждый пакет идёт своим путём через промежуточные узлы. Сломался один путь — найдётся другой.
- Сборка
3 · 1 · 4 · 2 → 1 · 2 · 3 · 4Получатель расставляет пакеты по номерам. Потерянные просит прислать заново.
- Без центра
нет главного узлаСетью никто не управляет целиком: каждый узел знает только, куда передать пакет дальше.
ОговоркаВ книге дата — просто «1980-е». Конкретный день — 1 января 1983 года, когда ARPANET перешла на TCP/IP.
Получить ту же стойкость, что у RSA, но с гораздо более короткими ключами и подписями.
Криптография на точках особой кривой. Умножить точку на число легко, а узнать это число по результату — практически невозможно.
Нил Коблиц и Виктор Миллер — независимо друг от друга, 1985.
Надёжный ключ RSA — 3072 бита. Для системы, где подпись хранится вечно, это много.
Ключ в 256 бит даёт ту же стойкость. Подписи короткие и быстрые.
В биткойнекривая secp256k1: закрытый ключ — 32 байта. Та же кривая — в Ethereum.
Эллиптическая кривая: сложение точек
y² = x³ + 7. Закрытый ключ — 32 байта,
в Ethereum та же кривая.
Доказать, что документ существовал в такой-то день и с тех пор не менялся, — никому при этом не доверяя.
Служба меток времени: каждая метка содержит хеш предыдущей. Получается цепочка, которую нельзя переписать задним числом.
Стюарт Хабер и Скотт Сторнетта. Статья «How to Time-Stamp a Digital Document», 1991.
Дату на цифровом документе можно поставить любую — и потом поменять.
Чтобы подделать одну запись, придётся переписать все записи после неё.
В биткойнекаждый блок хранит хеш предыдущего. Три из восьми ссылок Сатоши — на работы этих авторов.
Хеш-цепочка: перепишем документ задним числом
Каждый документ «пристёгнут» к предыдущему. С 1995 года компания авторов, Surety, раз в неделю печатает итоговый хеш в New York Times — бумажную копию не перепишет никто.
Изменили документ 2 — изменился его хеш. Документ 3 ссылается на старый хеш, цепочка рвётся. Чтобы скрыть подделку, придётся переписать всё после неё.
Сделать спам невыгодным: пусть за каждое письмо отправитель «платит» работой своего компьютера.
Прежде чем отправить письмо, компьютер решает небольшую задачу. Проверить решение получателю — мгновенно.
Синтия Дворк и Мони Наор. Статья «Pricing via Processing or Combatting Junk Mail», 1992.
Отправить миллион писем стоит столько же, сколько одно, — почти ничего.
Одно письмо — секунда работы, незаметно. Миллион писем — недели работы.
В биткойнето же доказательство работы защищает сеть: майнинг вырос из борьбы со спамом.
Плата вычислениями: письмо со «штампом»
- Письмо
кому: БоряАня хочет отправить Боре письмо. Почтовый сервер Бори бесплатно его не примет.
- Задача
реши для этого письмаКомпьютер Ани решает задачу, привязанную именно к этому письму и адресату. На это уходит около секунды.
- Штамп
письмо + решениеРешение прикладывается к письму, как марка. Использовать его для другого письма нельзя.
- Проверка
одно вычислениеСервер Бори проверяет решение мгновенно. Нет решения — письмо считается спамом.
СмыслЧестному человеку секунда на письмо незаметна. Спамеру с миллионом писем нужны недели — рассылка перестаёт окупаться.
Не тянуть в цепочку каждый документ отдельно, а записывать сразу пачку — одним хешем.
Документы за период складывают в дерево Меркла, и в цепочку меток времени идёт только его корень.
Дэйв Байер, Стюарт Хабер и Скотт Сторнетта, 1993.
Одна запись в цепочке — один документ. Цепочка быстро разрастается.
Одна запись — тысячи документов. Это уже почти устройство блока.
В биткойнеблок = пачка транзакций, а в его заголовке — один корень Меркла.
Две идеи вместе: цепочка и дерево
- Пачка
документы за неделюСлужба собирает все документы, пришедшие за период.
- Дерево
документы → кореньИз их хешей строит дерево Меркла и получает один корень.
- Цепочка
корень + хеш прошлой записиВ цепочку меток времени записывается только корень, сцепленный с предыдущей записью.
- Доказательство
документ + путь к корнюЧтобы доказать дату одного документа, достаточно показать его путь к корню — несколько хешей.
ЗаметьтеПачка данных, корень дерева, ссылка на предыдущую запись — до блока биткойна отсюда остаётся один шаг.
Запустить в настоящих банках электронные деньги, которые нельзя ни подделать, ни отследить.
Компания Чаума и её система eCash. Монеты — файлы со слепой подписью банка; банк ведёт список уже потраченных.
Дэвид Чаум. Компания основана в 1989 году; в 1995-м eCash выпустил американский Mark Twain Bank.
Цифровые деньги либо отслеживаются, как карта, либо копируются, как файл.
eCash и анонимен, и защищён от копий. Но всё держится на банке — в 1998 году компания обанкротилась.
В биткойнете же два требования — подотчётность и анонимность, — но без центра.
Два требования к электронной наличности
Подотчётность
- Деньги можно потратить только один раз
- Потратить их может только законный владелец
Анонимность
- Как наличные: путь купюры не отследить
- Пользователь решает, кому раскрыть данные
Сделать цифровой аналог золота: ценность, которую трудно «добыть» и которой не управляет ни один банк.
Проект денег, где «слиток» — это решение трудной вычислительной задачи, а записи о владении ведут сами участники.
Ник Сабо. Замысел — 1998 год, публично описан в блоге в 2005-м. Запущен не был.
Цифровые деньги выпускает банк или компания — им приходится верить.
Деньги «добываются» вычислениями, эмитента нет. Не решено одно: как участникам договориться.
В биткойнепочти готовый чертёж: добыча работой и цепочка решений.
Bit Gold: как «добывается» слиток
- Задача
строка-условиеУчастник получает строку-условие и ищет к ней решение — это требует много вычислений.
- Слиток
решение = «золото»Найденное решение и есть слиток: подделать его нельзя, только добыть заново.
- Реестр
слиток № 17 → владелецРешение с меткой времени записывается в общий реестр собственности, который ведут участники.
- Цепочка
решение → новое условиеУсловие следующей задачи берётся из предыдущего решения. Слитки выстраиваются в цепочку.
Чего не хватилоРеестр предлагалось вести «византийским кворумом» участников. Как сделать это в открытой сети, где любой может создать тысячу фальшивых участников, осталось без ответа.
Убрать банк совсем: пусть каждый участник сам ведёт запись о том, у кого сколько денег.
Описание анонимных электронных денег: они создаются вычислениями, а переводы объявляются всей сети.
Вей Дай. Рассылка cypherpunks, ноябрь 1998. Первая ссылка в статье Сатоши.
Двойную трату ловит банк: только у него есть список потраченных монет.
Список ведут все. Осталось понять, как им договориться, какая трата была первой.
В биткойнерешил именно это: общий реестр и общий порядок трат.
Двойная трата: кто ведёт реестр
- Копия
монета → 2 магазинаЦифровую монету можно скопировать и потратить дважды. Подпись на обеих копиях настоящая.
- Банк
реестр у центраЧаум отдал список потраченных монет банку. Работает, но всё держится на одном центре.
- Все
реестр у каждогоВей Дай отдал реестр всем участникам. Тогда им нужно договориться о порядке трат — без доверия друг к другу.
Одну монету скопировали и потратили дважды. Оба магазина приняли — каждый видит настоящую подпись.
Банк ведёт реестр потраченных номеров и вторую трату отклоняет. Работает — но всё держится на одном центре.
Реестр ведут все узлы. Тогда им нужно договориться, какая трата была первой, — без доверия друг к другу. Это и решит биткойн.
Меняться музыкой напрямую: файл идёт с компьютера на компьютер, минуя сервер.
Сеть обмена файлами. Сами файлы лежат у пользователей, но ищут их через центральные серверы компании.
Шон Фэннинг и Шон Паркер. Запущен в июне 1999 года.
Файлы раздаёт сервер: он платит за хранение и трафик и отвечает за всё.
Миллионы людей раздают файлы друг другу. Но поиск остался в центре — и суд в 2001 году его выключил.
В биткойнеурок Napster: если у сети есть центр, её можно закрыть.
Napster: сеть с центром
- Список
у меня есть: …Программа сообщает серверу, какие песни лежат на вашем компьютере.
- Поиск
сервер: «песня у Бори»Вы спрашиваете у сервера песню. Он отвечает, у кого она есть.
- Скачивание
Боря → выФайл идёт напрямую от Бори к вам. Сервер в этом не участвует.
Файл идёт от пира к пиру, а поиск — через сервер. Быстро и удобно, но центр есть.
2001: суд — и серверы выключены. Пиры на месте, а сети больше нет. Центр — единая точка отказа.
Запрос расходится волной от соседа к соседу. Центра нет, но каждый поиск будоражит всю сеть.
Узлы стоят на кольце и знают «дальних» соседей. Нужный узел — за несколько прыжков. Так ищут узлы и в Ethereum.
Построить службу меток времени, которой почти не нужно доверять: её работу может проверить любой.
Бельгийский проект: служба сцепляет метки в цепочку и регулярно публикует итог, чтобы подделку нельзя было скрыть.
Анри Массиас, Хавьер Серрет Авила и Жан-Жак Кискатер. Вторая ссылка в статье Сатоши.
Службе меток времени приходится верить на слово, что она не меняет записи.
Служба публикует отпечатки своей работы. Обман сразу виден всем.
В биткойнеСатоши называет биткойн распределённым сервером меток времени.
TIMESEC: служба, которой не нужно верить
- Запрос
хеш документа → службаКлиент отправляет службе не документ, а только его хеш. Содержимое остаётся в тайне.
- Раунд
хеши за период → деревоВсе хеши, пришедшие за короткий период, служба складывает в дерево.
- Цепочка
корень + прошлый раундКорень дерева сцепляется с итогом прошлого раунда. Вставить запись задним числом нельзя.
- Публикация
итог раунда — всемИтог регулярно публикуется открыто. Любой может проверить, что служба ничего не переписала.
Зачем это здесьЧетыре ссылки из восьми в статье Сатоши — про метки времени. Метка здесь значит не «который час», а «в каком порядке».
Убрать из сети обмена файлами сервер совсем — тогда её нечем будет выключить.
Полностью одноранговая сеть: каждый узел знает нескольких соседей и передаёт им запросы.
Джастин Франкел и Том Пеппер, компания Nullsoft. Март 2000 года.
В Napster поиск идёт через сервер. Выключили сервер — сети нет.
Запрос расходится от соседа к соседу. Закрывать нечего: центра не существует.
В биткойнетак же расходятся по сети новые транзакции и блоки.
Gnutella: запрос идёт волной
- Соседи
узел ↔ 4–5 соседейКаждый узел держит связь с несколькими другими. Всей сети не знает никто.
- Волна
сосед → его соседи → …Запрос «у кого есть песня?» узел шлёт соседям, те — своим соседям, и так дальше.
- Ответ
назад по той же цепочкеТот, у кого файл нашёлся, отвечает. Скачивание идёт напрямую.
Файл идёт от пира к пиру, а поиск — через сервер. Быстро и удобно, но центр есть.
2001: суд — и серверы выключены. Пиры на месте, а сети больше нет. Центр — единая точка отказа.
Запрос расходится волной от соседа к соседу. Центра нет, но каждый поиск будоражит всю сеть.
Узлы стоят на кольце и знают «дальних» соседей. Нужный узел — за несколько прыжков. Так ищут узлы и в Ethereum.
Сделать сеть без центра не только живучей, но и быстрой: чтобы нужное находилось за несколько шагов.
BitTorrent качает файл кусками сразу у многих. Распределённая хеш-таблица (DHT) находит нужный узел без сервера.
Брэм Коэн — BitTorrent, 2001. DHT Kademlia — Петар Маймунков и Давид Мазьер, 2002.
В Gnutella каждый запрос обходит всю сеть: чем она больше, тем медленнее.
Узел находится за несколько «прыжков», даже если узлов миллионы.
В биткойнеравноправные узлы без центра. По образцу Kademlia ищет узлы Ethereum.
DHT: найти узел за несколько прыжков
- Кольцо
у каждого узла — номерУзлы получают номера и мысленно встают по кругу. У каждого файла тоже есть номер.
- Соседи
ближние и дальниеУзел знает несколько ближних соседей и несколько дальних — через полкруга, четверть круга и так далее.
- Прыжки
вдвое ближе с каждым шагомЗапрос передают тому знакомому, чей номер ближе к нужному. Каждый прыжок сокращает путь вдвое.
Файл идёт от пира к пиру, а поиск — через сервер. Быстро и удобно, но центр есть.
2001: суд — и серверы выключены. Пиры на месте, а сети больше нет. Центр — единая точка отказа.
Запрос расходится волной от соседа к соседу. Центра нет, но каждый поиск будоражит всю сеть.
Узлы стоят на кольце и знают «дальних» соседей. Нужный узел — за несколько прыжков. Так ищут узлы и в Ethereum.
Сделать «плату вычислениями» простой: вместо сложной математики — одна хеш-функция.
К данным подбирают число (nonce), пока их хеш не начнётся с нужного количества нулей.
Адам Бэк. Идея — 1997 год, рассылка cypherpunks; статья — 2002. Шестая ссылка Сатоши.
Доказательство работы есть, но схемы сложные, и трудность задачи не настроить.
Трудность задаётся числом нулей. Найти ответ дорого, проверить — одно вычисление.
В биткойнемайнинг — это Hashcash: ищем nonce, при котором хеш блока меньше порога.
Hashcash вживую
- Данные
текст + nonceБерём данные и добавляем к ним число — nonce. Начинаем с нуля.
- Перебор
хеш начинается с 0000?Считаем хеш. Не подошёл — увеличиваем nonce и пробуем снова. Угадать нельзя, только перебирать.
- Проверка
один хешНашли — показываем nonce. Проверяющий считает хеш один раз и видит нули.
Книжный клуб · блок 1 · соль=7a3c · nonce=0—Не выбрасывать решённую задачу после первого использования, а передавать её дальше — как монету.
Reusable Proofs of Work: сервер меняет доказательство работы на подписанный жетон, который можно передать другому.
Хэл Финни, 2004. Через пять лет он получит первую транзакцию биткойна.
Штамп Hashcash одноразовый: потратил на одно письмо — и он сгорел.
Работа превращается в жетон, который переходит из рук в руки. Это уже почти деньги.
В биткойнемонета, рождённая работой, — тот же принцип. Только сервера больше нет.
RPoW: работа, которую можно передать
- Работа
Hashcash-решениеАня тратит вычисления и получает доказательство работы — как в Hashcash.
- Обмен
решение → жетонОна отправляет его серверу RPoW. Сервер проверяет решение и выдаёт взамен подписанный жетон.
- Передача
Аня → БоряАня отдаёт жетон Боре. Боря несёт его серверу и получает новый — уже на своё имя.
- Защита
старый жетон погашенСервер помнит погашенные жетоны, так что потратить один дважды нельзя.
Слабое местоСервер по-прежнему один. Финни защитил его особым «железом», которое позволяло проверить, какая программа на нём работает, — но центр остался.
Защитить голосование в открытой сети от того, кто создал себе тысячу фальшивых участников.
Исследование: вычислительные головоломки делают каждый «голос» дорогим, и подделать большинство становится не по карману.
Джеймс Аспнес, Коллин Джексон и Арвинд Кришнамурти, Йель, 2005.
Один узел — один голос. Но узлов можно создать сколько угодно, и бесплатно.
Голос привязан к вычислениям: чтобы получить большинство, нужно больше мощности, чем у всех остальных.
В биткойне«один процессор — один голос»: поэтому в сеть можно пускать кого угодно.
Атака Сивиллы и защита от неё
- Голосование
1 узел = 1 голосСеть принимает решения большинством. Участников никто не регистрирует.
- Сивилла
1 человек → 1000 узловЗлоумышленник запускает тысячу фальшивых узлов. Теперь большинство — это он один.
- Головоломка
голос = решённая задачаПусть каждый голос подтверждается вычислительной работой. Фальшивый узел сам по себе ничего не стоит.
- Итог
голоса = мощностьТысяча узлов на одном компьютере дают столько же голосов, сколько один. Подделать большинство дорого.
ОговоркаSybil в книге переведена как «Сибил». Название — от имени героини книги о женщине со множеством личностей.
Собрать из известных идей электронную наличность, которой не нужен ни банк, ни доверие между участниками.
Статья «Bitcoin: A Peer-to-Peer Electronic Cash System»: подписи, цепочка блоков, доказательство работы и одноранговая сеть — в одной системе.
Сатоши Накамото — псевдоним; кто за ним стоит, неизвестно. Опубликована 31 октября 2008 года.
Двойную трату ловит банк. Без центра участники не могут договориться, какая трата первая.
Порядок трат задаёт цепочка блоков, а PoW делает этот порядок общим для всех.
В биткойнеэто он и есть — на бумаге. До запуска сети остаётся два месяца.
Что предложил Сатоши
- Подпись
владелец → получателюМонета — это цепочка подписей: каждый владелец подписывает передачу следующему.
- Рассылка
транзакция → всем узламТранзакции объявляются всей сети. Узлы собирают их в блок.
- Работа
блок + nonce → хеш с нулямиЧтобы блок приняли, узел должен найти для него доказательство работы — как в Hashcash.
- Цепочка
побеждает самая длиннаяБлоки сцеплены хешами. Верной считается цепочка, в которую вложено больше всего работы.
Почему это решает двойную тратуИз двух трат одной монеты в цепочку попадает только одна. Чтобы её заменить, нужно обогнать по мощности всю остальную сеть.
Перейти от статьи к работающей сети: создать первый блок, от которого пойдёт вся цепочка.
Блок № 0 сети Bitcoin. В него вписан заголовок газеты The Times того же дня — о втором спасении банков.
Сатоши Накамото, 3 января 2009. 12 января — первая транзакция: 10 BTC Хэлу Финни, блок 170.
Электронная наличность без банка существует только в статьях и провалившихся проектах.
Сеть работает. Первая практическая реализация e-cash — и первый блокчейн.
В биткойнев одном блоке сошлись все линии таймлайна — посмотрите в блоке ниже.
Блок биткойна: откуда каждая его часть
- Наведите на поле
шкала внизу подсветитсяКаждое поле блока — одна из идей таймлайна. Шкала внизу покажет, из каких она лет.
- Заголовок
хеш · корень · время · nonceХеш-цепочка 1991 года, дерево Меркла 1979-го, метки времени и Hashcash.
- Содержимое
транзакции с подписямиОткрытые ключи, эллиптические кривые и идеи цифровой наличности. А копия блока — у каждого узла P2P-сети.
Из чего собран биткойн
Шифрование с открытым ключом
1976–1980Криптография эллиптических кривых
1985Хеш-функции
1979–1993Электронные денежные схемы
1982–1998Доверенная временная метка
1991–1999Hashcash
1992–2002Повторно используемое доказательство работы
2004Одноранговая сеть
1980-е–2001На кого ссылается Сатоши
В статье о биткойне всего восемь ссылок. Шесть из них — точки нашего таймлайна, они подсвечены на шкале внизу.
Что из этой истории работает в 2026
Почти ничего из таймлайна не устарело. Одна идея под угрозой: эллиптические кривые против будущих квантовых компьютеров.
В каждом блоке Bitcoin. Та же идея — в git и в BitTorrent v2.
Чаумовская наличность вернулась: Cashu и Fedimint выпускают ecash поверх биткойна.
secp256k1 в Bitcoin и Ethereum. С Taproot (2021) — подписи Шнорра на той же кривой.
OpenTimestamps (с 2016) закрепляет хеши в биткойне. Surety всё ещё печатает хеш в газете.
Защищает Bitcoin. Ethereum ушёл с PoW на PoS в сентябре 2022.
Поиск узлов в Ethereum (discv5) устроен по образцу Kademlia.
NIST утвердил постквантовые стандарты в августе 2024. Для Bitcoin есть черновики BIP 360 (P2MR — выход без открытого ключа на виду) и BIP 361 (2026, план ухода от старых подписей). В сети ничего не активировано, сроков нет.
Выводы: тридцать лет — одна сборка
Каждый кусок таймлайна дал биткойну одну деталь. Блокчейн — это то, что получилось, когда их соединили.
Новое в биткойне — не детали, а то, что он решил двойную трату без доверенного центра: порядок транзакций задаёт цепочка блоков, а PoW делает этот порядок общим.
Имран Баширавтор «Mastering Blockchain»
Что далее
Антон Помазков
Антон Помазков
Антон Помазков
Артём Никифоров
Артём Никифоров