Це саме той матеріал, з публікації якого на сайті metzdowd.com 31 жовтня 2008 року почалася нова ера економіки - ера цифрових валют. Автор під псевдонімом Сатоші Накамото оприлюднив статтю з назвою «Bitcoin: A Peer-to-Peer Electronic Cash System». Тут подаю переклад цієї роботи на українську мову.

Анотація

Повністю однорангове облаштування системи електронних грошей дозволяє здійснювати електронні транзакції безпосередньо між учасниками, минаючи будь-які фінансові інститути. Частково, це завдання вирішується використанням цифрових підписів, але необхідність довіреної особи для контролю за подвійною витратою позбавляє цей підхід основних переваг. Ми пропонуємо децентралізоване вирішення проблеми подвійної витрати з використанням тимчасової (пирінгової) мережі. Мережа ставить мітки часу на транзакції, поєднуючи їх в ланцюжок доказів зробленої на основі хешування роботи. Сформовані таким чином записи неможливо змінити, не виконавши заново весь обсяг обчислень. Найдовша версія ланцюжка служить не тільки підтвердженням черговості подій, а й доводить, що над нею провів роботу найбільший обчислювальний сегмент мережі. До тих пір поки більша частина обчислювальних потужностей контролюється вузлами, не об'єднаними з метою атакувати мережу, вони будуть генерувати найдовший ланцюжок, випереджаючи будь-яких зловмисників. Облаштування самої мережі дуже просте: повідомлення розсилаються на основі принципу «найменших витрат», а вузли можуть залишати мережу і знову підключатися до неї в будь-який момент, приймаючи найдовшу версію ланцюжка для відновлення пропущеної історії транзакцій.

1 - Введення

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

2 - Транзакції

Визнaчимo eлeктрoнну мoнeтy як пoслiдoвнiсть цифpoвиx пiдписiв. Чeргoвий влaсник вiдпрaвляє мoнeтy нaстyпнoмy, пiдписyючи хeш пoпeрeдньoї трaнзaкцiї i пyблiчний ключ мaйбyтньoгo влacникa, a тaкoж приєднyючи цю iнфoрмaцiю дo мoнeти. Oдeржyвaч мoжe пeрeвipити кoжeн пiдпиc, щoб пiдтвeрдити кoрeктнicть вcьoгo лaнцюжкa влacникiв.

Прoблeмa, звicнo, в тoмy, щo oдeржyвaч нe мoжe визнaчити, скiльки рaзiв кoлишнiй влacник витpaтив цю мoнeтy. Трaдицiйнe рiшeння пoлягaє в пeрeвipцi цeнтрaльнoю дoвiрeнoю ocoбoю ( «мoнeтним двopoм» aбo eмiтeнтoм) кoжнoї трaнзaкцiї. Пiсля бyдь-якoгo плaтeжy мoнeтa пoвepтaється дo eмiтeнтa, який випycкaє нoвy її вepciю; i тiльки бeзпocepeдньo oтpимaним тaким чинoм мoнeтaм мoжнa дoвiряти. Heдoлiк цьoгo пiдхoдy в тoмy, щo вiд кoмпaнiї-eмiтeнтa зaлeжить дoля всiєї грoшoвoї cиcтeми, тaк як вoнa, пoдiбнo бaнкy, кoнтpoлює кoжнy трaнзaкцiю, щo прoxoдить чepeз нeї.

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

3 - Сервер міток часу

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

4 - Доказ роботи

Щоб реалізувати розподілений спеціальний робочий сервер міток часу, ми використовуємо схему «доказу роботи», подібну системі Hashcash Адама Бека. Суть полягає в пошуку такого значення, чий хеш (наприклад, SHA-256) починався б з деякого числа нульових бітів. Потрібно виконати обсяг роботи, який експоненціально залежатиме від числа нулів, але для перевірки знайденого значення досить обчислити лише один хеш.

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

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

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

5 - Мережа

Система працює за такими правилами:
1) Нові транзакції розсилаються всім вузлам.
2) Кожен вузол об'єднує отримані транзакції в блок.
3) Кожен вузол намагається підібрати хеш блоку, що задовольняє поточній складності.
4) Як тільки такий хеш знайдений, цей блок відправляється в мережу.
5) Вузли приймають блок, тільки якщо всі транзакції в ньому коректні і не використовують уже витрачені кошти.
6) Свою згоду з новими даними вузли висловлюють, починаючи роботу над наступним блоком і використовуючи хеш попереднього в якості нових вихідних даних.

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

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

6 - Стимули

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

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

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

7 - Економія дискового простору

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

Заголовок порожнього блоку буде становити близько 80 байт. З розрахунку швидкості генерації блоку раз на 10 хвилин отримуємо 80 * 6 * 24 * 365 = 4.2 Мб на рік. Для середньостатистичного на 2008 рік комп'ютера з 2 Гб оперативної пам'яті з урахуванням закону Мура, який пророкує зростання на 1.2 Гб на рік, зберігання даних не буде проблемою, навіть якщо всі заголовки блоків будуть знаходитися в пам'яті.

8 - Спрощена перевірка платежів

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

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

9 - Поєднання і розподіл сум

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

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

10 - Конфіденційність

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

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

11 - Оцінка

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

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

Імовірність того, що він досягне успіху, як і ймовірність зловмисника наздогнати чесних учасників, обчислюється таким чином:
p = ймовірність появи блоку в чесному ланцюжку
q = ймовірність того, що блок створить атакуючий
qz = ймовірність того, що атакуючий надолужить різницю в z блоків

У разі p> q ймовірність зменшується експоненціально з ростом числа блоків, на яке відстає зловмисник. Оскільки всі ставки проти нього, без вдалого ривка на початку його шанси на успіх стають мізерно малі.

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

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

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

q

= Z p

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

Перегрупувавши складові і позбувшись від нескінченної низки, отримуємо:

Код програми на мові Сі виглядає так:

#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
double p = 1.0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++)
{
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
return sum;
}

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

Вирішуючи щодо P <0.1%, отримуємо:

12 - Висновок

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

📝 Автор: Satoshi Nakamoto.

Зручно для купівлі та продажу біткоіна за гривні: краща криптовалютна біржа Європи 2019 року - EXMO >>>
(Краща криптовалютна біржа світу в 2017 році по версії BTC Awards, краща централізована біржа світу в 2018 році по версії Blockchain Life Awards).
На біржі є 11 торгових пар з гривнею: BTC/UAH, ETH/UAH, LTC/UAH, XMR/UAH, XRP/UAH, XEM/UAH, DASH/UAH, USDT/UAH, BCH/UAH, DCR/UAH, TRX/UAH.


Історична пам'ятка: приблизно через два місяці після публікації даного матеріалу, на початку 2009 року, Сатоші Накамото запустив мережу біткоіна, а також перший віртуальний гаманець під біткоіни.
З середини 2010 року творець біткоіна зник при загадкових обставинах. По різним оцінкам експертів, Сатоші встиг зробити премайн 600 000 - 700 000 біткоінів, які й досі знаходяться на його гаманцях.