У біткоїн-майнінгу знайдено вразливість нульового дня.

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

Відповідно до заяви, вада пов’язана з принципом регулювання важкості.

Кожного разу після 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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *