Введення в незмінність блокчейнов - ethereumclassic

Введення в незмінність блокчейнов - ethereumclassic

Для безпеки важлива незмінність даних, що зберігаються в блокчейнах. Що люди мають на увазі, коли говорять: «Блокчейни незмінні»? У цьому пості я намагаюся пояснити ключові поняття.

Це може бути корисно тим, хто не знайомий з блокчейнамі і біткойнов або тільки що потрапив сюди.

Що означає незмінність для блокчейна?

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

Незмінюваність відносна. Наприклад, якби я відправив електронного листа великій кількості друзів, ці дані залишалися б досить незмінними з моєї точки зору. Щоб змінити їх, мені довелося б переконати моїх друзів, щоб вони видалили лист (або переконати Gmail і людей, які працюють з усіма поштовими серверами моїх друзів щоб вони видалили лист). З моєї точки зору і з владою, які у мене є, цей лист є незмінним - я не можу видалити або змінити його без співпраці і ризику виявлення себе.

Тому незмінність відносна і пов'язана з тим, наскільки важко що-небудь змінити.

Приватні бази даних

У закритій базі даних користувач може мати доступ тільки на читання, він не зможе змінити вміст рядка в цій базі даних. Проте, хтось з більш високим рівнем доступу, наприклад системний адміністратор, може змінювати дані. Так як ми можемо бути впевнені в тому, що системний адміністратор не змінить дані в своїх інтересах? В існуючих системах та організаціях ми намагаємося створити поділ відповідальності, щоб ні одна людина не могла зробити непомітно нічого поганого.

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

Перейдемо до блокчейнам.

По суті, блокчейни є бази даних з вбудованими попередньо узгодженими технічними критеріями і бізнес-логікою, сінхронізуємий за допомогою p2p механізмів і попередньо узгодженими правилами про те, які нові дані можуть додаватися. Що стосується незмінності, є дві ключові сутності, які допомагають легко виявити підробку: хеши і блоки.

Хеш-функція - це тип виконуваної функції, яка перетворює дані в їх відбиток (фінгерпрінт, fingerprint), званий хешом. Це схоже на формулу або алгоритм, який приймає вхідні дані (будь-які дані, будь то весь тлумачний словник Даля або просто число «1»), і перетворює їх у вихідні фіксованої довжини, які представляють собою відбиток вихідних даних. Існує безліч типів хеш-функцій, а загальноприйнято надійний - SHA-256 (що означає алгоритм Secure Hash Algorithm - 256 біт)

Якщо прогнати «Hello from Bits on Blocks!» Через цю математичну функцію, то вийде відбиток 389f9ef3822e5c88f4b140db82c459064711a52182a3e438b4ebc7ecda62b9bb. Відбиток (389f ... b9bb) називається хешем SHA-256 вихідної фрази.

Два важливих властивості хорошою хеш-функції:

1. Складно порахувати вихідні дані за наявним хешу;

2.Якщо вхідні дані змінюються хоч найменшою мірою, хеш змінюється непередбачуваним чином.

Хеши - основа безпеки і незмінності блокчейнов. З ними можна пограти тут.

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

Створення книги транзакцій з блоками, що відносяться до попередніх блокам, набагато краще, ніж нумерація сторінок в ній. У паперовому гросбухах з пронумерованими сторінками 1, 2, 3 і т. Д. Було б легко вирвати сторінку 40, замінити її іншою сторінкою 40 з трохи іншими транзакціями і це було-б складно помітити. Цілісність зберігається, а сторінки 39, 40, 41 залишаються сторінками 39, 40, 41 - без змін. Крім того, в номері сторінки «40» немає нічого, що будь-яким чином відображало б якась інформація міститься на цій сторінці, а нумерація сторінок складається виключно з їх номерів.

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

  • Блок з хешем 66a045b45 (будується на блоці з хешем a2c064616), за яким слідує
  • Блок з хешем 8939a3c35 (будується на блоці з хешем 66a045b45), за яким слідує
  • Блок з хешем a41f02e92 (будується на блоці з хешем 8939a3c35)

Введення в незмінність блокчейнов - ethereumclassic

Ключові моменти

  1. Хеш кожного блоку визначається вмістом блоку;
  2. Кожен блок посилається на хеш попереднього блоку, а не на номер по порядку;
  3. Дані в блокчейне внутрішньо несуперечливі, тобто можна виконати перевірку, і якщо дані і хеш-кодування не збігаються, значить точно було якесь втручання.

Ізольовані дані блокчейна

Давайте спочатку подивимося, що станеться, якщо взяти блокчейн біткойнов і скопіювати його на USB-накопичувач (на момент написання статті блокчейн займає близько 55 ГБ, так що це можливо). Що ви могли б зробити з даними на носії, перш ніж передати їх кому-небудь, наприклад регулятору? Можете-ви змінити дані?

Блокчейн біткойнов налічує майже 400 000 блоків. Припустимо, ви спробували б видалити транзакцію з блоку 200 000, приблизно в середині блокчейна, в спробі довести, що якоїсь конкретної платіж ніколи не відбувався. Що сталося б?

1. Помилка розрахунку хеша блоку

Перше, що може зробити регулятор при прийомі у вас USB-накопичувача, - це перерахувати всі хеші блоків на основі даних блоку і перевірити, що надані хеші блоків є дійсними і знаходяться у відповідності з вмістом кожного з блоків. Якщо є розбіжність, то це означає, що транзакції в блоці не відповідають хешу блоку, а блок був змінений. Тому, щоб «обдурити» регулятора, вам потрібно буде перерахувати хеш блоку таким чином, щоб він відповідав зміненим вмісту.

2. Відмова ланцюга

Однак, це зламає ланцюг. Нагадаю, кожен блок містить хеш попереднього блоку. Якщо хеш хеша блоку 200 000 зміниться, то 200 001 буде посилатися на неіснуючий більше хеш блоку. Таким чином, ланцюжок блокчейна виявиться пошкодженою, що буде очевидною помилкою. Щоб усунути її, вам доведеться перебудувати і перерахувати хеші для кожного блоку після зміненого, послідовно замінивши вміст покажчиків кожного попереднього-блоку-хеша.

Тим не менш, є обмежувачі, які роблять дуже складним або навіть неможливим такий перерахунок блокчейна. Ці обмежувачі розрізняються залежно від механізму додавання блоків і правил, прийнятих для різних блокчейнов. Існують дві основні схеми: цільові хеші для публічних PoW-блокчейнов; і специфічні підписи для (деяких) закритих блокчейнов.

3. Ланцюги складно перерахувати

Для закритих блокчейнов, таких як Multichain, механізм додавання блоків зазвичай трохи інший, і замість того, щоб покладатися на дороге доказ виконання роботи, правила можуть бути встановлені таким чином, щоб ті, хто додають блоки, займалися цим в порядку випадкової черзі, і кожен блок подпісиается цифровим підписом того, хто його додає. Тоді, блокчейн дійсний і може бути прийнятий тільки в тому випадку, якщо блоки були підписані цілком певними учасниками. Це означає, що для того, щоб перерахувати ланцюжок, вам доведеться роздобути секретні ключі тих, хто додає блоки. Питання крадіжки цих ключів - челендж зовсім іншого характеру, ніж перерахунок ланцюжка, що грунтується на PoW.

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

Блокчейни з безліччю копій

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

Все, що регулятору знадобиться для перевірки, - це зіставити хеш останнього на поточний момент блоку з хешем цього Ює блоку по одній копії блокчейна. Якщо хеш останнього блоку на USB-накопичувачі відрізняється від хеша копії блокчейн будь-якого іншого учасника мережі (звичайно, за умови відсутності змови), то регулятор відразу ж помітить, що відбувається щось не те, а дані на USB-накопичувачі відрізняються від даних живого блокчейна. Регулятору навіть не потрібно дивитися на дані в живому блокчейне. Йому просто потрібно побачити хеш останнього блоку.

Іншими словами, вкрай складно створити фальшивий блокчейн.

Зміна блокчейна на льоту

А як щодо того, щоб спробувати змінити існуючі дані в блокчейне, учасником якого ви є? Як би виправити блок, вже прийнятий іншими в мережі? Це знову-таки складно, через правила «найдовшою ланцюга», яке є основою консенсусу для більшості блокчейнов. Правило «найдовшою ланцюга» говорить, що в якості учасника блокчейна, якщо ви побачите кілька конкуруючих дійсних ланцюжків, то ви визнаєте ту, в якій налічується більше блоків.

Тому, якщо ви оттрансліруете в мережу виправлений блок 200 000, то ви фактично створите «вилку» (форк) ланцюжка, яка набагато коротше фактичної ланцюга (довжина (точніше, висота) якої становить, скажімо, 400 000 блоків). Таким чином ви отримаєте два конкуруючих блочейна, один з яких складається з 200 000 блоків і містить виправлений блок, а інший - 400 000 блоків. Існуючі повні вузли візьмуть ваш блок (якщо він дійсний), але потім відразу його проігнорують, тому що вони вже знають про сущестованія більш довгого ланцюжка.

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

висновок

Надзвичайно складно змінити дані в «автономному» блокчейне і ще складніше в живому.

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