ビットコインのプロトコルはどのように機能する?

作者: リン・ハーン小さな夢, 作成日: 2017-01-19 18:04:02, 更新日: 2017-01-19 18:11:24

ビットコインのプロトコルはどのように機能する?

この記事では,Bitcoinに関する最初の記事のように見える5つのアイデアについて述べています.今日,Bitcoinのプロトコルを紹介します.

この記事は,Bitcoinのプロトコルに関するMichael Nielsenの翻訳の記事であり,この記事は,翻訳者が書いたBitcoinのプロトコルの仕組みについて最も明確に説明している記事である.Michael Nielsenは量子コンピューティングの研究の先駆的な科学者,作家,プログラマーであり,詳細は彼の自身の紹介を参照してください.この記事は,翻訳者がBitcoinについての記事や議論について考え,多くの支持者,多くの支持者,多くの反対を持っているため翻訳された.しかし,ほとんどの人が概念,価格,主観的な思考に停滞している.私はBitcoinの現有価格と表面的な現象を捨て,この記事を通して,Bitcoinのプロトコルの仕組みについてすべての人に詳細に説明したい.私は,この一連のものを理解するために非常に重要だと確信しています.私はほとんどの人と同じで,この材料が最初に見たときに,このプロトコルの自己は狂気であり,その後,これは詐欺行為である可能性があることを説明しました.しかし,前述の兆候や暗示は,多くのものについて説明する必要があります.

中本太郎は,自分の文章をネットに投稿し,他の人に判断させることを,決して説得するつもりはない. 彼の発言は『It would help to condense the article and make it less promotional sounding as soon as possible』である. ただ,人々にそれが何であるか,それが電子マネーの空間にフィットしているところを知らせ,それが良いと説得しようとしていない.

  • フォローする

    数千もの記事が,Bitcoin,オンラインの"点対点"通貨を説明しようと試みています. ほとんどの記事では,その底辺のプロトコルについて多くの詳細を省略し,多くの詳細を省略しています. 深い記事でさえ,重要な場所で詰め込まれています. この記事の目的は,Bitcoinのプロトコルの背後にあるポイントを,可能な限り明確で理解しやすい方法で説明することです.

    このプロトコルを深く理解することは困難です. なぜなら,ビットコインを当たり前のものとして考え,それをどのように利用するか,泡になるのか,ビットコインが税金の終わりを意味するのか,などについて考えるのは簡単だからです. これらについて考えるのは面白いですが,これらのアイデアは理解を厳しく制限します. しかし,ビットコインのプロトコルを理解することは,他の通路に到達できない視点を開きます. 例えば,このプロトコルがビットコインの内蔵スクリプト言語の基礎であり,このスクリプト言語は,ビットコインを使ってスマートコントラクトのような新しい金融ツールを作成できるようにします. 新しい金融ツールは,新しい市場と新しい人との間の協働を作り出すことができます.

    この記事では,ビットコインプロトコルの詳細に焦点を当てます. この記事を理解するには,おそらく公開鍵のパスワードと関連するデジタル署名と熟悉する必要があります. また,おそらく2つの概念を熟知する必要があります. また,おそらくハッシュ関数 (任意の長さの入力を固定長さの出力に変換する) とも熟知する必要があります. これらの概念は素晴らしいです.

    ビットコインの基礎は暗号学であり,これはあなたを驚かせることでしょう. ビットコインは通貨ではないですか? それは秘密のメッセージを送信する方法ですか? 実際,ビットコインが解決しようとしている問題は,取引の保護を保証するについて,人々が他人の物を盗んだり,他人の模倣をしたり,などすることができないことを保証することです.

    この記事の戦略は,ビットコインを層次的に構築するものです. 私たちは非常にシンプルなデジタル通貨から始めます. 暫定的にそれをInfocoin と呼んで,Bitcoinと区別します. もちろん,私たちの最初のバージョンのInfocoinには多くの欠点がありますので,私たちはいくつかのイラストを経て,毎回1〜2つの新しいコンセプトを導入します.

    この方法は,Bitcoinを最初から直接説明するよりも少し遅い.しかし,Bitcoinの原理を理解しても,Bitcoinがなぜこんなふうに設計されたのか理解するのは難しい.そして,ゆっくりとステップステップで代行的な説明をすることの利点は,Bitcoinのあらゆる要素をより明確に理解できるようにすることです.

    最後に,私はビットコインの世界に比較的新人であることを述べたい. 2011年に私は粗略な関心を持っていたが,詳細を本当に真剣に調べたのは2013年初旬でした. 私の誤った部分に修正をしたい人は歓迎します.

  • ステップ1:署名した意思書

    • 通貨のデザインは?

      表面的には,デジタル通貨は不可能に思える. 例えば,Alice と呼ばれる人が,Alice が使いたい数字通貨を持っているとしましょう. Alice が文字列をお金として使えるなら,同じ文字列を繰り返し使わないようにするにはどうすればよいですか?

      これは情報を使って通貨を作る多くの問題のうちの2つに過ぎません.Infocoinの第1版では,Aliceに文字列を貨幣として提供し,それを偽造から守る方法を考えました.AliceがBobに1つのinfocoinを渡そうとしていると仮定します.Aliceは次のメッセージを書く必要があります.

      この方法はあまり知られていませんが,いくつかの利点があります. 世界の誰もがアリスの公開鍵を使ってアリスが実際に署名した人であることを確認できます. 他の誰もその署名の結果を生むことは不可能です. (この署名はアリスが所有するプライベートキーからのみ生じる可能性があります. 原則は,上記の数字署名を参照してください). したがって,アリスは"いや,私はボブにinfocoinをあげませんでした"と反省することはできません. このように,このプロトコルはアリスが実際にボブにinfocoinを意図していることを証明します. 同様に,他の誰もそのような署名された情報を生成することはできません. これにより,アリスのメッセージを偽造することを防ぐことができます.

      このプロトコルのお金とは何かについてはまだ何も語っていません. 明確には,お金はメッセージそのものなのです. つまり,その署名文字列は,アリスがボブにinfocoinを注入する文字を表しています.

  • シリアル番号で通貨に唯一的な識別子を与えます

    最初のバージョンのInfocoinの問題は,Aliceが Bobに同じ署名されたメッセージを繰り返し送信できるかどうかです. 例えば,Bobが10通のメッセージを受け取ったとき,AliceはBobに10個の異なるinfocoinを与えました. それともAliceがBobに1つのinfocoinを与え,ただ無意識にメッセージを繰り返したのでしょうか? それとも,AliceがBobを騙して10個のinfocoinを与えると信じさせようとしていたのでしょうか.

    Infocoinに唯一的な識別子を持たせたいのです. それはタグやシリアル番号が必要になります. アリスはメッセージでボブに 8740348 というシリアル番号のinfocoinをサインします. そして,別のメッセージでAliceがサインした場合,Aliceはボブに 8770431 というシリアル番号のinfocoinをサインします. そうすることで,ボブと他の人たちは,これが2つの異なるinfocoinであることを知ることができます.

    この計画を実行するためには,信頼できるシリアル番号の源が必要です. シリアル番号を生成する方法は,銀行のような機関を設立することです. この銀行は,どの情報コインを所有しているか記録し,取引の真性を検証するために,情報コインのシリアル番号を生成します.

    詳細に言えば,アリスが銀行に行き,私の口座からinfocoinを借りるつもりだと言うとしましょう. この銀行は彼女の口座からinfocoinを減額し,新しい未使用のシリアル番号を彼女に与えます. 1234567 としましょう. そして,アリスがボブにinfocoinを送りたいとすると,彼女は新しいメッセージにサインします. アリスがボブに1234567というシリアル番号のinfocoinを贈るつもりです. しかし,ボブはこのinfocoinを受け取るだけでなく,銀行に連絡し,2つのことを確認します.

  • 銀行を作ろう

    上記の解決策は大きな可能性を秘めているようです. しかし,私たちはもっと野心的なことを行うことができます. 私たちはこの協定から銀行を取り除くことができます. これは通貨の性質を大きく変えるでしょう. これは,単一の組織が貨幣の管理を担うことはないことを意味します.

    その方法は,誰もが協力して銀行になるということです. 特に,Infocoinを使用するすべての人の完全な記録を保持すると仮定します. この記録には,どのInfocoinが誰のものかが含まれます. これを共有された公開帳簿として考えることができます. この帳簿は,すべてのInfocoinの取引記録を記録します.

    さて,アリスがボブにinfocoinを渡そうとしているとしましょう. 彼女はメッセージでアリスがボブに1234567というシリアル番号のinfocoinのタブにサインをします. そして署名したメッセージの結果をボブに出力します. ボブは自分のブロックチェーンで確認できます.

    シリアル番号がどこから来たのかという問題はまだあるが,この問題は簡単に解決できるので,後で説明する. さらに難しいのは,このプロトコルがアリスに彼女のinfocoinを繰り返し使わせるということです. 彼女は署名されたメッセージを発信し,アリスがボブに1234567のinfocoinを渡すというメッセージを発信し,同時にアリスがチャーリーに1234567のinfocoinを渡すというメッセージを発信することもできます. ボブとチャーリーはそれぞれ独自のブロックチェーンを使って,そのinfocoinが本当にアリスから来たことを確認します. 彼らが同時に検査を行ったことを仮定して,お互いのメッセージが確認される前に,彼らは両方とも発見し,確かに,そのコインがアリスのものだと証明します. 彼らはその取引を受け取り,その情報をネットワーク全体に公開しました.

    この問題は"二重支出"と呼ばれるもので,一見すると成功するのは難しいようです.結局,もしアリスが最初にボブにメッセージを送り,その後ボブが他のすべての人にメッセージを送り,チャーリーを含め,他の人たちはブロックチェーンの更新をします.このとき,チャーリーはアリスに騙されることはありません.したがって,二重支出は短期間でしか可能ではないようです.しかし,この時間が短くても,この問題は望ましくないです.さらに悪いことに,アリスはいくつかのスキルを使って,この時間を延長することができます.例えば,彼女はネットワーク分析ソフトウェアを使用してボブとチャーリーの間の通信を非常に遅らせる時間を見つけることができます.または何か故意に彼らの間のネットワーク接続を妨げるのを遅らせることができます.

    この問題を解決するには,最も簡単な方法は,Alice が Bob にinfocoin を送っているときに, Bob が単独でこの取引を検証すべきではないことです.代わりに,彼はこの待機している取引をinfocoin ネットワーク全体に公表し,取引が合理的かどうかを判断するために他の人々に助けなければなりません.もし彼らが共同で取引が合理的であると判断した場合, Bob はそのinfocoin を受け取り,そして全員が彼らのブロックチェーンを更新することができます.このタイプのプロトコルは,Alice が Bob と Charlie に同じinfocoin を同時に送ろうとする場合,ネットワーク上の他の人々が気づいて,Bob と Charlie にこの取引に問題があることを伝え,取引が通過することを許さないため,双花を防ぐことができます.

    より具体的には,アリスがボブにinfocoinを贈りたいと仮定します. 前回のように,彼女はメッセージに署名し,AliceはBobに1234567というシリアル番号のinfocoinを贈ります. そして,AliceはBobに名前の良いメッセージをサインします. また,前回のように,Bobは自身のブロックチェーンでチェックを行います. このコインはAliceに属しています. しかし,プロトコルは異なります. Bobは直接これを受け付けていません.

    このプロトコルは現在多くの不確実な要素が残っています. 例えば,十分な人がこのメッセージを公開したら,何が意味するのか,どのくらいの人が十分なのか? 全体のinfocoinネットワークは不可能です.なぜなら,我々は先もってinfocoinネットワークに誰がいるのか知らないからです.また,固定された部分のユーザーも不可能です.我々は今,これらの問題を解明するために急いでいない. ここで,この取引の計画で深刻な問題を指摘し,問題を解決する問題を解明するのに役立ちます.

  • 仕事の証明書

    アリスが上記のプロトコルで二重化したいとすると,彼はinfocoinネットワーク全体を管理する必要がある. アリスがinfocoinネットワークで多くの異なるアイデンティティのアカウントを自動システムで作成すると仮定します. 前のように,彼女は二重化しようとし,同じinfocoinをボブとチャーリーに与え,しかしボブとチャーリーがinfocoinネットワークに取引を検証するように尋ねると,アリスの馬はネットワーク全体を浸透させ,ボブとチャーリーにこの取引を通過させることができると伝え,いずれかを騙したり,両方を騙したり,この取引を受け入れてしまう可能性があります.

    賢い方法は,の作業証明の証明方法と呼ばれるものです. この方法は直観的ではなく,2つの概念を組み合わせる必要があります. (1) 取引の検証プロセスを人工的に行うことで,大きな計算費用がかかります. (2) 取引を検証するのに役立つことを報酬として. 報酬の方法によって,ネットワーク上の人々を取引を検証するように誘発します. 取引の検証費用を増やすことの利点として,検証は,多くのアカウントを持つ人々によって制御されなく,彼が提供する総計算能力によってのみ制御されます.

    労働証明書のポイントはこれです. しかし,労働証明書を本当に理解するには,もっと具体的になる必要があります.

    アリスがネットワーク全体にメッセージを発信すると仮定します. アリスはBobに1234567というシリアル番号のinfocoinのメッセージを発信します. ネットワーク上の他の人々がこのメッセージを聞いたら,誰もがそれをネットワーク全体でまだ通過されていない取引列に追加します. 例えば,ネットワーク上のDavidという人が次のリストの取引を待機している可能性があります.

    img

    デイビッドは自身のブロックチェインをチェックし,上記の取引が合理的だと確認した. 彼はこの検証メッセージをネットワーク全体に広めるのを助けたい. しかし,その前に,検証取引プロトコルは,デイビッドが計算上の難題,つまり作業証明を解くことを必要としている. もし彼が難題を解くことができなければ,ネットワーク上の他のメンバーは彼の検証を受け入れないだろう.

    この問題を解くために,私たちはネットワーク上の誰もが知っている固定的ハッシュ関数であるハッシュ関数でそれをプロトコルに含みます.Bitcoinはよく知られているSHA-256ハッシュ関数を使用しますが,暗号学のハッシュ関数は何でも使用できます.このグループに待機取引の標識を与えます. L を参照してください. このグループに待機取引はブロックに相当します. ブロックは重要な取引です. このブロックを理解するために,つまり,情報が構成された集合であり,ブロックには多くの取引があります.

    img

    デヴィッドが解決する問題は,ランダムな数 x を発見することであり,この x を L の後に追加し,この hash を組み合わせると,結果がいくつかの 0 から始まる.この難題の難さは,最初の 0 の個数を調整することによって調整できます.簡単なの証明は,に 3 か 4 つのゼロから始まるハッシュのみが必要であり,難しいの証明は,さらに多くのゼロから始まるハッシュを必要とします.例えば 15 つの連続したゼロです.上記のケースでは,x=0 に到達するハッシュは成功しません.

    これは,x=1で,x=1です.

    img

    x=2,x=3,4,5... そして,最後に,x=4350,という結果が得られます.

    img

    このランダムな数 x は,4つのゼロから始まるハッシュの結果を与えます. これは簡単なの証明の難題を解決するのに十分です.

    この難題を解くのは,暗号化ハッシュ関数の結果は常にランダムで,入力値の微小な変化でも,全体のハッシュ関数の出力は完全に異なるので,予測が難しい.したがって,出力は10から始まる0でなければなりません. Davidは平均して1610〜1012の異なるxを必要とします.

    明らかに,私たちは,何個のゼロが必要かを規定することによって,証明難易度を制御することができます. 実際,ビットコインプロトコルは,上記の証明難易度を少し修正することで,難易度をよりよく制御することができます. ブロックのハッシュ出力は,何個のゼロが必要かを規定するのではなく,目標値以下またはそれと同等であることを規定します. この目標値は,自動的に調整され,ビットコインの各ブロック (ブロック) が平均10分を解くことを保証します.

    さて,デビッドが幸運に適切なx (nonce) を発見したと仮定し,彼を祝福します. (彼はその答えを見つけるために報酬を受けるでしょう). 彼はブロック内の取引が妥当であることを証明したことを公表し,同時に彼女が発見したxの値を公表します. 他のinfocoinの参加者はその証明が有効であることを証明できます. そして彼らはデビッドが発表した取引を含む自分のブロックチェーンを更新します.

    このプログラムが機能するかを証明するために,ネットワークの参加者は取引の検証を助けるインセンティブが必要である.インセンティブがなければ,誰も自分のコンピュータの計算力を使って取引の検証を手伝うつもりはない.ネットワークの参加者が計算力を使って取引を検証する意思がない場合,システム全体が機能しない.したがって,取引を成功裏に検証した人物を,何らかの方法でインフォコインを与えることで報酬を与えることができる.十分なインフォコインの報酬を与えれば,彼らが検証に参加することを奨励することができる.

    ビットコインのプロトコルでは,この検証プロセスは,マイニング・キットと呼ばれる.その時点で,各取引ブロックの検証に成功した者は,ビットコインとして報酬として受け取る.最初は,50ビットコインの報酬であった.しかし,21万ブロック (約4年) ごとに検証されたら,報酬は半減する.しかし,これまで一度のみ起こったこと,つまり,現在,ブロックを検証する報酬は25ビットコインである.この半減プロセスは,約2140年まで続く.その時,採掘の報酬は10-8ビットコインに減少する.しかし,10-8ビットコインは最小単位であるビットコインの報酬としてSatosと呼ばれている.したがって,2140年までには,合計でビットコインの報酬が増加することを停止する.しかし,この検証は,取引のメカニズムをなくさない.この取引には参加者に特典金25コインを使用することを許可する,特典金料がほぼゼロになります.しかし,現在,特典金25コインは,取引の初期に用いられている,しかし,徐々に高い報酬になる.

    作業証明は,競争的な検証取引のプロセスとして考えることができます. 各参加者はコンピュータの計算力の一部を費やします. 鉱夫の勝利の確率は,彼らが制御する計算力の大きさと,ネットワーク全体の計算力の比率にほぼ等しいです. 例えば, minerがネットワーク全体の計算力の百分の一の計算力を制御している場合,彼の勝利の確率は,おそらく百分の一です. したがって,大量の計算力を提供することは競争力を支える要因であり,不正な鉱夫は,膨大なコンピュータ資源を費やさない限り,検証プロセスを破壊する機会がほとんどありません.

    もちろん,不正なマイナーがブロックチェーンの全体を破壊する確率が低いとしても,我々はそれを通貨として使う自信が持っていない.特に,我々は二花の問題に最終的な解決をしていない.

    双花問題をすぐに分析しますが,その前に,Infocoinの概念に重要な詳細を追加したいと思います.理想的には,Infocoinネットワークが取引が起こる順序を統一することを望みます.もし私たちが統一された順序を持っていないなら,特定の時点で誰がどのinfocoinを持っているかははっきりしません.この問題を解決するために,新しいブロックに指針を1つのブロック上に含めるように要求します.この指針はブロックのハッシュ結果です.したがって,基本的に,ブロックチェーンは1つのブロックを1つのブロックに並べて,取引の情報を含む線形な文字列です.

    img

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

    img

    これは,私たちが避けたい状況を作り出します. 取引の順序が不明になり,誰がどのインフォコインを持っているかは不明になります. 幸いにも,支店を移動するための簡単な方法があります. ルールとは,支店が発生した場合,ネットワーク上の人々は2つの支店を維持し,いずれにせよ,鉱夫は最も長いブロックチェーンの上でのみ作業します.

    ブロックAを最初に受け取るマイナーが,ブロックBを最初に受け取るマイナーが,ブロックAのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックAのマイナーが,ブロックBのマイナーが,ブロックAのマイナーが,ブロックBのマイナーが,ブロックAのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックAのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBのマイナーが,ブロックBの

    img

    このメッセージを受けると,A支部のメンバーは,B支部が最長であることを確認し,B支部に切り替える.A支部での作業はすぐに停止し,全員が同じ順序のブロックチェーンで作業するようになります.Aブロックは無視されます.もちろん,Aブロック内のすべての待機取引は待機状態のままであり,B支部内のすべての取引は新しいブロックに置き,すべての取引は最終的に検証されます.

    同じように,もしA部門の鉱夫が次のブロックに最初に掘り出すならば,B部門の作業員は停止し,A部門に移ります.

    このプロセスは,結果がどうであれ,ブロックチェーンに統一された順序を保証する.ビットコインでは,取引が確認されるまで (1) 最も長いブランチ内のブロックに存在し, (2) その後に少なくとも5つの検証されたブロックが確認されるまで確認されない.この場合,取引には6つの確認された順序があると言います.これはネットワーク全体にブロックの統一された順序を提示する時間を与えます.Infocoinでは,同じ手順を使用します.

    タイムシーケンスが理解されているので,もし不正な人が二重支出を望むならどうなるか考えてみましょう. アリスがボブとチャーリーに同じ取引を同時に与えると仮定します. 可能性の一つは,彼女に同時に2つの取引を伴うブロックを検証させることです. 計算能力の百分の一を持っていると仮定すると,彼女はこのブロックを検証するより幸運である可能性があります. 残念ながら,この二重支出はすぐに他の人によって発見され,拒否されます.

    しかし,別の可能性は,彼女が2つの取引を別々に公表しようとしていることです. 彼女は1つの取引を1つのマイナーに公開し,別の取引を別のマイナーに公開し,両方の取引が確認されることを望んでいます. 幸いなことに,この場合,私たちがちょうど言ったように,ネットワークは最終的に1つの取引のみを承認します.

    別の可能性は,アリスがチャーリーにコインを渡そうとする時,アリスが自分のアカウントを複数持っているので,そのコインを自分自身に渡そうとする場合もある.この場合,アリスの戦略は,チャーリーがInfocoinを受け取るまで待つことであり,つまり取引が最も長いブロックチェーンで6回確認された後に,アリスは別のブロックの支店を解決しようとします.

    img

    悲しいことに,この時点でアリスは最長ブロックチェーンの6歩遅れている. 彼女は最長の枝に追いつくのが困難である. 他のマイナーは彼女を助けないだろう. 彼らはみな最も長い枝で働く必要があるので,報酬を得る. アリスがネットワーク上の他の誰よりも早く結合することが証明されたときを除いて, (つまり,彼女はおそらくネットワーク全体の50%以上の計算能力を有している). もちろん,彼女は偶然幸運に1パーセントの算術でブロックを解決することが可能である. しかし,6つの花を同時に追いつくことは1/1006 = 10-12 に等しい.

    もちろん,これは非常に厳格でアリスは間違いなく二重に花を咲かせないと言うことではありません. これは合理的な推論に過ぎません. Bitcoinのホワイトペーパーのオリジナルは厳格なセキュリティ分析を行っていないが,私と同じような非公式な推論に過ぎません. セキュリティグループは,Bitcoinのセキュリティと潜在的な欠陥を分析することに気を使っていません.

    翻訳者,これは最初の半分で,後半の著者マイケルがInfocoinの概念を捨てて,Bitcoin取引の視点でBitcoinのプロトコルをより詳細に説明します.

    さらに,もし役立つと思うなら,この記事の原作者マイケル・ニールセンに 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZで連絡してください.

雑誌『』から引用


もっと