Что такое Nonce в криптовалюте? Майнинг биткоинов, Ethereum, криптография.

Что такое Nonce в криптовалюте? Майнинг биткоинов, Ethereum, криптография.

В декабре 2010 года на сцене конгресса Chaos Communication в Берлине небольшая группа под названием fail0verflow объявила, что им удалось извлечь главный ключ подписи Sony для PlayStation 3. Эксплойт не взламывал 256-битную эллиптическую кривую. Он не взламывал AES. Он использовал тот факт, что система подписи кода Sony повторно использовала одно и то же число для каждой создаваемой подписи. Это число было одноразовым числом (nonce).

Одно и то же слово «nonce» встречается в трёх областях криптомира, которые практически не имеют ничего общего. Это переменная, которую майнер биткоинов обрабатывает триллионы раз в секунду в поисках действительного хеша блока. Это счётчик, который ваш кошелек Ethereum использует для упорядочивания исходящих транзакций, и причина, по которой зависшая транзакция блокирует каждую последующую, которую вы подписываете. Это уникальное значение, необходимое шифру AES-GCM для предотвращения утечки содержимого двух зашифрованных сообщений. Одно слово, три функции, ни одна из которых не взаимозаменяема. Именно из-за того, что новички неправильно понимают ошибки «nonce слишком низкий», майнеры разрабатывают невозможные конфигурации, и именно так системы, подобные PS3, теряют доверие.

32-битный одноразовый код, называемый "числом, используемым один раз": origin

Акроним встречается повсюду. «Nonce означает число, использованное один раз». Примерно верно, но исторически неверно. Английское слово существовало за 750 лет до криптографии. Выражение «For the nonce» встречается в среднеанглийских рукописях примерно 1200-х годов. Оно означало «для этого конкретного случая».

Криптография заимствует это слово в 1978 году, в протоколе аутентификации Нидхема-Шредера. Там определяющим свойством является не случайность, а уникальность в пределах определенной области. Википедия, опираясь на реальную практику, называет nonce «произвольным числом, которое может быть использовано только один раз в криптографической связи». Счетчик подходит под это определение. Как и метка времени. Как и случайное значение или любая комбинация из этих трех. Важно то, что внутри системы один и тот же nonce никогда не появляется снова с тем же ключом или в том же контексте.

Одно слово выполняет всю работу, и работа распределяется на три части. Nonce в майнинге Bitcoin меняется до тех пор, пока хеш блока не опустится ниже целевого значения сложности. Nonce учетной записи Ethereum — это счетчик, который сеть не позволяет повторять. Криптографический nonce в симметричном шифровании — это значение, связанное с ключом, и его повторное использование один раз разрывает шифрование.

Слово употребляется свободно. Контекст – нет.

Nonce в криптовалюте

Как работает одноразовый код (nonce) в майнинге биткоинов

В Биткоине одноразовый код (nonce) занимает 32-битное поле внутри 80-байтового заголовка блока. Четыре байта. Значения варьируются от нуля до 4 294 967 295. Чуть менее 4,3 миллиарда возможных чисел, что звучало огромно, когда Сатоши писал протокол, и теперь исчерпывается микросхемой ASIC размером с рабочий стол за микросекунды.

Майнинг — это гонка за поиском значения в этом поле, которое генерирует действительный хеш блока. Возьмем 80-байтовый заголовок. Пропустим его через SHA-256, криптографическую хеш-функцию, на которой работает блокчейн биткоина, дважды. В результате получим 256-битное число. Сравним это число с целевым хешем, установленным целевым значением сложности сети — механизмом консенсуса, который лежит в основе доказательства работы. Ниже целевого значения? Блок действителен, майнер побеждает. Выше целевого значения? Увеличим nonce на единицу и выполним повторный хеш. Майнеры биткоина повторяют этот процесс до тех пор, пока кто-то не найдет действительный nonce, и новый блок не будет добавлен в блокчейн.

Почему такое маленькое поле для такой большой задачи? Структурные причины. Nonce — это самая дешевая часть заголовка, которую майнер может изменить. Все остальные поля имеют зависимости. Корень Меркла суммирует транзакции блока, поэтому его изменение заставляет пересчитывать все дерево транзакций, прежде чем можно будет попробовать новый хеш. Nonce обходит все это стороной. Каждая попытка хеширования независима. Увеличение значения nonce не дает более близкого продвижения, чем выбор случайного значения. Грубая сила, облеченная в язык консенсуса.

Конструкция продержалась примерно год. Затем ASIC-майнеры её сломали. Современные майнеры исчерпывают всё пространство nonce, состоящее из 4,3 миллиардов значений, за микросекунды, а не за секунды. Bitmain Antminer S21 Pro работает со скоростью 234 терахеша в секунду. Полное поле nonce исчерпывается на этом оборудовании примерно за 18 микросекунд . По состоянию на май 2026 года общий хешрейт сети биткоина составляет около 996 EH/s, а сложность — 132,47 триллиона. Один S21 Pro самостоятельно обрабатывает все возможные значения nonce десятки тысяч раз в секунду.

Таким образом, протокол Сатоши оставляет майнеру два чистых выхода после исчерпания 32-битного пространства. Первый — это «дополнительный nonce», поле, спрятанное внутри scriptSig транзакции coinbase. BIP34 кодифицирует его. От двух до ста байтов, контролируется майнером. Изменение дополнительного nonce приводит к изменению TXID coinbase, необходимости пересчета корня Меркла, изменению заголовка блока и открытию нового поиска 32-битного nonce. Второй выход — это увеличение метки времени или ротация битов версии в пределах допустимого диапазона протокола. Сегодня майнинговые пулы циклически изменяют все эти значения в рамках нормальной работы. Изменение nonce — самая дешевая мутация. Изменение дополнительного nonce — вторая по дешевизне. Ротация Меркла и метки времени занимает больше времени, в порядке убывания трудозатрат на пересчет каждого из них.

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

ASIC-модель Хешрейт Пора исчерпать 32-битный одноразовый код. Эффективность
Antminer S21 200 ТХ/с ~21 мкс 17,5 Дж/ТГ
Antminer S21 Pro 234 ТХ/с ~18 мкс 15 J/TH
Antminer S21 XP 270 ТХ/с ~16 мкс 13,5 Дж/ТГ

Реальный, недавний пример подтверждает эту абстракцию. Блок 948 000, добытый в начале 2026 года, имеет хеш блока `00000000000000000001b01841afc366a4f999b291c8563ee0d0db956fc2db44` и выигрышное значение nonce 2 582 463 598. Это единственное целое число в сочетании с остальной частью заголовка блока дало хеш, достаточно низкий для добавления в блокчейн. Все остальные значения nonce, которые майнер пытался использовать в этом раунде, давали слишком большой результат.

Вот что такое доказательство работы с механической точки зрения. Это не головоломка в смысле загадки. Это поиск действительного одноразового числа (nonce), оплачиваемого электричеством.

Хэш-нонс против аккаунт-нонса: одно и то же слово, разные задачи.

Слово «nonce» используется в криптовалюте ещё для одной цели, и это совпадение является самым большим источником путаницы среди новичков. Nonce для майнинга в Биткоине — это поисковая переменная. Nonce для учётной записи в Эфириуме — это счётчик. У них общее название и почти ничего больше.

Хэш nonce (биткойн) Номер счета (Ethereum)
Работа Найдите действительный хеш ниже целевого значения. Последовательность исходящих транзакций для каждого счета
Где оно живет Заголовок блока (32 бита) Состояние учетной записи (целое число, начинается с 0)
Кто его мутирует? В аппаратном обеспечении майнер майнит миллиарды в секунду. Кошелек автоматически пополняется, по одному разу за каждую отправку.
Что означает слово «неправильно» Лотерейный билет не сработал, попробуйте следующий nonce. Транзакция отклонена или зависла.
Связано с консенсусом? Да, это подтверждение выполненной работы. Нет, это защита от повторного воспроизведения.

Хэш-нонс — это временное число, которое майнер отбрасывает. Нонс учетной записи — это постоянное состояние, занесенное в сетевое представление вашего адреса. Путаница между ними — когда нонс блока Bitcoin рассматривается как счетчик последовательности — приводит к тому, что люди читают ошибку Ethereum «нонс слишком низкий» и предполагают, что их майнинговая установка неисправна. Разные блокчейны, разные задачи, одно и то же слово. Даже в рамках одной экосистемы роль нонса в работе блокчейна полностью зависит от того, наблюдаете ли вы за уровнем консенсуса или за уровнем учетной записи.

Одноразовый счетчик Ethereum и проблема зависания транзакций

Каждый внешний аккаунт в сети Ethereum имеет свой собственный nonce. Счётчик начинается с нуля, с момента первой отправки транзакции с этого адреса. Затем он увеличивается на единицу за каждую транзакцию, попадающую в блок. Когда вы отправляете что-либо, ваш кошелёк запрашивает у сети текущее значение, добавляет следующий номер в очереди и подписывает транзакцию. Сеть принимает исходящие транзакции только в строгом порядке: nonce 0, затем 1, затем 2. Пробелы не допускаются.

Именно эта строгая упорядоченность обеспечивает Ethereum защиту от повторного воспроизведения. Подписанная транзакция привязывается к одному конкретному nonce, а начиная с EIP-155 — также к одному конкретному chainID. Злоумышленник не может повторно отправить старую выполненную транзакцию как новую. К моменту получения повторной отправки nonce учетной записи уже превысит этот порог. chainID предотвращает повторные воспроизведения в разных цепочках одновременно. Внутри одной цепочки подтвержденная транзакция находится в одной точке на счетчике, который уже переместился.

Та же жесткая система упорядочивания создает проблему, с которой постоянно сталкиваются новые кошельки Ethereum. Транзакция отправляется со слишком низким размером чаевых. Валидаторы пропускают ее. Мемпул удаляет ее из приоритетной очереди. Транзакция теперь находится в подвешенном состоянии — не подтверждена, не провалена, просто застряла. Хуже того, каждая последующая транзакция, подписанная тем же адресом, получает более высокий nonce. Сеть отказывается трогать любую из них, пока застрявшая транзакция не будет подтверждена или заменена. Одна медленная транзакция задерживает всю очередь.

Решение проблемы заключается в механизме, называемом «замена по комиссии». Ваш кошелек повторно отправляет новую транзакцию с тем же значением nonce, что и заблокированная, но с большим количеством газа. EIP-1559, модель ценообразования газа, которая используется в Ethereum с момента лондонского обновления в августе 2021 года, устанавливает правило: новая транзакция должна увеличить значения `maxFeePerGas` и `maxPriorityFeePerGas` как минимум на десять процентов по сравнению с исходной. Хотите полностью отменить заблокированную транзакцию вместо ее замены? Отправьте самоперевод в размере 0 ETH на заблокированное значение nonce с более высоким чаевым. Слот будет использован, и каждая последующая транзакция в очереди будет разблокирована.

Для сравнения, вот данные за май 2026 года. Средний размер чаевых за приоритетную заправку составляет около 1,875 Gwei. Стандартная отмена заказа на 21 000 заправок обходится примерно в 0,05 доллара в спокойный день и резко возрастает во время пробок. Всем рано или поздно приходится усваивать один урок на собственном горьком опыте: всегда сначала заменяйте самый низкий ожидающий платеж. Повышение платы за последующую транзакцию, пока ее предыдущая транзакция все еще находится в состоянии ожидания, ничего не даст.

Абстракция учетной записи несколько меняет эту картину. Смарт-учетные записи ERC-4337 используют двумерный nonce, разделяя целое число на 192-битный «ключ» и 64-битную последовательность. Разные ключи образуют параллельные потоки транзакций. Задержка обработки пакета транзакций по одному ключу не блокирует работу по другому. В итоге nonce учетной записи перестал быть просто линейным счетчиком.

Ещё один миф, который стоит развеять. Переход Ethereum на Proof of Stake в рамках слияния в сентябре 2022 года не привёл к удалению nonce-кода учетной записи. Исчез nonce-кода майнинга внутри заголовка блока, поскольку валидаторы теперь выбираются по слотам, а не на основе хеш-таблицы. Nonce-код учетной записи остался точно там, где он всегда находился, в дереве состояний учетной записи.

Криптографический одноразовый код в шифровании: катастрофическая версия.

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

В каждом современном аутентифицированном шифре секретный ключ сочетается с одноразовым числом (nonce) для каждого сообщения. AES-GCM, основной алгоритм TLS 1.3, использует 96 бит. Спецификация разработана в NIST SP 800-38D. ChaCha20-Poly1305, альтернативный алгоритм, кодифицированный в RFC 8439 (июнь 2018 г.), использует ту же 96-битную длину nonce и сочетает её с 256-битным ключом. Правило в обоих случаях, простыми словами: каждая пара (ключ, nonce) выполняется ровно один раз. Повторное использование — это не мягкое ухудшение, а обрыв.

Как выглядит обрыв? Повторное использование одноразового числа (nonce) в AES-GCM под одним ключом. Предположим, злоумышленник перехватил оба зашифрованных текста. Он выполняет операцию XOR над ними. В результате получается результат операции XOR над двумя исходными открытыми текстами. Конфиденциальность исчезает в одно мгновение. Дальше происходит еще хуже. Режим аутентификации GCM раскрывает свой внутренний подключ аутентификации — значение, которое подписывает каждый зашифрованный текст под этим ключом. Имея подключ на руках, злоумышленник записывает новые аутентифицированные зашифрованные тексты, и законный получатель принимает их за подлинные. Современный шифр, используя одно некорректное одноразовое число, оказывается ниже уровня сдвига Цезаря.

Всё это не гипотетические предположения. В статье "Nonce-Disrespecting Adversaries", опубликованной в 2016 году на конференции USENIX WOOT, были проанализированы рабочие HTTPS-серверы, и обнаружено 184 сервера, повторно использующих nonce-коды GCM. В состав этих сборок входили конкретные образы Cisco IOS XE и микропрограмма Radware ADC. Уязвимость CVE-2016-0270 и несколько смежных CVE отслеживаются в этих системах.

Взлом PS3 компанией Sony в декабре 2010 года был вызван той же проблемой, но с использованием другого шифра: ECDSA. Каждая подпись ECDSA требует уникального и секретного значения, обозначаемого как k . Код подписи Sony обошел стороной вопрос уникальности. Он жестко закодировал константу k и использовал ее в каждой подписи. Дайте злоумышленнику две подписи ECDSA для разных сообщений с одинаковым значением k , и он получит два линейных уравнения с двумя неизвестными. Решите. В результате вы получите закрытый ключ подписи в закрытой форме. fail0verflow продемонстрировал это на сцене 27-го конгресса Chaos Communication в Берлине. Главный ключ подписи Sony попал в открытый интернет в течение нескольких часов. Все когда-либо выпущенные PS3 мгновенно потеряли свою цепочку доверия.

Детерминированное решение, кодифицированное как RFC 6979 в 2013 году, исключает генератор случайных чисел из процесса. Вычисляется k из HMAC сообщения и закрытого ключа. То же сообщение, тот же ключ, то же k — нет генератора случайных чисел, который можно было бы исказить. Современные библиотеки Bitcoin по умолчанию используют детерминированный ECDSA.

Из этих историй вытекают два следствия, которые часто сбивают разработчиков с толку. В случае с шифрами AEAD (AES-GCM, ChaCha20-Poly1305) предсказуемый nonce вполне подходит. Счетчик работает. Единственным требованием является уникальность. В случае с подписями ECDSA и Schnorr правило меняется. Предсказуемый k — это катастрофа. Nonce для подписи должен быть одновременно уникальным, непредсказуемым и секретным. Именно смешение этих двух подходов приводит к появлению ошибок повторного использования nonce в коде пользовательских кошельков. В ходе аудита проекта резервного копирования Kopia в 2024 году был зафиксирован риск случайного коллизионного взаимодействия GCM-nonce в длительно используемых ключах, а отчеты о пентестинге новых SDK ежемесячно подтверждают аналогичные результаты.

Нонс против соли против внутривенного введения: как избежать путаницы между тремя вариантами.

В обзорах по безопасности люди используют три слова, как будто они означают одно и то же: соль, педофилия, IV. Это не синонимы.

Соль относится к хешированию паролей. Вы берете случайное значение для каждого пользователя, подмешиваете его в хеш, и теперь предварительно вычисленные радужные таблицы для "password123" перестают работать с вашей базой данных. Соль находится в открытом виде рядом с хешем. Никто ее не скрывает. Если два пользователя используют одну и ту же соль, это неудобно; это позволяет злоумышленнику, взломавшему одну, взломать и ее двойника. Но это не конец света.

Nonce используется в сообщениях и подписях. В симметричном шифровании он применяется к каждому сообщению, в ECDSA — к каждой подписи. Шифры AEAD, такие как AES-GCM, раскрывают nonce в открытом виде, подобно тому как соль находится рядом с хешем. ECDSA скрывает его, рассматривает как секрет и каждый раз требует новой случайности. В любом случае, коллизии не просто неприятны. Они фатальны. Вся гарантия утрачена.

IV — сокращение от initialization vector (вектор инициализации) — это устаревшее название того, что в более новых спецификациях называется nonce. В режимах CBC и CTR это слово использовалось годами. В современной документации AEAD оно изменилось, в основном потому, что «вектор» звучал как математическая задача, и люди продолжали его использовать. «Nonce» больше соответствует этому правилу.

Нужно одно правило, которое поместится на стикере? Соль защищает хранящийся вами секрет. Автоматический ввод (nonce) защищает отправляемый вами секрет.

Nonce в криптовалюте

Почему значение nonce важно не только в контексте фактов о майнинге биткоинов

Nonce — это небольшой объект. 32 бита в Биткоине. Счетчик в Эфириуме. Двенадцать байтов в AES-GCM. Он имеет непропорционально большой вес для своего размера. Для обычных пользователей каждая зависшая транзакция в Эфириуме, каждое рукопожатие TLS с банковским сайтом, каждая подпись, создаваемая аппаратным кошельком, зависят от правильной обработки nonce. Для разработчиков неправильная обработка nonce — наиболее распространенная точка входа для катастрофических ошибок в пользовательском криптографическом коде. Инцидент с PS3 был крайним случаем, но тот же самый режим сбоя продолжает появляться в новых SDK кошельков и инструментах резервного копирования. Для экономики Биткоина 32-битный nonce в сочетании с механизмом extra-nonce изначально сделал ASIC-майнинг честной лотереей. Одно из самых важных дизайнерских решений Сатоши, скрытое на виду в ничем не примечательном поле заголовка.

Одноразовый пароль (nonce) — это то, что подтверждает , что это произошло однажды, именно в таком порядке и именно таким образом . Уберите его, и любая система, зависящая от уникальности, превратится в нечто, что злоумышленник сможет восстановить за бесценок. Консенсус нарушается. Защита от повторного воспроизведения исчезает. Шифрование дает сбои. Подписи подделываются.

Любые вопросы?

Да, в обоих случаях, но по-разному. Solana сохраняет nonce-номера на уровне учетной записи и добавляет постоянные nonce-номера для офлайн-подписи. Ethereum, использующий алгоритм Proof-of-Stake, сохранил nonce-номер учетной записи после слияния в сентябре 2022 года, но удалил nonce-номер для майнинга из заголовков блоков, поскольку валидаторы теперь выбираются по слоту, а не по хеш-таблице.

В сети Ethereum единственный способ — это замена транзакции по комиссии (replace-by-fee), которая намеренно заменяет одну неподтвержденную транзакцию другой с тем же nonce, оплачивая более высокую комиссию за газ. После подтверждения две транзакции никогда не могут использовать один и тот же nonce на одном счете. В AES-GCM при использовании одного ключа использование одного nonce категорически запрещено. Повторное использование нарушает конфиденциальность и аутентификацию на одном и том же этапе.

Выполните замену по комиссии. Отправьте новую транзакцию с тем же nonce, что и зависшая, увеличив значения `maxFeePerGas` и `maxPriorityFeePerGas` на десять процентов или более. Чтобы отменить, а не заменить транзакцию, отправьте перевод с нулевой стоимостью на свой адрес по этому зависшему nonce, с более высоким размером чаевых. Всегда заменяйте сначала самый низкий ожидающий nonce.

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

Эта фраза обычно указывает на одноразовый токен (nonce) на уровне учетной записи или аутентификации. Представьте себе одноразовое значение, привязанное к сессии, транзакции или API-запросу, чтобы запрос нельзя было воспроизвести. Здесь «токен» не имеет смысла в смысле ERC-20. OAuth и OpenID Connect используют токены nonce в своих процессах аутентификации.

Слово «nonce» означает число, используемое один раз в рамках определенной криптографической операции. В Биткоине оно используется в качестве 32-битного поля поиска, которое майнер использует для поиска действительного хеша. В Ethereum оно используется в качестве счетчика, упорядочивающего исходящие транзакции для одного счета. В шифровании оно используется как значение для каждого сообщения, которое в сочетании с ключом никогда не должно повторяться.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.