данное время

Определение

Одноразовое число (nonce) — это число, которое используется только один раз в... криптографический обмен данными для предотвращения атак повторного воспроизведения и обеспечения актуальности сообщений. 

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

В транзакциях Ethereum nonce — это последовательный счетчик транзакций для каждого счета: каждая новая транзакция с адреса должна использовать следующий nonce (начиная с 0), что гарантирует обработку транзакций в порядке очереди и предотвращает атаки повторного воспроизведения с двойной тратой. 

Если одноразовый код транзакции пропущен, все последующие транзакции с этого адреса будут заблокированы до тех пор, пока этот пробел не будет заполнен.

Одноразовый код в двух контекстах

Контекст 1: Майнинг биткоинов (Proof of Work)

Цель: Найти хеш ниже целевой сложности. Процесс: Майнер пробует разные nonce: Nonce = 0: Хэш(block_header + 0) = 0xaf2b… (слишком высокий) Nonce = 1: Хэш(block_header + 1) = 0xce4a… (слишком высокий) Nonce = 2: Хэш(block_header + 2) = 0xb91c… (слишком высокий) … Nonce = 3 847 291 023: Хэш = 0x0000000000a3b… (ниже целевой сложности!) → Блок найден! Действителен Доказательство работы.

Современные ASIC-майнеры тратят около 4 миллиардов nonce в секунду. Если в 32-битном диапазоне нет действительного nonce: измените метку времени или транзакцию Coinbase → начните поиск nonce заново.

Контекст 2: Nonce счета Ethereum (счетчик транзакций)

Алиса отправляет транзакции: TX 1: Nonce = 0 (первая транзакция с адреса Алисы) TX 2: Nonce = 1 TX 3: Nonce = 2 TX 4: Nonce = 3

Проблема: TX 3 зависает (слишком низкая комиссия): TX 3 в ожидании → TX 4 не может быть обработан (пробел в nonce) Исправление: Повторная отправка TX 3 с более высоким газом → TX 3 подтверждается → TX 4 подтверждается

Защита от повторного воспроизведения: Если транзакция TX 3 была подтверждена в основной сети → та же транзакция не может быть воспроизведена в тестовой сети (разные идентификаторы цепочек делают nonce + подпись уникальными для одной цепочки).

Использование одноразовых чисел (Nonce) в криптосистемах

Система Назначение одноразового числа Диапазон
Биткойн-добыча Измените входные данные, чтобы найти действительный хеш PoW. от 0 до 2^32 (~4 млрд)
Эфириум аккаунт Последовательный счетчик транзакций на каждый адрес от 0 до 2^64 – 1 (~18.4 квинтиллиона)
Криптографические протоколы Предотвращение атак повторного воспроизведения в сигнатурах Случайный или последовательный
SSL / TLS Обеспечьте уникальность сессии. Случайный выбор за сессию

FAQ

В: Почему Ethereum использует последовательный nonce вместо случайного?

Последовательные одноразовые числа (0, 1, 2, 3…) обеспечивают соблюдение порядка транзакций: нельзя потратить одни и те же средства дважды, и транзакции выполняются в порядке их отправки. Случайные одноразовые числа не предотвратили бы атаки повторного воспроизведения столь же эффективно и потребовали бы дополнительных механизмов для обнаружения дублирующихся транзакций. Последовательные числа также упрощают идентификацию «застрявших» транзакций: если одноразовое число 5 находится в состоянии ожидания, а одноразовое число 6 отправлено, то одноразовое число 6 будет ждать подтверждения от одноразового числа 5.

В: Как исправить зависшую транзакцию Ethereum?

Если транзакция зависла с ожидающим nonce, вы должны либо: (1) Ускорить ее — повторно отправить тот же nonce с более высоким газом (в MetaMask есть кнопка «Ускорить»), либо (2) Отменить ее — отправить себе 0 ETH с тем же nonce по более высокой цене газа, что заменит зависшую транзакцию. После разрешения зависшего nonce последующие транзакции с более высокими nonce будут обрабатываться.

В: Что такое атака «повторного использования одноразового числа» в криптографии?

В схемах криптографической подписи повторное использование одноразового числа (nonce) с одним и тем же закрытым ключом может математически раскрыть его содержимое. Взлом PlayStation 3 (fail0verflow, 2010) использовал постоянное одноразовое число (nonce) в подписях ECDSA от Sony, что позволило извлечь закрытый ключ всего из двух подписей. В подписи ECDSA в Bitcoin используются детерминированные одноразовые числа (RFC 6979) специально для предотвращения этой уязвимости.

Совет от UPay: Если ваш MetaMask Если транзакция зависла в состоянии «ожидание» на несколько часов, проверьте свой текущий nonce на Etherscan (ваш адрес → Транзакции → найдите nonce ожидающей транзакции). Включите «Расширенные настройки газа» в настройках MetaMask, затем повторно отправьте транзакцию, используя тот же nonce, но с более высокой ценой газа. Это «заменит» старую транзакцию в мемпуле. Никогда не устанавливайте вручную nonce выше вашего текущего ожидающего nonce — вы создадите разрыв, который заблокирует все будущие транзакции, пока этот разрыв не будет заполнен.

Предупреждение: Данная информация предназначена исключительно для образовательных целей и не является финансовой консультацией.

UPay — Создание криптоэнциклопедии

Медиа