Автор: Сатоші Накамото; Переклад на китайську: Лі Сяолай
Резюме: Суто однорангова версія системи електронної готівки, яка дозволить надсилати онлайн-платежі безпосередньо від однієї сторони до іншої, не проходячи через фінансову установу. Незважаючи на те, що цифрові підписи пропонують деякі рішення, основні переваги електронних платежів компенсуються, коли довірена третя сторона все ще потрібна для запобігання подвійним витратам. Ми пропонуємо рішення, яке використовує однорангову мережу для вирішення проблеми подвійних витрат. Однорангова мережа позначає час кожної транзакції, вводячи хешовані дані транзакції у великий ланцюжок доказів роботи на основі хешування, який неможливо змінити, якщо не буде повністю перероблено. Найдовший ланцюжок використовується для доведення подій, свідками яких стали, та їх порядку, а з іншого боку, для доказу того, що він походить від найбільшого пулу хеш-потужностей процесора. До тих пір, поки переважна більшість обчислювальних потужностей центрального процесора контролюється доброякісними вузлами, тобто вони не співпрацюють з тими, хто намагається атакувати мережу, то доброякісні вузли будуть генерувати найдовший ланцюжок і випереджати зловмисника. Сама мережа потребує мінімальної структури. Інформація буде поширюватися на основі найкращих зусиль, а вузли будуть вільно приходити і йти; Однак при вступі завжди необхідно приймати найдовший ланцюжок proof-of-work як доказ всього, що сталося в той період, в якому вони не були задіяні.
1. Введення
Інтернет-торгівля майже повністю покладається на фінансові установи як на довірені треті сторони для обробки електронних платежів. Незважаючи на те, що система досить хороша для більшості транзакцій, їй все ще заважають недоліки, властиві моделям, заснованим на довірі. Повністю безповоротна угода практично неможлива, так як фінансові установи не можуть уникнути арбітражних спорів. Вартість арбітражу збільшує транзакційні витрати, що, в свою чергу, обмежує розмір мінімально можливої транзакції і просто перешкоджає багатьом транзакціям мікроплатежів. Крім того, є ще більша вартість: система не може здійснювати безповоротні платежі за послуги, які не є оборотними. Можливість розвороту створила всеосяжну потребу в довірі. Продавці повинні бути обережними зі своїми клієнтами, наполягаючи на тому, щоб вони надали більше інформації, яка не була б потрібна, якби її не було (якщо їй довіряють). Певний відсоток шахрайства вважається неминучим. Цих витрат і невизначеності платежів можна уникнути, якщо платежі здійснюються безпосередньо між людьми з використанням фізичної валюти; Однак не існує механізму, за допомогою якого обидві сторони можуть здійснювати платежі через канали зв'язку без довіри до однієї з них.
Що нам дійсно потрібно, так це електронна платіжна система, заснована на криптографічних доказах, а не на довірі, що дозволяє будь-яким двом сторонам здійснювати транзакції безпосередньо, не довіряючи третій стороні. Незворотна транзакція гарантії хешрейту може допомогти продавцям уникнути шахрайства, а механізм щоденної гарантії для захисту покупців легко реалізувати. У цій статті ми запропонуємо рішення для подвійних витрат, використовуючи одноранговий розподілений сервер часових позначок для генерації доказів на основі хешрейту, які записують кожну транзакцію в хронологічному порядку. Система безпечна, якщо чесні ноди зазвичай мають більшу потужність процесора, ніж зловмисники, які співпрацюють один з одним.
2. Угоди
Ми визначаємо електронну монету як ланцюжок цифрових підписів. Коли власник передає монету іншій особі, він або вона робить це, додаючи наступний цифровий підпис до кінця ланцюжка цифрового підпису: хеш попередньої транзакції та відкритий ключ нового власника. Одержувач платежу може підтвердити право власності на ланцюжок цифрових підписів, підтвердивши підпис.
Проблема цього шляху полягає в тому, що одержувач не може перевірити, чи ніхто не здійснив подвійну оплату серед попередніх власників. Поширеним рішенням є залучення довіреного централізованого органу, або «монетного двору», і перевірка його на предмет подвійних витрат на кожну транзакцію. Після кожної транзакції монету потрібно повертати на монетний двір, який випускає нову монету. Крім того, лише монети, випущені безпосередньо монетним двором, заслуговують на довіру і не були оплачені двічі. Проблема цього рішення полягає в тому, що доля всієї грошової системи пов'язана з компанією, яка керує монетним двором (наприклад, банком), і кожна транзакція повинна проходити через нього.
Нам потрібен був спосіб, щоб одержувач міг підтвердити, що попередній власник не підписував жодних попередніх транзакцій. Для наших цілей враховуються лише найраніші транзакції, тому ми не переймаємося подальшими спробами подвійних витрат. Єдиний спосіб підтвердити, що транзакції не існує, — це бути проінформованим про всі транзакції. У моделі монетного двору монетний двір знає про всі транзакції та може підтвердити порядок цих транзакцій. Для того, щоб мати можливість зробити це без участі «довіреної сторони», запис транзакції повинен бути публічно оголошений1, і нам потрібна система, яка дозволить учасникам домовитися про ту саму унікальну історію транзакцій, яку вони отримали. Одержувач платежу повинен довести, що на момент кожної транзакції більшість вузлів можуть погодитися з тим, що вона була отримана першою.
3. Сервер часових позначок
Це рішення починається з сервера часових позначок. Ось як працює сервер часових позначок: він позначає хеш набору записів, а потім транслює хеш, як це робить газета, або як повідомлення в Usenet.2 3 4 5. Очевидно, що мітка часу доводить, що дані існували до цього моменту часу, інакше хеш не був би згенерований. Кожна часова позначка містить попередню часову позначку у своєму хеші, таким чином утворюючи ланцюжок; Кожна нова часова позначка додається після попередньої.
Для того, щоб реалізувати розподілений сервер часових позначок на основі однорангового зв'язку, нам потрібно використовувати систему підтвердження роботи proof-of-work, як-от Hash Cash 6 Адама Берка, а не щось на кшталт публікації в газеті чи групі новин. Так званий доказ роботи полягає в знаходженні вартості; Щоб це значення було істинним: після вилучення хеш-значення для нього — наприклад, за допомогою SHA-256 для обчислення хеш-значення — хеш-значення має починатися з певної кількості нулів. Кожна додаткова вимога 0 збільшує обсяг роботи в геометричній прогресії, а перевірка цього обсягу роботи вимагає лише обчислення хешу.
У нашій мережі часових міток ми реалізуємо proof-of-work наступним чином: ми продовжуємо додавати nonce до блоку, доки не буде знайдено значення, яке задовольняє умовам; Умовою цього є те, що хеш блоку починається із зазначеної кількості 0. Як тільки результат обчислювальної потужності процесора задовольняє доказ роботи, блок більше не можна змінити, якщо не буде повторно виконана вся попередня робота. Оскільки нові блоки додаються постійно, зміна поточного блоку означає доопрацювання всіх наступних блоків.
Proof of work також вирішує проблему того, як вирішити, хто може приймати рішення від імені більшості. Якщо так звана «більшість» ґрунтується на підході «одна IP-адреса, один голос», то будь-хто, хто може обробляти багато IP-адрес, може вважатися «більшістю». Доказ роботи – це, по суті, «один процесор, один голос». Так зване «рішення більшості» представлено найдовшим ланцюжком, тому що саме в цей ланцюжок було вкладено найбільше праці. Якщо більша частина обчислювальної потужності процесора контролюється чесними вузлами, то чесний ланцюг буде рости найшвидше, і він буде набагато швидше, ніж інші конкуруючі ланцюжки. Для того, щоб змінити блок, який вже був створений, зловмиснику доведеться заново завершити proof-of-work для цього блоку та всіх наступних блоків, а потім наздогнати та перевершити роботу чесного вузла. У цій статті показано, чому ймовірність того, що затриманий зловмисник наздожене його, зменшується експоненціально зі збільшенням кількості блоків.
Для того, щоб впоратися зі зростаючою кількістю апаратних обчислювальних потужностей і кількістю внесків вузлів, які можуть змінюватися з часом, складність proof-of-work визначається ковзним середнім числа блоків, вироблених в середньому за годину. Якщо блок генерується занадто швидко, то складність зросте.
5. Мережа
Кроки для запуску мережі такі:
Всі нові транзакції транслюються на всі вузли;
Кожен вузол упаковує нові транзакції в блок;
Кожен вузол починає знаходити складний доказ роботи для цього блоку;
Коли блок знаходить доказ роботи, він транслює блок на всі вузли;
Багато інших вузлів приймуть блок тоді і тільки тоді, коли виконуються наступні умови: всі транзакції дійсні і не були оплачені подвійно;
Багато вузлів вказують мережі, що вони приймають блок, розглядаючи хеш прийнятого блоку як хеш перед новим блоком при створенні наступного блоку.
Вузол завжди вважає, що найдовший ланцюжок є правильним, і постійно додає до нього нові дані. Якщо два вузли одночасно транслюють в мережу дві різні версії «Наступного блоку», то одні вузли отримають одну з них першою, а інші – першою. У цьому випадку ноди продовжать роботу над блоком, який вони отримали першими, але також збережуть іншу гілку на випадок, якщо вона стане найдовшим ланцюжком. Коли знайдено наступний доказ роботи і одна з гілок стає довшою, ця тимчасова розбіжність усувається, і вузли, що працюють на іншій гілці, перемикаються на довший ланцюг.
Нові транзакції не обов'язково повинні транслюватися на всі вузли. Поки буде досягнуто достатньої кількості вузлів, пройде зовсім небагато часу, перш ніж ці транзакції будуть упаковані в блок. Блокування трансляцій також дозволяє відкидати деякі повідомлення. Якщо вузол не отримує блок, вузол зрозуміє, що пропустив попередній блок, коли отримає наступний блок, і зробить запит на заміну відсутнього блоку.
6. Стимули
За домовленістю, перша транзакція кожного блоку є спеціальною транзакцією, яка генерує нову монету і належить генератору блоку. Це винагороджує вузли за підтримку мережі та надання способу випуску монет в обіг — у системі, де все одно немає централізованого органу для випуску цих монет. Таким чином, неухильне введення в обіг певної кількості нових монет схоже на те, що золотошукачі постійно використовують свої ресурси для додавання золота в обіг. У нашій системі ресурси, які споживаються, - це час, протягом якого працює процесор, і потужність, яку він використовує.
Винагорода також може надходити від комісій за транзакції. Якщо вихідна вартість транзакції менша за її вхідну вартість, то різниця є комісією за транзакцію; Комісія за транзакцію використовується для винагороди вузлів за упаковку транзакції в цей блок. Після того, як встановлена кількість монет з'явиться в обігу, винагороди будуть повністю покриті комісією за транзакції, і не буде абсолютно ніякої інфляції.
Механізм винагороди також може спонукати вузли бути чесними. Якщо жадібний зловмисник може заволодіти більшою потужністю процесора, ніж всі чесні вузли, він повинен зробити вибір: чи повинен він використовувати цю обчислювальну потужність, щоб обдурити інших, вкравши витрачені гроші? Або використовувати цю обчислювальну потужність для генерації нових монет? Він повинен бути в змозі знайти більш економічно вигідну гру за правилами, які тепер дозволяють йому заробляти більше монет, ніж всі інші разом узяті, що явно економічно вигідніше, ніж таємне руйнування системи і зведення свого багатства в ніщо.
7. Звільнення дискового простору
Якщо остання транзакція монети відбулася до достатньої кількості блоків, історію транзакцій витрат монети до цієї транзакції можна відкинути, щоб заощадити місце на диску. Для того, щоб зробити це без розриву хешу блоку, хеш запису транзакції буде включений в дерево Меркла, і тільки корінь дерева буде включений в хеш блоку. Обрізаючи гілки, старі блоки можна стиснути. Внутрішній хеш зберігати не потрібно.
Заголовок блоку без будь-якої історії транзакцій становить близько 80 байт. Припускаючи, що блок створюється кожні десять хвилин, 80 байтів, помножених на 6 помножити на 24 на 365, дорівнює 4,2 мільйонам на рік. Станом на 2008 рік більшість комп'ютерів, що продаються, поставлялися з 2 ГБ оперативної пам'яті, і закон Мура передбачає, що 1,2 ГБ буде додаватися на рік, навіть якщо блоковий заголовок повинен зберігатися в пам'яті.
8. Спрощене підтвердження платежу
Є можливість підтверджувати платежі навіть без необхідності запускати повноцінний вузол мережі. Все, що потрібно користувачеві, це копія заголовка блоку найдовшого ланцюга з доказом роботи — він може перевірити онлайн-вузол, щоб підтвердити, що у нього найдовший ланцюжок — а потім отримати вузол гілки дерева Меркла, який, у свою чергу, підключається до транзакції, коли блок отримав позначку часу. Користувач не може перевірити транзакцію самостійно, але, підключившись до певного місця в ланцюжку, він може побачити, що вузол мережі прийняв транзакцію, а доданий після цього блок додатково підтверджує, що мережа прийняла транзакцію.
Поки чесні ноди все ще контролюють мережу, перевірка є надійною. Однак, коли мережа контролюється зловмисником, перевірка менш надійна. Хоча вузли мережі можуть самі перевіряти транзакції, поки зловмисник зберігає контроль над мережею, спрощений метод перевірки може бути обдурений підробленими записами транзакцій зловмисника. Одним із заходів протидії є те, що клієнтське програмне забезпечення приймає попередження від вузлів мережі. Коли вузол мережі знаходить недійсний блок, він надсилає попередження, і в програмному забезпеченні користувача з'являється сповіщення, яке інформує користувача про завантаження повного блоку та попереджає користувача про необхідність підтвердити узгодженість транзакції. Продавці з високочастотними платежами, як і раніше, повинні захотіти запустити власну повну ноду, щоб забезпечити більш незалежну безпеку та швидше підтвердження транзакцій.
9. Комбінування і ділення вартості
Незважаючи на те, що можна обробляти монети одну за одною, встановлювати окремий рекорд для кожної копійки незграбно. Щоб уможливити поділ і консолідацію значень, транзакції містять кілька входів і виходів. Як правило, або один вхід з відносно великої попередньої транзакції, або комбінація багатьох входів з меншої суми; При цьому є не більше двох виходів: один для оплати (одержувачу платежу) і один для здачі (відправнику) при необхідності.
Важливо зазначити, що "фан-аут" тут не є проблемою - "фан-аут" означає, що одна транзакція залежить від кількох транзакцій, і ці транзакції залежать від більшої кількості транзакцій. Ніколи не потрібно витягувати повну, незалежну історичну копію будь-якої угоди.
10. Приватність
Традиційні банківські моделі досягають певного рівня захисту конфіденційності шляхом обмеження доступу до інформації про трейдерів і довірених третіх осіб. Цей підхід був відкинутий через необхідність оприлюднення всіх записів транзакцій. Однак збереження конфіденційності може бути досягнуто шляхом перекриття потоку інформації в іншому місці – анонімності відкритого ключа. Громадськість бачить, що такий-то перерахував таку-то певну суму грошей такому-то, однак немає жодної інформації, яка б вказувала на конкретну особу. Цей рівень оприлюднення інформації трохи схожий на торгівлю на фондовому ринку, тільки оголошується час і сума окремої угоди, проте ніхто не знає, хто є двома сторонами угоди.
Є ще один рівень брандмауера. Трейдери повинні ввімкнути нову пару публічних і закритих ключів для кожної транзакції, щоб ніхто інший не міг відстежити ці транзакції до того ж власника. Деякі транзакції з декількома входами все ще неминуче мають зворотну силу, оскільки ці входи неминуче будуть ідентифіковані як такі, що надходять від одного і того ж власника. Небезпека полягає в тому, що якщо власник відкритого ключа буде розкрито, всі інші транзакції, пов'язані з ним, будуть розкриті.
11. Розрахунки
Скажімо, сценарій, коли зловмисник намагається згенерувати альтернативний ланцюжок, який є швидшим за чесний. Навіть якщо він досягне успіху, він не зможе внести будь-які зміни в систему, тобто він не зможе створити цінність з повітря, і він не зможе отримати гроші, які йому ніколи не належать. Вузли мережі не розглядають недійсну транзакцію як оплату, а чесні ноди ніколи не приймуть блок, що містить такий платіж. У кращому випадку зловмисник може модифікувати власні транзакції і спробувати повернути вже витрачені гроші.
Суперництво між чесним ланцюгом і нападником можна описати біноміальною випадковою прогулянкою. Подія успіху - це коли новий блок щойно був доданий до чесного ланцюга, що збільшує його перевагу на 1, тоді як подія невдачі - це коли ланцюжок зловмисника щойно був доданий новий блок, що зменшує перевагу чесного ланцюга на 1.
Імовірність того, що зловмисник зможе наздогнати ззаду, схожа на проблему банкрутства гемблера. Припустимо, гравець з необмеженою кількістю фішок починає з дефіциту і дозволяє йому робити ставки необмежену кількість разів, з метою заповнити дефіцит, який у нього вже є. Розрахувати ймовірність того, що він в кінцевому підсумку зможе заповнити недостачу, тобто ймовірність того, що зловмисник зможе наздогнати чесний ланцюжок, можна наступним чином:
Так як ми припустили, що p>,q Так як зловмиснику потрібно наздоганяти все більше і більше блоків, то ймовірність успіху зменшується в геометричній прогресії. Якщо нападнику не пощастить зробити стрибок вперед на самому початку, його вінрейт буде знищений, а він ще більше відстане.
Тепер подумайте, як довго одержувачу нової транзакції доведеться чекати, щоб бути повністю впевненим, що відправник не зможе змінити транзакцію. Ми припускаємо, що відправник є зловмисником, який намагається переконати одержувача платежу в тому, що він сплатив платіж протягом певного періоду часу, а потім перевести гроші назад собі. Коли це станеться, одержувач, звичайно, отримає попередження, але відправник сподівається, що дерев'яний човен вже в човні.
Одержувач створює нову пару відкритих і закритих ключів, а потім повідомляє про це відправнику незадовго до підписання. Це запобігає ситуації, коли відправник заздалегідь готує блок у ланцюжку з безперервними обчисленнями, і йому пощастило бути достатньо попереду, щоб виконати транзакцію до цього часу. Після того, як гроші відправлені, нечесний відправник починає таємно працювати над іншим парачейном, намагаючись додати до нього зворотну версію транзакції.
Одержувач платежу чекає, поки транзакція буде упакована в блок, і вже є z блоків, які були додані згодом. Він не знає точно, наскільки добре працюють зловмисники, але може припустити, що чесні блоки витрачають середню кількість часу в процесі генерації кожного блоку; Потенційний прогрес зловмисника відповідає розподілу Пуассона з очікуваним значенням:
Щоб обчислити ймовірність того, що зловмисник все ще може наздогнати, нам потрібно помножити щільність ймовірності розподілу Парзона на кількість блоків, які зловмиснику потрібно наздогнати, на ймовірність того, що він зможе наздогнати, якщо він знаходиться за цією кількістю блоків:
Ми пропонуємо електронну торгову систему, яка не повинна покладатися на довіру; Відправною точкою є проста рамка для монет, яка використовує цифрові підписи, і хоча вона забезпечує надійний контроль над правом власності, вона не може уникнути подвійних витрат. Щоб вирішити цю проблему, ми пропонуємо однорангову мережу, яка використовує механізм proof-of-work для запису публічної історії транзакцій, і поки чесний вузол може контролювати більшу частину обчислювальної потужності процесора, зловмисник не може успішно втручатися в систему лише з точки зору обчислювальної потужності. Надійність цієї мережі полягає в її неструктурованій простоті. Вузли можуть працювати одночасно в одну мить з невеликою співпрацею. Їх навіть не потрібно розпізнавати, тому що шлях повідомлення не залежить від конкретного пункту призначення; Повідомлення потрібно розповсюджувати лише на основі найкращих зусиль. Вузли приходять і йдуть вільно, і коли вони знову приєднуються, їм потрібно лише прийняти ланцюжок proof-of-work як доказ усього, що сталося, поки вони були в автономному режимі. Вони голосують за потужність свого процесора і вказують на те, що приймають дійсні транзакції, постійно додаючи нові дійсні блоки в ланцюжок і відхиляючи недійсні блоки. Будь-які необхідні правила та винагороди можуть бути застосовані за допомогою цього механізму консенсусу.
Список літератури
b-money Дай Вей (1998-11-01)
Розробка безпечного сервісу позначок часу з мінімальними вимогами до довіри Анрі Массіас, Ксав'є Серре-Авіла, Жан-Жак Квіскуатер 20-й симпозіум з теорії інформації в Бенілюксі (1999-05)
Як поставити часову позначку в цифровому документі Стюарт Хабер, В.Скотт Сторнетта Журнал криптології (1991) DOI: 10.1007/bf00196791
Підвищення ефективності та надійності цифрової позначки часу Дейв Байєр, Стюарт Хабер, В. Скотт Сторнетта Sequences II (1993) DOI: 10.1007/978-1-4613-9323-8_24
Безпечні імена бітових струн Стюарт Хабер, В. Скотт Сторнетта Матеріали 4-ї конференції ACM з комп'ютерної та комунікаційної безпеки - CCS '97(1997) DOI: 10.1145/266420.266430
Hashcash - Контрзахід «Відмова в обслуговуванні» Адама Бека (2002-08-01)
Протоколи для криптовалют з відкритим ключем Ralph C. Merkle 1980 IEEE Symposium on Security and Privacy (1980-04) DOI: 10.1109/sp.1980.10006
Вступ до теорії ймовірностей та її застосувань Вільям Феллер John Wiley & Sons (1957)
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Класичне перечитування до 15-ї річниці: повний текст китайської версії білої книги Bitcoin
Автор: Сатоші Накамото; Переклад на китайську: Лі Сяолай
Резюме: Суто однорангова версія системи електронної готівки, яка дозволить надсилати онлайн-платежі безпосередньо від однієї сторони до іншої, не проходячи через фінансову установу. Незважаючи на те, що цифрові підписи пропонують деякі рішення, основні переваги електронних платежів компенсуються, коли довірена третя сторона все ще потрібна для запобігання подвійним витратам. Ми пропонуємо рішення, яке використовує однорангову мережу для вирішення проблеми подвійних витрат. Однорангова мережа позначає час кожної транзакції, вводячи хешовані дані транзакції у великий ланцюжок доказів роботи на основі хешування, який неможливо змінити, якщо не буде повністю перероблено. Найдовший ланцюжок використовується для доведення подій, свідками яких стали, та їх порядку, а з іншого боку, для доказу того, що він походить від найбільшого пулу хеш-потужностей процесора. До тих пір, поки переважна більшість обчислювальних потужностей центрального процесора контролюється доброякісними вузлами, тобто вони не співпрацюють з тими, хто намагається атакувати мережу, то доброякісні вузли будуть генерувати найдовший ланцюжок і випереджати зловмисника. Сама мережа потребує мінімальної структури. Інформація буде поширюватися на основі найкращих зусиль, а вузли будуть вільно приходити і йти; Однак при вступі завжди необхідно приймати найдовший ланцюжок proof-of-work як доказ всього, що сталося в той період, в якому вони не були задіяні.
1. Введення
Інтернет-торгівля майже повністю покладається на фінансові установи як на довірені треті сторони для обробки електронних платежів. Незважаючи на те, що система досить хороша для більшості транзакцій, їй все ще заважають недоліки, властиві моделям, заснованим на довірі. Повністю безповоротна угода практично неможлива, так як фінансові установи не можуть уникнути арбітражних спорів. Вартість арбітражу збільшує транзакційні витрати, що, в свою чергу, обмежує розмір мінімально можливої транзакції і просто перешкоджає багатьом транзакціям мікроплатежів. Крім того, є ще більша вартість: система не може здійснювати безповоротні платежі за послуги, які не є оборотними. Можливість розвороту створила всеосяжну потребу в довірі. Продавці повинні бути обережними зі своїми клієнтами, наполягаючи на тому, щоб вони надали більше інформації, яка не була б потрібна, якби її не було (якщо їй довіряють). Певний відсоток шахрайства вважається неминучим. Цих витрат і невизначеності платежів можна уникнути, якщо платежі здійснюються безпосередньо між людьми з використанням фізичної валюти; Однак не існує механізму, за допомогою якого обидві сторони можуть здійснювати платежі через канали зв'язку без довіри до однієї з них.
Що нам дійсно потрібно, так це електронна платіжна система, заснована на криптографічних доказах, а не на довірі, що дозволяє будь-яким двом сторонам здійснювати транзакції безпосередньо, не довіряючи третій стороні. Незворотна транзакція гарантії хешрейту може допомогти продавцям уникнути шахрайства, а механізм щоденної гарантії для захисту покупців легко реалізувати. У цій статті ми запропонуємо рішення для подвійних витрат, використовуючи одноранговий розподілений сервер часових позначок для генерації доказів на основі хешрейту, які записують кожну транзакцію в хронологічному порядку. Система безпечна, якщо чесні ноди зазвичай мають більшу потужність процесора, ніж зловмисники, які співпрацюють один з одним.
2. Угоди
Ми визначаємо електронну монету як ланцюжок цифрових підписів. Коли власник передає монету іншій особі, він або вона робить це, додаючи наступний цифровий підпис до кінця ланцюжка цифрового підпису: хеш попередньої транзакції та відкритий ключ нового власника. Одержувач платежу може підтвердити право власності на ланцюжок цифрових підписів, підтвердивши підпис.
! [sQZAt4qlbgm150hgxHy4ui11TxFPpIbbi5Z7GUia.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-4085a6d381-dd1a6f-69ad2a.webp «7126684»)
Проблема цього шляху полягає в тому, що одержувач не може перевірити, чи ніхто не здійснив подвійну оплату серед попередніх власників. Поширеним рішенням є залучення довіреного централізованого органу, або «монетного двору», і перевірка його на предмет подвійних витрат на кожну транзакцію. Після кожної транзакції монету потрібно повертати на монетний двір, який випускає нову монету. Крім того, лише монети, випущені безпосередньо монетним двором, заслуговують на довіру і не були оплачені двічі. Проблема цього рішення полягає в тому, що доля всієї грошової системи пов'язана з компанією, яка керує монетним двором (наприклад, банком), і кожна транзакція повинна проходити через нього.
Нам потрібен був спосіб, щоб одержувач міг підтвердити, що попередній власник не підписував жодних попередніх транзакцій. Для наших цілей враховуються лише найраніші транзакції, тому ми не переймаємося подальшими спробами подвійних витрат. Єдиний спосіб підтвердити, що транзакції не існує, — це бути проінформованим про всі транзакції. У моделі монетного двору монетний двір знає про всі транзакції та може підтвердити порядок цих транзакцій. Для того, щоб мати можливість зробити це без участі «довіреної сторони», запис транзакції повинен бути публічно оголошений1, і нам потрібна система, яка дозволить учасникам домовитися про ту саму унікальну історію транзакцій, яку вони отримали. Одержувач платежу повинен довести, що на момент кожної транзакції більшість вузлів можуть погодитися з тим, що вона була отримана першою.
3. Сервер часових позначок
Це рішення починається з сервера часових позначок. Ось як працює сервер часових позначок: він позначає хеш набору записів, а потім транслює хеш, як це робить газета, або як повідомлення в Usenet.2 3 4 5. Очевидно, що мітка часу доводить, що дані існували до цього моменту часу, інакше хеш не був би згенерований. Кожна часова позначка містить попередню часову позначку у своєму хеші, таким чином утворюючи ланцюжок; Кожна нова часова позначка додається після попередньої.
! [IkJWI40CL5rPFbmKNx829DpApCPH8JY1zjTQ9neY.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-900ed08398-dd1a6f-69ad2a.webp «7126685»)
4. Підтвердження роботи
Для того, щоб реалізувати розподілений сервер часових позначок на основі однорангового зв'язку, нам потрібно використовувати систему підтвердження роботи proof-of-work, як-от Hash Cash 6 Адама Берка, а не щось на кшталт публікації в газеті чи групі новин. Так званий доказ роботи полягає в знаходженні вартості; Щоб це значення було істинним: після вилучення хеш-значення для нього — наприклад, за допомогою SHA-256 для обчислення хеш-значення — хеш-значення має починатися з певної кількості нулів. Кожна додаткова вимога 0 збільшує обсяг роботи в геометричній прогресії, а перевірка цього обсягу роботи вимагає лише обчислення хешу.
У нашій мережі часових міток ми реалізуємо proof-of-work наступним чином: ми продовжуємо додавати nonce до блоку, доки не буде знайдено значення, яке задовольняє умовам; Умовою цього є те, що хеш блоку починається із зазначеної кількості 0. Як тільки результат обчислювальної потужності процесора задовольняє доказ роботи, блок більше не можна змінити, якщо не буде повторно виконана вся попередня робота. Оскільки нові блоки додаються постійно, зміна поточного блоку означає доопрацювання всіх наступних блоків.
! [L5fHgxjJJ6fSYcFToKfNERzgNlhNgUwdgMiNG2N5.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-dc3d2c22cc-dd1a6f-69ad2a.webp «7126686»)
Proof of work також вирішує проблему того, як вирішити, хто може приймати рішення від імені більшості. Якщо так звана «більшість» ґрунтується на підході «одна IP-адреса, один голос», то будь-хто, хто може обробляти багато IP-адрес, може вважатися «більшістю». Доказ роботи – це, по суті, «один процесор, один голос». Так зване «рішення більшості» представлено найдовшим ланцюжком, тому що саме в цей ланцюжок було вкладено найбільше праці. Якщо більша частина обчислювальної потужності процесора контролюється чесними вузлами, то чесний ланцюг буде рости найшвидше, і він буде набагато швидше, ніж інші конкуруючі ланцюжки. Для того, щоб змінити блок, який вже був створений, зловмиснику доведеться заново завершити proof-of-work для цього блоку та всіх наступних блоків, а потім наздогнати та перевершити роботу чесного вузла. У цій статті показано, чому ймовірність того, що затриманий зловмисник наздожене його, зменшується експоненціально зі збільшенням кількості блоків.
Для того, щоб впоратися зі зростаючою кількістю апаратних обчислювальних потужностей і кількістю внесків вузлів, які можуть змінюватися з часом, складність proof-of-work визначається ковзним середнім числа блоків, вироблених в середньому за годину. Якщо блок генерується занадто швидко, то складність зросте.
5. Мережа
Кроки для запуску мережі такі:
Вузол завжди вважає, що найдовший ланцюжок є правильним, і постійно додає до нього нові дані. Якщо два вузли одночасно транслюють в мережу дві різні версії «Наступного блоку», то одні вузли отримають одну з них першою, а інші – першою. У цьому випадку ноди продовжать роботу над блоком, який вони отримали першими, але також збережуть іншу гілку на випадок, якщо вона стане найдовшим ланцюжком. Коли знайдено наступний доказ роботи і одна з гілок стає довшою, ця тимчасова розбіжність усувається, і вузли, що працюють на іншій гілці, перемикаються на довший ланцюг.
Нові транзакції не обов'язково повинні транслюватися на всі вузли. Поки буде досягнуто достатньої кількості вузлів, пройде зовсім небагато часу, перш ніж ці транзакції будуть упаковані в блок. Блокування трансляцій також дозволяє відкидати деякі повідомлення. Якщо вузол не отримує блок, вузол зрозуміє, що пропустив попередній блок, коли отримає наступний блок, і зробить запит на заміну відсутнього блоку.
6. Стимули
За домовленістю, перша транзакція кожного блоку є спеціальною транзакцією, яка генерує нову монету і належить генератору блоку. Це винагороджує вузли за підтримку мережі та надання способу випуску монет в обіг — у системі, де все одно немає централізованого органу для випуску цих монет. Таким чином, неухильне введення в обіг певної кількості нових монет схоже на те, що золотошукачі постійно використовують свої ресурси для додавання золота в обіг. У нашій системі ресурси, які споживаються, - це час, протягом якого працює процесор, і потужність, яку він використовує.
Винагорода також може надходити від комісій за транзакції. Якщо вихідна вартість транзакції менша за її вхідну вартість, то різниця є комісією за транзакцію; Комісія за транзакцію використовується для винагороди вузлів за упаковку транзакції в цей блок. Після того, як встановлена кількість монет з'явиться в обігу, винагороди будуть повністю покриті комісією за транзакції, і не буде абсолютно ніякої інфляції.
Механізм винагороди також може спонукати вузли бути чесними. Якщо жадібний зловмисник може заволодіти більшою потужністю процесора, ніж всі чесні вузли, він повинен зробити вибір: чи повинен він використовувати цю обчислювальну потужність, щоб обдурити інших, вкравши витрачені гроші? Або використовувати цю обчислювальну потужність для генерації нових монет? Він повинен бути в змозі знайти більш економічно вигідну гру за правилами, які тепер дозволяють йому заробляти більше монет, ніж всі інші разом узяті, що явно економічно вигідніше, ніж таємне руйнування системи і зведення свого багатства в ніщо.
7. Звільнення дискового простору
Якщо остання транзакція монети відбулася до достатньої кількості блоків, історію транзакцій витрат монети до цієї транзакції можна відкинути, щоб заощадити місце на диску. Для того, щоб зробити це без розриву хешу блоку, хеш запису транзакції буде включений в дерево Меркла, і тільки корінь дерева буде включений в хеш блоку. Обрізаючи гілки, старі блоки можна стиснути. Внутрішній хеш зберігати не потрібно.
! [GOSWSMEutHTHRctOsFIZ6l0XiCZpQDCytysccOvF.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-be899b60f4-dd1a6f-69ad2a.webp «7126687»)
Заголовок блоку без будь-якої історії транзакцій становить близько 80 байт. Припускаючи, що блок створюється кожні десять хвилин, 80 байтів, помножених на 6 помножити на 24 на 365, дорівнює 4,2 мільйонам на рік. Станом на 2008 рік більшість комп'ютерів, що продаються, поставлялися з 2 ГБ оперативної пам'яті, і закон Мура передбачає, що 1,2 ГБ буде додаватися на рік, навіть якщо блоковий заголовок повинен зберігатися в пам'яті.
8. Спрощене підтвердження платежу
Є можливість підтверджувати платежі навіть без необхідності запускати повноцінний вузол мережі. Все, що потрібно користувачеві, це копія заголовка блоку найдовшого ланцюга з доказом роботи — він може перевірити онлайн-вузол, щоб підтвердити, що у нього найдовший ланцюжок — а потім отримати вузол гілки дерева Меркла, який, у свою чергу, підключається до транзакції, коли блок отримав позначку часу. Користувач не може перевірити транзакцію самостійно, але, підключившись до певного місця в ланцюжку, він може побачити, що вузол мережі прийняв транзакцію, а доданий після цього блок додатково підтверджує, що мережа прийняла транзакцію.
! [ZUtmrmdPnropshOMBHizRFDwDh0pncg5VGNnzWcI.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c46aef910b-dd1a6f-69ad2a.webp «7126688»)
Поки чесні ноди все ще контролюють мережу, перевірка є надійною. Однак, коли мережа контролюється зловмисником, перевірка менш надійна. Хоча вузли мережі можуть самі перевіряти транзакції, поки зловмисник зберігає контроль над мережею, спрощений метод перевірки може бути обдурений підробленими записами транзакцій зловмисника. Одним із заходів протидії є те, що клієнтське програмне забезпечення приймає попередження від вузлів мережі. Коли вузол мережі знаходить недійсний блок, він надсилає попередження, і в програмному забезпеченні користувача з'являється сповіщення, яке інформує користувача про завантаження повного блоку та попереджає користувача про необхідність підтвердити узгодженість транзакції. Продавці з високочастотними платежами, як і раніше, повинні захотіти запустити власну повну ноду, щоб забезпечити більш незалежну безпеку та швидше підтвердження транзакцій.
9. Комбінування і ділення вартості
Незважаючи на те, що можна обробляти монети одну за одною, встановлювати окремий рекорд для кожної копійки незграбно. Щоб уможливити поділ і консолідацію значень, транзакції містять кілька входів і виходів. Як правило, або один вхід з відносно великої попередньої транзакції, або комбінація багатьох входів з меншої суми; При цьому є не більше двох виходів: один для оплати (одержувачу платежу) і один для здачі (відправнику) при необхідності.
! [rRreBWdF8I1swfs5QtBILVrI0guXumj1ulPkbKyu.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-e6829c598f-dd1a6f-69ad2a.webp «7126689»)
Важливо зазначити, що "фан-аут" тут не є проблемою - "фан-аут" означає, що одна транзакція залежить від кількох транзакцій, і ці транзакції залежать від більшої кількості транзакцій. Ніколи не потрібно витягувати повну, незалежну історичну копію будь-якої угоди.
10. Приватність
Традиційні банківські моделі досягають певного рівня захисту конфіденційності шляхом обмеження доступу до інформації про трейдерів і довірених третіх осіб. Цей підхід був відкинутий через необхідність оприлюднення всіх записів транзакцій. Однак збереження конфіденційності може бути досягнуто шляхом перекриття потоку інформації в іншому місці – анонімності відкритого ключа. Громадськість бачить, що такий-то перерахував таку-то певну суму грошей такому-то, однак немає жодної інформації, яка б вказувала на конкретну особу. Цей рівень оприлюднення інформації трохи схожий на торгівлю на фондовому ринку, тільки оголошується час і сума окремої угоди, проте ніхто не знає, хто є двома сторонами угоди.
! [FACNxW4jyufvrE53ONTept7HLlHzayQU9CwIg4eX.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-c1e10d9736-dd1a6f-69ad2a.webp «7126690»)
Є ще один рівень брандмауера. Трейдери повинні ввімкнути нову пару публічних і закритих ключів для кожної транзакції, щоб ніхто інший не міг відстежити ці транзакції до того ж власника. Деякі транзакції з декількома входами все ще неминуче мають зворотну силу, оскільки ці входи неминуче будуть ідентифіковані як такі, що надходять від одного і того ж власника. Небезпека полягає в тому, що якщо власник відкритого ключа буде розкрито, всі інші транзакції, пов'язані з ним, будуть розкриті.
11. Розрахунки
Скажімо, сценарій, коли зловмисник намагається згенерувати альтернативний ланцюжок, який є швидшим за чесний. Навіть якщо він досягне успіху, він не зможе внести будь-які зміни в систему, тобто він не зможе створити цінність з повітря, і він не зможе отримати гроші, які йому ніколи не належать. Вузли мережі не розглядають недійсну транзакцію як оплату, а чесні ноди ніколи не приймуть блок, що містить такий платіж. У кращому випадку зловмисник може модифікувати власні транзакції і спробувати повернути вже витрачені гроші.
Суперництво між чесним ланцюгом і нападником можна описати біноміальною випадковою прогулянкою. Подія успіху - це коли новий блок щойно був доданий до чесного ланцюга, що збільшує його перевагу на 1, тоді як подія невдачі - це коли ланцюжок зловмисника щойно був доданий новий блок, що зменшує перевагу чесного ланцюга на 1.
Імовірність того, що зловмисник зможе наздогнати ззаду, схожа на проблему банкрутства гемблера. Припустимо, гравець з необмеженою кількістю фішок починає з дефіциту і дозволяє йому робити ставки необмежену кількість разів, з метою заповнити дефіцит, який у нього вже є. Розрахувати ймовірність того, що він в кінцевому підсумку зможе заповнити недостачу, тобто ймовірність того, що зловмисник зможе наздогнати чесний ланцюжок, можна наступним чином:
! [dxwr3HPLYbHZisFnpwH6hIvaudm3FchUzRFXaD7m.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-0f1dfde161-dd1a6f-69ad2a.webp «7126691»)
Так як ми припустили, що p>,q Так як зловмиснику потрібно наздоганяти все більше і більше блоків, то ймовірність успіху зменшується в геометричній прогресії. Якщо нападнику не пощастить зробити стрибок вперед на самому початку, його вінрейт буде знищений, а він ще більше відстане.
Тепер подумайте, як довго одержувачу нової транзакції доведеться чекати, щоб бути повністю впевненим, що відправник не зможе змінити транзакцію. Ми припускаємо, що відправник є зловмисником, який намагається переконати одержувача платежу в тому, що він сплатив платіж протягом певного періоду часу, а потім перевести гроші назад собі. Коли це станеться, одержувач, звичайно, отримає попередження, але відправник сподівається, що дерев'яний човен вже в човні.
Одержувач створює нову пару відкритих і закритих ключів, а потім повідомляє про це відправнику незадовго до підписання. Це запобігає ситуації, коли відправник заздалегідь готує блок у ланцюжку з безперервними обчисленнями, і йому пощастило бути достатньо попереду, щоб виконати транзакцію до цього часу. Після того, як гроші відправлені, нечесний відправник починає таємно працювати над іншим парачейном, намагаючись додати до нього зворотну версію транзакції.
Одержувач платежу чекає, поки транзакція буде упакована в блок, і вже є z блоків, які були додані згодом. Він не знає точно, наскільки добре працюють зловмисники, але може припустити, що чесні блоки витрачають середню кількість часу в процесі генерації кожного блоку; Потенційний прогрес зловмисника відповідає розподілу Пуассона з очікуваним значенням:
! [Go4WNHNh1YtPsMqjI2XbNCMTnITJUIl9w8LqM6yj.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-790cf0ec14-dd1a6f-69ad2a.webp «7126692»)
Щоб обчислити ймовірність того, що зловмисник все ще може наздогнати, нам потрібно помножити щільність ймовірності розподілу Парзона на кількість блоків, які зловмиснику потрібно наздогнати, на ймовірність того, що він зможе наздогнати, якщо він знаходиться за цією кількістю блоків:
! [5O3ugdwP0uoNL0qOnvLbnUvNTXGMBmxJj4yS00y3.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-2d036c0208-dd1a6f-69ad2a.webp «7126694»)
Перетворити на програму C...
! [XjwW5ZbFNIZCfiPFAnbg7b4iW4qp9A8g1LFKe2f2.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-cea09b1f46-dd1a6f-69ad2a.webp «7126698»)
Беручи деякі результати, ми можемо побачити, що ймовірність експоненціально зменшується зі збільшенням z:
! [452fZL5ude7CUuUz85STQEcvquwOCHxhZ3pEhKRc.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-2d9ed83270-dd1a6f-69ad2a.webp "7126700")
Якщо Р менше 0,1%...
! [zfsBufXK54KjstagaZXrPOUREzaoQU7VPy9eYjjX.jpeg] (https://img-cdn.gateio.im/webp-social/moments-40baef27dd-40fd2c8861-dd1a6f-69ad2a.webp «7126701»)
12. висновок
Ми пропонуємо електронну торгову систему, яка не повинна покладатися на довіру; Відправною точкою є проста рамка для монет, яка використовує цифрові підписи, і хоча вона забезпечує надійний контроль над правом власності, вона не може уникнути подвійних витрат. Щоб вирішити цю проблему, ми пропонуємо однорангову мережу, яка використовує механізм proof-of-work для запису публічної історії транзакцій, і поки чесний вузол може контролювати більшу частину обчислювальної потужності процесора, зловмисник не може успішно втручатися в систему лише з точки зору обчислювальної потужності. Надійність цієї мережі полягає в її неструктурованій простоті. Вузли можуть працювати одночасно в одну мить з невеликою співпрацею. Їх навіть не потрібно розпізнавати, тому що шлях повідомлення не залежить від конкретного пункту призначення; Повідомлення потрібно розповсюджувати лише на основі найкращих зусиль. Вузли приходять і йдуть вільно, і коли вони знову приєднуються, їм потрібно лише прийняти ланцюжок proof-of-work як доказ усього, що сталося, поки вони були в автономному режимі. Вони голосують за потужність свого процесора і вказують на те, що приймають дійсні транзакції, постійно додаючи нові дійсні блоки в ланцюжок і відхиляючи недійсні блоки. Будь-які необхідні правила та винагороди можуть бути застосовані за допомогою цього механізму консенсусу.
Список літератури