4 грудня 2020 р.

Блокчейн і P2P обмін: повторення помилок масштабованості

У 2001 році, коли був винайдений BitTorrent, інша p2p-мережу, яка вже була досить відома і працювала на тих же самих принципах, почала здавати свої позиції. Вона стала жертвою власного успіху: у неї було майже 150 000 користувачів, і підтримувані спільнотою сервери каталогів не справлялися з навантаженням. Через три години після підключення новий «сервер» досягав лімітів пропускної здатності і відключався.

</ P>

Як криптовалюта (не) може початися на помилках інших

Як це пов'язано з криптовалюта? З подібними проблемами можна зіткнутися при спробі повністю синхронізувати кріптокошелек, наприклад, повний клієнт Ethereum. У «розподіленої технології» є проблеми з масштабністю. Для тих, хто починав свою «онлайн-кар'єру» з несвідомого документування занепаду p2p-мережі, про яку говорилося вище, ця ситуація на подив знайома.

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

Історія проблем розподіленої масштабованості

Можна провести безліч паралелей кріптосфери зобміном файлами p2p. Багато з них чудово описані в серії з чотирьох статей «Bittorrent Lessons for Crypto» Саймона Морріса. Я погоджуся з більшою частиною його тез, крім одного: BitTorrent був НЕ першою системою, яка забезпечувала простий інадійний обмін файлами по повільним і ненадійним каналам. Навіть якщо не брати до уваги Z-Modem 1986 року, який вже мав багато функцій для стійкості, BT був лише спрощеної версією вже існуючої технології: системи, яка дозволяла багатьом людям завантажувати один файл і ділитися його фрагментами один з одним, щоб збільшити швидкість завантаження і, що найважливіше, зменшити навантаження на того, хто завантажив файл. Ця система також дозволяла розміщувати гіперпосилання на загальні файли на звичайних сайтах. Існувала принаймні одна подібна система - eDonkey 2000 або eDonkey, або ed2k. Принципи роботи BitTorrent і eDonkey настільки схожі, що BitTorrent важко не назвати клоном останнього.

Основна різниця між BT і ed2k полягає втому, що в ed2k отримувати доступ до файлів можна було без стороннього веб-сайту. Не потрібно було заходити на Pirate Bay. Можна було просто зробити пошук по підключеному сервера каталогів eDonkey і отримати доступ до всіх файлів, якими діляться інші учасники. Це можна було зробити за допомогою старої доброї пошукового рядка. Те, що відбувалося за межами цієї пошукового рядка, було і щастям, і прокляттям мережі.

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

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

Ні трекер, ні учасники, які не можуть бути знайдені без торрент-файлу, який повинен бути кимось розміщений на веб-сайті. Це означає, що якщо ви хочете опублікувати файл, то вам потрібно:

  • запустити трекер для цього файлу
  • створити торрент-файл із зазначенням шляху до трекера
  • завантажити торрент-файл на веб-сайт
  • поширити посилання на торрент-файл

Тут виникає додатковий рівень складності, додатковий посередник. Звичайно, сайти, на яких публікуються такі посилання, наприклад, Pirate Bay, дуже часто порушують закон.

Для того щоб опублікувати файл в eDonkey, потрібно було:

  • запустити клієнт eDonkey
  • помістити файл в потрібну папку на комп'ютері

І все! Будь-хто міг підключитися до одного і того ж «серверу eDonkey», просто набравши частину назви файлу в пошуковому рядку. Натискаємо кнопку, і готово. Всі, хто завантажували один і той же файл, автоматично ділилися його фрагментами з іншими, як і в BitTorrent. Таким чином, сервер ed2k грав роль і веб-сайту, і трекера.

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

Крім того, для використання ed2k можна булопублікувати гіперпосилання на веб-сайтах. Якщо користувачам зручніше було отримувати посилання через перевірений веб-сайт, то вони могли використовувати і такий варіант.

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

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

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

З іншого боку, сервери eDonkey відправляли список всіх відомих їм серверів під час підключення. Це дозволяло ... відправляти запит про фото на все сервера. Саме тому померла мережа eDonkey.

В Інтернеті могло існувати необмежена кількість серверів eDonkey. кожен клієнт міг запитати у вашого сервера наявність файлу. Додавання нового сервера не зменшував навантаження на інші сервери, а тільки збільшувало загальний пошукової трафік eDonkey в Інтернеті. Так як про сервер eDonkey дізнавалося все більше клієнтів, то його інтернет-з'єднання, а найчастіше це було домашнє DSL-підключення, ставало занадто завантаженим. Єдиним способом продовжити роботу було отримати інший IP-адресу від провайдера.

Додавання нового клієнта також впливало на кожен сервер, який цей клієнт міг знайти. Але про те, як сталося це відкриття, я розповім іншим разом. Виявилося, що максимальна кількість клієнтів у всій мережі, Яке можуть витримати сервера, - близько 150 000. Це ніщо в порівнянні з сучасними стандартами, але потрібно пам'ятати, що пропускної канал DSL-з'єднання становив тоді 256 Кбіт / с.

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

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

Проблема масштабованості криптовалюта

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

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

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

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

рішення файлообмінника

Якщо ви завзятий технар, то подумаєте: «Чому ж вони просто не використали розподілені хеш-таблиці?»

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

DHT (Distributed Hash Tables - «розподілені хеш-таблиці») розподіляють хеш-таблиці, по суті звичайні бази даних, по мережі комп'ютерів, тому кожен з них несе відповідальність за частину даних. Забігаючи вперед, скажу, що таким чином можна зберігати набагато більше даних, ніж поміщається в пам'ять будь-якого з беруть участь комп'ютерів. Якщо все зробити правильно, то кожен учасник буде отримувати запити тільки «своєї» частини хеш-таблиці, що розподіляє навантаження між безліччю вузлів. Додавання вузлів в DHT зменшує навантаження на кожен вузол, а не збільшує її. Саме тому сьогодні варіанти DHT використовуються практично скрізь, починаючи з Google.

Насправді DHT - це рішення і для ed2k(А точніше для протоколу «Overnet»), і для проблеми сегрегації трекера BitTorrent. У Overnet, як і в DHT BitTorrent, кожен клієнт стає трекером для певної частини мережі, надаючи набагато більше ресурсів для пошуку. У Overnet усувається необхідність в цілій мережі серверів eDonkey.

Чи може криптовалюта повчитися на помилках інших?

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

Коротко кажучи, немає (більш докладну відповідь представлений нижче). Довший відповідь: можливо, але все початкові обіцянки блокчейна повинні бути виконані.

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

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

Звичайно, можна багаторазово копіювати частиниреєстру, щоб забезпечити присутність достатньої кількості клієнтів ... Але досить - це скільки? Чи добре це, коли всі ваші гроші можуть «піти в офлайн» з шансом 1 до тисячі? 1 до мільйона? Поки всі вузли належать звичайним людям, ніколи не знаєш, скільки учасників можуть піти в офлайн в будь-який момент часу. Що якщо станеться масове відключення електрики в Судані, а всі копії вашого гаманця будуть зберігатися саме там, навіть якщо ви перебуваєте в США?

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

Також існує невелика проблема безпекимережі - її забезпечують Майнер. Звичайно, в цьому випадку блок не може бути підписаний кожним Майнер. В іншому випадку в мережі без серверів роль серверів доведеться перекласти на Майнер: кожному Майнер доведеться обробляти всі транзакції в мережі, сильно навантажуючи своє з'єднання.

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

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

Тут виділяють три аргументи:

  1. Логічна недбалість (ніхто не зможе захопити всі вузли, на яких зберігається певний фрагмент).
  2. Статистика (ймовірність того, що всі вузли з певним фрагментом опиняться в одній мережі, дуже мала).
  3. Шифрування (криптографічний захист запобігає виникненню цієї проблеми).

Проблема полягає в тому, що люди схильні сильно недооцінювати розмір і силу мереж зловмисників в світі криптовалюта. Наприклад, на початку 2019 року сталась атака 51% на Ethereum Classic, яка могла коштувати зловмисникам $ 55 млн (або по крайнейміру половину цієї суми, враховуючи спад цін на криптовалюта). Зловмисники пізніше повернули вкрадені токенов на $ 100 тис. Виявилося, це був просто тест або попередження. Схоже, що зловмисникові ця атака коштувала не більше $ 1 млн, тому що імовірно на його гаманці була приблизно ця сума.

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

У мережі eDonkey ім'я файлу не було ключем до нього. Будь-який учасник міг змінити ім'я файлу. Шлях до файлів отримували за допомогою криптографічних хеш-кодувань. Припустимо, ви перейшли за перевіреною посиланню, наприклад, щоб завантажити новий блокбастер. Ви отримаєте хеш і розмір файлу.

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

Після довгих пояснень з, можливо, ще вашоїдругою половинкою, ви почнете розбиратися, що ж сталося. А сталося ось що. Для адресації файлу використовувався алгоритм хешування MD4. Ви не можете дешифрувати хеш в дані через втрату інформації, однак ви можете, Доклавши певних зусиль, знайти дані,які мають такий же хеш і розмір. Зламати хеш методом повного перебору важко, потрібно багато обчислювальної потужності і часу. Але для злому хешу MD4 не обов'язково робити повний перебір: кілька років тому в алгоритмі була знайдена уразливість, яка дозволяла відтворювати дані певного хешу.

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

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

*: Я був одним з тих людей, які надавали послуги ed2k спільноті, які просто не потрібні були BitTorrent: списки серверів. Торрент-файли були потворним проміжним кроком і включали шлях до пошуку трекерів. Посилання ed2k: // були не такими, а в той час майже у всіх були динамічні IP-адреси, а також сильно не вистачало підтримки DNS в протоколі edonkey, через що в мережу eDonkey не можна було навіть увійти без актуального списку серверів.

</ P>