昨年はここで”ビットコインに関する5つのアイデア”を書きましたが,これはおそらくここでの最初のビットコインに関する記事です. 今日,ここでビットコインの協定について説明します.
マイケル・ニールセンは量子コンピューティングの先駆者であり,作家であり,プログラマーであり,詳細については彼自身の紹介を参照してください. この文章は,翻訳者が,ビットコインに関する文章や議論を多く,多く支持し,多く反対していると考えているからです. しかし,ほとんどが概念,価格,主観的な思考に留まっています. 私は,ビットコインの現在の価格と表面的な表情を投げ出して,この記事を通して,Bitcoinのプロトコルの動作原理を詳細に説明したいと思います.
中本聪は他人を説得しようとしたのではなく,文章をネットに公開し,他人が自分で判断するようにした. 彼の言うところは, “It would help to condense the article and make it less promotional sounding as soon as possible. Just letting people know what it is, where it fits into the electronic money space, not trying to convince them that its good. もし,あなたが私を信じないか,それを得ていないなら,私はあなたを説得しようとする時間を持っていない,すみません”.
オンラインのピアツーピアの通貨であるビットコインを説明しようとする文章は何千もあります. ほとんどの記事は,その基礎となる協定について,多くの詳細を省略しています. 深い文章でさえも,重要な場所で詰め込まれています. この記事は,Bitcoin協定の背後にある要点を,可能な限り明確で分かりやすい方法で説明することを目的としています.
この協定を深く理解するのは難しい,なぜなら,ビットコインを当たり前のものと捉え,他の投機を使ってお金を得る方法について考え,それがバブルなのか,ビットコインが税金の終わりを意味するかどうかなどについて考えるのは簡単だからです.これらのことを考えることは面白いですが,これらの考えは,あなたの理解を深刻に制限します.そして,ビットコインの協定を理解することは,それ自体が,他のチャネルが到達できない視野を開きます.例えば,この協定は,ビットコインの内蔵されたスクリプト言語の基礎であり,このスクリプト言語は,あなたがビットコインを使って,スマートコントラクトのような新しい金融ツールを作成できるようにします.新しい金融ツールが,逆に,新しい市場と新しい人間間の協力行為を作り出すことができます.そして,楽しみは,これが本当の楽しみの所在です!
ビットコインのスクリプトとスマートコントラクトについては,次の記事で説明します. この記事では,ビットコインのプロトコルに関する詳細に焦点を当てます. この記事を理解するには,公的な鍵の暗号とそれに関連するデジタル署名に,お馴染みになる必要があります.
ビットコインは暗号学に基づいているので 驚くかもしれませんが ビットコインは貨幣なのか? 秘密のメッセージを送る手段なのか? 実際には ビットコインが解決したいのは 取引の保護や 盗みや偽装などについてです. 原子の物質的な世界では 鍵,署名,銀行金庫などで セキュリティを保証します. 情報の世界では 暗号学によって セキュリティを保証します.
この記事の策略は,Bitcoinを1層ずつ構築することです. 私たちは,非常に単純なデジタル通貨から始めます. 私たちは,Bitcoinを区別するために,暫くInfocoinのと呼んでいます. もちろん,私たちの最初のバージョンのInfocoinには多くの欠点があります.
この方法は,最初から直接説明するよりも少し遅い。しかし,ビットコインの原理を一目瞭然に理解できたとしても,なぜビットコインがこう設計されたのかを理解するのは難しい。そして,ゆっくりとしたステップ・ツー・ツー・シミュレーションの説明は,それがビットコインの各要素についてより明確な理解をあなたに与えるという点で優れている。
最後に,私はビットコインの世界に比較的新しい人間であると言えばいいでしょう.私は2011年に粗略な関心を持っていたが,その詳細を本当に真剣に研究したのは2013年の初めでした.私の間違った部分を修正する人は歓迎されます.
表面的には,デジタル通貨は不可能のように聞こえるでしょう. 例えば,アリスという人が,お金として使いたいデジタル通貨を持っているとします. アリスが文字列を使ってお金を稼ぐことができれば,同じ文字列を何度も使うのを防ぐことができるでしょうか? もしこの問題を解決できれば,他の人々が文字列を偽造して,アリスから盗むのを防ぐことができるでしょうか?
これは,情報を貨幣として使うことで解決される多くの問題のうちの2つに過ぎません.Infocoinの第1版では,Aliceが文字列を貨幣として提供し,それを偽造から守る方法を考えました.例えば,AliceがBobにinfocoinを贈ろうとしているとします.Aliceはメッセージを書く必要があります.
この方法はあまり目立たないが,いくつかの利点がある. 世界の誰もが,アリスの公的鍵を使って,アリスが本当に署名した人であることを確認することができる. 他の誰も,その署名を生成することはできない (この署名は,アリスが所有する私的な鍵からのみ生成され,原則は,上記で言及されたデジタル署名を参照してください). だから,アリスは,いや,私はBobにinfocoinを与えなかった,と反省することはできません.
この協定の貨幣は,何なのかは,まだ述べていません. 明確に言うと,貨幣は,メッセージそのものです. つまり,その署名した文字列は,私がアリスに,Bobにinfocoinを贈ろうとしている文字列を表しています. 後の協定は,この点では,すべてのデジタル通貨は,より詳細なメッセージ文字列に過ぎません.
最初のInfocoinの問題は,Aliceが同じ署名したメッセージを何度もボブに送信できるということでした.ボブが10通のメッセージを受け取ったと仮定すると,Aliceはボブに1つのinfocoinを送信します.これはAliceがボブに10個の異なるinfocoinを与えたということですか?それともAliceがボブに1つのinfocoinを与え,メッセージが不注意に繰り返されたということですか?それとも彼女はボブに10のinfocoinを与えたと信じさせようと欺いて,実際に外の世界に送られたメッセージは,彼女が1つのinfocoinしか与えなかったことを証明しました.
infocoinに 独自のアイデンティティを 与えたいのです. 標識やシリアルナンバーが必要です. Aliceは,メッセージで,Aliceが Bobに 8740348 というシリアルナンバーの infocoinにサインします. そして,Aliceが別のメッセージでサインすると,Bobと他の人たちは,この2つの Infocoinが違うことを知るでしょう.
この方案を実行するには,信頼できるシリアル番号の源が必要になります. シリアル番号を生成する一つの方法は,銀行のような機関を設立することです. 銀行は,infocoinのシリアル番号を生成し,誰がどのinfocoinを所有しているか記録し,取引の真偽を検証します.
もっと詳しく言えば,アリスが銀行に行って,私の口座からインフォコインを借りたいと言うとします. 銀行はその口座からインフォコインを引いて,ボブに新しい,一度も使っていないシリアル番号を 1234567 とします. そして,アリスがボブにインフォコインを送りたいとき,彼女はこの新しいメッセージにサインします. アリスはボブに 1234567 というシリアル番号のインフォコインを贈りたいと言います. しかし,ボブはインフォコインを受け取るだけでなく,銀行に連絡し,2つのことを確認します.
上記の解決策は,非常に有望に見えます。しかし,私たちはもっと野心的なことを行うことができます。我々はこの協定から銀行を取り除くことができます。これは,この通貨の性質を大きく変えるでしょう。これは,この通貨を担当する単一の組織が存在しないことを意味します。中央銀行がどれだけ多くの権限を持っているかを考えるとき (通貨の発行を制御する) これは,大きな変化を意味します。
その方法は,すべての人が協力して銀行になるということです. 特に,infocoinを使用するすべての人が,どのinfocoinが誰のものかを含む完全な記録を保存すると仮定します.
さて,もしアリスがボブにinfocoinを贈ろうとするなら. メッセージで,アリスはボブに1234567というシリアル番号のinfocoinにサインをかけてくれるだろう. そして,署名したメッセージの出力をボブに与え,ボブは自分のブロックチェーンの例を使って確認し,OK,確かにそのinfocoinはアリスが私に贈ったである. もし彼がチェックをうまく行ったら,彼はアリスのメッセージと,このinfocoinのメッセージを自己で,ネットワーク全体に公開する.
のシリアル番号がどこから来たのかという問題は残っているが,これは簡単に解決できるので,後ほど説明する.より難しい問題は,この協定がAliceに彼女のinfocoinの支出を繰り返すことを許可していることだ.彼女は署名したメッセージを送信できる.私はAliceにBobに1234567のinfocoinのシリアル番号を渡すつもりだ.同時に彼女は署名したメッセージを送信できる.私はAliceにCharlieに1234567のinfocoinのシリアル番号を渡すつもりだ.
私たちはこの問題を double spending と呼びます (後述は double spending ),一見すると,このような双花は成功しそうにありません.結局のところ,もしアリスがボブにメッセージを送り,ボブが他のすべての人にメッセージを送り, (チャーリーを含む) 他の人が彼らのブロックチェーンを更新したならば,チャーリーはアリスに騙されることはありません.だから,双花は短期間しか可能ではないようです.しかしながら,この期間が短い場合でも,この問題はありえません.さらに悪いことに,アリスは,この期間を長引くためのいくつかの技を使って,この期間を長引くことができます.例えば,彼女は,ネットワーク分析ソフトウェアを使用して,ボブとチャーリーのコミュニケーションの遅延を長引くときに見つけることができます.または,彼女との間のネットワーク接続を故意に妨げるようなことを行うことができます.
簡単な方法は,アリスがBobにinfocoinを送るときに,Bobは単独でこの取引をチェックすべきではないということです.代わりに,彼はこの待機可能な取引をinfocoinネットワーク全体に公開し,取引が合理的かどうかを判断する手助けを他の人に与えなければなりません.この取引が合理的であると共同で決定した場合,Bobはinfocoinを受け取り,その後全員が自分のブロックチェーンを更新できます.この種のプロトコルにより,二重発生は防げます.なぜなら,Aliceが同時にBobとCharlieに同じinfocoinを送ろうとする場合,ネットワーク上の他の人々が気づき,BobとCharlieに取引が間違っていることを伝え,取引は通過させられないからです.
もっと具体的に言えば,もしアリスがボブにinfocoinを贈ろうとしてきたとします。以前と同じように,彼女はメッセージに署名します,アリスはボブに1234567というシリアル番号のinfocoinを贈って,ボブに名前の良いメッセージを署名します。また,前と同じように,ボブは自分のブロックチェーンでチェックを行い,このコインは確かにアリスのものです。しかし,プロトコルが違って,ボブはこれを直接受け取らず,アリスのメッセージをネットワーク全体に公開します。ネットワーク上の他のメンバーは,アリスがこのinfocoinを所有しているかどうかを確認し,もしそうなら,彼らはメッセージを公開し,アリスは確かにinfocoin1234567を持っていると言います.そして,ボブにそれを転送できます。十分な人がこのメッセージを公開すると,各人のブロックチェーンは更新され, 1234567infocoinがボブのものであることを示す取引が完了します。
このプロトコルには現在多くの不確実な要素が残っている.例えば, 十分な人がこのニュースを公表したら, 何人が十分だとはどういうことか.infocoinのネットワーク全体にはならない,なぜなら,誰がinfocoinのネットワークにいるのか事前にわからないからです.同じく,固定部分のユーザーにもならない.これらの問題を今すぐ解明しようではありません.ここで,この取引プログラムの深刻な問題を指摘しよう.その問題を解決すると,上記の問題を解明するのに同時に役立つでしょう.
Alice が上記の協定で二重化したいと仮定すると,彼はinfocoin ネットワーク全体を支配する必要がある. 仮に,彼女はinfocoin ネットワーク上で,自動化されたシステムを使って,多くの異なるアイデンティティのアカウントを,推定で 1 億個を作ると仮定すると. 前と同じように,彼女は,同じinfocoinをBob と Charlie に渡す二重化を行うことを試みたが, Bob と Charlie が,infocoin ネットワークのチェックのためにこの取引を尋ねると,Alice の甲状腺はネットワーク全体を浸し,Bob と Charlie にこの取引を通過させることができると伝え,その取引を受け入れたり,彼らのどちらかまたは両方とも騙される可能性がある.
この方法は直観的ではなく,2つのコンセプトを組み合わせる必要があります. 1) 人工的に取引を検証させるプロセスには大きな計算費用がかかります. 2) 取引を検証するのに役立つことを報酬にします. 取引を検証するためにネットワーク上の人々を奨励する報酬の方法があります.
しかし,実際に,仕事の証明書を理解するには,もっと詳細に詳しく調べる必要があります.
アリスがネットワーク全体に情報を発信したとします. アリスがボブに1234567というシリアル番号のinfocoinを贈るとします. ネットワーク上の他のメンバーがこの情報を聞いたとき,誰もがそれを待機列に追加します. ネットワーク全体がまだ通過していない取引です. 例えば,ネットワーク上のDavidという人は次の待機列を持っているかもしれません.

デイビッドは自身のブロックチェーンをチェックし,上記の取引が合理的であることを確認しました. 彼は,この検証メッセージをネットワーク全体に公開するのを助けます. しかし,その前に,検証取引協定は,デヴィッドに計算難題である作業証明を解決する必要があります.
では,デビッドはどんな問題を解くのでしょうか? これを説明するには,ネットワーク上の誰もが知っている固定的ハッシュ関数 (hash function) を使って,それをプロトコルに含みます. ビットコインは,よく知られている SHA-256 ハッシュ関数を使用しますが,暗号学的ハッシュ関数は何でもここで使用できます. デビッドの待機しているこのグループに,待機しているトランザクションのマーク,L を与え,後で参照できます.

デイビッドが解くべき問題 (作業の証明) は,Lの後ろにこのxを足し,この組み合わせをハッシュすると,数個の0から始まる結果が得られます.この難題の難度を,ゼロから始まる数値を調整することで調整できます.簡単なの作業の証明には,ゼロから始まるハッシュが3つまたは4つ必要で,難しいの作業の証明には,さらに多くのゼロから始まるハッシュが必要になるかもしれません.例えば,連続して15個のゼロです.上記の場合,x=0からなるハッシュは成功しません.結果が0から始まるので,x=1を試してみます.
x=1の場合は,この式は成り立たない.

そして,x=2,x=3,4,5,… といったことをやってみよう.

このランダムな数xは,0から始まる4つのハッシュの1つの結果を与えます. これは,単純なの証明のの問題を解くのに十分です.
この難題を難解にするのは,暗号ハッシュ関数の結果は常にランダムであり,入力値に微小な変更を加えると,ハッシュ関数の出力結果が完全に異なるため,予測が困難である.したがって,出力結果が10個の0から始まる必要がある場合,Davidは平均で1610 ≈ 1012個の異なるxをかけて適切な値を見つけることができる.これは非常に困難な作業であり,多くの計算能力を必要とします.
明らかに,証明の難易度は,何桁のゼロが必要かを規定することで制御できます.実際には,Bitcoinのプロトコルでは,上記の証明の難易度は,少し修正することで,よりよく制御できます.何桁のゼロが必要かを規定するのではなく,ブロックのハッシュ出力が目標値より小さいか等しいことを規定します.この目標は,Bitcoinの各ブロック (ブロック) が平均で10分かかることを保証するために,自動的に調整されます.
さて,デビッドが幸運で適切なxをノンスで発見したと仮定すると,おめでとう! 彼はこの答えを発見した報酬を得ます. 彼は,このブロック内の取引が合理的であることを証明したと公表し,同時に彼女が発見したxの値を公開し,他のinfocoinの参加者は,xが有効であることを証明する. そして彼らは,デビッドが公表した取引を含むように,自分のブロックチェーンを更新します.
このプログラムの動作を証明するために,ネットワークの参加者は取引を検証するのに役立つインセンティブが必要である.インセンティブがなければ,誰も取引を検証するのに自分のコンピュータの計算力を費やすことを望まない.ネットワークの参加者が計算力を費やすことを望まない場合,システム全体が動作しない.
ビットコインのプロトコルでは,この検証プロセスは mining (採掘) と呼ばれています。各取引ブロックの検証成功者には,ビットコインが報酬として与えられます。当初は,50ビットコインの報酬でした。しかし,21万の検証されたブロック (つまり,約4年ごとに) につき,報酬は半分に減ります。今のところは一度だけ発生しており,つまり,現在,ブロックを検証する際の報酬は25ビットコインです。半分化のプロセスは,約2140年まで継続されます。その時,採掘の報酬は10-8ビットコインに減ります。10-8ビットコインはビットコインの最小単位で,サトシ (一 Satoshi) と呼ばれますので,2140年までに,総ビットコインの増加は止まります。しかし,これは証券取引のインセンティブをなくし,証券取引の費用は,証券取引の参加者に許される証券取引の費用より,25ビットコインの追加で増加します。しかし,取引の初期費用は,徐々に増加し,証券取引の費用はほぼゼロになりつつあります。
proof-of-workを,競合する検証取引のプロセスとして考えることができます.各参加者は,コンピュータ計算力の一部を費やします.マイナーが勝つチャンスは,彼らがコントロールする計算力の大きさと,ネットワーク全体の計算力の比率にほぼ等しいです.例えば,マイナーがネットワーク全体の計算力の1パーセントの計算能力をコントロールしている場合,彼の勝利の確率は約1パーセントです.
もちろん,不正なマイナーがブロックチェーンのすべてを破壊するチャンスはごくわずかですが,我々はそれを通貨として扱う自信を持っていません.特に,我々はまだ双花の問題に終止符を打っていません.
双葉の問題を直ぐに分析しますが,その前に,Infocoinの概念に重要な詳細を付け加えたいと思います.理想的には,Infocoinネットワークが取引の順序を統一することを望みます.もし私たちが統一された順序を持っていなければ,誰がどの特定の時点でどのinfocoinを持っているかははっきりしません.

偶然にも,ブロックチェーンの分岐は起こる.これは,時には2人のマイナーがほぼ同時にブロックの取引を検証しているからです.彼らは同時にネットワークに公開され,ある人は一つの方法でブロックチェーンの更新をします.

取引の順番が不明で,誰がどのinfocoinを持っているかは不明になります. 幸いにも,分岐を移す簡単な方法があります. 規則は,分岐が発生した場合,ネットワーク上の人々は2つの分岐を維持し,いずれにせよ,鉱夫は最も長いブロックチェーンの上でのみ働きます.
例えば,分支があるとして,ブロックAを最初に受け取ったマイナーが,ブロックBを最初に受け取ったマイナーがいます. ブロックAのマイナーが,分支に沿ってマイニングを続け,ブロックBの分支に沿ってマイニングを続けるマイナーがいます.

このメッセージを受け取ると,A支部のメンバーはB支部が最も長いことに気づき,Bの支部に移行する.A支部の仕事はすぐに停止し,すべての人が同じ順序のブロックチェーンで作業する.そして,ブロックAは無視されます.もちろん,ブロックA内のすべての待機取引は待機状態で続けられ,B支部の新しいブロックに追加され,すべての取引は最終的に確認されます.
同じように,もし A 支部のマイナーが次のブロックを最初に掘った場合,B 支部のマイナーは停止し,A 支部に移行します.
結果がどうであれ,このプロセスは,ブロックチェーンに統一された順序を保証する.ビットコインでは,取引は, 1) 最も長い分岐のブロックに存在するまで, 2) 少なくとも5つの検証されたブロックが,その後に検証されるまで,確認とはみなされない.この場合,この取引は6つの確認を持っていると言います.これは,ネットワーク全体にブロックの順序を統一する時間を与えます.Infocoinでは,同じプログラムを使用しています.
タイムラインが理解できたので,不誠実な人が二重の支出を望んでいたらどうなるか考えてみましょう. アリスが,ボブとチャーリーに同じ取引を同時に与えようとしていたとします. 一つの可能性は,彼女が同時に2つの取引を持つブロックを検証することでした.
しかし,別の可能性として,彼女は2つの取引をそれぞれ公表しようとしています.彼女は,ある部分のマイナーに1つの取引を公表し,別の部分のマイナーに別の取引を公表し,両方の取引が検証されることを望んでいます.
別の可能性として,Alice = Bob,つまり,Alice は Charlie にコインを渡そうとするが,彼女自身には複数のアカウントがあるので,そのコインを自分にも渡す.この場合,Alice の策略は,Charlie がこのInfocoin を受け取るまで待つこと,つまり,取引が最も長いブロックチェーンで6回確認された後である.

悲しいことに,この時点でアリスは最も長いブロックチェーンの6ステップ遅れている.彼女は最も長い分岐に追いつくのが困難である.他のマイナーたちは,彼らが報酬を得るためには最も長い分岐に働く必要があるので,彼女を助けることはありません.
もちろん,これは非常に厳格な言い方ではなく,アリスは絶対に二花一花できないということです. これは合理的な推論に過ぎません. ビットコインのホワイトペーパー原稿は,厳格なセキュリティ分析を行っていませんが,私のような非公式な推論です.
これは上半部で,下半部の著者Michaelは,Infocoinの概念を無視して,Bitcoinの取引の目を通して,Bitcoinのプロトコルについてより詳細に説明しています.
この記事の著者,マイケル・ニールセンにTipをあげて下さい 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ 彼のツイッターもフォローできます.
ジュン・ブ・ さんの記事より