Биткоин: система электронных денег на основе одноранговой сети
Abstract
純粋なpeer-to-peerの電子キャッシュにより、金融機関を介さずに一方の当事者からもう一方へ直接オンライン決済を行うことが可能になる。デジタル署名はその解決策の一部を提供するが、二重支払いを防ぐために信頼できる第三者が依然として必要であれば、主な利点は失われてしまう。我々はpeer-to-peerネットワークを用いた二重支払い問題への解決策を提案する。このネットワークは、トランザクションをhashベースのproof-of-workの連鎖にhash化することでタイムスタンプを付与し、proof-of-workをやり直さない限り変更できない記録を形成する。最長のチェーンは、目撃されたイベントの順序の証明としてのみならず、それが最大のCPUパワーのプールから生まれたことの証明としても機能する。CPUパワーの過半数がネットワークへの攻撃に協力していないノードによって制御されている限り、それらのノードが最長のチェーンを生成し、攻撃者を凌駕する。ネットワーク自体は最小限の構造しか必要としない。メッセージはベストエフォートで配信され、ノードは自由にネットワークから離脱・再参加でき、不在中に何が起こったかの証明として最長のproof-of-workチェーンを受け入れる。
Abstract
Полностью одноранговая версия электронных денег позволила бы отправлять онлайн-платежи напрямую от одной стороны к другой без участия финансового учреждения. Цифровые подписи обеспечивают часть решения, но основные преимущества теряются, если для предотвращения двойного расходования по-прежнему требуется доверенная третья сторона. Мы предлагаем решение проблемы двойного расходования с использованием одноранговой сети. Сеть присваивает транзакциям временные метки, хешируя их в непрерывную цепочку proof-of-work на основе хешей, формируя запись, которую невозможно изменить без повторного выполнения proof-of-work. Самая длинная цепочка служит не только доказательством последовательности наблюдавшихся событий, но и доказательством того, что она создана наибольшим пулом вычислительной мощности CPU. Пока большая часть мощности CPU контролируется узлами, не участвующими в атаке на сеть, они будут генерировать самую длинную цепочку и опережать атакующих. Сама сеть требует минимальной структуры. Сообщения рассылаются по принципу максимальных усилий, и узлы могут покидать сеть и присоединяться к ней по желанию, принимая самую длинную цепочку proof-of-work как доказательство того, что произошло в их отсутствие.
Introduction
インターネット上の商取引は、電子決済を処理する信頼できる第三者として機能する金融機関にほぼ全面的に依存するようになった。このシステムはほとんどのトランザクションに対して十分に機能しているが、信頼ベースモデルに固有の弱点を依然として抱えている。金融機関は紛争の仲裁を避けることができないため、完全に不可逆なトランザクションは実質的に不可能である。仲裁コストはトランザクションコストを増大させ、実用的な最小トランザクションサイズを制限し、小規模なカジュアルトランザクションの可能性を断つ。さらに、不可逆なサービスに対して不可逆な支払いができないことによる、より広範なコストも存在する。取消しの可能性がある限り、信頼の必要性が広がる。商人は顧客を警戒し、本来不要な情報まで求めなければならない。一定割合の詐欺は不可避として受け入れられている。これらのコストと支払いの不確実性は、物理的な通貨を使用すれば対面で回避できるが、信頼できる当事者なしに通信チャネルを通じて支払いを行うメカニズムは存在しない。
必要とされているのは、信頼ではなく暗号学的証明に基づく電子決済システムであり、信頼できる第三者を必要とせずに任意の二者が直接取引できるようにするものである。計算上取消しが実質的に不可能なトランザクションは売り手を詐欺から保護し、日常的なエスクローメカニズムで買い手を容易に保護できる。本論文では、peer-to-peer分散タイムスタンプサーバーを用いてトランザクションの時系列順序の計算的証明を生成することで、二重支払い問題への解決策を提案する。このシステムは、正直なノードが協力する攻撃者ノードの集団よりも多くのCPUパワーを集合的に制御している限り安全である。
Introduction
Коммерция в Интернете стала почти исключительно зависеть от финансовых учреждений, выступающих в роли доверенных третьих сторон для обработки электронных платежей. Хотя система достаточно хорошо работает для большинства транзакций, она по-прежнему страдает от врожденных слабостей модели, основанной на доверии. Полностью необратимые транзакции фактически невозможны, поскольку финансовые учреждения не могут избежать посредничества в спорах. Стоимость посредничества увеличивает транзакционные издержки, ограничивая минимальный практический размер транзакции и исключая возможность мелких повседневных транзакций, а также существует более широкая цена в виде утраты возможности осуществлять необратимые платежи за необратимые услуги. С возможностью отмены потребность в доверии распространяется. Продавцы должны с осторожностью относиться к своим клиентам, запрашивая у них больше информации, чем было бы необходимо в ином случае. Определенный процент мошенничества принимается как неизбежный. Эти издержки и неопределенности платежей можно избежать при личных расчетах с использованием физической валюты, но не существует механизма для осуществления платежей по каналу связи без доверенной стороны.
Необходима электронная платежная система, основанная на криптографическом доказательстве вместо доверия, позволяющая любым двум желающим сторонам совершать сделки напрямую друг с другом без необходимости в доверенной третьей стороне. Транзакции, которые вычислительно непрактично отменить, защитили бы продавцов от мошенничества, а обычные механизмы условного депонирования могли бы быть легко реализованы для защиты покупателей. В данной работе мы предлагаем решение проблемы двойного расходования с использованием одноранговой распределенной системы серверов временных меток для генерации вычислительного доказательства хронологического порядка транзакций. Система безопасна до тех пор, пока честные узлы совместно контролируют больше вычислительной мощности CPU, чем любая кооперирующаяся группа атакующих узлов.
Transactions
我々は電子コインをデジタル署名のチェーンとして定義する。各所有者は、前のトランザクションのhashと次の所有者の公開鍵にデジタル署名し、これらをコインの末尾に追加することで、次の所有者にコインを転送する。受取人は署名を検証することで所有権のチェーンを検証できる。

もちろん問題は、受取人が所有者の一人がコインを二重支払いしていないことを検証できないことである。一般的な解決策は、すべてのトランザクションの二重支払いをチェックする信頼できる中央機関、つまり造幣局を導入することである。各トランザクションの後、コインは新しいコインを発行するために造幣局に返却されなければならず、造幣局から直接発行されたコインのみが二重支払いされていないと信頼される。この解決策の問題は、銀行と同様に、すべてのトランザクションがそこを経由しなければならず、貨幣システム全体の運命が造幣局を運営する企業に依存することである。
我々は、受取人が以前の所有者がそれ以前のトランザクションに署名していないことを知る方法を必要とする。我々の目的においては、最も早いトランザクションが有効であり、それ以降の二重支払いの試みは問題としない。トランザクションが存在しないことを確認する唯一の方法は、すべてのトランザクションを認識することである。造幣局ベースのモデルでは、造幣局がすべてのトランザクションを認識し、どれが最初に到着したかを決定していた。信頼できる当事者なしにこれを達成するためには、トランザクションは公開で通知されなければならず[^1]、参加者がトランザクションの受信順序の単一の履歴に合意するシステムが必要である。受取人は、各トランザクションの時点で、ノードの過半数がそれを最初に受信したものとして合意したことの証明を必要とする。
Transactions
Мы определяем электронную монету как цепочку цифровых подписей. Каждый владелец передает монету следующему, подписывая цифровой подписью хеш предыдущей транзакции и открытый ключ следующего владельца и добавляя их в конец монеты. Получатель платежа может проверить подписи для верификации цепочки владения.

Проблема, разумеется, в том, что получатель платежа не может проверить, не потратил ли один из владельцев монету дважды. Распространенное решение заключается во введении доверенного центрального органа, или монетного двора, который проверяет каждую транзакцию на предмет двойного расходования. После каждой транзакции монета должна быть возвращена на монетный двор для выпуска новой монеты, и только монеты, выпущенные непосредственно монетным двором, считаются не потраченными дважды. Проблема этого решения в том, что судьба всей денежной системы зависит от компании, управляющей монетным двором, и каждая транзакция должна проходить через них, как через банк.
Нам нужен способ, позволяющий получателю платежа знать, что предыдущие владельцы не подписывали никаких более ранних транзакций. Для наших целей самая ранняя транзакция является определяющей, поэтому нас не беспокоят последующие попытки двойного расходования. Единственный способ подтвердить отсутствие транзакции — быть осведомленным обо всех транзакциях. В модели монетного двора монетный двор знал обо всех транзакциях и решал, какая поступила первой. Чтобы достичь этого без доверенной стороны, транзакции должны быть объявлены публично [^1], и нам нужна система, позволяющая участникам согласовать единую историю порядка, в котором они были получены. Получателю платежа нужно доказательство того, что в момент каждой транзакции большинство узлов согласились, что она была получена первой.
Timestamp Server
我々が提案する解決策はタイムスタンプサーバーから始まる。タイムスタンプサーバーは、タイムスタンプを付与するアイテムのブロックのhashを取得し、新聞やUsenetへの投稿のようにそのhashを広く公開することで機能する[^2] [^3] [^4] [^5]。タイムスタンプは、hashに含まれるためにそのデータがその時点で存在していたことを明らかに証明する。各タイムスタンプはそのhash内に前のタイムスタンプを含み、チェーンを形成し、追加のタイムスタンプごとにそれ以前のものを強化する。

Timestamp Server
Предлагаемое нами решение начинается с сервера временных меток. Сервер временных меток работает, беря хеш блока элементов, которым нужно присвоить временную метку, и широко публикуя этот хеш, например, в газете или посте Usenet [^2] [^3] [^4] [^5]. Временная метка доказывает, что данные, очевидно, должны были существовать в это время, чтобы попасть в хеш. Каждая временная метка включает предыдущую временную метку в свой хеш, образуя цепочку, где каждая дополнительная временная метка усиливает предыдущие.

Proof-of-Work
peer-to-peerベースで分散タイムスタンプサーバーを実装するには、新聞やUsenetの投稿ではなく、Adam BackのHashcash [^6]に類似したproof-of-workシステムを使用する必要がある。proof-of-workは、hash化した際に(例えばSHA-256で)hashが一定数のゼロビットで始まる値を探索することを含む。必要な平均作業量はゼロビット数に対して指数関数的であり、単一のhashを実行することで検証できる。
我々のタイムスタンプネットワークでは、ブロック内のnonceをインクリメントし、ブロックのhashに必要なゼロビットを与える値が見つかるまで繰り返すことでproof-of-workを実装する。proof-of-workを満たすためにCPUの労力が費やされると、その作業をやり直さない限りブロックを変更することはできない。後続のブロックがその後にチェーンされるため、ブロックを変更するための作業にはそれ以降のすべてのブロックをやり直すことが含まれる。

proof-of-workは、多数決における代表性の決定問題も解決する。もし多数決が1つのIPアドレスにつき1票に基づいていたならば、多数のIPを割り当てられる者によって覆される可能性がある。proof-of-workは本質的に1つのCPUにつき1票である。多数決は最長のチェーン、すなわち最大のproof-of-work労力が投入されたチェーンによって表される。CPUパワーの過半数が正直なノードによって制御されていれば、正直なチェーンが最も速く成長し、競合するいかなるチェーンも凌駕する。過去のブロックを改変するには、攻撃者はそのブロックとそれ以降のすべてのブロックのproof-of-workをやり直し、さらに正直なノードの作業に追いつき追い越さなければならない。遅い攻撃者が追いつく確率は、後続のブロックが追加されるにつれて指数関数的に減少することを後に示す。
ハードウェア速度の向上と、時間の経過に伴うノード運用への関心の変動を補うため、proof-of-workの難易度は1時間あたりの平均ブロック数を目標とする移動平均によって決定される。生成速度が速すぎる場合、難易度は上昇する。
Proof-of-Work
Для реализации распределенного сервера временных меток на одноранговой основе нам потребуется использовать систему proof-of-work, аналогичную Hashcash Адама Бэка [^6], вместо газет или постов Usenet. Proof-of-work включает поиск значения, хеш которого, например при использовании SHA-256, начинается с определенного количества нулевых битов. Средний объем работы, необходимый для этого, экспоненциально зависит от количества требуемых нулевых битов и может быть проверен выполнением одного хеширования.
Для нашей сети временных меток мы реализуем proof-of-work путем увеличения nonce в блоке до тех пор, пока не будет найдено значение, дающее хешу блока требуемое количество нулевых битов. После того как затрачена вычислительная мощность CPU для удовлетворения proof-of-work, блок не может быть изменен без повторного выполнения работы. Поскольку последующие блоки связываются после него, работа по изменению блока включала бы повторное выполнение всех блоков после него.

Proof-of-work также решает проблему определения представительства при принятии решений большинством. Если бы большинство определялось по принципу один-IP-адрес-один-голос, оно могло бы быть подорвано любым, кто способен выделить множество IP-адресов. Proof-of-work — это, по сути, один-CPU-один-голос. Решение большинства представлено самой длинной цепочкой, в которую вложен наибольший объем работы proof-of-work. Если большая часть мощности CPU контролируется честными узлами, честная цепочка будет расти быстрее всех и опережать любые конкурирующие цепочки. Чтобы изменить прошлый блок, атакующему пришлось бы повторно выполнить proof-of-work этого блока и всех последующих блоков, а затем догнать и превзойти работу честных узлов. Позже мы покажем, что вероятность того, что более медленный атакующий догонит, экспоненциально уменьшается по мере добавления последующих блоков.
Для компенсации возрастающей скорости оборудования и меняющегося интереса к запуску узлов с течением времени сложность proof-of-work определяется скользящим средним, нацеленным на среднее количество блоков в час. Если они генерируются слишком быстро, сложность возрастает.
Network
ネットワークを運用する手順は以下の通りである:
- 新しいトランザクションがすべてのノードにブロードキャストされる。
- 各ノードが新しいトランザクションをブロックに収集する。
- 各ノードがそのブロックに対する困難なproof-of-workの発見に取り組む。
- ノードがproof-of-workを発見すると、そのブロックをすべてのノードにブロードキャストする。
- ノードは、ブロック内のすべてのトランザクションが有効であり、まだ使用されていない場合にのみ、そのブロックを承認する。
- ノードは、承認されたブロックのhashを前のhashとして使用し、チェーンの次のブロックの作成に取り組むことで、そのブロックの承認を表明する。
ノードは常に最長のチェーンを正しいものとみなし、その延長に取り組み続ける。2つのノードが異なるバージョンの次のブロックを同時にブロードキャストした場合、一部のノードはどちらか一方を先に受信する可能性がある。その場合、ノードは最初に受信した方に取り組むが、もう一方のブランチがより長くなった場合に備えて保存しておく。次のproof-of-workが発見され、一方のブランチがより長くなった時点で決着がつき、もう一方のブランチで作業していたノードはより長い方に切り替える。
新しいトランザクションのブロードキャストは、必ずしもすべてのノードに到達する必要はない。多くのノードに到達すれば、やがてブロックに取り込まれる。ブロックのブロードキャストもメッセージの欠落に対して寛容である。ノードがブロックを受信しなかった場合、次のブロックを受信した際に欠落に気づき、そのブロックを要求する。
Network
Шаги для работы сети следующие:
- Новые транзакции рассылаются всем узлам.
- Каждый узел собирает новые транзакции в блок.
- Каждый узел работает над поиском сложного proof-of-work для своего блока.
- Когда узел находит proof-of-work, он рассылает блок всем узлам.
- Узлы принимают блок, только если все транзакции в нем действительны и не были потрачены ранее.
- Узлы выражают свое принятие блока, работая над созданием следующего блока в цепочке, используя хеш принятого блока в качестве предыдущего хеша.
Узлы всегда считают самую длинную цепочку правильной и продолжают работать над ее удлинением. Если два узла одновременно рассылают разные версии следующего блока, некоторые узлы могут получить одну или другую первой. В этом случае они работают над той, которую получили первой, но сохраняют другую ветвь на случай, если она станет длиннее. Ничья будет разрешена, когда будет найден следующий proof-of-work и одна ветвь станет длиннее; узлы, работавшие над другой ветвью, тогда переключатся на более длинную.
Рассылка новых транзакций не обязательно должна достигать всех узлов. Пока они достигают многих узлов, они попадут в блок в скором времени. Рассылка блоков также устойчива к потере сообщений. Если узел не получает блок, он запросит его при получении следующего блока, осознав, что пропустил один.
Incentive
慣例により、ブロック内の最初のトランザクションは、ブロックの作成者が所有する新しいコインを生成する特別なトランザクションである。これはノードがネットワークを支援するインセンティブを追加し、発行する中央機関が存在しないため、コインを流通させる初期分配の方法を提供する。一定量の新しいコインの着実な追加は、金鉱夫が資源を費やして金を流通に追加することに類似している。我々の場合、費やされるのはCPU時間と電力である。
インセンティブはトランザクション手数料でも賄うことができる。トランザクションの出力値がその入力値よりも小さい場合、差額はそのトランザクションを含むブロックのインセンティブ値に加算されるトランザクション手数料となる。所定の数のコインが流通に入った後、インセンティブは完全にトランザクション手数料に移行し、完全にインフレーションフリーとなることができる。
インセンティブはノードが正直であり続けることを促す助けとなりうる。貪欲な攻撃者がすべての正直なノードよりも多くのCPUパワーを集めることができた場合、その力を使って自身の支払いを取り戻す詐欺を行うか、新しいコインの生成に使用するかを選択しなければならない。ルールに従って行動する方がより収益性が高いと判断するはずであり、そのようなルールは他の全員を合わせたよりも多くの新しいコインを彼に有利に与えるのであって、システムと自身の富の正当性を損なうよりもましである。
Incentive
По соглашению, первая транзакция в блоке является специальной транзакцией, которая создает новую монету, принадлежащую создателю блока. Это добавляет стимул для узлов поддерживать сеть и обеспечивает способ первоначального распределения монет в обращение, поскольку нет центрального органа для их выпуска. Постоянное добавление фиксированного количества новых монет аналогично тому, как золотодобытчики тратят ресурсы для добавления золота в обращение. В нашем случае расходуется процессорное время и электроэнергия.
Стимул также может финансироваться за счет комиссий за транзакции. Если выходное значение транзакции меньше ее входного значения, разница представляет собой комиссию за транзакцию, которая добавляется к стимулирующему значению блока, содержащего транзакцию. Как только заранее определенное количество монет поступит в обращение, стимул может полностью перейти на комиссии за транзакции и быть полностью свободным от инфляции.
Стимул может помочь побудить узлы оставаться честными. Если жадный атакующий сможет собрать больше вычислительной мощности CPU, чем все честные узлы, ему придется выбирать между использованием ее для обмана людей путем возврата своих платежей или использованием ее для генерации новых монет. Ему должно быть выгоднее играть по правилам, которые дают ему больше новых монет, чем всем остальным вместе взятым, чем подрывать систему и обесценивать собственное богатство.
Reclaiming Disk Space
コイン内の最新のトランザクションが十分な数のブロックの下に埋まれば、それ以前の使用済みトランザクションはディスクスペースを節約するために破棄できる。ブロックのhashを壊さずにこれを実現するため、トランザクションはMerkle Tree [^7] [^2] [^5]にhash化され、ルートのみがブロックのhashに含まれる。古いブロックはツリーの枝を切り落とすことでコンパクトにできる。内部のhashは保存する必要がない。

トランザクションを含まないブロックヘッダーは約80バイトとなる。ブロックが10分ごとに生成されると仮定すると、80バイト * 6 * 24 * 365 = 年間4.2MBとなる。2008年時点でコンピュータシステムが一般的に2GBのRAMを搭載して販売されており、ムーアの法則が年間1.2GBの現在の成長を予測していることを考えると、ブロックヘッダーをメモリに保持しなければならないとしてもストレージは問題とはならない。
Reclaiming Disk Space
Как только последняя транзакция в монете оказывается погребена под достаточным количеством блоков, потраченные транзакции до нее могут быть отброшены для экономии дискового пространства. Чтобы обеспечить это без нарушения хеша блока, транзакции хешируются в дереве Меркла (Merkle Tree) [^7] [^2] [^5], и только корень включается в хеш блока. Старые блоки затем могут быть сжаты путем отсечения ветвей дерева. Внутренние хеши не нужно хранить.

Заголовок блока без транзакций занимал бы около 80 байт. Если предположить, что блоки генерируются каждые 10 минут, 80 байт * 6 * 24 * 365 = 4,2 МБ в год. При том, что компьютерные системы обычно продавались с 2 ГБ ОЗУ по состоянию на 2008 год, а закон Мура предсказывает текущий рост в 1,2 ГБ в год, хранение не должно быть проблемой, даже если заголовки блоков необходимо хранить в памяти.
Simplified Payment Verification
完全なネットワークノードを稼働させずに支払いを検証することが可能である。ユーザーは最長のproof-of-workチェーンのブロックヘッダーのコピーのみを保持すればよく、最長のチェーンを持っていると確信するまでネットワークノードに問い合わせることで取得でき、トランザクションをそれがタイムスタンプされたブロックにリンクするMerkleブランチを取得できる。ユーザー自身がトランザクションを確認することはできないが、チェーン内の場所にリンクすることで、ネットワークノードがそれを承認したことを確認でき、その後に追加されたブロックがネットワークがそれを承認したことをさらに裏付ける。

そのため、正直なノードがネットワークを制御している限り検証は信頼できるが、ネットワークが攻撃者に圧倒された場合はより脆弱になる。ネットワークノードはトランザクションを自ら検証できるが、この簡易的な方法は、攻撃者がネットワークを圧倒し続けられる限り、攻撃者が捏造したトランザクションに欺かれる可能性がある。これに対する防御戦略の一つは、ネットワークノードが無効なブロックを検出した際にアラートを受け入れ、ユーザーのソフトウェアに完全なブロックとアラートされたトランザクションをダウンロードさせ、不整合を確認することである。頻繁に支払いを受ける企業は、より独立したセキュリティと迅速な検証のために、おそらく自社のノードを運用することを望むだろう。
Simplified Payment Verification
Можно проверять платежи, не запуская полный сетевой узел. Пользователю нужно лишь хранить копию заголовков блоков самой длинной цепочки proof-of-work, которую он может получить, опрашивая сетевые узлы, пока не убедится, что имеет самую длинную цепочку, и получить ветвь Меркла, связывающую транзакцию с блоком, в котором она получила временную метку. Он не может проверить транзакцию самостоятельно, но, связав ее с местом в цепочке, он может увидеть, что сетевой узел принял ее, и блоки, добавленные после нее, дополнительно подтверждают, что сеть ее приняла.

Таким образом, проверка надежна, пока честные узлы контролируют сеть, но более уязвима, если сеть захвачена атакующим. В то время как сетевые узлы могут самостоятельно проверять транзакции, упрощенный метод может быть обманут сфабрикованными транзакциями атакующего, пока тот может продолжать доминировать в сети. Одной из стратегий защиты от этого было бы принятие предупреждений от сетевых узлов при обнаружении ими недействительного блока, побуждающих программное обеспечение пользователя загрузить полный блок и отмеченные транзакции для подтверждения несоответствия. Предприятия, получающие частые платежи, вероятно, по-прежнему захотят запускать собственные узлы для более независимой безопасности и более быстрой проверки.
Combining and Splitting Value
コインを個別に扱うことは可能であるが、送金の1セントごとに別々のトランザクションを作成するのは扱いにくい。価値の分割と結合を可能にするため、トランザクションには複数の入力と出力が含まれる。通常、より大きな前のトランザクションからの単一の入力か、より小さな金額を結合する複数の入力があり、出力は最大で2つ:支払い用の1つと、もしあればお釣りを送信者に返す1つである。

あるトランザクションが複数のトランザクションに依存し、それらのトランザクションがさらに多くのトランザクションに依存するファンアウトは、ここでは問題にならないことに注意すべきである。トランザクションの完全な独立したコピーを抽出する必要は決してない。
Combining and Splitting Value
Хотя было бы возможно обрабатывать монеты по отдельности, было бы неудобно создавать отдельную транзакцию для каждого цента при переводе. Чтобы позволить разделение и объединение стоимости, транзакции содержат несколько входов и выходов. Обычно будет либо один вход от более крупной предыдущей транзакции, либо несколько входов, объединяющих меньшие суммы, и не более двух выходов: один для платежа и один для возврата сдачи, если таковая имеется, отправителю.

Следует отметить, что разветвление (fan-out), когда транзакция зависит от нескольких транзакций, а те, в свою очередь, зависят от еще большего числа, здесь не является проблемой. Никогда нет необходимости извлекать полную самостоятельную копию истории транзакции.
Privacy
従来の銀行モデルは、関係当事者と信頼できる第三者に情報へのアクセスを制限することで一定レベルのプライバシーを実現している。すべてのトランザクションを公開で通知する必要性はこの方法を不可能にするが、別の場所で情報の流れを断ち切ることでプライバシーを維持することは可能である:公開鍵を匿名に保つことによってである。誰かが他の誰かに金額を送金していることは公開で見ることができるが、そのトランザクションを個人に結びつける情報はない。これは、証券取引所が公開する情報レベルに類似しており、個々の取引の時間と規模、すなわち「ティッカーテープ」は公開されるが、当事者が誰であるかは明かされない。

追加のファイアウォールとして、各トランザクションに新しいキーペアを使用し、共通の所有者にリンクされることを防ぐべきである。複数入力のトランザクションでは、一部のリンクは依然として不可避であり、それらの入力が同一の所有者のものであったことが必然的に明らかになる。リスクは、鍵の所有者が明らかになった場合、リンクによって同一の所有者に属する他のトランザクションが明らかになる可能性があることである。
Privacy
Традиционная банковская модель обеспечивает определенный уровень конфиденциальности, ограничивая доступ к информации вовлеченными сторонами и доверенной третьей стороной. Необходимость публично объявлять все транзакции исключает этот метод, но конфиденциальность все еще может быть сохранена путем прерывания потока информации в другом месте: путем сохранения анонимности открытых ключей. Общественность может видеть, что кто-то отправляет сумму кому-то другому, но без информации, связывающей транзакцию с кем-либо. Это аналогично уровню информации, публикуемой фондовыми биржами, где время и объем отдельных сделок, «лента», делаются публичными, но без указания того, кем были стороны.

В качестве дополнительного барьера для каждой транзакции следует использовать новую пару ключей, чтобы предотвратить их привязку к общему владельцу. Некоторая связь по-прежнему неизбежна при транзакциях с несколькими входами, которые неизбежно раскрывают, что их входы принадлежали одному владельцу. Риск состоит в том, что если владелец ключа будет раскрыт, связывание может раскрыть другие транзакции, принадлежавшие тому же владельцу.
Calculations
攻撃者が正直なチェーンよりも速く代替チェーンを生成しようとするシナリオを考える。これが達成されたとしても、無から価値を創造したり、攻撃者に属さない金銭を奪うなど、システムが恣意的な変更に開かれるわけではない。ノードは無効なトランザクションを支払いとして受け入れず、正直なノードはそれを含むブロックを決して受け入れない。攻撃者は、自分自身のトランザクションの1つを変更して最近使った金銭を取り戻すことしか試みることができない。
正直なチェーンと攻撃者のチェーンの競争は二項ランダムウォークとして特徴づけることができる。成功事象は正直なチェーンが1ブロック延長されリードが+1増加すること、失敗事象は攻撃者のチェーンが1ブロック延長され差が-1縮小することである。
攻撃者が所定の不足分から追いつく確率は、ギャンブラーの破産問題に類似している。無限の信用を持つギャンブラーが不足分から出発し、損益分岐点に達しようと無限の試行を行うと仮定する。損益分岐点に達する確率、つまり攻撃者が正直なチェーンに追いつく確率は以下のように計算できる[^8]:
p = probability an honest node finds the next block
q = probability the attacker finds the next block
q = probability the attacker will ever catch up from z blocks behind
``````
\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]
p qという我々の仮定の下では、攻撃者が追いつかなければならないブロック数が増加するにつれて確率は指数関数的に低下する。不利な状況において、早い段階で幸運にも前進できなければ、遅れるにつれてその可能性は極めて小さくなる。
次に、新しいトランザクションの受取人が、送信者がトランザクションを変更できないと十分に確信するまでにどのくらい待つ必要があるかを考える。送信者は、受取人にしばらくの間支払ったと信じさせた後、一定時間の経過後に自分自身への支払いに切り替えたい攻撃者であると仮定する。受信者はそれが起こった時にアラートを受けるが、送信者はそれが手遅れであることを望んでいる。
受信者は新しいキーペアを生成し、署名の直前に送信者に公開鍵を渡す。これにより、送信者が十分先行できるほどの幸運を得るまで継続的にブロックのチェーンを事前に準備し、そのタイミングでトランザクションを実行することを防ぐ。トランザクションが送信されると、不正な送信者は自分のトランザクションの代替バージョンを含む並行チェーンを秘密裏に作成する作業を開始する。
受取人はトランザクションがブロックに追加され、その後にzブロックがリンクされるまで待つ。攻撃者が正確にどの程度進んでいるかは分からないが、正直なブロックがブロックあたりの平均予想時間を要したと仮定すると、攻撃者の潜在的な進捗は期待値が次のPoisson分布となる:
\[
\lambda = z\frac{q}{p}
\]
攻撃者が今なお追いつける確率を求めるために、攻撃者が到達しうる各進捗量のPoisson密度に、その地点から追いつける確率を乗じる:
\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]
分布の無限の裾を合計することを避けるために整理すると...
\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]
C言語コードに変換すると...
```c
#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に対して指数関数的に低下することが分かる。
q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
Pが0.1%未満となるzを求めると...
P 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
Calculations
Рассмотрим сценарий, в котором атакующий пытается сгенерировать альтернативную цепочку быстрее, чем честная цепочка. Даже если это удастся, это не открывает систему для произвольных изменений, таких как создание стоимости из ничего или присвоение денег, которые никогда не принадлежали атакующему. Узлы не примут недействительную транзакцию в качестве платежа, и честные узлы никогда не примут блок, содержащий такие транзакции. Атакующий может лишь попытаться изменить одну из своих собственных транзакций, чтобы вернуть деньги, которые он недавно потратил.
Гонку между честной цепочкой и цепочкой атакующего можно охарактеризовать как биномиальное случайное блуждание. Событие успеха — это удлинение честной цепочки на один блок, увеличивающее ее отрыв на +1, а событие неудачи — это удлинение цепочки атакующего на один блок, сокращающее разрыв на -1.
Вероятность того, что атакующий наверстает упущенное с заданного отставания, аналогична задаче о разорении игрока. Предположим, что игрок с неограниченным кредитом начинает с дефицита и играет потенциально бесконечное число раундов, пытаясь выйти в ноль. Мы можем рассчитать вероятность того, что он когда-либо выйдет в ноль, или что атакующий когда-либо догонит честную цепочку, следующим образом [^8]:
p = вероятность того, что честный узел найдет следующий блок
q = вероятность того, что атакующий найдет следующий блок
q = вероятность того, что атакующий когда-либо догонит, отставая на z блоков
\[ qz = \begin{cases} 1 & \text{если } p \leq q \\ \left(\frac{q}{p}\right) z & \text{если } p > q \end{cases} \]
Учитывая наше предположение, что p q, вероятность экспоненциально падает с увеличением числа блоков, которые атакующему нужно наверстать. При неблагоприятных шансах, если он не сделает удачный рывок в самом начале, его шансы становятся исчезающе малыми по мере дальнейшего отставания.
Теперь рассмотрим, как долго получатель новой транзакции должен ждать, прежде чем быть достаточно уверенным, что отправитель не может изменить транзакцию. Мы предполагаем, что отправитель — атакующий, который хочет заставить получателя поверить, что он заплатил ему, на некоторое время, а затем переключить платеж на себя после истечения некоторого времени. Получатель будет предупрежден, когда это произойдет, но отправитель надеется, что будет слишком поздно.
Получатель генерирует новую пару ключей и передает открытый ключ отправителю незадолго до подписания. Это предотвращает подготовку отправителем цепочки блоков заранее путем непрерывной работы над ней, пока ему не посчастливится достаточно продвинуться вперед, а затем выполнить транзакцию в этот момент. После отправки транзакции нечестный отправитель начинает тайно работать над параллельной цепочкой, содержащей альтернативную версию его транзакции.
Получатель ждет, пока транзакция не будет добавлена в блок и z блоков не будут связаны после него. Он не знает точный объем прогресса атакующего, но предполагая, что честные блоки создавались за среднее ожидаемое время на блок, потенциальный прогресс атакующего будет иметь распределение Пуассона с математическим ожиданием:
\[ \lambda = z\frac{q}{p} \]
Чтобы получить вероятность того, что атакующий все еще может догнать, мы умножаем плотность Пуассона для каждого объема прогресса, который он мог сделать, на вероятность того, что он сможет догнать с этой точки:
\[ \sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{ \begin{array}{cl} \left(\frac{q}{p}\right)^{(z-k)} & \text{если } k \leq z \\ 1 & \text{если } k > z \end{array} \right. \]
Преобразуя, чтобы избежать суммирования бесконечного хвоста распределения...
\[ 1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right) \]
Преобразуя в код на C...
#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.
q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
Решая для P менее 0,1%...
P 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
Conclusion
我々は信頼に依存しない電子取引のシステムを提案した。デジタル署名から作られるコインの通常のフレームワークから出発した。これは所有権の強力な管理を提供するが、二重支払いを防ぐ方法がなければ不完全である。これを解決するために、proof-of-workを用いてトランザクションの公開履歴を記録するpeer-to-peerネットワークを提案した。正直なノードがCPUパワーの過半数を制御していれば、攻撃者がそれを変更することは計算上急速に非現実的となる。ネットワークはその非構造的な単純さにおいて頑健である。ノードはほとんど協調なしに一斉に作業する。メッセージは特定の場所にルーティングされるのではなくベストエフォートで配信されるだけでよいため、ノードは識別される必要がない。ノードは自由にネットワークから離脱・再参加でき、不在中に何が起こったかの証明としてproof-of-workチェーンを受け入れる。ノードはCPUパワーで投票し、有効なブロックの延長に取り組むことでその承認を表明し、無効なブロックに対しては作業を拒否することで拒絶する。必要なルールとインセンティブはすべてこの合意メカニズムによって施行できる。
Conclusion
Мы предложили систему электронных транзакций, не основанную на доверии. Мы начали с обычной структуры монет, созданных из цифровых подписей, которая обеспечивает надежный контроль над собственностью, но является неполной без способа предотвращения двойного расходования. Для решения этой проблемы мы предложили одноранговую сеть, использующую proof-of-work для записи публичной истории транзакций, которую быстро становится вычислительно непрактично изменить для атакующего, если честные узлы контролируют большую часть мощности CPU. Сеть устойчива в своей неструктурированной простоте. Узлы работают одновременно с минимальной координацией. Их не нужно идентифицировать, поскольку сообщения не направляются в какое-либо конкретное место и должны быть доставлены лишь по принципу максимальных усилий. Узлы могут покидать сеть и присоединяться к ней по желанию, принимая цепочку proof-of-work как доказательство того, что произошло в их отсутствие. Они голосуют своей вычислительной мощностью CPU, выражая принятие действительных блоков работой над их продлением и отклоняя недействительные блоки отказом работать над ними. Любые необходимые правила и стимулы могут быть реализованы с помощью этого механизма консенсуса.
References
-
H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
-
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
-
D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
-
S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
-
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
-
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
-
W. Feller, "An introduction to probability theory and its applications," 1957.
References
-
H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
-
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
-
D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
-
S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
-
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
-
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
-
W. Feller, "An introduction to probability theory and its applications," 1957.