仮想通貨やブロックチェーンを使った何かしらのプロダクトに関わりたいと思ってはや2年。
情報収集はたまにしてきたけど、忙しさを理由にほとんど手を動かしてこなかった。
反省して、ゼロから始めようと思う。まだ間に合うさ。
さて、何から始めようか。。。そういえば、、、
全ての原点であるSatoshi Nakamotoさんの論文をちゃんと読んで、かつ、理解していないことに気がついた。
ということで、Bitcoin: A Peer-to-Peer Electronic Cash Systemを和訳していく。そして、自分なりに理解した部分を注釈として追記していきたい。

概要 -和訳-

P2Pで実現する仮想通貨は、既存の金融システムを介さずに、インターネット上で人から人へ支払いを可能にします。
デジタル認証はソリューションの一部ですが、もし第三者が二重支払いの防止を要求をされているならこの仕組みのほとんどの利点が失われることになります。P2Pを使うことで二重支払い問題の解決策を提案します。
解決策とは、ハッシュベースPoWで作成されていく鎖であるネットワークタイムスタンプトランザクションです。この鎖はPoWをやり直さない限り変更できないレコードで構成されています。
最も長い鎖は、一連のイベントの立会い人としての証明だけではなく、最も大きなCPUパワーで実現された証明としても提供されます。
ネットワーク攻撃に協力しないノードによって大部分のCPUパワーが制御される限り、最も長い鎖を生成し、ネットワーク攻撃に負けることはないでしょう。
ネットワークそれ自体は最小構成です。メッセージは活躍に応じて配信され、ノードは自由に離脱したり再参加したりできます。再参加には離脱している間に発生したイベントの証明として最も長いPoWの鎖を受け取る必要があります。

概要 -所感-

P2Pで仮想通貨を人から人へ送信するってことは、つまり、サーバを介さずにPC(もしくはスマホなどの端末)で直接やりとりするというわけですが、その場合、送信先はどうやって特定するのしょうか?例えば地球の裏側にP2Pで支払データを送信する場合、地球の裏側に到達するまでに様々なネットワーク機器やサーバが存在すると思います。すんなり送信できるのでしょうか?このあたりはネットワーク技術の問題だと思いますが、この論文ではどのように考察されるのかこの先楽しみです。
また、二重支払問題の解決策とされているPoWとは具体的にどういうものなのでしょうか?
そして、鎖を作成するようですが、誰が、いつ、どのように作成し、作った鎖はどのように扱われるのでしょうか?
最も長い鎖が、ネットワーク攻撃に負けないのはなぜでしょうか?
現時点ではこのシステムを使う大きな利点がわかりません。読み終えた後、このシステムにみんなが熱狂している理由が少しでも理解できたらいいなぁと思います。

p2pandfinancialinstitution





序論 -和訳-

インターネット上の商業活動は、電子決済を処理する信頼できる第三者である金融機関を頼ることで行われてきました。このシステムがほとんどのトランザクションでうまく機能している一方で、信頼ベースのモデルに内在している欠点を持っています。金融機関は問題が発生した場合に仲裁しなければいけないので、完全な不可逆的トランザクションを実現することは不可能です。仲裁のコスト増加がトランザクションコストを増加させます。このことは実用的な最小トランザクションサイズを制限し、小さなトランザクションを不可能にします。そして、不可逆的サービスの不可逆的決済が使えない中でより広範囲なコストがかかります。可逆的可能性があるので、信頼できる第三者の必要性が増加します。商業関係者は自分たちの顧客に対して過敏で、多くの情報に苦しめられています。詐欺の一定数は避けられないものと認識されています。仲裁のためのコストや詐欺などによる決済の不確実性は人が実在のお金を使用することで避けることができます。しかし、信頼できる第三者なしに通信チャンネル上で決済できるメカニズムは存在しません。必要なのは、信頼の代わりに暗号化された証明をベースとした電子決済システムです。この電子決済システムは、信頼された第三者なしに、同意した二人が直接商取引きを行えます。実現不可能だと思われるが取消トランザクションは売手を詐欺行為から守ります。また、エスクローは買手を容易に守ります。
この論文で、私たちは二重支払い問題を解決する方法を提案します。それにはコンピュータを使ってトランザクションの発生順を証明するP2P分散型タイムスタンプシステムを使用します。このシステムは信頼できるノードが悪意の攻撃的ノードより多くのCPUパワーをコントロールする限りにおいては、安全です。

序論 -所感-

satoshi nakamotoは下記を問題提議しています。

・金融機関を第三者として頼るシステムはコストがかかる
・取引には可逆的可能性があるので金融機関のような第三者が必要となる
・商業関係者達は一定数の詐欺行為は容認している
・金融機関のような第三者が不要な通信チャンネル上の決済システムは存在しない

私は仕事で三菱東京UFJ銀行からみずほ銀行に振込をすることがよくありますが、その際手数料として3万円未満の場合は270円、3万円以上の場合は432円が必要になります。3000円の仕事を発注した時には、およそ1割にあたる270円を手数料として支払ったことになります。年間だと1万円近い手数料を支払っています。確かに現状システムはコストがかかると感じます(まぁ、このぐらいの金額ならいいかなぁとも思いますが^^)。社会全体で見た場合は相当なコストなのでしょう。
可逆的可能性というのは、誤った決済を取消してなかったことにするために必要なのでしょう。何かしらトラブルが発生し、仲裁にはいった金融機関がトラブル対処として取消を行うのでしょうが、私にはそういった経験が無いのでなんとも言えません。仲裁は第三者しかできないでしょうね。
インターネット上では詐欺行為が可能ですが、同意しあった本人同士が現金で決済すれば、そういった可能性はないと書かれています。そして、現金で決済するように安全な現金を使わないシステムをネットワーク上に構築することが書かれていると理解しました。

 physicalcurrencyandproposedsystem



トランザクション-和訳-

デジタル署名の鎖として電子通貨を定義します。コインのオーナーは、前のトランザクションのハッシュ値と次のオーナーの公開鍵とで自分の秘密鍵を使ってデジタル署名して、それをコインの後ろにくっつけて、コインを転送します。受取人はオーナー達が作ってきた鎖を確認して、前のオーナーの公開鍵を使ってデジタル署名が正しいことを確かめることができます。

transaction

問題は受取人があるオーナーが二重支払いをしていないことを確認できないことです。普通の解決策は信頼できる第三者を使うことです。もしくは、造幣局が全てのトランザクションをチェックすることです。コインは新しいコインとして発行されるために造幣局に戻るに違いありません。そして、造幣局から発行されたコインだけが二重支払いのない信頼できるコインです。この解決策の問題点は全てのお金のシステムを造幣局を運営している組織に依存していること、つまり、あらゆるトランザクションは銀行のような組織を介して取引されることです。
受取人にオーナーがトランザクションを認証しなかったことを知ってもらう必要があります。一番最初のトランザクションは一つです。なので、二重支払いについて気にしません。トランザクションの不在を確かめる唯一の方法は全てのトランザクションを気にかける事です。基本的に造幣局では全てのトランザクションをチェックしていました。そして最初に到着して決定しました。信頼できる機関なしにこれを成し遂げるためには、トランザクションが公表されなければなりません。私たちは参加者がそれらを受け取った順番通りに一つの履歴に同意するシステムが必要です。受取人はトランザクションに大多数のノードがそのトランザクションを初めて受け取ったという証明が必要です。

トランザクション-所感-

ここではトランザクションの作り方と、このトランザクションをつないだ鎖を電子通貨とすると記載されています。一個一個のトランザクションを各オーナーがデジタル署名することで、次にそのトランザクションを受け取ったオーナーが公開鍵を使って検証することができます。デジタル署名する時に前のトランザクションのハッシュ値をデジタル署名の対象にすることで、トランザクションとデジタル署名の間に対応関係ができます。このデジタル署名を検証することで、前のオーナーと前のトランザクションが特定できます。前のトランザクションが特定できるので、トランザクションを順番にさかのぼることが可能です。このトランザクションの関係を鎖と表現し、この鎖を電子通貨と定義しています。
現状、私は1つのトランザクションを1回のお金の動きと考えています。支払いであったり、受け取りであったりします。ですので、1回支払いが発生すると1トランザクション分鎖が長くなります。また、ここでいっているオーナーとは誰のことをさすのでしょうか?実際にお金を動かしている人と同一人物でしょうか?おそらく、オーナーとは今ではマイナーと呼ばれてい人たちで、実際にお金を動かしている人とは別なのでしょう。
ここで支払いフローをまとめます。支払いをしたい人は支払いに必要な情報、例えば、送金元、送金先、金額を作成して、それをオーナーに送信します。受け取ったオーナーは前のトランザクションのハッシュ値にデジタル署名し、受け取った情報にデジタル署名を付加した新しいトランザクションを作成します。それを鎖に追加します。デジタル署名を複合して得られるハッシュ値とトランザクションのハッシュ値を比較することで、作成したトランザクションが繋がっている鎖内のトランザクションを特定することができます。
ここでわからないことは、支払い情報の作成方法、オーナーの特定方法です。支払い情報の作成については、送信元の情報を誰でも使えてしまうと問題です。BさんがAさんのお金をBさんに支払うという支払い情報を作成できてしまうと大変です。送信元情報の扱いについては制御が必要です。オーナーの特定方法については、おそらく、誰でもいいから支払情報を送信して、先に鎖に繋いでくれた人がオーナーになるのではないかと思っています。
後半は、2重支払いについて記載されています。ここは訳が難しかったです。要約すると、2重支払を管理するには現状は信頼のある第三者が全トランザクションを管理しています。これを第三者なしに実現するためには、全トランザクションをみんなに公開し、トランザクションが最初の1個目であること大多数のオーナーが証明することが必要であるということです。
このトランザクションの章で鎖の繋ぎ方がわかりました。ぼやっとビットコインの仕組みがわかってきた気がします。

タイムスタンプサーバ-和訳-

私たちが提案する解決策はタイムスタンプサーバから始まります。タイムスタンプサーバはアイテムのブロックのタイムスタンプ付きハッシュ値を作成し、新聞やユーズネットのように、ハッシュ値を広く配布します。タイムスタンプはデータがその時に存在したことを証明します。各タイムスタンプはハッシュの中に以前のタイムスタンプを含んでいます。このタイムスタンプは以前のハッシュ値を強化するために加えられたものです。このタイムスタンプは鎖を形成します。

タイムスタンプサーバ-所感-

timestampserver

各ブロックのハッシュ値はタイムスタンプを含んでおり、そのブロックがタイムスタンプの時間に存在していたことを証明できます。さらにこのハッシュ値は過去のハッシュ値を含んで作られるため過去のタイムスタンプを含んでいることになり、このハッシュ値を再現しようとすると過去全てのタイムスタンプが必要になります。このことはハッシュ値を再現することをより困難にします。つまり、偽造ができないということ。ハッシュ値と前のブロックのハッシュ値を比較して同じであればそのブロックは偽造されてないことが証明できます。ただ、ハッシュ値と前のブロックをどうやって取得し、そのブロックのハッシュ値であることをどうやって判断するのかという疑問が残りました。また、前章のtransactionと今回のblockを同じものと考えていいのか謎です。
タイムスタンプサーバはこれで終わりです。

Proof-of-Work-和訳-

P2Pをベースとした配布タイムスタンプサーバを実装するために、新聞等ではなく[Adam Back's Hashcash]に似たシステムであるProof-of-Workを使う必要があります。Proof-of-WorkはSHA-256等でハッシュ化された時に値をスキャンします。ハッシュ化された値は0ビットの数字から始ります。要求されるのは指数関数的な0ビットの数です。シングルハッシュを作成することで検証されます。
タイムスタンプネットワークのために、私たちはブロックのハッシュの中に、要求された0ビットが発見されるまで、ブロックの中にnonceを増やすことによってProof-of-Workを実装します。CPUパワーがProof-of-Workを苦労して作成すると、そのブロックは再作成しないと変更することができません。あるブロックの後にブロックが繋がれた時、ブロックを全て作り直す必要があります。
Proof-of-workは多数決で決定する際の問題点を解決します。過半数が1つのIP addressで1投票権であった場合、多くのIP addressを持っている誰かによって覆される可能性があります。Proof-of-workは1つのCPUで1投票です。大多数の決定は最も長い鎖で表現されます。その鎖は最も大きなProof-of-workの努力が費やされています。もし、CPUパワーの大多数が正しいノードによってコントロールされるなら、正しい鎖は早くそして、他の鎖を凌駕するスピードで成長するでしょう。過去のブロックを修正するために、攻撃者はブロックのProof-of-workと繋がっている全てのブロックを再作成し、正常なノードをまさる仕事量で、正常なノードが作成したブロックの鎖に追いつく必要があります。ブロックが追加されるたびに、処理の遅い攻撃者がブロックに追いつく可能性を減らします。ハードウェアのスピードやさまざまな興味を補うために、Proof-of-workは一時間あたりの平均ブロック数の移動平均によって決定されます。ブロックがより早く生成されると、より困難になります。

Proof-of-Work-所感-

難しくなってきました。。。。えっとProof-of-Workには指数関数的な0ビットの数が必要だそうです。「指数関数的」というのは莫大な数字という理解ができます。「0ビット」の数というのは数字の0という意味でしょうか。指数関数的な0ビットの数とは例えば「00000000000000000000000000」みたいなやつですかね。で、「00000000000000000000000000」を発見するまでnonceを増やしていくと。「00000000000000000000000000」を探す方法はSHA-256等を使ってブロックをハッシュ化することのようです。要はブロックをハッシュ化して、「00000000000000000000000000」になるまでnonceをブロックに付加していくと。完成するブロックは[前のブロックのハッシュ値]+[nonce]+[トランザクション]*nで、ブロックが完成するのはブロックをハッシュ化して「00000000000000000000000000」になった時ということですね。プログラミングするとしたら[nonce]付加→ハッシュ化→0ビットの数チェックのループで、0ビットの数チェックがOKならループを抜け、NGならループ継続となるでしょう。ちなみに[nonce]とはランダムな数字のことです。
指数関数的な「00000000000000000000000000」をつくるのにCPUパワーが必要で、正しい人たちが何度も「00000000000000000000000000」を作成してブロックをつないできた場合、嘘の鎖をつくるためにはそれ以上のCPUパワーが必要で、実質嘘の鎖はつくれないということです。ここでの理解はProof-of-Workとは嘘の鎖がつくれない仕組みだということです。Proof-of-Workは以上です。

Network-和訳-

Network上で動くstepは下記の通りです。

1) 新しいトランザクション(取引情報)が全ノードにブロードキャストされる
2) それぞれのノードが受け取ったトランザクションをブロックに集約していく
3) それぞれのノードはそのブロックのためにProof-of-workを作成する
4) ノードがProof-of-workを発見したら、全てのノードにそのブロックを送信する
5) ノードはブロック内の全てのトランザクションが正しく、かつ、まだ費やされていない場合にそのブロックを受け入れる
6) ノードは前のブロックのハッシュ値として、受け入れたブロックのハッシュ値を使用して、次のブロックを作成することで、そのブロックを受け入れことを表明する

ノードは常に正しい最も長い鎖を考慮し、その鎖を伸ばし続けています。 もし二つのノードが同時に、次のブロックの異なるバージョンを配布した場合、あるノードは異なるバージョンのブロックを受け取るかもしれません。 その場合、ノードは最初に受け取ったブロックを処理します。しかし、より長いブランチがあった場合は、そのブランチを保存します。 次のProof-of-workが発見され、あるブランチがより長くなった時、結びつきは壊されます。 他のブランチを処理していたノードはより長いブランチに切り替わります。
新しいトランザクションは全てのノードに送信される必要はありません。 トランザクションが多くのノードに届いている限りは、いずれトランザクションはブロックの中に入るでしょう。ブロックの配布が欠落することを許容します。もしノードがブロックを受け取れなかった場合、ノードが次のブロックを受取、欠落していることに気がついたら、ノードは欠落したブロックを要求します。

Network-所感-

トランザクション(支払い等の情報)とブロック(トランザクションを集約したのも)がどのようにノード間で処理されているのかの説明でした。ノードはトランザクションを受け取って、Proof-of-workを作成できたら、ブロックとしてそれを配布します。そして受け取ったノードは受け取ったブロックのハッシュ値を次のブロックの作成に使用します。トランザクションもブロックもP2Pで配信され、ノードごとに受け取るトランザクション、ブロックに差異がでます。この差異は何かのタイミングで一番長いブロックの鎖を採用することで対処します。トランザクションは多数のブロックに組み込まれるし、ブロックは多数の鎖の分岐(ブランチ)に組み込まれる可能性があります。そうであっても、いずれは一番長い鎖に全てのトランザクションが集約されます。
書いてあることはわかりましたが、この仕組みで、本当に重複せず、欠落せず全てのトランザクションを処理、保持できるのか疑問に思います。なにか数学的な根拠があるのかもしれませんね。継続訳しながら勉強していきたいと思います。

Incentive-和訳-

しきたりによれば、ブロックの中の最初のトランザクションは特別なもので、ブロックを作ったノードによって保有される新しいコインを発行するトランザクションです。
これは仮想通貨のネットワークをサポートするノードのインセンティブになります。そして、もともとはコインを流通させるための方法でした。
これはコインを発行するために、中央当局が不要だから可能です。
新しい仮想通貨の絶え間ない一定数の発行は、金の採掘者が金を採掘し流通させるのと同じようなものです。
仮想通貨の場合、費やされるのはCPU時間と電力です。
また、インセンティブはトランザクションフィーとしても支払われます。
もし、トランザクションのアプトプットの値が、インプットより小さかったら、その違いはトランザクションを含んでいるブロックのインセンティブであるトランザクションフィーによるものです。
最初に決めた量のコインが流通すると、インセンティブは完全にトランザクションフィーに移行します。そして、インフレはありません。
インセンティブはノードが正直でいることを奨励する助けになります。
もし、欲深い攻撃者が全ての正しいノードより強いCPUパワーを構築できるなら、攻撃者は支払いを盗む事によって人々を欺くのか、新しいコインを生成するのかを選択しなければなりません。
彼は、システムと自分の富の妥当性を貶めるよりも、他の誰よりも多くの新しいコインで彼を支持するルールに従うことがより有益であることがわたるはずです。

Incentive-所感-

ノードには2種類のインセンティブがあります。一つ目は、新しくコインを発行して、自分のものにできること。二つ目は、発生したトランザクションから一部の金額をトランザクションフィーとしてもらうことです。どちらもトランザクションをブロックに含めるときにノード自身が生成します。このインセンティブによりノードは仮想通貨のシステムを維持することのモチベーションを得ることができます。また、悪意のあるノードが不正なトランザクションを発生させるよりも、仮想通貨の正常なシステムに貢献した方がより有益だと思えるようになっています。ただし、ビットコインはコインの発行数が決まっているので、この発行数に達した後のインセンティブはトランザクションフィーだけになります。このトランザクションフィーの価値が、ブロックを形成するために必要なインフラ費用と提供する労力に見合っている限りは現在の仕組みは維持されるでしょう。
ちなみにビットコインの発行総量はMAXで2100万ビットコインで、2016/12/3時点の採掘済み発行数はおよそ1600万ビットコインです。採掘済み発行数はこちらのサイトで参照できます。

Reclaiming Disk Space-和訳-

最新のトランザクションんがブロックの中に組み込まれると、以前のトランザクションはディスクと節約するために破棄されます。
ブロックのハッシュ値を破壊することなくブロックを長くしていくために、トランザクションはマークルツリーでハッシュ化されます。ブロックのハッシュに含まれるのはルートハッシュのみです。
古いブロックはマークルツリーの枝のハッシュ値を取り除くことで、サイズがコンパクトになります。
内部のハッシュは保持しておく必要はありません。

トランザクションを含まないブロックヘッダの部分はおよそ80バイトほどです。
ブロックが10分毎に生成されるなら、1年で4.2MBになります。
一般的なコンピューターシステムは2008年時点で2GBで販売されています。また、ムーアの法則は1年で1.2GBメモリが増えることを示唆しています。
ブロックヘッダがメモリ内に保持され続けても、ストレージに関しては問題にならないでしょう。

Reclaiming Disk Space-所感-

ブロックチェーンの保存で消費されるメモリを節約するための方法を述べています。
支払いなどのトランザクションが発生するたびに、このトランザクションはブロックに組み込まれ、ブロックはどんどん大きくなっていきます。
また、ブロックは他のノードに配信され、次のブロックを作成するために使用されます。
全てのノードが全ブロックを保持することで分散化しシステムの保全性をあげている性質上、ノードのメモリ問題はさけて通れません。
この問題の解として、古いトランザクションと再生されたハッシュ値を破棄することを述べています。
そうすることで、ムーアの法則の従えば、ノードのメモリは毎年増加していき、その増加量はブロックサイズの増加よりも大きいので、ストレージ問題は解決するというわけです。
ここでふと思ったのですが、トランザクションは削除してしまってよいのでしょうか?
ブロックチェーンは取引履歴が追跡できるシステムのはずです。削除してしまったら追跡できませんよね。
わかったら追記するようにします。

Simplified Payment Verification-和訳-

ネットワーク上の全てのノードを精査しなくても支払いを立証することは可能です。
ユーザは最も長いブロックチェーンのブロックヘッダーのコピーを保持し続ける必要があります。
ユーザは最も長いブロックチェーンだと確信できるまで、ネットワーク上のノードを精査することによって最長のブロックチェーンを得ることができます。
そして、トランザクションをブロックのタイムスタンプにリンクしているマークルブランチを取得できます。
ユーザは自分自身でトランザクションをチェックできません。
しかし、ブクックチェーンへのリンクによってネットワーク上のノードがトランザクションを受け入れたことを確認できます。
そして、ブロック達はネットーワークがトランザクションを受け入れたことをさらに確かめた後、トランザクションを追加します。

このように、立証は正しいノードがネットワークをコントロールしている限りは信頼できます。
しかし、攻撃者によってネットワークが支配されているならこのシステムは脆弱になります。
ネットワークノードが自分たちでトランザクションを立証している間、攻撃者がネットワークを支配し続けている限りは、簡略化された方法は攻撃者の偽造されたトランザクションによって騙される可能性があります。
対策の一つはネットワークノードが正しくなくブロックを突き止めた時に、そのノードからアラートを上げてもらうことです。そして、ユーザに全てのブロックをダウンロードし、矛盾しているトランザクションを知らせてもらうことです。
頻繁な支払い処理を行うビジネスでは、独立し、素早く立証できる自分達のノードでシステムを動かしたいかもしれません。

Simplified Payment Verification-所感-

トランザクションがブロックに組み込まれたことを確かめる方法と、このシステムの危険性とその危険を回避する対策についてを述べています。
自分のトランザクションがブロックに組み込まれたことを確認するためには、ブロックチェーンヘッダー内のマークルルートが必要です。
取り込まれたことを確認したいトランザクションをハッシュ化してマークルブランチをたどっていきます。
そうしてマークルルートに到達できれば、このトランザクションはブロックに組み込まれていることになります。
また、危険性については、トランザクションのブロックへの組み込みを悪意のあるノードが圧倒的なCPUパワーで行なっていた場合、他のノードが騙されてしまう可能性があると述べられています。
その対策として、ノードやユーザが矛盾しているトランザクションを発見した場合は、アラートを発泡することを提案しています。

Combining and Splitting Value-和訳-

仮想通貨を個別に操作することは可能だけれども、移動中の全てのトランザクションを分割することは非効率です。
分割と統合を可能にするためにトランザクションは複数のインプットとアウトプットから構成されます。
大きな値のトランザクションから一つのインプットが、もしくは、より小さなトランザクションが統合されインプットされます。また、ほとんどのトランザクションは二つのアウトプットがあります。
二つのアウトプットとは、一つは支払いのため、もう一つはもしあれば、送信者に返される仮想通貨の残額です。
あるトランザクションが複数のトランザクションに依存し、それらのトランザクションはされに多くのトランザクションに依存するということはここでは問題ではありません。
トランザクションの履歴を完璧にコピーし、引用する必要はありません。

Combining and Splitting Value-所感-

話題はこの論文に高頻度で出現する「トランザクション」の構成内容についてです。
「トランザクション」という表現を、このブログの中では「支払い」と表現してきました。
理解しやすいようにそうしてきたのですが、この「支払い」を現実世界に置き換えて考えてみます。
何もないところから「支払い」はできませんので、まず、入金というインプットがあります。
そして、入金した金額内で出金が可能になります。全額出金しないなら、残額が残ります。
このように現実世界においての「支払い」とは「入金」「出金」「残額」で構成されており、同様にビットコインのトランザクションはインプットの「入金」、アウトプットの「出金」「残額」で構成されます。
「出金」「残額」は、次のトランザクションのインプットとなり、次のアウトプットとなっていくのです。
既存のDBシステムのように、入金された金額の合算値をどこかに持ち、そこから出金されるのではなく、発生したインプットからのみアウトプットが発生します。
合算値を支払い毎に計算したり、どこかに保存しておくという無駄を省いているということです。

Privacy-和訳-

伝統的な銀行システムは関係者や信頼できるサードパーティーのみ情報へのアクセスを制限することで、プライバシーのレベルを可能にしています。
この方法では、全てのトランザクションを公表することができません。しかし、全てのトランザクションを公表したとしても、そのトランザクションのプライバシーは維持される必要があります。
匿名の公開鍵によって情報の流れを切断します。
誰もが誰が、誰に、いくら送金したかを参照することができますが、トランザクションが特定の誰のものかという情報は参照できません。
株式取引所によって公表される取引の時間と取引量の情報に似ています。「tape」を公表するが、取引者間で会話することはありません。
追加のファイアフォールとして、それぞれのトランザクションを一般のオーナーに関連づけ続けるために、新しい鍵ペアが使われるべきです。
複数インプットのあるトランザクションはいくつかリンクしている必要があり、このことはインプットが同じオーナーによるのもだということを公表することになります。
オーナーの鍵が公表されると、このリンクのために、同じオーナーに帰属する他のトランザククションが公表されることになります。

Privacy-所感-

ここでの話題はトランザクションを発生させたオーナーのプライバシーについてです。
既存の銀行システムは全ての情報にアクセス制限をかけることでプライバシーを保っていますが、取引の履歴を全員に公表しているビットコインではこの方法は使えません。
ビットコインではプライバシーを守るために、トランザクションとオーナーの関係を公表しないようにしています。
これは株式取引所の取引情報に似ていて、株式取引所では取引の詳細は公表されますが、取引している人物は公表されません。
トランザクションとオーナーとの関係は公開鍵によって保証されます。
ただし、オーナーの秘密鍵が公表されるとトランザクションのオーナーが特定されてしまいます。
また、複数のトランザクションからのインプットで構成されるトランザクションの秘密鍵が公表されると、対象のトランザクションだけでなく、インプットを構成するトランザクションまでオーナーが特定されてしまいます。

Calculations-和訳-

攻撃者が正しいブロックチェーンよりより早く、別のブロックチェーンを生成しようとするシナリオについて考察します。
もしこれが成し遂げられたとしても、何もないところからインプットを生成したり、攻撃者のものではないお金を取得したりするような任意の変化に無防備なシステムではありません。
ノードは不正なトランザクションを受け入れないし、不正なトランザクションを含むブロックを決して受け入れません。
攻撃者は自分の費やしてお金を取り返そうと自分のトランザクションを変更しようとするかもしれません。
正しいブロックチェーンと攻撃者のブロックチェーンは「Binomial Random Walk」で特徴づけることができます。
成功したイベントは正しいブロックチェーンが拡張された場合で、+1移動します。失敗したイベントは攻撃者のブロックチェーンが拡張された場合で、-1移動します。
攻撃者が与えられた損失から損失を0にする可能性は、「Gambler's Ruin problem」に似ています。
無制限のクレジットを持つギャンブラーが損失からスタートして、損益分岐点に到達する挑戦を無制限に行ったとします。
攻撃者が損益分岐点に到達する可能性、つまりは攻撃者が正しいブロックチェーンに到達する可能性を計算できます。「An introduction to probability theory and its applications」のように。

p=正しいノードが次のブロックを見つける可能性
q=攻撃者が次のブロックを見つける可能性
q2=攻撃者がzブロックの後ろから追いつく可能性

siki1

私たちの仮定は p > q です。追いつかないといけないブロックの増加により、攻撃者が追いつける可能性は急速に下がります。
攻撃者に対するオッズで、もし彼が早い段階で幸運を願っていないなら、彼のチャンスは極端に小さくなるでしょう。
新しいトランザクションの受信者が送信者がトランザクションを変更できないと十分に確認が持てるまでに待つ必要のある時間を考察します。
送信者は自分で自分に支払ったことを、しばらくのあいだ受信者に信じさせ、時間がたってからその支払いを自分自身に払い戻したいと仮定します。
その時、受信者はアラートを発砲しますが、送信者はそのアラートがすでに遅すぎることを望みます。
受信者は新しい鍵ペアを作成し、認証するまえに、公開鍵を送信者に与えます。
これは送信者が十分に先に進むほど十分に幸運になるまで連続的に作業することで、前もってブロックチェーンを準備することができなくなり、その時点でトランザクションを実行します。
トランザクションが一度送信されると、攻撃者である送信者は自分のトランザクションを含む類似のブロックチェーン上で秘密の作業を始めます。
受信者はトランザクションがブロックに追加され、そのブロックの後ろにさらにブロックがリンクされるまで待ちます。
受信者は攻撃者が作成したブロックチェーンの正確な進捗を知りません。しかし、正しいブロックはブロックあたり平均的な時間がかかると仮定して、攻撃者の潜在的な進捗の値は「Poisson distribution」になるでしょう。

siki2

攻撃者が追いつくことができる可能性を得るために、彼がその時点から追いつく可能性のある確率で、彼が作った進捗の量ごとにポアソン密度を掛けます。

siki3

無限配布の合算を避けるために、並べ替えます。

siki4

C言語でプログラミングすると

siki5

結果を羅列すると、zの値で可能性が急速に落ちていくのがわかります。

siki6

0.1%未満のPの値を解決するために

siki7

Calculations-所感-

攻撃者が不正なトランザクションを含んだ偽のブロックチェーンをつくる可能性が、正しいノードが正しいブロックチェーンをつくる可能性より小さいことを計算により証明しているようです。
2項ランダムウォーク、ギャンブラーの破滅問題、ポアソン分布、ポアソン密度など難しい理論を使っています。
正直何がなんやらです^^
悔しいですが、わからんすぎて考察ができませんね。
数学的理由で偽装は難しいということは理解しました。また、事前に長いブロックチェーンを作っておくことができない仕組みも考慮されています。

Conclusion-和訳-

私たちは信用に頼らない、電子トランザクションシステムを提案します。
私たちは電子認証を使った仮想通貨から始めました、それは強いオーナーシップの制御を提供します。
しかし、二重支払いを防ぐ方法なしには不完全です。
これを解決するために、私たちはトランザクションの公式の履歴を記録するproof-of-workを使ったpeer-to-peerネットワークを提案します。
このトランザクションの履歴は、正しいノードがCPUパワーの大部分を制御するなら、攻撃者にとって変更することは理論上不可能です。
ネットワークはまとまりなくシンプルで強固です。
全てのノードは少しずつ調整して、一気に機能します。
ノードは身元を確認される必要がありません。メッセージは特定の場所にルーティングされません。そして、メッセージは最善の方法で届けられる必要があります。
ノードは自由にネットワークを離脱したり、復帰したりできます。そのためにはノードが離脱している間に発生したものの証明としてproof-of-workのチェーンを受け入れることが必要です。
ノードはCPUパワーを投じ、ブロックを拡張することで正しいブロックの許諾を表現し、その仕事を拒絶することで不正なブロックを排除します。
この合意の仕組みによりいくつなの必要なルールとインセンティブは実施されます。

Conclusion-所感-

この論文のまとめです。
ビットコインの仕組みはproof-of-workを使ったpeer-to-peerネットワークシステムです。
この仕組みは全員に取引を全て公開し、全員がそれを承認することで2重支払いを防ぎます。
proof-of-workで作られたブロックチェーンは一番長いものが正となり、攻撃者が不正なトランザクションを生成することが理論上できません。
proof-of-workにはCPUパワーが必要です。攻撃者はこのCPUパワーに対応するよりも正しいノードとしてシステムの運用に関わりインセンティブをもらったほうが得なのです。
インセンティブには新しいコインを発行することと、トランザクションを承認した時のトランザクションフィーとして受け取ることができます。

ビットコインの良いところは、低コストだということです。
既存のシステムは第三者機関の監視のもと成り立っており、第三者機関がトラブルを解決するためにトランザクションの取り消しを可能としており、そのことがトランザクションを複雑化し、コストの増大を招いています。
ビットコインは全員で全てのトランザクションを監視することで、第三者期間の必要性を排除します。
また、発生したトランザクションは全員にブロードキャストされブロックチェーンに組み込まれると取り消しすることはできません。
ブロックチェーン内の各ブロックはタイムスタンプを含んだhash値を持っているので、ある時点のトランザクションを消すためには、それ以降のブロックを全て作り直す必要があり、そのため取消は実質不可能です。
また、数学的な理由により詐欺行為にあたるトランザクションはブロックチェーンに組み込まれません。詐欺は不可能です。
つまり、ビットコインはインターネット上に誕生した世界初めての低コストで堅牢な貨幣システムです。

今回で論文の和訳は終了です。日本語にできたとしても内容を理解するのは難しいですね。それでも、全体を訳して読み込んだことで少しはビットコインを理解できたと思います。

ビットコインかなり面白いね!絶対ビットコインの開発メンバーになってみせるぜ!