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

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

У грудні 2010 року на сцені Конгресу комунікацій Chaos у Берліні невелика група під назвою fail0verflow оголосила, що їм вдалося видобути головний ключ підпису Sony для PlayStation 3. Експлойт не порушував 256-бітну еліптичну криву. Він не зламував AES. Він використовував той факт, що система підпису коду Sony повторно використовувала одне й те саме число для кожного створюваного підпису. Це число було одноразовим.

Те саме слово, «nonce», з'являється у трьох куточках криптосвіту, які майже не мають нічого спільного. Це змінна, яку майнер Bitcoin перебирає трильйони разів на секунду, шукаючи дійсний хеш блоку. Це лічильник, який ваш гаманець Ethereum використовує для упорядкування вихідних транзакцій, і причина, чому зависла транзакція блокує кожну наступну, яку ви підписуєте. Це унікальне значення, необхідне шифру AES-GCM, щоб запобігти витоку вмісту двох зашифрованих повідомлень один одного. Одне слово, три завдання, жодне з них не взаємозамінне. Плутання одного з іншим — це те, як новачки неправильно інтерпретують помилки «nonce too low», як майнери розробляють неможливі конфігурації, і як такі системи, як PS3, втрачають свій корінь довіри.

32-бітний одноразовий номер під назвою "число, що використовується один раз": походження

Бекронім зустрічається всюди. «Nonce» означає число, що використовується один раз. Приблизно вірно, але історично неправильно. Англійське слово виникло приблизно на 750 років раніше за криптографію. «For the nonce» (або «для nonce») з'являється в середньоанглійських рукописах приблизно в 1200-х роках. Воно означало «для цієї конкретної нагоди».

Криптографія запозичує це слово в 1978 році з протоколом автентифікації Нідхема-Шредера. Там визначальною властивістю є не випадковість. Це унікальність у межах визначеної області видимості. Вікіпедія, спираючись на реальну практику, називає одноразовий номер (nonce) «довільним числом, яке можна використовувати лише один раз у криптографічному зв'язку». Лічильник кваліфікується. Так само, як і позначка часу. Так само, як і випадкове значення або будь-яка комбінація цих трьох. Важливо те, що всередині системи той самий одноразовий номер ніколи не з'являється знову з тим самим ключем або в тому ж контексті.

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

Слово нечітке. Контексти — ні.

Nonce у криптовалюті

Як працює одноразовий номер (nonce) у майнінгу біткойнів

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

Майнінг – це змагання з пошуку значення в цьому полі, яке генерує дійсний хеш блоку. Візьмемо 80-байтовий заголовок. Двічі пропустимо його через SHA-256, криптографічну хеш-функцію, на якій працює блокчейн біткойна. Виходить 256-бітове число. Порівняйте це число з цільовим хешем, встановленим цільовою складністю мережі, консенсусним механізмом, який керує Proof-of-Work (доказом роботи). Нижче цілі? Блок дійсний, майнер перемагає. Вище цілі? Збільште nonce на один і перехешуйте. Майнери біткойна зациклюють це, доки хтось не знайде дійсний nonce, і новий блок не буде додано до блокчейну.

Чому таке маленьке поле для такого великого завдання? Структурні причини. Nonce – це найдешевша частина заголовка, яку майнер може мутувати. Кожне інше поле має залежності. Корінь merkle підсумовує транзакції блоку, тому його зміна змушує все дерево транзакцій переобчислюватися, перш ніж можна буде спробувати новий хеш. 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 зміниться, корінь merkle потрібно перерахувати, заголовок блоку зміниться, і відкриється новий пошук 32-бітного nonce. Другий вихід – збільшити часову позначку або повернути біти версії в межах дозволеного протоколом діапазону. Майнінгові пули сьогодні циклічно обробляють їх усі в рамках нормальної роботи. Коригування nonce є найдешевшою мутацією. Коригування додаткового nonce є другим за дешевизною. Ротації merkle та timestamp розташовані далі, в порядку обсягу роботи, необхідної для перерахунку кожної з них.

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

Модель ASIC Хешрейт Час вичерпати 32-бітний одноразовий номер Ефективність
Мурахайнер S21 200 ТХ/с ~21 мкс 17,5 Дж/TH
Antminer S21 Pro 234 ТХ/с ~18 мкс 15 Дж/TH
Antminer S21 XP 270 TH/s ~16 мкс 13,5 Дж/TH

Реальний, недавній приклад підтверджує цю абстракцію. Блок 948 000, видобутий на початку 2026 року, має хеш блоку `0000000000000000001b01841afc366a4f999b291c8563ee0d0db956fc2db44` та виграшне значення nonce 2 582 463 598. Це одне ціле число, у поєднанні з рештою заголовка блоку, створило хеш, достатньо низький для додавання до блокчейну. Кожен інший nonce, який його майнер пробував виконати в цьому раунді, видавав щось занадто велике.

Ось що таке Proof of Work, механічно. Не головоломка у сенсі загадки. Пошук дійсного одноразового числа, оплаченого електроенергією.

Хеш-нонс проти нонсу облікового запису: те саме слово, різна робота

Слово «nonce» часто використовується для ще однієї речі в криптовалюті, і це часткове перекриття є найбільшим джерелом плутанини серед новачків. Nonce майнінгу Bitcoin — це змінна пошуку. Nonce облікового запису Ethereum — це лічильник. Вони мають спільну назву і майже нічого більше.

Хеш-нонс (біткойн) Номер облікового запису (Ethereum)
Робота Пошук дійсного хешу нижче цільового значення Послідовність вихідних транзакцій для кожного облікового запису
Де воно живе Заголовок блоку (32 біти) Стан облікового запису (повне ціле число, починається з 0)
Хто його мутує Майнер, на апаратному рівні, мільярди за секунду Гаманець, автоматично, один за одне відправлення
Що означає «неправильно» Лотерейний квиток не спрацював, спробуйте наступний одноразовий номер Транзакцію відхилено або вона зависла
Прив'язаний до консенсусу? Так, це доказ роботи Ні, це захист від повторного відтворення

Хеш-нонс – це тимчасове число, яке викидає майнер. Нонс облікового запису – це постійний стан, вигравіруваний у вигляді вашої адреси в мережі. Сплутування одного з іншим – трактування нонсу блокчейну блоку Bitcoin як лічильника послідовностей – полягає в тому, як люди інтерпретують помилку Ethereum "nonce too low" і припускають, що їхня система майнінгу зламана. Різні блокчейни, різні завдання, одне й те саме слово. Навіть в межах однієї екосистеми роль нонсу в операціях блокчейну повністю залежить від того, чи спостерігаєте ви за рівнем консенсусу, чи рівнем облікового запису.

Номер nonce облікового запису Ethereum та проблема зависання транзакції

Кожен зовнішній обліковий запис на Ethereum має свій власний одноразовий номер (nonce). Лічильник починається з нуля, тобто з першого разу, коли адреса надсилає транзакцію. Звідти він збільшується на одиницю для кожної транзакції, яка потрапляє в блок. Коли ви щось надсилаєте, ваш гаманець запитує у мережі поточне значення, додає наступне число в рядку та підписує. Мережа приймає вихідні дані лише в строгому порядку. Nonce 0, потім 1, потім 2. Пробіли заборонені.

Таке суворе впорядкування забезпечує Ethereum захист від повторного відтворення. Підписана транзакція прив'язується до одного конкретного nonce, а починаючи з EIP-155, також до одного конкретного chainID. Зловмисник не може повторно транслювати стару виконану транзакцію так, ніби вона нова. На момент надходження повторного трансляції nonce облікового запису вже просунувся повз нього. chainID одночасно знищує міжланцюгові повторення. Всередині одного ланцюга підтверджена транзакція знаходиться в одній точці на лічильнику, який вже перемістився далі.

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

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

Цифри за травень 2026 року для контексту. Середній пріоритет близько 1,875 Gwei. Стандартне скасування 21 000 пального коштує близько 0,05 долара у спокійний день і зростає до мінімуму під час заторів. Є один урок, який кожен зрештою засвоює на гіркому досвіді: завжди замінюйте спочатку найнижчий очікуваний nonce. Збільшення комісії на пізнішій транзакції, поки її попередник все ще завис, взагалі нічого не дає.

Абстракція облікового запису дещо змінює цю історію. Розумні облікові записи ERC-4337 використовують 2D nonce, розділяючи ціле число на 192-бітний «ключ» та 64-бітну послідовність. Різні ключі утворюють паралельні потоки транзакцій. Заблокована партія на одному ключі не блокує роботу над іншим. Nonce облікового запису нарешті перестав бути єдиним лінійним лічильником.

Ще один міф, вартий того, щоб його розвіяти. Перехід Ethereum до Proof of Stake під час злиття у вересні 2022 року не видалив nonce облікового запису. Зник nonce майнінгу всередині заголовка блоку, оскільки валідатори тепер вибираються за слотом, а не за допомогою хеш-головоломки. Nonce облікового запису залишився точно там, де він завжди був, у стані облікового запису trie.

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

Вийдіть за межі блокчейну, і криптографічний одноразовий код виконає свою роботу чіткіше. Якщо ви помилитеся, у вас з-під ніг все вийде.

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

Як виглядає обрив? Повторно використовуйте одноразовий номер в AES-GCM під одним ключем. Вдайте, що зловмисник захопив обидва шифротексти. Вони об'єднують їх за допомогою операції XOR. Викидають XOR двох базових відкритих текстів. Конфіденційність зникла за один крок. Далі йде ще гірше. Режим автентифікації GCM витікає свій внутрішній підрозділ автентифікації — значення, яке підписує кожен шифротекст під цим ключем. Маючи підрозділ в руках, зловмисник записує нові автентифіковані шифротексти, і легітимний одержувач приймає їх як справжні. Сучасний шифр на одному поганому одноразовому номері опускається нижче зсуву Цезаря.

Нічого з цього не є гіпотетичним. У статті USENIX WOOT 2016 року під назвою «Супротивники, що не поважають одноразові номери», було проскановано кінцеві точки HTTPS у робочому середовищі та виявлено 184 сервери, які повторно використовують одноразові номери 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 місяць за місяцем дають подібні результати.

Nonce проти salt проти IV: як уникнути плутанини з трьома способами

Люди використовують три слова в статтях з безпеки так, ніби вони означають одне й те саме. Сіль. Одноразове слово. IV. Вони не є синонімами.

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

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

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

Потрібне одне правило, яке поміщається на стікер? Сіль захищає секрет, який ви зберігаєте. Одноразовий номер захищає секрет, який ви надсилаєте.

Nonce у криптовалюті

Чому одноразове число має значення, окрім дрібниць про майнінг біткойнів

Одноразовий номер (nonce) – це невеликий об'єкт. Тридцять два біти в Bitcoin. Лічильник в Ethereum. Дванадцять байтів в AES-GCM. Він має непропорційно велику вагу для свого розміру. Для звичайних користувачів кожна зависла транзакція Ethereum, кожне TLS-рукостискання з банківським сайтом, кожен підпис, який створює апаратний гаманець, залежить від правильної обробки одноразового номера. Для розробників неправильна обробка одноразового номера є найпоширенішою точкою відправлення для катастрофічних помилок у користувацькому криптографічному коді. Інцидент з PS3 був екстремальним випадком, але той самий режим збою продовжує з'являтися в новіших SDK гаманців та інструментах резервного копіювання. Для економіки Bitcoin, 32-бітний одноразовий номер у поєднанні з механікою додаткового одноразового номера – це те, що зробило майнінг ASIC справедливою лотереєю. Один з найважливіших дизайнерських рішень Сатоші, прихований на видноті в нічим не примітному полі заголовка.

Одноразовий код — це те, що говорить про те, що це сталося лише раз, у такому порядку, саме так . Якщо його виключити, кожна система, що залежить від унікальності, перетворюється на щось, що зловмисник може дешево перебудувати. Консенсус порушується. Захист від повторного відтворення зникає. Витік шифрування. Підробка підписів.

Які-небудь питання?

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

На Ethereum єдиний спосіб — це заміна комісією, яка навмисно замінює одну непідтверджену транзакцію на іншу з тим самим nonce, сплачуючи вищу плату за газ. Після підтвердження дві транзакції ніколи не можуть використовувати один nonce на одному обліковому записі. В AES-GCM під одним ключем спільне використання nonce повністю заборонено. Повторне використання порушує конфіденційність та автентифікацію на одному кроці.

Виконайте заміну за комісією. Надішліть нову транзакцію з тим самим одноразовим номером, що й зависла, з `maxFeePerGas` та `maxPriorityFeePerGas`, збільшеними на десять відсотків або більше. Щоб скасувати, а не замінити, надішліть переказ нульової вартості на свою адресу з цим завислим одноразовим номером, з вищими чайовими. Завжди спочатку замінюйте найнижчий одноразовий номер, що очікує на розгляд.

Три завдання, одна основна ідея. Одноразовий номер забезпечує унікальність, тому та сама операція не може бути повторена. Він упорядковує транзакції в реєстрах на основі облікових записів. І це змінна пошуку, яку майнери коригують, шукаючи дійсний хеш у Proof-of-Work. Різні механіки, та сама суть: зробити кожну подію відмінною від усіх інших.

Ця фраза зазвичай вказує на nonce рівня облікового запису або автентифікації. Уявіть собі одноразове значення, пов`язане із сеансом, транзакцією або запитом API, тому запит не можна відтворити. «Токен» тут не відповідає значенню ERC-20. OAuth та OpenID Connect покладаються на nonce-токени під час своїх процесів автентифікації.

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

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.