July 24, 2024

Блокчейн і 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 відправляли список всіх відомих серверів під час підключення. Це дозволяло&#8230;надсилати запит про файл на всі сервери. Саме тому померла мережа 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 - його кінець, і ні у кого немає середини файлу, то весь фільм не завантажиться. Це сумно, але не кінець світу. Набагато гірше, коли в гаманці не вистачає якоїсь частини грошей.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</ P>