Биткойн: одноранговая электронная кассовая система
Сатоши Накамото
satoshin@gmx.com
www.bitcoin.org
Аннотация . Чисто одноранговая версия электронных денег позволит отправлять онлайн-платежи напрямую от одной стороны к другой, минуя финансовое учреждение. Цифровые подписи являются частью решения, но основные преимущества теряются, если для предотвращения двойных расходов по-прежнему требуется доверенная третья сторона. Мы предлагаем решение проблемы двойной траты с помощью одноранговой сети. Сеть присваивает транзакциям временные метки, хешируя их в непрерывную цепочку подтверждения работы на основе хэша, формируя запись, которую нельзя изменить без повторного выполнения проверки работы. Самая длинная цепочка служит не только доказательством последовательности наблюдаемых событий, но и доказательством того, что она возникла из-за наибольшего пула мощности ЦП. Пока большая часть мощности ЦП контролируется узлами, которые не сотрудничают для атаки на сеть, они будут генерировать самую длинную цепочку и опережать злоумышленников. Сама сеть требует минимальной структуры. Сообщения передаются в режиме максимальных усилий, и узлы могут покидать сеть и присоединяться к ней по своему желанию, принимая самую длинную цепочку проверки работоспособности в качестве доказательства того, что произошло, пока они отсутствовали.
1. Введение
Торговля в Интернете стала полагаться почти исключительно на финансовые учреждения, выступающие в качестве доверенных третьих сторон для обработки электронных платежей. Хотя система работает достаточно хорошо для большинства транзакций, она по-прежнему страдает недостатками модели, основанной на доверии. Полностью необратимые транзакции на самом деле невозможны, поскольку финансовые учреждения не могут избежать посредничества в спорах. Стоимость посредничества увеличивает транзакционные издержки, ограничивая минимальный практический размер транзакции и отсекая возможность для небольших случайных транзакций, а потеря возможности осуществлять необратимые платежи за необратимые услуги сопряжена с более широкими издержками. С возможностью обращения потребность в доверии распространяется. Продавцы должны с осторожностью относиться к своим покупателям, выпрашивая у них больше информации, чем им в противном случае потребовалось бы. Определенный процент мошенничества принимается как неизбежный. Этих затрат и неопределенности платежей можно избежать лично, используя физическую валюту, но не существует механизма для осуществления платежей по каналу связи без доверенной стороны.
Что необходимо, так это система электронных платежей, основанная на криптографическом доказательстве, а не на доверии, позволяющая любым двум желающим сторонам совершать сделки напрямую друг с другом без необходимости в доверенной третьей стороне. Транзакции, которые невозможно отменить с вычислительной точки зрения, защитят продавцов от мошенничества, а обычные механизмы условного депонирования могут быть легко реализованы для защиты покупателей. В этой статье мы предлагаем решение проблемы двойной траты с использованием однорангового распределенного сервера временных меток для создания вычислительного доказательства хронологического порядка транзакций. Система безопасна до тех пор, пока честные узлы коллективно контролируют большую мощность ЦП, чем любая сотрудничающая группа узлов злоумышленников.
2. Транзакции
Мы определяем электронную монету как цепочку цифровых подписей. Каждый владелец передает монету следующему, подписывая цифровой подписью хэш предыдущей транзакции и открытый ключ следующего владельца и добавляя их в конец монеты. Получатель платежа может проверить подписи, чтобы проверить цепочку владения.
Проблема, конечно, в том, что получатель платежа не может проверить, что один из владельцев не потратил монету дважды. Распространенным решением является введение доверенного центрального органа, или монетного двора, который проверяет каждую транзакцию на наличие двойных расходов. После каждой транзакции монета должна быть возвращена на монетный двор для выпуска новой монеты, и только монеты, выпущенные непосредственно монетным двором, не подлежат двойной трате. Проблема с этим решением заключается в том, что судьба всей денежной системы зависит от компании, управляющей монетным двором, и каждая транзакция должна проходить через них, как через банк.
Нам нужен способ, чтобы получатель платежа знал, что предыдущие владельцы не подписывали никаких более ранних транзакций. Для наших целей учитывается самая ранняя транзакция, поэтому нас не волнуют более поздние попытки двойного расходования. Единственный способ подтвердить отсутствие транзакции — быть в курсе всех транзакций. В модели, основанной на монетном дворе, монетный двор знал обо всех транзакциях и решал, какие из них поступили первыми. Чтобы выполнить это без доверенной стороны, транзакции должны быть публично объявлены [1], и нам нужна система, позволяющая участникам согласовать единую историю порядка их получения. Получателю платежа необходимо доказательство того, что во время каждой транзакции большинство узлов согласились, что она была получена первой.
3. Сервер меток времени
Предлагаемое нами решение начинается с сервера меток времени. Сервер временных меток работает, беря хэш блока элементов, для которого нужно поставить метку времени, и широко публикует хеш, например, в газете или в сообщениях Usenet [2-5]. Временная метка доказывает, что данные должны были существовать в то время, очевидно, для того, чтобы попасть в хэш. Каждая временная метка включает предыдущую временную метку в свой хеш, образуя цепочку, где каждая дополнительная временная метка усиливает предыдущие.
4. Доказательство работы
Чтобы реализовать распределенный сервер временных меток на одноранговой основе, нам потребуется использовать систему проверки работоспособности, подобную Hashcash Адама Бэка [6], а не сообщения в газетах или Usenet. Доказательство работы включает в себя сканирование значения, которое при хешировании, например, с помощью SHA-256, начинается с нулевого количества битов. Средняя требуемая работа экспоненциальна по количеству необходимых нулевых битов и может быть проверена путем выполнения одного хэша.
Для нашей сети временных меток мы реализуем доказательство работы, увеличивая одноразовый номер в блоке до тех пор, пока не будет найдено значение, которое дает хешу блока требуемые нулевые биты. После того, как усилия ЦП были затрачены на то, чтобы он удовлетворял доказательству работы, блок не может быть изменен без повторного выполнения работы. Поскольку более поздние блоки следуют за ним в цепочку, работа по изменению блока будет включать в себя повторение всех блоков после него.
Доказательство работы также решает проблему определения представительства при принятии решений большинством. Если бы большинство основывалось на принципе «один IP-адрес — один голос», его мог бы подорвать любой, кто может выделить много IP-адресов. Доказательство работы — это, по сути, один процессор — один голос. Решение большинства представлено самой длинной цепочкой, в которую вложены наибольшие усилия по доказательству работы. Если большая часть мощности ЦП контролируется честными узлами, честная цепочка будет расти быстрее всех и опережать любые конкурирующие цепочки. Чтобы изменить прошлый блок, злоумышленнику придется переделать доказательство работы блока и всех блоков после него, а затем догнать и превзойти работу честных узлов. Позже мы покажем, что вероятность того, что более медленный злоумышленник догонит его, экспоненциально уменьшается по мере добавления последующих блоков.
Чтобы компенсировать увеличение скорости оборудования и изменение интереса к работающим узлам с течением времени, сложность доказательства работы определяется скользящим средним значением среднего количества блоков в час. Если они генерируются слишком быстро, сложность увеличивается.
5. Сеть
Шаги для запуска сети следующие:
1) Новые транзакции рассылаются всем узлам.
2) Каждый узел собирает новые транзакции в блок.
3) Каждый узел работает над поиском сложного доказательства работы для своего блока.
4) Когда узел находит доказательство работы, он рассылает блок всем узлам.
5) Узлы принимают блок только в том случае, если все транзакции в нем действительны и еще не потрачены.
6) Узлы выражают свое принятие блока, работая над созданием следующего блока в цепочке, используя хэш принятого блока в качестве предыдущего хэша.
Узлы всегда считают самую длинную цепочку правильной и будут продолжать работать над ее расширением. Если два узла одновременно транслируют разные версии следующего блока, некоторые узлы могут получить сначала один или другой. В этом случае они работают с первой полученной веткой, но сохраняют другую ветку на случай, если она станет длиннее. Ничья будет разорвана, когда будет найдено следующее доказательство работы и одна ветвь станет длиннее; узлы, которые работали на другой ветке, затем переключатся на более длинную.
Широковещательные рассылки новых транзакций не обязательно должны достигать всех узлов. Пока они достигают многих узлов, они вскоре попадут в блок. Блочные широковещательные рассылки также терпимы к пропущенным сообщениям. Если узел не получил блок, он запросит его, когда получит следующий блок и поймет, что пропустил один.
6. Стимул
По соглашению первая транзакция в блоке — это специальная транзакция, которая запускает новую монету, принадлежащую создателю блока. Это добавляет нодам стимул поддерживать сеть и дает возможность изначально распространять монеты в обращение, поскольку нет центрального органа, который бы их выпускал. Постоянное добавление постоянного количества новых монет аналогично тому, как золотоискатели тратят ресурсы на добавление золота в обращение. В нашем случае тратится процессорное время и электроэнергия.
Поощрение также может быть профинансировано комиссией за транзакцию. Если выходное значение транзакции меньше ее входного значения, разница представляет собой комиссию за транзакцию, которая добавляется к поощрительной стоимости блока, содержащего транзакцию. Как только в обращение поступит заранее определенное количество монет , стимул может полностью перейти на комиссию за транзакцию и быть полностью свободным от инфляции.
Стимул может помочь побудить узлы оставаться честными. Если жадный злоумышленник сможет собрать больше процессорной мощности, чем все честные узлы, ему придется выбирать между использованием ее для обмана людей путем кражи его платежей или использованием ее для создания новых монет. Он должен найти более выгодным играть по правилам, таким правилам, которые благоприятствуют ему с большим количеством новых монет, чем все остальные вместе взятые, чем подрывать систему и законность своего собственного богатства.
7. Восстановление места на диске
После того, как последняя транзакция в монете будет скрыта под достаточным количеством блоков, потраченные транзакции перед ней могут быть отброшены для экономии места на диске. Чтобы облегчить это, не нарушая хэш блока, транзакции хешируются в дереве Меркла [7][2][5], при этом в хеш блока включается только корень. Затем старые блоки можно уплотнить, обрубив ветки дерева. Внутренние хэши хранить не нужно.
Заголовок блока без транзакций будет иметь размер около 80 байт. Если предположить, что блоки генерируются каждые 10 минут, 80 байт * 6 * 24 * 365 = 4,2 МБ в год. С компьютерными системами, обычно продающимися с 2 ГБ ОЗУ по состоянию на 2008 год, и законом Мура, предсказывающим текущий рост
1,2 ГБ в год, хранение не должно быть проблемой, даже если заголовки блоков должны храниться в памяти.
8. Упрощенная проверка платежа
Можно проверять платежи без запуска полного сетевого узла. Пользователю нужно только сохранить копию заголовков блоков самой длинной цепочки проверки работоспособности, которую он может получить, запрашивая узлы сети, пока не убедится, что у него самая длинная цепочка, и получить ветвь Меркла, связывающую транзакцию с блоком. она имеет отметку времени. Он не может проверить транзакцию самостоятельно, но, связав ее с местом в цепочке, он может увидеть, что сетевой узел принял ее, и блоки, добавленные после нее, еще раз подтверждают, что сеть ее приняла.
Таким образом, проверка надежна, пока сеть контролируется честными узлами, но более уязвима, если сеть перегружена злоумышленником. В то время как сетевые узлы могут проверять транзакции для себя, упрощенный метод может быть обманут сфабрикованными транзакциями злоумышленника до тех пор, пока злоумышленник может продолжать подавлять сеть. Одной из стратегий защиты от этого может быть прием предупреждений от сетевых узлов, когда они обнаруживают недопустимый блок, предлагая программному обеспечению пользователя загрузить полный блок и предупреждающие транзакции для подтверждения несоответствия. Предприятия, которые получают частые платежи, вероятно, по-прежнему захотят запускать свои собственные узлы для более независимой безопасности и более быстрой проверки.
9. Объединение и разделение стоимости
Хотя было бы возможно обрабатывать монеты по отдельности, было бы неудобно выполнять отдельную транзакцию для каждого цента в переводе. Чтобы можно было разделить и объединить стоимость, транзакции содержат несколько входов и выходов. Обычно будет либо один ввод из более крупной предыдущей транзакции, либо несколько вводов, объединяющих меньшие суммы, и не более двух выходов: один для платежа и один для возврата сдачи, если таковая имеется, обратно отправителю.
Следует отметить, что разветвление, когда транзакция зависит от нескольких транзакций, а эти транзакции зависят от многих других, здесь не проблема. Никогда не нужно извлекать полную автономную копию истории транзакций.
10. Конфиденциальность
Традиционная банковская модель обеспечивает определенный уровень конфиденциальности, ограничивая доступ к информации вовлеченными сторонами и доверенной третьей стороной. Необходимость объявлять обо всех транзакциях публично исключает этот метод, но конфиденциальность все же можно поддерживать, прерывая поток информации в другом месте: сохраняя анонимность открытых ключей. Общественность может видеть, что кто-то отправляет сумму кому-то другому, но без информации, связывающей транзакцию с кем-либо. Это похоже на уровень информации, публикуемой фондовыми биржами, где время и размер отдельных сделок, «лента», обнародуются, но без указания сторон.
В качестве дополнительного брандмауэра для каждой транзакции следует использовать новую пару ключей, чтобы предотвратить их привязку к общему владельцу. Некоторое связывание по-прежнему неизбежно для транзакций с несколькими входами, которые обязательно показывают, что их входы принадлежат одному и тому же владельцу. Риск заключается в том, что если владелец ключа будет раскрыт, связывание может выявить другие транзакции, принадлежащие тому же владельцу.
11. Расчеты
Мы рассматриваем сценарий, когда злоумышленник пытается сгенерировать альтернативную цепочку быстрее, чем честную цепочку. Даже если это будет сделано, это не сделает систему открытой для произвольных изменений, таких как создание ценности из воздуха или изъятие денег, которые никогда не принадлежали злоумышленнику. Узлы не примут недействительную транзакцию в качестве оплаты, а честные узлы никогда не примут блок, содержащий их. Злоумышленник может только попытаться изменить одну из своих транзакций, чтобы вернуть деньги, которые он недавно потратил.
Гонку между честной цепью и цепью злоумышленника можно охарактеризовать как биномиальное случайное блуждание. Событием успеха является расширение честной цепочки на один блок, что увеличивает ее преимущество на +1, а событием неудачи является расширение цепочки атакующего на один блок, что уменьшает разрыв на -1.
Вероятность того, что злоумышленник нагонит заданный дефицит, аналогична проблеме разорения игрока. Предположим, игрок с неограниченным кредитом начинает с проигрыша и потенциально играет бесконечное количество попыток, чтобы попытаться достичь безубыточности.
Учитывая наше предположение, что p > q, вероятность падает экспоненциально по мере увеличения количества блоков, которые атакующий должен догнать. С шансами против него, если он не совершит удачный рывок вперед на раннем этапе, его шансы станут исчезающе малыми, поскольку он отстает еще больше.
Теперь мы рассмотрим, как долго получатель новой транзакции должен ждать, прежде чем он будет достаточно уверен, что отправитель не может изменить транзакцию. Мы предполагаем, что отправитель является злоумышленником, который хочет заставить получателя поверить в то, что он платил ему какое-то время, а затем переключает его, чтобы вернуть деньги самому себе по прошествии некоторого времени. Получатель будет предупрежден, когда это произойдет, но отправитель надеется, что будет слишком поздно.
Получатель генерирует новую пару ключей и передает открытый ключ отправителю незадолго до подписания. Это не позволяет отправителю подготовить цепочку блоков заранее, постоянно работая над ней, пока ему не повезет достаточно далеко, а затем выполнить транзакцию в этот момент. Как только транзакция отправлена, нечестный отправитель начинает тайно работать над параллельной цепочкой, содержащей альтернативную версию его транзакции.
Получатель ждет, пока транзакция не будет добавлена в блок и после нее не будут связаны z блоков. Он не знает точного прогресса, достигнутого злоумышленником, но если предположить, что честные блоки заняли среднее ожидаемое время на блок, потенциальный прогресс злоумышленника будет распределением Пуассона.
12. Заключение
Мы предложили систему для электронных транзакций, не полагаясь на доверие. Мы начали с обычной структуры монет, сделанных из цифровых подписей, которая обеспечивает строгий контроль над владением, но неполна без способа предотвращения двойного расходования. Чтобы решить эту проблему, мы предложили одноранговую сеть, использующую доказательство работы для записи общедоступной истории транзакций, которую злоумышленнику быстро становится нецелесообразно изменять с вычислительной точки зрения, если честные узлы контролируют большую часть мощности ЦП. Сеть надежна в своей неструктурированной простоте. Узлы работают одновременно с небольшой координацией. Их не нужно идентифицировать, поскольку сообщения не направляются в какое-либо конкретное место и должны быть доставлены только с максимальной эффективностью. Узлы могут покидать сеть и присоединяться к ней по своему желанию, принимая цепочку проверки работоспособности как доказательство того, что произошло, пока они отсутствовали. Они голосуют мощностью своего процессора, выражая свое согласие с допустимыми блоками, работая над их расширением, и отвергая недействительные блоки, отказываясь работать над ними. Любые необходимые правила и стимулы могут быть применены с помощью этого механизма консенсуса.
Ссылки[1] В. Дай, "b-money", http://www.weidai.com/bmoney.txt, 1998.[2]H. Массиас , Х.С. Авила и Ж.-Ж. Quisquater , «Дизайн безопасной службы временных меток с минимальными требованиями к доверию», на 20-м симпозиуме по теории информации в странах Бенилюкса, май 1999 г. [3]. С. Хабер, В. С. Сторнетта , «Как поставить отметку времени на цифровой документ», Журнал криптологии, том 3, № 2, страницы 99–111, 1991. [4] Д. Байер, С. Хабер, В. С. Сторнетта , «Повышение эффективности и надежности цифровых меток времени», «Последовательности II: методы коммуникации, безопасности и компьютерных наук», стр. 329–334, 1993. [5] С. Хабер, В. С. Сторнетта , «Безопасные имена для битовых строк», Материалы 4-й конференции ACM по компьютерной и коммуникационной безопасности, стр. 28–35, апрель 1997 г. [6]. А. Бэк, « Hashcash — контрмера отказа в обслуживании», http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] RC Merkle, «Протоколы для криптосистем с открытым ключом», In Proc. Симпозиум 1980 г. по безопасности и конфиденциальности, IEEE Computer Society, страницы 122–133, апрель 1980 г. [8] У. Феллер, «Введение в теорию вероятностей и ее приложения», 1957 г.
Покупка биткойнов
Вы можете купить биткойн здесь .