Nonce — скорочення від “Number used once” (“число, використане один раз”). У криптографії та протоколах зв’язку nonce позначає випадкове або псевдовипадкове число, що генерується для забезпечення унікальності комунікацій. Основні властивості nonce:
• Унікальність: Це число використовується лише один раз у межах конкретної зашифрованої комунікації та не повторюється.
• Непередбачуваність: У криптографічних системах nonce має бути випадковим, щоб унеможливити його передбачення зловмисниками.
У механізмі Proof of Work (PoW) Bitcoin nonce — це єдина змінна, яку майнери можуть вручну змінювати під час обчислення хешу. Майнер не може змінити дані транзакції; він постійно перебирає різні значення nonce, кожного разу перераховуючи хеш. Коли майнер знаходить nonce, що забезпечує хеш блоку з необхідною складністю, цей nonce слугує доказом виконаної роботи.
Цей процес нагадує купівлю лотерейних квитків. Дані блоку — це ваше ім’я, а nonce — випадкове число, яке ви обираєте. Ви змінюєте число (nonce), доки не виграєте (досягнете потрібної складності хешу).
В Ethereum nonce має дві основні функції, найпоширеніша з яких — nonce облікового запису:
Головна функція nonce — посилення безпеки та цілісності системи:
• Запобігання атакам повторного використання: Це найважливіша функція nonce. Зловмисники можуть перехоплювати дійсні запити та намагатися повторно їх надіслати для отримання несанкціонованого доступу. Nonce гарантує, що навіть якщо запит перехоплено, сервер його відхилить, оскільки це число вже використане.
Це схоже на серійний номер чека. Якщо чек із номером #001 вже обналичено, банк анулює цей номер. Навіть якщо чек скопіювати, його не можна повторно обналичити.
• Гарантія актуальності даних: Включаючи nonce, отримувач може переконатися, що дані створені в реальному часі, а не є повтором старої інформації. Це запобігає використанню зловмисниками записів попередніх сесій для підробки ідентичності.
• Підвищення непередбачуваності: Nonce додає змінну у процес шифрування, що ускладнює аналіз шаблонів та компрометацію системи.
Залежно від способу генерації та сфери застосування nonce поділяють на дві основні категорії:
• Випадковий nonce: Генерується криптографічно захищеним псевдовипадковим генератором чисел (CSPRNG), має високу ентропію та непередбачуваність. Застосовується у цифрових підписах і сучасних схемах шифрування.
• Послідовний nonce: Створюється шляхом інкрементування лічильника. Менш непередбачуваний, але забезпечує абсолютну унікальність і підходить для механізмів автентифікації.
Nonce застосовується у багатьох сферах — від щоденного веб-серфінгу до транзакцій цифрових валют, а також у різних протоколах безпеки та новітніх технологіях. Його основна логіка завжди базується на унікальності та непередбачуваності.
• Управління ідентичністю та автентифікація: У HTTP Digest Authentication, Single Sign-On (SSO) та двофакторній автентифікації (2FA) nonce підтверджує ідентичність користувача та автентичність запиту.
• Криптографічні протоколи та цифрові підписи:
◦ Під час SSL/TLS-обміну клієнти та сервери обмінюються nonce для підтвердження ідентичності.
◦ В алгоритмах типу AES-GCM nonce виконує роль ініціалізуючого вектора (IV), що гарантує: однаковий відкритий текст не породжує однаковий шифротекст.
• Блокчейн та розподілені реєстри
Це найпоширеніше застосування nonce сьогодні, що вирішує питання “хто записує транзакції” та “у якому порядку вони обробляються”.
Наприклад, у PoW-майнінгу Bitcoin nonce — це 32-бітне поле. Майнери постійно змінюють це число, доки хеш заголовка блоку не стане меншим за цільову складність.
В управлінні обліковими записами Ethereum: Кожен обліковий запис має зростаючий nonce. Це не лише запобігає атакам повторного використання (надсилання однієї транзакції двічі), а й дозволяє користувачам “замінити” або “скасувати” завислі транзакції, подавши нову з тим самим nonce і більшою комісією.
Nonce і хеш-значення часто зустрічаються разом у блокчейн-контексті, але мають принципові відмінності:
Хеш-значення — це “цифровий відбиток” даних, визначений вхідними даними і фіксованого розміру. Nonce — це тимчасова змінна, що використовується для зміни результату хешування.
З точки зору часу, хеш-значення — це фіксований ідентифікатор для набору даних, а nonce зазвичай видаляється після одноразового використання.
Якщо генерація або управління nonce виконані неправильно, системи наражаються на значні ризики. Типові атаки включають:
◦ Атака повторного використання nonce: Зловмисники використовують повторно застосовані nonce для компрометації криптографічного захисту. Наприклад, у липні 2021 року кросчейн-протокол Anyswap Multichain Router V3 підписав дві транзакції з однаковим значенням (складовою підпису), що дозволило зловмисникам отримати приватний ключ і призвело до втрат майже 8 мільйонів доларів.
◦ Атака на передбачення nonce: Якщо алгоритм генерації nonce передбачуваний, зловмисники можуть маніпулювати процесами майнінгу чи автентифікації.
◦ Брутфорс-атака: Зловмисники перебирають значення nonce, щоб знайти хеш, який відповідає заданим критеріям. Наприклад, у 2018 році Bitcoin Gold (BTG) зазнав кількох атак 51%. Зловмисники орендували великі обчислювальні потужності для брутфорсу nonce, у результаті чого було викрадено 388 200 BTG і завдано збитків на суму близько 18 мільйонів доларів.

Джерело скріншоту: Bitcoin Gold Explorer
Щоб запобігти цим атакам, розробникам і проєктам слід використовувати алгоритми генерації з високою випадковістю (наприклад, CSPRNG), впроваджувати сувору перевірку унікальності та регулярно оновлювати криптографічні бібліотеки.
Як базовий елемент криптографічних технологій, властивість nonce “одноразового використання” забезпечує надійний захист складних інтернет-комунікацій і розподілених реєстрів. Розуміння та коректна реалізація механізмів nonce є критично важливими для забезпечення безпеки, прозорості та цілісності цифрового світу.
Додаткові матеріали:





