Что такое nonce в блокчейне
Nonce
Опубликовано 03.06.2021 · Обновлено 03.06.2021
Что такое Nonce?
Одноразовый номер – это аббревиатура от «числа, используемого только один раз», то есть числа, добавляемого к хешированному или зашифрованному блоку в цепочке блоков, который при повторном хешировании соответствует ограничениям уровня сложности. Nonce – это число, которое ищут майнеры блокчейнов. Когда решение найдено, майнерам блокчейнов предлагается взамен криптовалюта.
Ключевые выводы
Понимание Nonce
Блокчейн – это краеугольный камень криптовалюты. Чтобы обеспечить безопасность блокчейна, данные из предыдущих блоков зашифровываются или «хешируются» в серию цифр и букв. Это делается путем обработки ввода блока с помощью функции, которая производит вывод фиксированной длины.
Функция, используемая для генерации хэша, является детерминированной, что означает, что она будет давать один и тот же результат каждый раз, когда используется один и тот же ввод. Это также означает, что функция может эффективно генерировать хешированный ввод, затрудняет определение ввода (что приводит к интеллектуальному анализу ) и вносит небольшие изменения в результат ввода в совершенно другой хэш. Эта сложная система создает сеть конфиденциальности блокчейна.
Особые соображения
Добавление транзакций в блокчейн требует значительной вычислительной мощности компьютера. Люди и компании, обрабатывающие блоки, называются майнерами. Майнеры получают компенсацию только в том случае, если они первыми создают хеш, который соответствует определенному набору требований, который называется целевым хешем.
Процесс угадывания хэша начинается в заголовке блока. Он содержит номер версии блока, временную метку, хэш, использованный в предыдущем блоке, хэш корня Меркла, одноразовый номер и целевой хеш.
Если хеш соответствует требованиям, изложенным в цели, то блок добавляется в цепочку блоков. Цикл между решениями для угадывания одноразового номера называется доказательством работы, и майнер, который может найти значение, получает блок и оплачивается в криптовалюте.
Краткий обзор
Чем выше сложность – мера того, насколько сложно создать хэш, размер которого меньше целевого – тем больше, вероятно, потребуется для генерации решения.
Как найти одноразовый номер
Определение того, какую строку использовать в качестве одноразового номера, требует значительного количества проб и ошибок, поскольку это случайная строка. Майнер должен угадать одноразовый номер, добавить его к хешу текущего заголовка, повторно хешировать значение и сравнить его с целевым хешем. Если полученное значение хеш-функции соответствует требованиям, майнер создал решение и получает блок.
Маловероятно, что майнер успешно угадывает одноразовый номер с первой попытки, а это означает, что майнер потенциально может протестировать большое количество вариантов одноразового номера, прежде чем сделать его правильным. Чем выше сложность – мера того, насколько сложно создать хэш, размер которого меньше целевого – тем больше, вероятно, потребуется для генерации решения.
Сложность блока остается одинаковой для всей сети, а это означает, что все майнеры имеют одинаковые шансы определить правильный хеш. Криптовалютные сети обычно устанавливают целевое количество блоков, которые они хотят обработать в течение определенного периода времени, и периодически корректируют сложность, чтобы обеспечить достижение этой цели. Если количество обработанных блоков не соответствует этому целевому показателю, тогда сложность будет уменьшена, при этом снижение сложности будет установлено на количество времени, превышающее предел времени обработки.
Использование для Nonce
Nonces используются для ряда компьютерных сетевых приложений, включая аутентификацию для покупок, двухфакторную аутентификацию или другие виды приложений для восстановления учетной записи и идентификации, электронные подписи, шифрование данных и многое другое.
Nonce FAQs
Что такое Nonce в криптовалюте?
Одноразовый номер – это аббревиатура от «числа, используемого только один раз», то есть числа, добавляемого к хешированному – или зашифрованному – блоку в цепочке блоков, который при повторном хешировании соответствует ограничениям уровня сложности. Nonce – это число, которое майнеры блокчейнов решают, чтобы получить криптовалюту.
Что такое одноразовый блокчейн?
Одноразовый номер цепочки блоков – это число, добавляемое к хешированному или зашифрованному блоку в цепочке блоков.
Как используются одноразовые номера?
Nonces используются для ряда компьютерных сетевых приложений, включая аутентификацию для покупок, двухфакторную аутентификацию или другие виды приложений для восстановления учетной записи и идентификации, электронные подписи, шифрование данных и многое другое.
Что такое золотой нонс?
Золотой одноразовый номер приводит к тому, что значение хеш-функции ниже целевой сложности, что означает, что он удовлетворяет требованиям следующего блока.
Взгляд венчурного инвестора на Блокчейн | 06: Как работает майнинг (но есть нюанс)
В предыдущем посте мы разобрались с тем, как в принципе работает майнинг. А этот пост я решил сделать как дополнение к предыдущему – думаю, что вам будет интересна эта важная деталь, которую я нигде в печати не видел.
Да, действительно маловат. Ведь вся сеть майнеров умеет рассчитывать 160 миллионов триллионов хэшей в секунду. Поэтому пробежать весь диапазон Nonce от 0 до 4 миллиардов и взять хэш-функцию 4 миллиарда раз сеть может за время, меньшее одной миллиардной доли секунды. Конечно, сеть не работает как одно целое – многие операции повторяются. Но даже если взять крупнейший пул майнеров Antpool, который работает согласованно, у них сконцентрировано 15% всего хэшрейта сети – это 24 млн TH/cек. Величина того же порядка.
Но если Antpool пробегает весь допустимый диапазон Nonce за одну миллиардную долю секунды, то как же получается, что вся сеть «добывает» блок на протяжении целых 10 минут? Все решается просто – одного «пробега» всего диапазона Nonce недостаточно для решения криптографической задачи. Помните, я писал, что единственная часть блока, которую можно менять вручную – это Nonce? Так вот, это не совсем так. Есть еще 2 части блока, которые могут меняться.
Во-первых, это текущее время (обязательная часть блока). Время указывается с точностью до секунды, поэтому каждую секунду временную метку нужно обновлять, и весь процесс повторяется заново. Но этого все еще недостаточно – мы пока что потратили всего лишь одну миллиардную долю секунды и уже остановились. Мы же не хотим бездействовать все остальное время до окончания этой секунды.
Поэтому есть еще одна часть блока – набор транзакций. В блокчейне Биткоина сегодня каждый блок содержит в среднем 2 тысячи транзакций (пересылок биткоинов между участниками сети). И число этих транзакций ограничено допустимой величиной блока в 1 Мб. На самом деле число транзакций, ожидающих добавления в блок, больше. И майнер может выбирать транзакции, которые он хочет добавить в блок. Понятно, что сначала майнер выберет максимальное число транзакций, которые предусматривают выплату ему вознаграждения (Tx fee).
Если майнер пробежал весь диапазон Nonce от 0 до 4 млрд, но решение задачи не было найдено, то майнер уберет одну самую дешевую транзакцию и поменяет ее на самую дорогую из тех, что оставались вне блока, и повторит процедуру. Любая рекомбинация транзакций приводит к изменению содержания всего блока, а значит и хэш от блока полностью изменится. Это позволяет заново пробежать весь диапазон Nonce – вдруг решение найдется. И так можно повторять снова и снова, пока не закончится секунда. Потом таймер переставляется на 1 секунду, и всё можно повторить заново.
Сегодня число транзакций, ожидающих добавления в блок, составляет от 3 до 5 тыс. Если вспомнить комбинаторику, то выбрать 2 тыс. транзакций из 3 тыс. возможных можно числом способов примерно равным 10 в степени 829 (число с 829 нулями). Это дает более чем достаточный потенциал для расчетов Nonce с огромным (фактически бесконечным) запасом на будущее.
Итак, Блокчейн спасен, майнеры могут увеличивать свои мощности так сильно как только заблагорассудится, технология не накладывает никаких ограничений. И да, теперь вы понимаете, почему стоит включать дополнительную плату за ускорение транзакций и как это происходит.
Что такое Ethereum nonce?
В Ethereum слово nonce (number that can only be used once) означает количество транзакций, отправленных с определенного адреса, или количество контрактов, заключенных с определенной учетной записью. Все транзакции Ethereum создаются на основе учетной записи. У биткоин эта структура реализована на основе UTXO (Unspent Transaction Output или “вывод неизрасходованных транзакций”). Следовательно, Ethereum не нужно записывать каждую транзакцию по порядку.
Как создать одноразовый код
Одноразовый идентификатор создается один раз после создания каждой транзакции, и в этом случае блокчейн должен выполнить следующее:
Какова роль nonce?
Как майнеры могут определить, какую сделку вы хотите совершить в первую очередь? Если одноразовый код вашей первой транзакции равен нулю, а код второй транзакции равен единице, действия выполняются в порядке номеров транзакции. Это основное использование nonce в сети Ethereum.
Например, после сериализации транзакции рассмотрим следующую строку:
После вашей транзакции десять Ethereum отправляются на определенный адрес. Но если кто-то сможет скопировать и продублировать эту сериализованную строку, ваши токены будут уничтожены. Это называется атакой воспроизведения.
Как использовать одноразовый код
В Ethereum есть txpool. Этот пул может содержать все транзакции. Каждая новая транзакция сначала входит в пул, затем выходит из пула, когда блоки упакованы, после этого блоки и транзакции соединяются. Таким образом, где-то в блокчейне транзакции должны ждать подключения к своему блоку после извлечения.
Ускорение и отмена транзакции Ethereum
Каждый одноразовый код представляет собой целое число, поэтому блокчейн может заменить его номер другой транзакцией и аналогичным одноразовым идентификатором. Благодаря своей уникальной природе, nonce можно повторно реализовать для ускорения транзакций и их выполнения.
Как ускорить Ethereum
Если стоимость газа низкая, транзакция всегда будет оставаться незавершенной. Предположим, что в этом случае число nonce равно единице. Предположим, что совершается вторая транзакция, и ставка на газ повышается. В этом случае, если одноразовый номер остается таким же, как 1, предыдущая транзакция удаляется. Новая транзакция заменяется тем же одноразовым кодом. Затем вторая транзакция упаковывается и отправляется. Майнер перепроверяет пул и видит похожий одноразовый номер. В этом случае, если майнер по какой-то причине обнаруживает эту проблему, он отклоняет транзакцию.
Как отменить сделку
вносят необходимые изменения, но за вторую транзакцию вам придется заплатить.
Обработка исключений nonce
Nonce Exception Handling — это система для поиска одноразовых ошибок.Замена-транзакция-заниженная цена:
Правила одноразового кода
В этом случае вы должны увеличить число nonce до значения, превышающего текущий блокчейн nonce.
Заключение
Как мы видим, переменная nonce очень помогает приоритизировать транзакции, особенно при отправке массовых транзакций в блокчейн. Эту функцию можно использовать для инициализации каждой транзакции, чтобы число было больше, чем nonce блокчейна Ethereum.
Что такое Nonce в майнинге?
Существует огромное количество различных статей и публикаций, в которых объясняется процесс майнинга, а также некоторые его аспекты. Сегодня практически каждый знает, как осуществляется добыча криптовалют и что лежит в ее основе. В данной статье мы поговорим о том, что такое nonce в майнинге, ведь данное определение встречается достаточно часто, но редко истолковывается.
Nonce в майнинге: самое простое описание
Для начала мы немного напомним вам, что такое сам майнинг. Не будем вдаваться в сложные теоретические выкладки, а рассмотрим самое простое определение данного процесса. Представьте, что у вас имеется огромное количество коробов, в одной из которых лежим монета. Чтобы забрать ее, вам необходимо последовательно открывать коробки. Но не все так просто – на каждой из коробок написана определенная задача, которую нужно решить, чтобы открыть коробку.
Так вот, тот ответ, который позволил нам открыть нужную коробку и достать монету, и является значением Nonce в майнинге. Стоит отметить, что оно является уникальным и никогда больше не повторяется.
Nonce в майнинге: техническое описание
Само определение Nonce является аббревиатурой от выражения «number that can only be used once». В переводе на русский это означает «число, которое может быть использовано лишь однажды». Оно представляет собой двоичный код, который ищется майнерами в процессе PoW-майнинга.
При нахождении нужного значения Nonce он записывается в заголовок блока и должен удовлетворять определенные условия, а именно – хеш блока должен быть меньше или равен заданному значению Target. Только при таком условии блок будет добавлен в блокчейн. В противном случае сеть не примет его, и майнеру придется продолжать перебор значений для нахождения нужного.
Нахождение значения Nonce в майнинге непосредственно связано со сложностью сети, ведь Target является производной от нее. Чтобы Nonce находилось майнерами с заранее определенной скоростью, происходит постоянное повышение сложности добычи. Например, в Bitcoin она пересчитывается каждые 2016 блоков.
Таким образом, ничего сложного в понимании значения Nonce нет. Достаточно лишь изучить процессы майнинга и немного покопаться в его структуре.
Биткоин: Одноранговая электронная денежная система
Доклад Сатоши Накамото “Bitcoin: A Peer-to-Peer Electronic Cash System”, называемый также Bitcoin White Paper (Белая бумага Биткоина), с примечаниями и пояснениями.
31 октября 2008 года несколько сотен энтузиастов и специалистов по криптографии, включенных в закрытый список e-mail рассылки (The Cryptography Mailing list) получили письмо, подписанное неким Сатоши Накамото (Satoshi Nakamoto). В нём он сообщил, что работает над созданием новой электронной системы денежных расчетов, в которой операции производятся непосредственно между участниками без привлечения третьей доверенной стороны.
В письме содержалась ссылка на короткий текст (9 страниц) доклада под названием Bitcoin: A Peer-to-Peer Electronic Cash System («Биткоин: Одноранговая электронная денежная система» или «Биткоин: Децентрализованная система электронной наличности»), в котором в строгом академическом стиле, кратко, но ясно, со схемами и формулами описывалась технология новой денежной системы, названная автором Биткоином ( Bitcoin).
Bitcoin Review ( BitRev) предлагает вашему вниманию перевод этого документа,называемого также Bitcoin White Paper (Белая бумага Биткоина), с комментариями и пояснениями. За основу взят официальный текст перевода, расположенный на сайте bitcoin.org, с правками и уточнениями Сергея Базанова, автора книги «Биткоин для всех». В тексте также вы найдете ссылки на используемые термины и понятия.
Genesis: Как появился Биткоин…
Краткая история зарождения первой массовой криптовалюты
Bitcoin: A Peer-to-Peer Electronic Cash System
Аннотация
Полностью одноранговое устройство системы электронных денег позволяет совершать электронные транзакции между участниками напрямую, минуя любые финансовые институты. Частично, эту задачу решает использование цифровых подписей, но необходимость доверенного лица для контроля за двойной тратой лишает этот подход основных преимуществ. Мы предлагаем децентрализованное решение проблемы двойной траты с использованием одноранговой (пиринговой) сети. Сеть ставит метки времени на транзакции, соединяя их в цепочку доказательств проделанной работы на основе хэширования. Сформированные таким образом записи невозможно изменить, не выполнив заново всего объема вычислений. Самая длинная версия цепочки (блокчейна — прим.Сергея Базанова) служит не только подтверждением очередности событий, но и доказывает, что над ней произвел работу самый большой вычислительный сегмент сети. До тех пор пока большая часть вычислительных мощностей контролируется узлами, не объединенными с целью атаковать сеть, они будут генерировать самую длинную цепочку, опережая любых злоумышленников. Устройство самой сети очень простое: сообщения рассылаются на основе принципа «наименьших затрат» (при маршрутизации пакетов — прим.С.Б.), а узлы могут покидать сеть и снова подключаться к ней в любой момент, принимая самую длинную версию цепочки для восстановления пропущенной истории транзакций.
Примечание BitRev:
Саташи Накамото не использует в тексте термин «блокчейн» ( blockchain или block chain). Вместо него используется «цепочка доказательств проделанной работы на основе хэширования» (chain of hash-based proof-of-work).
1. Введение
Интернет-коммерция в большинстве случаев опирается на финансовые учреждения, выступающие в роли доверенных посредников для проведения электронных платежей. Такая схема хорошо работает для большинства транзакций, но в ее основе лежит доверие, что влечет определенные проблемы. Необходимое посредничество финансовых институтов препятствует осуществлению необратимых транзакций. Цена этих услуг увеличивает стоимость транзакций и устанавливает минимальную их цену, делая непрактичным проведение нечастых и небольших транзакций. Кроме того, отсутствие необратимых транзакций увеличивает и стоимость сервисов, чьи услуги являются неотменяемыми. Поскольку платеж можно аннулировать, продавец вынужден быть настороже, требуя от покупателя больше информации, чем в принципе необходимо. И определенный процент мошенничества принимается просто как неизбежность. Эти наценки и неопределенности с платежами могут быть преодолены в случае делок с бумажной наличностью, однако механизма для проведения прямых электронных транзакций не существует.
Необходима платежная система, основанная на криптографии, а не на доверии, которая позволила бы любым двум участникам осуществить перевод средств напрямую, без участия посредника. Вычислительная дороговизна отмены транзакций оградила бы продавцов от мошенничества, а легкоосуществимые механизмы эскроу защитили бы покупателей. В данной работе мы предлагаем решение проблемы двойной траты, основанное на распределенном одноранговом сервере меток времени, который своей вычислительной мощностью подтверждает хронологический порядок транзакций. Система находится в безопасности, пока под совокупным контролем ее честных участников находится больше вычислительной мощности, чем под контролем группы действующих совместно злоумышленников.
Примечание BitRev:
Сатоши Накамото отмечает, что целью было создание электронной платежной системы, которая бы работала без посредника (доверенного центра) и решала бы проблему «двойных трат».
2. Транзакции
Определим электронную монету как последовательность цифровых подписей. Очередной владелец отправляет монету следующему, подписывая хэш предыдущей транзакции и публичный ключ будущего владельца и присоединяя эту информацию к монете. Получатель может проверить каждую подпись, чтобы подтвердить корректность всей цепочки владельцев.
Проблема, разумеется, в том, что получатель не может определить, сколько раз бывший владелец потратил эту монету. Традиционное решение заключается в проверке центральным доверенным лицом («монетным двором» или эмитентом) каждой транзакции. После любого платежа монета возвращается к эмитенту, который выпускает новую ее версию; и только напрямую полученным таким образом монетам можно доверять. Недостаток этого подхода в том, что от компании-эмитента зависит судьба всей денежной системы, так как она подобно банку контролирует каждую проходящую через нее транзакцию.
Адресат должен знать, что никто из предыдущих владельцев не подписал транзакцию, предшествующую по времени той, что находится в цепочке отправленной ему монеты. Для наших целей лишь первая транзакция из нескольких является истинной, поэтому мы не должны беспокоиться о поздних попытках двойной траты. В централизованной модели эмитент знал обо всех транзакциях и решал, в каком порядке они идут. Чтобы избавить схему от посредника, участникам необходимо открыто публиковать транзакции [1], а также уметь приходить к согласию относительно единого порядка их следования. Получателю нужно доказательство того, что для каждой транзакции из цепочки большинство пользователей согласны считать ее первой.
Примечание BitRev:
Запись всех транзакций с конкретной «монетой» с использованием временн ой метки обеспечивает решение проблемы двойных трат (расходов). При этом все участники сети должны прийти к консенсусу относительно порядка записи таких транзакций.
«Электронная монета» содержит количественную информацию (сумму транзакции) и указание на владельца (точнее, его адрес, сформированный из его публичного ключа). Для передачи «электронной монеты» владелец подписывает своим приватным ключом хэш предыдущей транзакции и криптовалютный адрес, сформированный из публичного ключа будущего владельца. Теперь только владелец приватного ключа от нового адреса сможет осуществить новую транзакцию с этой «электронной монетой». Остальные узлы сети, прежде чем принять транзакцию к обработке, проверяют подпись. Правильность подписи свидетельствует, что инициатор транзакции является владельцем приватного ключа, соответствующего адресу текущего владельца. Получатель «электронной монеты» может проверить всю цепочку транзакций (вплоть до момента эмиссии — создания «электронной монеты») и убедиться в корректности этой цепочки.
3. Сервер меток времени
Начнем описание нашего решения с сервера меток времени. Его работа заключается в хэшировании блока данных, на который нужно поставить метку, и открытой публикации этого хэша, как в газете или Usenet-постах [2–5]. Метка времени показывает, что в данный момент конкретные данные существовали и потому попали в хэш блока. Каждый хэш включает в себя предыдущую метку: так выстраивается цепь, где очередное звено укрепляет все предыдущие.
Примечание BitRev:
Фактически это описание работы блокчейна — цепочки связанных посредством хэширования блоков информации, содержащих сведения о транзакциях. Сервер временн ых меток (меток времени) — это механизм при помощи которого формируется цепочка блоков транзакций (блокчейн). Хэш каждого блока образуется хэшированием содержимого самого блока и хэша предыдущего блока.
4. Доказательство работы
Чтобы реализовать распределенный одноранговый сервер меток времени, мы используем схему «доказательства работы», подобную системе Hashcash Адама Бека [6]. Суть заключается в поиске такого значения, чей хэш (например, SHA-256) начинался бы с некоторого числа нулевых битов. Требуется выполнить объем работы, экспоненциально зависящий от числа нулей, но для проверки найденного значения достаточно вычислить лишь один хэш.
В нашем сервере меток времени поиск значения с нужным хэшем происходит путем перебора значения итерируемого поля-добавки ( nonce) в блоке данных. Как только блок, удовлетворяющий условию, найден, его содержимое нельзя изменить, не выполнив заново всей работы. И если он не является последним в цепочке, эта работа включает в себя и перевычисление всех блоков, следующих за ним.
Доказательство работы через хэширование также решает вопрос об определении версии, поддерживаемой большинством. Если голосом считается один IP-адрес, то такую схему можно скомпроментировать, если контролировать большой диапазон адресов. Наша схема основана на принципе «один процессор — один голос». Самая длинная из хэш-цепочек выражает мнение большинства, которое вложило в нее наибольшее количество ресурсов. Если более половины вычислительной мощи принадлежит честным узлам, то цепочка честных транзакций будет расти быстрее и опередит любую конкурирующую цепь. Чтобы внести изменения в любой из прошлых блоков, атакующему придется выполнить заново работу над этим блоком и всеми последующими, а затем догнать и перегнать честных участников по новым блокам. Ниже мы покажем, что вероятность такого успеха у злоумышленника, обладающего меньшими ресурсами, экспоненциально убывает в зависимости от числа блоков.
Для компенсации возрастающей вычислительной мощности процессоров и колебания числа работающих узлов в сети, сложность хэширования должна изменяться, чтобы обеспечивать равномерную скорость генерации блоков. Если блоки добавляются слишком часто — сложность возрастает, и наоборот.
Примечание BitRev:
«Хэш, начинающийся с нулевых битов» означает, что числовое значение этого хэша менее некоторого заданного целого числа. Чтобы получить такой хэш, необходимо добавить к данным заголовка некое новое число nonce, которое вписывается в дополнительное поле заголовка. Итерационный перебор значения этого числа приведет к изменению хэша формируемого блока.
Задача состоит в том, чтобы подобрать такое значение nonce, при котором полученный хэш блока был менее некоторого заданного числа, называемого target, что равносильно получению хэша с определенным количеством нулевых бит в его начале.
Сложность задачи поиска необходимого хэша (в тексте — «сложность хэширования» — прим.С.Б.) обратно пропорциональна числу target — чем выше сложность, тем меньше число target.
Поиск числа nonce возможен только путем перебора чисел и требует значительных вычислительных ресурсов, возрастающих при увеличении сложности, т.е. уменьшении заданного числа target и, как следствие, — требуемого количества нулевых битов вначале искомого хэша. При этом проверка результата довольно проста. Это и есть принцип «доказательства работы» ( Proof-of-Work), используемый в Биткоине. Этот механизм решает две главных задачи — определяет узел в пиринговой сети, который добавляет новый блок транзакций и защищает уже записанные в блокчейн транзакции от атак с целью изменить их содержимое.
5. Сеть
Система работает по следующим правилам:
Участники всегда считают истинной самую длинную версию цепочки и работают над ее удлинением. Если два узла одновременно опубликуют разные версии очередного блока, то кто-то из остальных пиров получит раньше одну версию, а кто-то — другую. В таком случае каждый начнет работать над своей версией цепочки, сохранив другую на случай, если она окажется продолжена раньше. Двойственность исчезнет, как только будет получен новый блок, который продолжит любую из ветвей, и те узлы, что работали над конкурирующей версией, переключатся на нее.
Новые транзакции не обязательно должны достигать всех узлов. Если о них будет знать достаточно много узлов, вскоре они попадут в один из блоков. Правила рассылки блоков тоже не являются строгими в отношении потерянных сообщений. Как только узел, пропустивший один из блоков, получит уже следующий за ним, он запросит недостающую информацию, чтобы заполнить очевидный пропуск.
Примечание BitRev:
Здесь описаны правила работы одноранговой (пиринговой) сети Биткоин. Этим правилам обязаны следовать все узлы. Те узлы, которые не следуют этим правилам, отвергаются сетью и не могут влиять на её работоспособность.
Также указано, каким образом достигается консенсус в сети в случае, когда два или более узлов одновременно записывают разные версии очередного блока. В этом случае происходит разделение (форк) цепочки блоков и она ветвится. В итоге побеждает самая длинная ветвь, а остальные отсекаются.
6. Стимулы
По умолчанию, первая транзакция в блоке является специальной, создающей новую монету, которая принадлежит создателю блока. Такая схема поощряет честных участников сети, стимулируя их поддерживать работу сети, а также решает вопрос о начальном распределении денежной массы в отсутствие центрального эмитента. Равномерное увеличение числа монет в обращении можно сравнить с добычей золота, в которую золотоискатели тоже вкладывают свои ресурсы. В роли последних в нашем случае выступают процессорное время и электричество.
Другим способом стимулирования может быть комиссия за транзакции. Если входная сумма платежа больше выходной, то разница является комиссией за перевод и прибавляется к базовому значению награды за найденный блок в первой транзакции. Как только суммарный объем денежной массы достигнет заранее установленного максимума, единственным источником поощрения работы над блоками останутся комиссии, при этом избавленные от инфляции.
Такая форма стимулирования может также способствовать уменьшению случаев мошенничества. Если жадный злоумышленник способен выделить больше вычислительных мощностей, чем все честные участники, он может обманывать продавцов, аннулируя свои транзакции и возвращая средства, или же направить свои ресурсы на генерацию новых блоков и монет. Более выгодным для него является вариант «игры по правилам», который обеспечивает получение более половины всех новых денег, чем вариант «саботажа системы» и поддержания своего капитала на постоянном уровне.
Примечание BitRev:
Сатоши Накамото не использует широкоизвестные ныне термины «майнинг» и «майнеры». Тем не менее, он сравнивает эмиссию биткоина с золотодобычей. Майнеры (miners), как и золотоискатели (gold miners), вкладывают свои ресурсы — процессорное время и электричество — для обеспечения надежной и бесперебойной работы сети и взамен получают вознаграждение в виде эмиссии новых монет биткоина и комиссионых, взимаемых за транзакции пользователей.
7. Экономия дискового пространства
Как только последняя транзакция в монете-цепочке окажется внутри достаточно старого блока, все предшествующие ей транзакции в цепочке могут быть удалены в целях очистки дискового пространства. Чтобы хэш блока остался неизменным, все транзакции в блоке хранятся в виде хэш-дерева Меркла [7][2][5] и лишь его корень включается в хэш блока. Размер старых блоков может быть уменьшен за счет удаления ненужных ветвей этого дерева, хранить промежуточные хэши необязательно.
Заголовок пустого блока будет составлять около 80 байт. Из расчета скорости генерации блока раз в десять минут получаем 80*6*24*365=4.2 Мб в год. Для среднестатистического на 2008 год компьютера с 2 Гб оперативной памяти с учетом закона Мура, предсказывающего рост на 1.2 Гб в год, хранение данных не будет проблемой, даже если все заголовки блоков будут находиться в памяти.
Примечание BitRev:
Сатоши Накамото прекрасно понимал, что единая книга записи всех транзакций сети (блокчейн) будет постоянно расти в объеме и может достичь критических размеров. С целью экономии дискового пространства он предложил отсекать старые транзакции (не имеющие неиспользованных выходов), а подтверждения их существования в прошлом хранить в виде хэшей дерева Меркла. Это, разумеется, приведет к потере истории транзакций, но при этом текущее состояние владения биткоинами будет всегда актуально.
8. Упрощенная проверка платежей
Верификация транзакций возможна без запуска полнофункционального узла. Пользователю необходимо лишь хранить заголовки блоков самой длинной цепочки, которую он получил от других узлов, и запрашивать хэш-поддерево для необходимой транзакции. Он не может проверить корректность транзакции самостоятельно, но получив ссылку на блок, в котором она находится, он может убедиться в том, что этот блок и все последующие приняты и подтверждены сетью.
На такой метод проверки можно полагаться, пока сеть хотя бы наполовину находится под контролем честных участников, то есть пока злоумышленник не завладеет большими ресурсами. Обычные узлы могут проверять транзакции самостоятельно, но если нападающий генерирует самую длинную цепь блоков, то своими сфабрикованными транзакциями он может скомпроментировать упрощенную схему. Одной из стратегий противодействия этому может быть рассылка сигналов тревоги от обычных пиров, которые получают «ложный» блок. Такой сигнал будет заставлять программу-клиент загружать блок полностью, чтобы самостоятельно подтверждать некорректность данных. Компании, часто принимающие платежи, возможно, будут подключаться к сети в обычном режиме для большей независимости, безопасности и быстроты проверки.
Примечание BitRev:
Использование дерева Меркла для хэшей транзакций и связывание блоков при помощи хэшей в блокчейн позволяет упростить проверку наличия достаточной суммы на адресе (адресах) отправителя платежа. Для этого не обязательно иметь полную базу, а достаточно запрашивать хэш-поддерево для необходимой транзакции. Проверять всю историю движения монет до данной транзакции не имеет смысла, поскольку эти проверки уже были осуществлены ранее, а информация об их корректности подтверждена деревом хэшей.
9. Соединение и разделение сумм
Несмотря на то, что можно оперировать отдельными монетами, создавать специальную транзакцию для каждого цента было бы слишком неудобно. Для поддержки разделямых и объединяемых сумм транзакции содержат несколько входов и выходов. Обычная транзакция будет выглядеть так: либо один вход от предыдущего крупного платежа, либо несколько входов, аккумулирующих небольшие суммы, и не более двух выходов: один является собственно платежом, а другой, если необходимо, возвращает «сдачу» обратно отправителю.
Необходимо отметить, что увеличение связей, когда транзакция зависит от нескольких, а те в свою очередь зависят от еще большего числа, не является проблемой, поскольку нет необходимости получать полную и независимую копию истории транзакции.
Примечание BitRev:
Здесь описана структура собственно транзакции. Каждая транзакция может иметь от одного до нескольких входов от (неиспользованных) выходов предыдущих транзакций биткоин-адресов отправителя и два выхода — один собственно платеж по транзакции, который отправляется на биткоин-адрес получателя. А второй — возврат неиспользованных «монет» (сдачи) на биткоин-адрес отправителя. Последнее необходимо, поскольку протокол Биткоина требует, чтобы вся сумма входов была использована в транзакции.
10. Конфиденциальность
Традиционная банковская модель поддерживает необходимый уровень конфиденциальности, предоставляя доступ к информации лишь сторонам-участницам и доверенному третьему лицу. Необходимость открытой публикации транзакций исключает такой подход, однако приватность по-прежнему можно сохранить, если публичные ключи будут анонимными. Открытой будет информация о том, что кто-то отправил кому-то некоторую сумму, но без привязки к конкретным личностям. Столько же данных раскрывается и на фондовых биржах, которые публикуют время и объем частных сделок, не указывая, между кем именно они были совершены.
Дополнительной защитой будет являться генерация новой пары «открытый/закрытый ключ» для каждой транзакции: это предотвратит связывание различных платежей с их общим отправителем или адресатом. Некоторого публичного связывания все же не избежать: транзакции с несколькими входами доказывают, что эти суммы принадлежат одному лицу. Риск состоит в том, что раскрытие личности владельца ключа может привести к раскрытию и всех принадлежащих ему транзакций.
Примечание BitRev:
Сатоши Накамото описывает, как новая денежная система меняет принципы конфиденциальности денежных операций (транзакций) и их контроля.
В традиционной модели доверенный финансовый посредник (банк) осуществляет полный контроль всех денежных операций. При этом личность субъекта (отправителя и получателя денег) связана с самой операцией и подлежит идентификации. Третьи лица (общество) не имеют доступа к данным транзакций и, соответственно) не могут их контролировать.
В новой модели (Биткоин) контроль за денежными операциями (транзакциями) возложен на сеть. Т.е. все пользователи сети Биткоин (точнее их программы-клиенты) следят за правильностью расчетов между биткоин-адресами. При этом личности самих пользователей связаны с их биткоин-адресами посредством приватных ключей и не могут быть напрямую идентифицированы. Тем самым обеспечивается конфиденциальность финансовых операций и анонимизация их субъектов (как отправителей, так и получателей).
11. Оценка
Рассмотрим сценарий, в котором злоумышленник пытается генерировать более длинную цепь блоков, чем честные участники. Даже если он преуспеет, это не приведет к тому, что можно будет создавать деньги из воздуха, присваивать себе чужие монеты или вносить иные произвольные изменения. Узлы никогда не примут некорректную транзакцию или блок, ее содержащий. Атакующий может лишь пытаться изменить одну из своих транзакций, чтобы возвратить себе деньги.
Гонку между честными участниками и нападающим можно представить как биномиальное случайное блуждание. Успешное событие, когда «хорошая» цепь удлиняется на один блок, приводит к увеличению отрыва на единицу, а неуспешное, когда очередной блок создает злоумышленник, — к его сокращению. Вероятность атакующего наверстать разницу в несколько блоков такая же, как и в задаче о «разорении игрока». Представим, что игрок имеет неограниченный кредит, начинает с некоторым дефицитом и у него есть бесконечно много попыток, чтобы отыграться.
Вероятность того, что он преуспеет, как и вероятность злоумышленника догнать честых участников, вычисляется следующим образом [8]:
p = вероятность появления блока в честной цепочке
q = вероятность того, что блок создаст атакующий
qz = вероятность того, что атакующий наверстает разницу в z блоков
В случае p > q вероятность уменьшается экспоненциально с ростом числа блоков, на которое отстает злоумышленник. Поскольку все ставки против него, без удачного рывка в начале его шансы на успех становятся ничтожно малы.
Рассмотрим теперь, как долго получателю платежа стоит ждать, прежде чем он будет полностью уверен, что бывший владелец не сможет отменить транзакцию. Мы предполагаем, что злоумышленник-отправитель позволяет адресату некоторое время верить, что платеж был проведен, после чего возвращает деньги себе. Получатель узнает об этом, но мошенник надеется, что будет уже слишком поздно.
Адресат создает новую пару ключей и сообщает свой публичный ключ отправителю прямо перед подписанием транзакции. Это не позволит отправителю заранее начать работать над цепочкой и провести транзакцию в тот момент, когда он будет достаточно удачлив, чтобы совершить рывок вперед. После отправки платежа мошенник начинает втайне работать над параллельной версией цепочки, содержащей альтернативную транзакцию.
Получатель ждет, пока транзакция не будет добавлена в блок и пока тот не будет продолжен еще z блоками. Ему неизвестен прогресс злоумышленника, но если средняя скорость генерации честных блоков — известная величина, то число блоков нападающего подчиняется распределению Пуассона с математическим ожиданием:
Чтобы получить вероятность того, что атакующий обгонит честных участников, мы умножаем значение случайной величины (число созданных им блоков) на вероятность того, что он сможет наверстать оставшуюся разницу:
Перегруппировав слагаемые и, избавясь от бесконечного ряда, получаем:
Код программы на языке Си выглядит так:
Запустив программу, мы видим, что вероятность экспоненциально падает с ростом z:
Решая относительно P
Примечание BitRev:
Сатоши Накамото оценивает вероятность т.н. «атаки 51%» на Биткоин-сеть. При помощи наглядных расчетов он показывает, что вероятность успеха такой атаки экспоненциально уменьшается с ростом добавленных блоков в сети. Таким образом, отсутствует «вычислительная целесообразность» любых попыток подделки (модификации) старых транзакций.
12. Заключение
В данной работе нами была предложена система электронных транзакций, не основанная на доверии. Построение схемы началось с традиционного представления монет на основе цифровых подписей, обеспечивающего контроль владения, но допускающего двойную трату. Эту проблему мы решили посредством пиринговой сети и схемы «доказательства работы» для записи публичной истории транзакций. Попытка злоумышленника, не обладающего большей частью ресурсов сети, изменить старые записи, вычислительно становится практически неосуществимой. Сильной стороной сети является простота ее структуры. Все узлы работают самостоятельно, иногда обмениваясь информацией. Нет необходимости в индентификации, поскольку сообщения не идут по какому-то определенному маршруту, а основе принципа «наименьших затрат» ( при маршрутизации пакетов — прим.С.Б.). Узлы могут покидать сеть и вновь подключаться, принимая самую длинную цепочку блоков как подтверждение пропущенной истории транзакций. Они выражают свое согласие принять корректный блок в цепочку, используя свои вычислительные мощности для удлинения этой цепи, или несогласие (если блок содержит неверные данные), не продолжая эту цепочку. Любые необходимые правила протокола могут быть реализованы через данный механизм голосования.
Послесловие от Bitcoin Review:
Подводя итоги, отметим главные пункты доклада Сатоши Накамото.
В первую очередь это базовые основы пиринговой электронной денежной системы Bitcoin:
– система базируется на одноранговой (пиринговой) сети, все узлы которой следуют заданным правилам;
– основой хранения данных в системе является «блокчейн» в виде «цепочки доказательств проделанной работы на основе хэширования» (chain of hash-based proof-of-work), работу которой обеспечивает т.н. «сервер меток времени» (Timestamp Server);
– информация записывается в виде связанных посредством хэширования блоков транзакций;
– система использует механизм «доказательства сделанной работы» (Proof-of-Work) для записи блоков в блокчейн и противодействия атакам хакеров;
– транзакции в системе связаны посредством входов и выходов, тем самым обеспечивая фиксацию движения «электронных монет» (денежных средств) между биткоин-адресами;
– система использует стимулы (вознаграждение майнерам в виде эмиссии новых монет биткоина и комиссионых, взимаемых за транзакции пользователей) для обеспечения надежной и бесперебойной работы сети.
Кроме того, Сатоши Накамото затрагивает такие аспекты, как:
– Экономия дискового пространства с помощью деревьев Меркла.
– Упрощенная проверка транзакций (наличия необходимой суммы на адресе отправителя) с использованием деревьев хэшей.
– Способ достижения консенсуса в сети в случае, когда два или более узлов одновременно записывают разные версии очередного блока.
– Конфиденциальность сторон денежных операций.
– Вычислительная нецелесообразность попыток злоумышленников подделать (модифицировать) транзакции.
Источники
В этой работе компьютерный инженер и шифропанк Вэй Дай исследует, как сотрудничество могло бы быть возможным без правительств и доверенных лиц.
«Сообщество определяется сотрудничеством его участников, а эффективное сотрудничество требует средства обмена (денег) и способа обеспечения исполнения контрактов», — пишет Дай. «Традиционно эти услуги предоставлялись государством или финансируемыми государством учреждениями и только юридическим лицам. В этой статье я описываю протокол, с помощью которого эти услуги могут быть предоставлены неотслеживаемым субъектам».
Три последующих ссылки в документе посвящены временным меткам, которые имеют ключевое значение для функционирования Биткоин-сети и ее блокчейна (упорядоченной истории транзакций) и необходимы для решения проблемы двойных расходов. Более того, отметка времени доказывает существование данных в определенное время.
[2] H. Massias, X.S. Avila, and J.-J. Quisquater, “Design of a secure timestamping service with minimal trust requirements”, In 20th Symposium on Information Theory in the Benelux, May 1999.
В статье «Создание безопасной службы меток времени с минимальными требованиями к доверию» исследуется, как снизить требования к доверию в системах.
«Мы определяем цифровую метку времени как цифровой сертификат, предназначенный для подтверждения существования универсального цифрового документа в определенное время», — пишут авторы. «Существует два семейства методов установки временных меток: те, которые работают с доверенной третьей стороной, и те, которые основаны на концепции распределенного доверия. Методы, основанные на использовании доверенной стороны, основываются на беспристрастности организации, ответственной за выпуск меток времени. Методы, основанные на распределенном доверии, состоят в создании документов, датированных и подписанных большим количеством людей, чтобы убедить проверяющих в том, что мы не могли испортить их все».
[3] S. Haber, W.S. Stornetta, “How to time-stamp a digital document”, In Journal of Cryptology, vol 3, no2, pages 99–111, 1991.
В статье «Как поставить временную метку на цифровой документ» авторы предлагают метод, позволяющий сделать невозможной обратную или прямую датировку документа. Биткоин использует идею связывания хэшированных данных, чтобы сделать непрактичной подделку записей без оставления следов.
[4] D. Bayer, S. Haber, W.S. Stornetta, “Improving the efficiency and reliability of digital time-stamping”, InSequences II: Methods in Communication, Security and Computer Science, pages 329–334, 1993.
В статье «Повышение эффективности и надежности цифровых временных меток» авторы исследуют способ, как «добиться экспоненциального увеличения публичности, получаемой для каждого события временной метки, при одновременном сокращении объема хранения и необходимых вычислений».
Деревья Меркла также играют центральную роль в том, как Биткоин хранит транзакционные данные в блоках, и позволяют быстро проводить платежи и верифицировать блок с помощью проверяющих узлов.
[5] S. Haber, W.S. Stornetta, “Secure names for bit-strings”, In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28–35, April 1997.
Сатоши Накамото использовал статью «Безопасные имена для битовых строк» для объединения хэш-функций с деревьями Меркла, что позволило упростить проверку целостности.
Статья Адама Бэка «Hashcash — способ противодействия отказу в обслуживании» была использована для реализации системы доказательства работы (proof-of-work — PoW) Биткоина — ядра модели консенсуса Биткоина и ответственной за возможность децентрализованного майнинга биткоина (BTC). PoW также обеспечивает отсутствие человеческой координации для регистрации транзакций и отсутствие доверия для достижения консенсуса. Проще говоря, без PoW не было бы Биткоина.
Статья Ральфа Меркла «Протоколы для криптосистем с открытым ключом» исследует схемы распределения открытых ключей и протоколы для цифровых подписей, которые являются «идеальным методом передачи аутентифицированных сообщений из центрального источника, которые должны быть подтверждены многими отдельными получателями».
Цифровые подписи позволяют пользователям Биткоина доказать право собственности на транзакционный вывод (UTXO) и потратить его псевдонимным способом, при этом позволяя коллегам быстро проверить обоснованность таких трат.
В настоящее время Биткоин использует ECDSA и позволяет пользователям не раскрывать свою личность (закрытые ключи) при взаимодействии с протоколом. Следующее крупное обновление Биткоин добавит подписи Шнорра, что еще больше расширит возможности Биткоина в этом отношении.
Книга по математике «Введение в теорию вероятностей и ее приложения» Уильяма Феллера использована Сатоши для расчета вероятности того, сможет ли злоумышленник успешно конкурировать с честной цепочкой. Это центральный вопрос в проблеме двойной траты.