Уразливість нульового дня в алгоритмі видобутку біткоїна – ForkLog UA

З моменту виникнення в алгоритмі видобутку біткоїна існувала обчислювальна неточність, що дозволяла генерувати блоки з надзвичайно великою швидкістю. Про це повідомив дослідник Лоїк Морель.

Згідно з оприлюдненою інформацією, несправність походить від механізму регулювання важкості.

Кожного разу після 2016 блоків (орієнтовно раз на два тижні) вузли перераховують цільовий показник таким чином, щоб один блок з’являвся кожні 10 хвилин незалежно від обчислювальної потужності майнерів. Для цієї корекції вузли вимірюють часовий проміжок минулого відрізку, зіставляють його з цільовим значенням (2016 x 600 = 1 209 600 секунд), а потім відповідно змінюють складність.

«Саме в цих розрахунках прихована неточність. Щоб оцінити тривалість блоків у минулому періоді, вузол порівнює позначку часу першого блоку періоду з позначкою часу останнього. Інтуїтивно це виглядає логічним, але насправді це хиба, оскільки між першим і останнім блоками періоду лише 2015 інтервалів, а не 2016», — роз’яснив Морель.

Якщо визначити t0 як позначку часу першого блоку, а t2015 як позначку останнього, вузол обчислює минулий час як T = t2015 — t0. Таким чином виходить 2015 інтервалів (від t0 до t1 > від t1 до t2 > … > від t2014 до t2015).

Щоб отримати 2016 інтервалів, необхідно застосовувати іншу формулу: T = t2015 — t-1, де t-1 — позначка часу крайнього блоку попереднього періоду.

Це називається помилка «зсуву на одиницю». Цей дефект додає похибку приблизно 0,05% у бік дещо завищеної складності.

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

Маніпулювання часом

Цей проміжок уможливлює атаку «викривлення часу». Її принцип такий:

  1. Майнер, який контролює значну частину обчислювальної потужності, починає встановлювати мінімально допустимі позначки часу для всіх блоків за період (окрім останнього).
  2. У крайньому блоці періоду він навмисно призначає максимально допустиму позначку часу.
  3. Після завершення періоду відбувається регулювання складності. Через маніпулювання з позначками виміряний період видається довшим, ніж був насправді. В результаті складність зменшується.
  4. Зловмисник повторює подібну маніпуляцію в наступному періоді. Оскільки періоди не перекриваються, перший блок другого періоду атаки може мати позначку часу, що належить до далекого минулого, тоді як попередній блок має позначку часу в майбутньому. Цей розрив збільшується від періоду до періоду.

Повторюючи процес декілька разів, зловмисник теоретично може зменшити складність майнінгу до рівня, за якого створюється до шести блоків за секунду (замість одного кожні 10 хвилин).

«Наслідки були б катастрофічними: таймлоки стають непотрібними, мережа перевантажена, кількість реорганізацій збільшується, а підтвердження транзакцій втрачають цінність. Усе це дозволило б зловмиснику збирати винагороду за блок у шаленому темпі», — додав дослідник.

Атака була б нездійсненною, якщо б перший і останній блок двох послідовних періодів збігалися.

Як виправити цю неточність?

Морель зауважив, що проблему можна усунути софтфорком у межах BIP-0054.

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

Це обмеження відновлює «певну форму безперервності» між періодами, запобігає маніпуляціям часовими проміжками і робить атаку «викривлення часу» нереальною.

Нагадаємо, у квітні головний директор з продукту StarkWare Авіху Леві презентував аварійний механізм квантового захисту біткоїна без софтфорку.

No votes yet.
Please wait...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *