BTC $81,713 ▼ 0.663% ETH $2,339 ▼ 1.581% BNB $670 ▲ 0.619% SOL $97 ▲ 0.756% BTC $81,713 ▼ 0.663% ETH $2,339 ▼ 1.581% BNB $670 ▲ 0.619% SOL $97 ▲ 0.756%
Bitcoin

Виявлено вразливе місце нулевого дня у механізмі майнінга биткоїна

Ви знаєте, як часто трапляються помилки в програмуванні? 🤔 Але коли це відбувається в алгоритмі майнингу біткоїна, то це вже зовсім серйозна справа! 🚀 Сьогодні ми поговоримо про одну таку помилку, яку виявив дослідник Лоік Морель.

Отже, проблема полягає в тому, що кожні 2016 блоків (або приблизно раз на дві тижні) вузли переобчислюють цілісний показник, щоб блоки з’являлися кожні 10 хвилин, незалежно від обчислювальної потужності майнерів 📊 Для цього вузли вимірюють тривалість останнього періоду, порівнюють з цілісним значенням (2016 х 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% в бік дещо завищеної складності 📈

Але справжня проблема полягає в іншому: недолік призводить до того, що періоди корекції не перекриваються — тимчасова метка останнього блоку одного періоду не враховується при розрахуванні наступного ⚡.

Ця проблема робить можливою атаку «искривлення часу» 🕰️ Її принцип полягає в тому, що майнер, який контролював більшу частину обчислювальної потужності, встановлював мінімально допустимі тимчасові метки для всіх блоків за період (крім останнього) 📊.

У останньому блоці періоду він штучно призначав максимально допустиму тимчасову метку 🕰️

Після завершення періоду коригувалася складність Через маніпуляції злоумышленника з метками, виміряний період тривав довше, ніж насправді

В результаті складність знижувалася 📉.

Атакувальник повторював аналогічну маніпуляцію в наступному періоді 🔄 Поскольку періоди не перекриваються, перший блок другого періоду атаки міг мати тимчасову метку, що відноситься до далекого минулого, в той час як попередній блок мав тимчасову метку в майбутньому 🕰️

Цей розрив збільшувався від періоду до періоду.

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

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

Атака була б неможливою, jika перший і останній блок двох послідовних періодів співпадали 📊.

Як виправити цю помилку? 🤔 Морель зазначив, що виправити проблему можна з допомогою софтфорка 🔄.

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

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


За матеріалами ForkLog

Полімаркет видаляють з Google News після короткого… Біткойн балансує на межі, але утримує рівень…