ビットコインの仕組み

46
1 ビットコインの仕組み 図解によりビットコインが動く基礎を解説

Upload: gotoa

Post on 26-May-2015

1.667 views

Category:

Business


9 download

DESCRIPTION

入門者向けのビットコインの仕組みの解説です。 図解によりビットコインが動く基礎を説明しています。

TRANSCRIPT

Page 1: ビットコインの仕組み

1

ビットコインの仕組み

図解によりビットコインが動く基礎を解説

Page 2: ビットコインの仕組み

はじめに

2

1. ここではビットコインの仕組みのエッセンスを,IT技術・数学に詳しくない方でも把握できる

ように分かりやすく解説しています

2. できるだけ分かりやすく解説していますが,本資料を理解するにはビットコインの

基礎知識は必要となります。

事前に「ビットコインの概要 http://www.slideshare.net/GOTO_A 」

をご覧いただくことをお勧めします。

3. 本資料はビットコインの仕組みのエッセンスを,IT技術・数学に詳しくない方でも把握

できるように分かりやすく解説したものであり,理解しやすいよう簡略化・意訳した箇所

がある関係上,厳密な正確性は犠牲にしていることにご留意ください。

IT技術に詳しい方は,本資料ではなく直接以下のナカモト サトシの論文(日本語訳版)

をご覧ください。

http://www.bitcoin.co.jp/docs/SatoshiWhitepaper.pdf

4. ここで解説している内容は2014年6月時点のものです

Page 3: ビットコインの仕組み

以降,この取引がビットコインのシステムでどのように処理されるのかを考えていく

基本となる送金取引

3

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

【取引内容】

太郎 (太郎のお財布のBTCアドレス「22StuXaoDIDELTPErEXck3V8T3KeZY1s77」)

取引前BTC残高 50BTC (“BTC”とは“ビットコイン”という意味)

(1)花子へ10BTC送金する

(花子のお財布のBTCアドレス「XXoo1uXW214Lqir9Ock7VdZZ89wepiuIU1」)

(2)太郎の取引後の残高は40BTC

(太郎のお財布のBTCアドレス「22StuXaoDIDELTPErEXck3V8T3KeZY1s77」)

ビットコインでは,「太郎の取引後残高」と

いうように,送金する人の(1)送金先と,

(2)送金した後の残高の2つが取引情報に

含まれる点が特徴

Page 4: ビットコインの仕組み

4

ビットコインの仕組みの全体像を

簡略化した形で把握する

まず,ビットコインの仕組みの全体像を把握するため,以下の2点の概

要を3ページにまとめて説明します。

1. 送金元と送金先2者間でのビットコインの送金取引

2. 2者間の送金取引がビットコインの維持ネットワークに

どのように記録されるのか

特に維持ネットワークで行われる作業内容は,ビットコインに“中央管理

者がいない”ことの理由になる非常に特徴的な仕組みになります。

Page 5: ビットコインの仕組み

(注)太郎と花子が “ビットコインを使う”ことができる理由はビットコインの維持管理作業のおかげで

あり,送金取引時は僅かではあるが維持管理作業に対し手数料を支払うことが推奨されている

(手数料を支払わないことも可能。現在1取引あたりの手数料は0.0001BTC)

5

まず,全体像の把握用に,かなり意訳・簡略化した形で全体の流れを解説

花子のお財布

残高

10BTC10BTC10BTC10BTC 未承認未承認未承認未承認

((((1)太郎から花子への送金は,)太郎から花子への送金は,)太郎から花子への送金は,)太郎から花子への送金は,2者間では瞬間的に完了する者間では瞬間的に完了する者間では瞬間的に完了する者間では瞬間的に完了する

※※※※ビットコインの送金自体はビットコインの送金自体はビットコインの送金自体はビットコインの送金自体はP2P((((peer to peer,,,,相対)で可能なため相対)で可能なため相対)で可能なため相対)で可能なため

太郎から送金すると,太郎から送金すると,太郎から送金すると,太郎から送金すると,即時に花子のお財布にビットコインが送られる即時に花子のお財布にビットコインが送られる即時に花子のお財布にビットコインが送られる即時に花子のお財布にビットコインが送られる

※※※※ただし,送金されたビットコインがその後ただし,送金されたビットコインがその後ただし,送金されたビットコインがその後ただし,送金されたビットコインがその後第三者に対し使用可能となるには,第三者に対し使用可能となるには,第三者に対し使用可能となるには,第三者に対し使用可能となるには,

送金内容がビットコインの維持ネットワークで“承認”(記録)される必要送金内容がビットコインの維持ネットワークで“承認”(記録)される必要送金内容がビットコインの維持ネットワークで“承認”(記録)される必要送金内容がビットコインの維持ネットワークで“承認”(記録)される必要があるがあるがあるがある

※※※※送金取引が“承認”されるまでは“未承認”というステータスとなる送金取引が“承認”されるまでは“未承認”というステータスとなる送金取引が“承認”されるまでは“未承認”というステータスとなる送金取引が“承認”されるまでは“未承認”というステータスとなる

((((2)太郎から花子への送金情報はビットコインの維持ネットワークへも同時に送信される)太郎から花子への送金情報はビットコインの維持ネットワークへも同時に送信される)太郎から花子への送金情報はビットコインの維持ネットワークへも同時に送信される)太郎から花子への送金情報はビットコインの維持ネットワークへも同時に送信される

ネットワークで取引の承認(取引履歴データベースへの記録,次ページで解説)がなされると

「承認」となる(約10分間必要)

花子のお財布

残高

10BTC10BTC10BTC10BTC 承認承認承認承認

※「承認」とは,その取引に改ざんや不正がないとビットコインの維持ネットワークで

確認されたという意味になる。

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

簡単な全体の流れの説明: 送金元と送金先2者間でのビットコインの送金取引

花子は即時に送金された

ビットコインを受取るが,

“未承認”状態となる

10分後に“承認”となり,送

金取引がビットコインネット

ワークで確定する

(受け取ったビットコインを

自由に使えるようになる)

太郎

花子

(注)太郎からビット

コインの維持ネット

ワークへ手数料の

支払いも行われる

Page 6: ビットコインの仕組み

6

ビットコインの送金取引を確認・記録する“維持ネットワーク”ビットコインの送金取引を確認・記録する“維持ネットワーク”ビットコインの送金取引を確認・記録する“維持ネットワーク”ビットコインの送金取引を確認・記録する“維持ネットワーク”

・維持作業へは世界中の誰でも自由に参加(脱退も)可能。参加条件はなし(高性能なコンピュータは必要)

・維持作業を「マイニングマイニングマイニングマイニング」,参加者を「マイナーマイナーマイナーマイナー」と呼ぶ

ネットワーク上

ビットコインビットコインビットコインビットコイン

の全取引の全取引の全取引の全取引

履歴データ履歴データ履歴データ履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベースビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

(1)“ビットコインの維持ネットワーク”とは,世界中に“ビットコインの維持ネットワーク”とは,世界中に“ビットコインの維持ネットワーク”とは,世界中に“ビットコインの維持ネットワーク”とは,世界中に

いる“ビットコインの取引履歴データベースを持ついる“ビットコインの取引履歴データベースを持ついる“ビットコインの取引履歴データベースを持ついる“ビットコインの取引履歴データベースを持つ

人たちの集まり”のこと人たちの集まり”のこと人たちの集まり”のこと人たちの集まり”のこと

(2)各自が保有する“ビットコインの取引履歴データ

ベース”には,過去全てのビットコインの取引履歴

(いつ,どのビットコインIDから,いくらの受け渡しが

あったのか)が記録されている

⇒これにより残高,取引の改ざんがあると容易に

検証可能

(3)この各自が保有するデータベースが“まるで1つの

管理システム“のようにインターネット上で機能して

いる

(4)各自が一部のデータベースを持ち合うのではなく,

“皆が同じデータベースを持っている”

⇒改ざんには全参加者の51%のデータベースを

書き換える必要がある

(5)新規取引が発生すると,取引履歴データベースに追加する必要があるが,各自がバラバラに追加すると整合性が維持できない

⇒ビットコインは,新規取引のデータベースへの追加毎に「くじ引き」を開催し,当選者一人のみに更新権限を与えることにした

(当選者は報酬を受けとる)

他の参加者は,当選者の更新した結果を受け入れ,自分のパソコンに持つデータベースの更新を行う

これにより,管理者がいない分散して管理者がいない分散して管理者がいない分散して管理者がいない分散して存在存在存在存在するデータベースが整合的に維持されるするデータベースが整合的に維持されるするデータベースが整合的に維持されるするデータベースが整合的に維持されることになる

※当選者が改ざんしたデータを追加しようとすると,他の参加者は自分の持つデータベースの更新を拒否するため,

51%を超える参加者が拒否する限り改ざんデータは排除される

簡単な全体の流れの説明:ビットコインの維持ネットワークとは何か?

※このデータベースを

“ブロックチェーン”と呼ぶ

Page 7: ビットコインの仕組み

一郎 ジェニー ボブ

今回はジェニーが当選!

ビットコイビットコイビットコイビットコイ

ンの全取ンの全取ンの全取ンの全取

引履歴引履歴引履歴引履歴

データデータデータデータ

ベースベースベースベース

ジェニーがデータベースへ追加

新規取引

ジェニーが報

酬のビットコ

インを受取

”くじ引き”へチャレンジ

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

7

((((1)新規送金取引があると各マイナー)新規送金取引があると各マイナー)新規送金取引があると各マイナー)新規送金取引があると各マイナー

に通知され,データベースの更新に通知され,データベースの更新に通知され,データベースの更新に通知され,データベースの更新

(報酬)をめぐる“くじ引き”が開催(報酬)をめぐる“くじ引き”が開催(報酬)をめぐる“くじ引き”が開催(報酬)をめぐる“くじ引き”が開催

されるされるされるされる

※くじ引きは10分毎に開催

※実際は,1つの取引ごとにくじ引き

を行うと負担が大きいので,10分間

に行われた送金取引を“ブロック”と

してひとまとまりにしてからくじ引き

を行う。取引履歴データベースへの

追加はブロック単位で行われる。

((((2)くじ引きは以下の条件が必要)くじ引きは以下の条件が必要)くじ引きは以下の条件が必要)くじ引きは以下の条件が必要

・改ざんが難しい

・同じ人が当たり続けない

・当選者の確認が容易

⇒ハッシュ関数という数学的な

仕組みを利用

((((3))))くじ引きくじ引きくじ引きくじ引きはははは高性能高性能高性能高性能なパソコンをなパソコンをなパソコンをなパソコンを

持つほど有利となる持つほど有利となる持つほど有利となる持つほど有利となる

((((4)くじ)くじ)くじ)くじ引き引き引き引きの当選者が取引履歴データの当選者が取引履歴データの当選者が取引履歴データの当選者が取引履歴データ

ベースへの追加と,報酬を受け取るベースへの追加と,報酬を受け取るベースへの追加と,報酬を受け取るベースへの追加と,報酬を受け取る

※報酬はビットコインの新規発行付与

と,送金者から払われた取引手数料

から構成される

((((5)敗者となったマイナーは過去の)敗者となったマイナーは過去の)敗者となったマイナーは過去の)敗者となったマイナーは過去の

取引履歴との整合性をチェックし,取引履歴との整合性をチェックし,取引履歴との整合性をチェックし,取引履歴との整合性をチェックし,

データに改ざんがないかを確認データに改ざんがないかを確認データに改ざんがないかを確認データに改ざんがないかを確認

後,勝者の更新情報を,自分の後,勝者の更新情報を,自分の後,勝者の更新情報を,自分の後,勝者の更新情報を,自分の

パソコンのデータベースにも反映パソコンのデータベースにも反映パソコンのデータベースにも反映パソコンのデータベースにも反映

させるさせるさせるさせる

⇒世界中のデータベースが

整合性を持って一斉に更新

される

簡単な全体の流れの説明:ビットコインの維持ネットワークによる送金取引の承認・記録フロー

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

Page 8: ビットコインの仕組み

8

ビットコインの仕組みを

学ぶ上でのポイント

ここからは,ビットコインの仕組みの個別論点になります

(9 ~ 12ページ) ビットコインの仕組みを学ぶ上でのポイント

(13~17ページ) “なりすまし”への対処:秘密鍵・公開鍵暗号の解説

(18~21ページ) ビットコインが不正に“二重使用”されない理由

(22~26ページ) 取引履歴データベースの管理

(27~37ページ) データベースの更新権限者を決める“くじ引き”

(38~41ページ) 取引承認までの “10分間”とは?

(42~45ページ) その他ポイント

Page 9: ビットコインの仕組み

ビットコインの仕組みを学ぶ上でのポイント

9

ビットコインの実体は,ネットワーク上にある「取引履歴データベースそのもの」といえ,「どこ

からどこへいくら送られた」という,すべての履歴の積み重ねから,今各自が持っている残高

が結果として証明される仕組み

自分は“1BTC”しか持っていないのに,偽って“100BTC”を他の人に送金しても,ネットワーク

上の過去の取引履歴(自分への送金履歴)から,自分の残高には“1BTC”しかないことが容

易にわかるので,“100BTC”の送金取引データは「不正」として排除されることになる

ビットコインの仕組みを学ぶ上でのポイントビットコインの仕組みを学ぶ上でのポイントビットコインの仕組みを学ぶ上でのポイントビットコインの仕組みを学ぶ上でのポイント

(1)「太郎⇒花子」の送金を,悪意のあるマイケルが, 「太郎⇒マイケル」と書き換える

“なりすまし”をどう防ぐのか?

(2) 50BTCしか持たない太郎が,以下の2つの取引を同時にネットワークに流した時に,

どのように太郎の持つ残高の二重使用を防ぐのか?

・「残高50の太郎⇒花子10,太郎の残高40」

・「残高50の太郎⇒みゆき10,太郎の残高40」

(3)どうやってネットワーク上の取引履歴は正しく管理されるのか?

誰がどのように正しいデータのみを取引履歴に追加していくのか

取引履歴の書き換え攻撃をどのように防ぐのか?

Page 10: ビットコインの仕組み

ビットコインへの疑問1

10

太郎太郎太郎太郎 マイケルマイケルマイケルマイケル

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「ggH64hor5Thge546fFFwehg

bnf8sacsjfs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

「なりすまし」=悪意のあるマイケルが太郎になりすまして,「太郎からマイケルへ10BTC送

金する」というように不正なデータを,ビットコインの維持ネットワークへ流すこと

マイケル:「太郎マイケル:「太郎マイケル:「太郎マイケル:「太郎⇒⇒⇒⇒花子花子花子花子」の送金データ」の送金データ」の送金データ」の送金データを「太郎を「太郎を「太郎を「太郎⇒⇒⇒⇒マイケルマイケルマイケルマイケル」として“自分へ」として“自分へ」として“自分へ」として“自分へ10BTC送る”というウソのデータに書き換えて送る”というウソのデータに書き換えて送る”というウソのデータに書き換えて送る”というウソのデータに書き換えて

ネットワークへ流してしまえ!ネットワークへ流してしまえ!ネットワークへ流してしまえ!ネットワークへ流してしまえ!

ネットワーク上

ビットコインビットコインビットコインビットコイン

の全取引の全取引の全取引の全取引

履歴データ履歴データ履歴データ履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベースビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインの維持ネットワークはどのようにこの嘘データ

を排除するのか?

Page 11: ビットコインの仕組み

ビットコインへの疑問2

11

「二重使用」=同時に保有するコインを重複して使用すること。

これができてしまうと“通貨”として仕組みが信頼できないことになる

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 みゆきみゆきみゆきみゆき

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「u12jfhH57hfeTlbghgs688vds

vW47jofrs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

ネットワーク上

ビットコインビットコインビットコインビットコイン

の全取引の全取引の全取引の全取引

履歴データ履歴データ履歴データ履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベースビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

太郎が,以下の2つの取引を同時にネットワークに流すと,

どちらが採用されるのか,両方が採用される(二重に使えてしまう)ことは絶対にないのか?

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒花子花子花子花子10,,,,““““太郎の太郎の太郎の太郎の取引後取引後取引後取引後残高残高残高残高40””””」」」」

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒みゆきみゆきみゆきみゆき10,,,, ““““太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高40”””” 」」」」

ビットコインの維持ネットワークはどのように

二重使用を防ぐ(取引履歴への同時書き込み)

を防ぐのか?

※ともに取引後の太郎の

残高は40であり,同じコイ

ンを二重に使用している

Page 12: ビットコインの仕組み

ビットコインへの疑問3

12

ネットワーク上

ビットコインビットコインビットコインビットコイン

の全取引の全取引の全取引の全取引

履歴データ履歴データ履歴データ履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベースビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

誰がどのように正しいデータのみを取引履歴に追加していくのか

取引履歴の書き換え攻撃をどのように防ぐのか?

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 みゆきみゆきみゆきみゆき

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「u12jfhH57hfeTlbghgs688vds

vW47jofrs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

太郎太郎太郎太郎 マイケルマイケルマイケルマイケル

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「ggH64hor5Thge546fFFwehg

bnf8sacsjfs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

ビットコインの取引履歴データベースの改ざん

攻撃をどう防ぐのか?

正しい取引データをどう判別して履歴データベースに

追加するのか?

×××× ××××

××××

Page 13: ビットコインの仕組み

13

“なりすまし”のような

取引情報の改ざんを防ぐ

秘密鍵・公開鍵暗号の解説

Page 14: ビットコインの仕組み

公開鍵・秘密鍵暗号技術の解説 1

14

・「なりすまし」への対策=ビットコインでは,公開鍵・秘密鍵暗号技術を用いている

・公開鍵・秘密鍵暗号技術はインターネットでは一般的に用いられているセキュリティ技術

「秘密鍵」:所有者本人のみが世界でただ一人もつ鍵「秘密鍵」:所有者本人のみが世界でただ一人もつ鍵「秘密鍵」:所有者本人のみが世界でただ一人もつ鍵「秘密鍵」:所有者本人のみが世界でただ一人もつ鍵

「公開鍵」:秘密鍵で「公開鍵」:秘密鍵で「公開鍵」:秘密鍵で「公開鍵」:秘密鍵で”カギをかけたカギをかけたカギをかけたカギをかけた” ものを開けるための対となる鍵であり,世界中に公開してあるものを開けるための対となる鍵であり,世界中に公開してあるものを開けるための対となる鍵であり,世界中に公開してあるものを開けるための対となる鍵であり,世界中に公開してある

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

1)文書を自分だけが持つ秘密

鍵で暗号化

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

2)以下の3つを送る

・暗号化された文書暗号化された文書暗号化された文書暗号化された文書

・公開鍵公開鍵公開鍵公開鍵

・元の文書元の文書元の文書元の文書

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

3)受け取った人は,

1: 公開鍵が太郎の公開鍵か確認

2:公開鍵で暗号化された文書を元

に戻す(復号)

あいうあいうあいうあいう

えおえおえおえお

4)暗号化されずに受け取った

文書の内容と,複合した文書

の内容を比較する

花子

太郎

太郎の公開鍵で

開けることができ

るのは,太郎だけ

が持つ秘密鍵で

暗号化した文書だ

け=太郎から送ら太郎から送ら太郎から送ら太郎から送ら

れたに違いない!れたに違いない!れたに違いない!れたに違いない!

太郎だけが持つ秘密鍵で暗号化した

文書(を復号して戻した文書)と,送ら

れてきた元の文書の内容が同じ=途途途途

中で改ざんされていない!中で改ざんされていない!中で改ざんされていない!中で改ざんされていない!

⇒公開鍵・秘密鍵暗号公開鍵・秘密鍵暗号公開鍵・秘密鍵暗号公開鍵・秘密鍵暗号技術は「技術は「技術は「技術は「本人が送ったこと本人が送ったこと本人が送ったこと本人が送ったこと」と「」と「」と「」と「送信の途中で改ざんされていない送信の途中で改ざんされていない送信の途中で改ざんされていない送信の途中で改ざんされていない」の」の」の」の2つをつをつをつを確認できる確認できる確認できる確認できる

Page 15: ビットコインの仕組み

15

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

1)文書を自分だけが持つ秘密

鍵で暗号化

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

2)以下の3つを送る

・暗号化された文書暗号化された文書暗号化された文書暗号化された文書

・公開鍵公開鍵公開鍵公開鍵

・元の文書元の文書元の文書元の文書

受け取った人は,

1: 公開鍵が太郎の公開鍵か確認

2:暗号が太郎の公開鍵では開けない!

⇒⇒⇒⇒太郎から送られた文書ではない!太郎から送られた文書ではない!太郎から送られた文書ではない!太郎から送られた文書ではない!

暗号化されずに受け取った文

書の内容と,複合した文書の

内容が一致しない!

⇒⇒⇒⇒途中で改ざんされている!途中で改ざんされている!途中で改ざんされている!途中で改ざんされている!

太郎

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

かきくかきくかきくかきく

けこけこけこけこ

あいうあいうあいうあいう

えおえおえおえお

暗号化した文書を置暗号化した文書を置暗号化した文書を置暗号化した文書を置

き換える改ざんき換える改ざんき換える改ざんき換える改ざん

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ××××

●●●●●●●●●●●●

●●●●●●●●

元の文書を書き換元の文書を書き換元の文書を書き換元の文書を書き換

える改ざんえる改ざんえる改ざんえる改ざん

●●●●●●●●●●●●

●●●●●●●●

あいうあいうあいうあいう

えおえおえおえお

受け取った人は,

1: 公開鍵が太郎の公開鍵か確認

2:公開鍵で暗号化された文書を元

に戻す(復号)

かきくかきくかきくかきく

けこけこけこけこ ××××

公開鍵・秘密鍵暗号技術の解説 2 改ざんが行われても容易に分かる

(悪意のある人)(悪意のある人)(悪意のある人)(悪意のある人)

(悪意のある人)(悪意のある人)(悪意のある人)(悪意のある人)

Page 16: ビットコインの仕組み

公開鍵・秘密鍵暗号技術~ビットコインにおける「太郎⇒花子」の送金 1

16

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

2.太郎の公開鍵

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

3.暗号化してい

ない取引情報

1.暗号化した

取引情報

太郎は世界で自分だけが持つ秘

密鍵で,取引情報を暗号化する

3つの「取引情報」を受け取ったビットコインの維持ネットワークが行う事つの「取引情報」を受け取ったビットコインの維持ネットワークが行う事つの「取引情報」を受け取ったビットコインの維持ネットワークが行う事つの「取引情報」を受け取ったビットコインの維持ネットワークが行う事

このこのこのこの3つをつをつをつをビットコインの維持ネットワークへビットコインの維持ネットワークへビットコインの維持ネットワークへビットコインの維持ネットワークへ

「取引情報」として送信(放送)する「取引情報」として送信(放送)する「取引情報」として送信(放送)する「取引情報」として送信(放送)する

((((1)公開鍵が太郎のものかを確認する)公開鍵が太郎のものかを確認する)公開鍵が太郎のものかを確認する)公開鍵が太郎のものかを確認する

ビットコインでは,太郎の公開鍵を,ある関数に入れると

太郎のBTCアドレス「22StuXaoDIDELTPErEXck3V8T3KeZY1s77」になる

仕組みとなっており,送信者の公開鍵であることが容易に確認できる

((((2)公開鍵で暗号化された取引情報を元に戻す(複号))公開鍵で暗号化された取引情報を元に戻す(複号))公開鍵で暗号化された取引情報を元に戻す(複号))公開鍵で暗号化された取引情報を元に戻す(複号)

((((3)復号した取引情報と,暗号化されていない取引情報を比較して)復号した取引情報と,暗号化されていない取引情報を比較して)復号した取引情報と,暗号化されていない取引情報を比較して)復号した取引情報と,暗号化されていない取引情報を比較して

改ざんされていないかを確認する改ざんされていないかを確認する改ざんされていないかを確認する改ざんされていないかを確認する

太郎から花子へのビットコインの送金取引情報

関数関数関数関数

太郎のBTCアドレス

「22StuXaoDIDELTPErEX

ck3V8T3KeZY1s77」

太郎の公開鍵

暗号化取暗号化取暗号化取暗号化取

引情報引情報引情報引情報

暗号化取暗号化取暗号化取暗号化取

引情報引情報引情報引情報

太郎の公開鍵でなければ太郎のBTC

アドレスにはならない!

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

⇒⇒⇒⇒このチェックをクリアすることで太郎が送り,内容も改ざんされていない(“なりすまし”ではない)ことがわかるこのチェックをクリアすることで太郎が送り,内容も改ざんされていない(“なりすまし”ではない)ことがわかるこのチェックをクリアすることで太郎が送り,内容も改ざんされていない(“なりすまし”ではない)ことがわかるこのチェックをクリアすることで太郎が送り,内容も改ざんされていない(“なりすまし”ではない)ことがわかる

一致!

Page 17: ビットコインの仕組み

公開鍵・秘密鍵暗号技術~ビットコインにおける「太郎⇒花子」の送金 2

17

太郎太郎太郎太郎 マイケルマイケルマイケルマイケル

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「ggH64hor5Thge546fFFwehg

bnf8sacsjfs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

太郎から花子ではなく,改ざんされて,太郎からマイケルへの送金という嘘の取引情報が流された場合

暗号化取暗号化取暗号化取暗号化取

引情報引情報引情報引情報

太郎の秘密鍵はハッキングなど

で盗まれない限り,世界で太郎だ

けが持つため,マイケルは自分

の秘密鍵でしか暗号化できない

マイケルの公開鍵

マイケルの公開鍵を関数に入れても,“BTC送金者

である”太郎のアドレスにはならない⇒太郎が作成

した取引情報ではないとわかる

太郎太郎太郎太郎 マイケルマイケルマイケルマイケル

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「ggH64hor5Thge546fFFwehg

bnf8sacsjfs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

(改ざんされた)暗号化して

いない取引情報

関数関数関数関数

太郎のBTCアドレス

「22StuXaoDIDELTPErEX

ck3V8T3KeZY1s77」

マイケルの公開鍵

××××

太郎の公開鍵

暗号化取暗号化取暗号化取暗号化取

引情報引情報引情報引情報

太郎太郎太郎太郎 マイケルマイケルマイケルマイケル

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「ggH64hor5Thge546fFFwehg

bnf8sacsjfs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

暗号化していない取引情報だけを置き換えても,復号し

た取引情報と一致しないので改ざんされたとわかる

マイケルの秘密

鍵で暗号化

太郎の秘密

鍵で暗号化

(改ざんされた)暗号化して

いない取引情報

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

××××

太郎の秘密鍵で暗号化された“正しい”取引情報を,

公開鍵で復号した内容は,改ざんされた内容とは一致し

ない⇒太郎が作成した取引情報ではないとわかる

(送信取引情報)(送信取引情報)(送信取引情報)(送信取引情報)

改ざんされ

ている!!

とわかる

⇒⇒⇒⇒自分の秘密鍵の管理が非常に重要となる(秘密鍵を知られてしまうこと=ビットコインを盗まれることと同義となる)自分の秘密鍵の管理が非常に重要となる(秘密鍵を知られてしまうこと=ビットコインを盗まれることと同義となる)自分の秘密鍵の管理が非常に重要となる(秘密鍵を知られてしまうこと=ビットコインを盗まれることと同義となる)自分の秘密鍵の管理が非常に重要となる(秘密鍵を知られてしまうこと=ビットコインを盗まれることと同義となる)

Page 18: ビットコインの仕組み

18

“二重使用”という同じコインが重複して

使われることをどう防ぐのか

Page 19: ビットコインの仕組み

二重使用への対処 1

1919

「二重使用」=“同時に保有するコインを重複して使用すること“をどう防ぐのか?

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 みゆきみゆきみゆきみゆき

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「u12jfhH57hfeTlbghgs688vds

vW47jofrs」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

ネットワーク上

ビットコインビットコインビットコインビットコイン

の全取引の全取引の全取引の全取引

履歴データ履歴データ履歴データ履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベースビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

残高50の太郎が,「花子へ10送金し,残りの太郎の残高は40」という取引」(取引A)をビットコインの維持ネットワー

クへ流した直後に, 「みゆきへ10送金し,残りの太郎の残高は40」という取引」(取引B)」という不正な取引情報を

ビットコインの維持ネットワークへ流すケースを考える。

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒花子花子花子花子10,,,,太郎の残高太郎の残高太郎の残高太郎の残高40」(取引」(取引」(取引」(取引A))))

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒みゆきみゆきみゆきみゆき10,,,,太郎の残高太郎の残高太郎の残高太郎の残高40」」」」 ((((取引取引取引取引B))))

ビットコインの維持ネットワークはビットコインの維持ネットワークはビットコインの維持ネットワークはビットコインの維持ネットワークは

どのようにこの二重使用に対処するのか?どのようにこの二重使用に対処するのか?どのようにこの二重使用に対処するのか?どのようにこの二重使用に対処するのか?

Page 20: ビットコインの仕組み

20

二重使用への対処 2

・「二重使用」=“同時に保有するコインを重複して使用すること“に対しては,1つの「過去の全取引履歴

データベース」があれば,そこを参照することで不正な二重支払などの改ざん取引データを見つけ排除

できる

・ 「過去の全取引履歴データベース」を見れば,ある人の持つビットコインアドレスについて,誰と・いつ・

いくらの受け渡しを行ったのか,その結果今いくらの残高があるのかが分かる

・1つという点もポイントであり,顧客残高データベースが複数のデータベースに分割管理されていると,

互いのデータベースの整合性を取ることが難しくなる

・銀行は1つの顧客残高データベースを自分で保有・管理しているので不正な二重支払は容易に排除で

きる。銀行では一度お金を口座から出すと,即座に金額が引き落とされ,同じお金を再使用する事はで

きない

・ビットコインも,ネットワーク全体で“1つ”の 「過去の全取引履歴データベース」を管理している。“過去

の全取引履歴を管理する”ことで,結果として今どのビットコインアドレスにいくらの残高があるのかが容

易に分かる

⇒過去の取引履歴から導き出される“今の残高”と不整合な取引データを見つけ排除できる

Page 21: ビットコインの仕組み

二重使用への対処 3

21

((((1))))

過去の取引履歴から太郎の過去の取引履歴から太郎の過去の取引履歴から太郎の過去の取引履歴から太郎の

BTC残高は残高は残高は残高は50

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

ビットコインの過去の全

取引履歴データベース

取引A

(2)

取引履歴に,新規取引の追加取引履歴に,新規取引の追加取引履歴に,新規取引の追加取引履歴に,新規取引の追加

「残高「残高「残高「残高50のののの太郎が花子に太郎が花子に太郎が花子に太郎が花子に10送金したので送金したので送金したので送金したので

残りの太郎残りの太郎残りの太郎残りの太郎のののの残高は残高は残高は残高は40」」」」

取引B

(3)

取引取引取引取引Bが入ってきたときに過去の取引履歴をが入ってきたときに過去の取引履歴をが入ってきたときに過去の取引履歴をが入ってきたときに過去の取引履歴を

みると,みると,みると,みると,太郎の残高は太郎の残高は太郎の残高は太郎の残高は40なので,なので,なので,なので,

取引取引取引取引Bの以下の情報が矛盾することがわかるの以下の情報が矛盾することがわかるの以下の情報が矛盾することがわかるの以下の情報が矛盾することがわかる

「“「“「“「“残高残高残高残高50のののの太郎が”みゆきに太郎が”みゆきに太郎が”みゆきに太郎が”みゆきに10送金したので送金したので送金したので送金したので

太郎太郎太郎太郎のののの残高は残高は残高は残高は40」」」」

××××

1つのデータベース上に過去の全取引履歴があれば,新規取引内容が過去のデータと矛

盾していないか容易に確認ができ,「二重使用」を排除できる。

⇒⇒⇒⇒不正データとして取り込まれない不正データとして取り込まれない不正データとして取り込まれない不正データとして取り込まれない

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒花子花子花子花子10,,,,太郎の残高太郎の残高太郎の残高太郎の残高40」(取引」(取引」(取引」(取引A))))

「残高「残高「残高「残高50の太郎の太郎の太郎の太郎⇒⇒⇒⇒みゆきみゆきみゆきみゆき10,,,,太郎の残高太郎の残高太郎の残高太郎の残高40」」」」 ((((取引取引取引取引B))))

Page 22: ビットコインの仕組み

22

ビットコインは,中央集権的な管理者がいないが,

ネットワーク上でどのように

過去の全取引履歴データベースを

管理しているのか?

Page 23: ビットコインの仕組み

過去の全取引履歴データベースの管理について 1

23

1つのデータベース上に過去の全取引履歴を管理することは,銀行のように管理者が明確であれば容易

に可能であるが,ビットコインはそれを管理者不在のネットワーク上の不特定多数で行っている。

【【【【仕組み仕組み仕組み仕組み】】】】

1111)参加者が自分の)参加者が自分の)参加者が自分の)参加者が自分のPCに他の全員と同じ取引履歴データベース(“ブロックチェーン”と呼ぶ)を持つに他の全員と同じ取引履歴データベース(“ブロックチェーン”と呼ぶ)を持つに他の全員と同じ取引履歴データベース(“ブロックチェーン”と呼ぶ)を持つに他の全員と同じ取引履歴データベース(“ブロックチェーン”と呼ぶ)を持つ

2)新規取引があると,その取引が正しいかのチェックが行われ,特定の条件を満たしたネットワーク2)新規取引があると,その取引が正しいかのチェックが行われ,特定の条件を満たしたネットワーク2)新規取引があると,その取引が正しいかのチェックが行われ,特定の条件を満たしたネットワーク2)新規取引があると,その取引が正しいかのチェックが行われ,特定の条件を満たしたネットワーク

上の上の上の上の唯一人唯一人唯一人唯一人がデータベースの更新を行い,その更新情報をネットワーク上へ一斉通知する。がデータベースの更新を行い,その更新情報をネットワーク上へ一斉通知する。がデータベースの更新を行い,その更新情報をネットワーク上へ一斉通知する。がデータベースの更新を行い,その更新情報をネットワーク上へ一斉通知する。

3)通知を受け取った他の参加者は自分の3)通知を受け取った他の参加者は自分の3)通知を受け取った他の参加者は自分の3)通知を受け取った他の参加者は自分のPCのデータベースを同じように更新するのデータベースを同じように更新するのデータベースを同じように更新するのデータベースを同じように更新する

⇒どこかに1つのデータベースがあるわけではなく,皆が同じ内容のデータベースをそれぞれ保有してい

ることで,“1つのデータベース”がネットワーク上に存在しているように動く

ビットコイビットコイビットコイビットコイ

ンの全取ンの全取ンの全取ンの全取

引履歴引履歴引履歴引履歴

データデータデータデータ

ベースベースベースベース

ジェニーがデータベースへ追加

新規取引

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

他の参加者は,他の参加者は,他の参加者は,他の参加者は,ジェニーからジェニーからジェニーからジェニーからの更新情報をチェッの更新情報をチェッの更新情報をチェッの更新情報をチェッ

クして自分のクして自分のクして自分のクして自分のPCに持つデータベースを同じ形にに持つデータベースを同じ形にに持つデータベースを同じ形にに持つデータベースを同じ形に

更新する更新する更新する更新する

Page 24: ビットコインの仕組み

過去の全取引履歴データベースの管理について 2

24

【疑問】

・データベースに書き込む唯一人の人はどうやって決まるの?

・どうやって他の人は,唯一人が決めたデータベースの更新情報を“正しい”として従うの?

・唯一人が“改ざんされた更新情報”を送りつけることも可能なのでは?

・どこかに1つのデータベースがあるわけではなく,参加者各自のPCの中に,同じ内容のデー

タベースがあるということは,世界中の参加者の持つデータベースの過半数を書き換えるこ

とができれば,それが「正しい」データベースになるということ?

(過半数,51%を書き換えればビットコインを“乗っ取れるの”?)

これらの疑問に対し,ビットコインは新規取引がある毎に特殊な“くじ引き”を開催して,当

選者にデータベース更新権限を付与することにした

Page 25: ビットコインの仕組み

一郎 ジェニー ボブ

今回はジェニーが当選!

ビットコイビットコイビットコイビットコイ

ンの全取ンの全取ンの全取ンの全取

引履歴引履歴引履歴引履歴

データデータデータデータ

ベースベースベースベース

ジェニーがデータベースへ追加

新規取引

ジェニーが報

酬のビットコ

インを受取

”くじ引き”へチャレンジ

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

25

((((1)新規取引があると各参加者)新規取引があると各参加者)新規取引があると各参加者)新規取引があると各参加者

(マイナーという)に通知され,(マイナーという)に通知され,(マイナーという)に通知され,(マイナーという)に通知され,

データベースの更新権者を決めデータベースの更新権者を決めデータベースの更新権者を決めデータベースの更新権者を決め

るるるる “くじ引き”が開催される“くじ引き”が開催される“くじ引き”が開催される“くじ引き”が開催される

※1つの新規取引毎にくじ引きを開

催することは非効率のため,実際は実際は実際は実際は

10分間の新規取引を1つの塊(ブ分間の新規取引を1つの塊(ブ分間の新規取引を1つの塊(ブ分間の新規取引を1つの塊(ブ

ロック)にまとめて,その塊をデータロック)にまとめて,その塊をデータロック)にまとめて,その塊をデータロック)にまとめて,その塊をデータ

ベースに追加するくじ引きが開催ベースに追加するくじ引きが開催ベースに追加するくじ引きが開催ベースに追加するくじ引きが開催さ

れる。

((((2)世界で一番最初にくじの問題が)世界で一番最初にくじの問題が)世界で一番最初にくじの問題が)世界で一番最初にくじの問題が

解けた人が当選者となる解けた人が当選者となる解けた人が当選者となる解けた人が当選者となる

当選者は以下の情報を世界中に通

知する

・自分が当選したことを示す,くじの

「答え」

・取引履歴に追加するための新規

取引情報と,当選者である自分へ

の報酬の支払い情報

((((3)くじに外れた人(世界で一番)くじに外れた人(世界で一番)くじに外れた人(世界で一番)くじに外れた人(世界で一番

最初に問題を解けなかった人)最初に問題を解けなかった人)最初に問題を解けなかった人)最初に問題を解けなかった人)

は,当選者からの通知を受けとりは,当選者からの通知を受けとりは,当選者からの通知を受けとりは,当選者からの通知を受けとり

以下を確認以下を確認以下を確認以下を確認

追加する新規取引情報が,過去の追加する新規取引情報が,過去の追加する新規取引情報が,過去の追加する新規取引情報が,過去の

取引履歴と矛盾(改ざん)されて取引履歴と矛盾(改ざん)されて取引履歴と矛盾(改ざん)されて取引履歴と矛盾(改ざん)されていいいい

ないかないかないかないか

データに改ざんがないかを確認データに改ざんがないかを確認データに改ざんがないかを確認データに改ざんがないかを確認

後,自分のパソコンのデータベー後,自分のパソコンのデータベー後,自分のパソコンのデータベー後,自分のパソコンのデータベー

スに追加書き込みを行うスに追加書き込みを行うスに追加書き込みを行うスに追加書き込みを行う

⇒世界中のデータベースが整合

性を持って一斉に更新される

過去の全取引履歴データベースの管理について 3取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

((((4)当選者からきた通知でも,その)当選者からきた通知でも,その)当選者からきた通知でも,その)当選者からきた通知でも,その

内容が過去の取引履歴と不整合内容が過去の取引履歴と不整合内容が過去の取引履歴と不整合内容が過去の取引履歴と不整合

(改ざんされている)であれば,自分(改ざんされている)であれば,自分(改ざんされている)であれば,自分(改ざんされている)であれば,自分

の取引履歴データベースには追加の取引履歴データベースには追加の取引履歴データベースには追加の取引履歴データベースには追加

しない(破棄される)しない(破棄される)しない(破棄される)しない(破棄される)

⇒世界で2番目に問題を解いた正し

いデータの人が“当選者”とされ,世

界中の参加者はそちらを“正しい”と

して,自分の取引履歴に追加する

Page 26: ビットコインの仕組み

【データベースの更新権限者を決める“くじ引き”とは?】

(1)新規取引情報を,ビットコインの取引履歴データベースに追加書き込みする権限を

一人に定めるために行われるもの

(2)くじの問題に求められる性質

・問題と答えの改ざんが難しい

・同じ人が当たり続けない,特定の人だけが有利にならない

・“当選”したことの嘘がつけない,他の人が“当選”したことの正しさを容易に把握できる

・くじの答えの改ざんには非常に高い能力(パソコンの性能)が必要で,それだけの

能力があれば,改ざんではなく,正当に参加するほうが利益になる

⇒これらの条件を満たす“くじ”として,ビットコインは「ハッシュ関数」を利用することにした

(3)この性質を満たす“くじ”(問題)を,新規の取引をデータベースに追加する都度開催し,

世界でただ一人の当選者がデータベースを更新できるようにした

(4)くじが公正であると参加者が考えるため,当選者がデータベースに追加する結果を

受け入れ,自分のパソコンにあるデータベースを同じように更新する

過去の全取引履歴データベースの管理について 4

26

Page 27: ビットコインの仕組み

27

ビットコインの取引履歴データベースの

更新権限者を決める“くじ引き”についての解説

Page 28: ビットコインの仕組み

くじの問題について 1 くじの問題に利用する“ハッシュ関数”

28

ビットコインのくじの問題には「ハッシュ関数」を利用している

※公正で改ざんが難しければ「ハッシュ関数」である必要はないが,現状の仕組みでは「ハッシュ関数」が最も適しているので

使用している

64文字の文字列

文書文書文書文書

あいうえお

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

FDB481EA956FDB654AFCC327CFF9B626966B2ABDA

BC3F3E6DBCB1667A888ED9A

数値数値数値数値 64文字の文字列

123456789 15E2B0D3C33891EBB0F1EF609EC419420C20E320CE

94C65FBC8C3312448EB225ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

画像データ画像データ画像データ画像データ

64文字の文字列

2D4863CEAF499EA8FC6EEAD3E21BDE7686F29C1672

04917F7DEA51FEA02EF2E5ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

【ハッシュ関数とは?】

・ハッシュ関数とは,“要約関数”とも呼ばれ,あるデータをそのデータが代表する数値に変換する関数

・大きなデータを簡素な数値に変換できてしまうので,暗号化の技術などで使われている

・特にビットコインでは“SHA256“というアメリカ国家安全保障局(National Security Agency,NSA)に

より開発されたハッシュ関数を利用している

これは,どんなに大きなデータでも,そのデータを256個の文字列(16進数で64文字)の文字列に

変換してしまう関数(※以下の説明では分かりやすいように “64文字”と記載していきます。)

Page 29: ビットコインの仕組み

くじの問題について 2 くじの問題に利用する“ハッシュ関数”

29

64文字の文字列

文書文書文書文書

あいうえかかかか

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

AD9D2DF65F638F8A20FF88327AA2D67CBA17A3E79

5E2C7DD51C2C618E125CDB6

64文字の文字列

文書文書文書文書

あいうえお

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

FDB481EA956FDB654AFCC327CFF9B626966B2ABDA

BC3F3E6DBCB1667A888ED9A

ハッシュ関数は,入力する文字が1つでも異なると,結果の文字列は全く異なるものに

なる(結果の64個の文字列に規則性はない)

ハッシュ関数は,変換された文字列から,元の入力データを逆変換でもとめることは

量子コンピュータなどが登場しない限り,現状のコンピュータの性能では不可能

64文字の文字列

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

497EA220F0324DD279C8552BDFB5785DE4C4071AD

219726331A5E83ABC51FF8F

××××

Page 30: ビットコインの仕組み

くじの問題について 3 ビットコインにおける“くじの問題”

30

ビットコインでは,ハッシュ関数を以下の形にすることで “くじ引きの問題”として利用するこ

とにした

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

((((1))))ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

N

((((3)取引情報と,任意の数値をハッシュ関数に入れた)取引情報と,任意の数値をハッシュ関数に入れた)取引情報と,任意の数値をハッシュ関数に入れた)取引情報と,任意の数値をハッシュ関数に入れた

結果の結果の結果の結果の64個の文字列個の文字列個の文字列個の文字列

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

00000000000000003a02aa595402

3583a4b538c916d179789c0106cd

ba0ea615

((((2)任意の数値)任意の数値)任意の数値)任意の数値

ビットコインの「くじの問題」

「ビットコインの取引情報」と,「任意の数値」をハッシュ関数に入れた場合に,結果の64個

の文字列の頭に「0」が指定された数並ぶ, 「任意の数値N」を求めよ

結果結果結果結果の文字列の頭に「の文字列の頭に「の文字列の頭に「の文字列の頭に「0」が指定された数並ぶまで,」が指定された数並ぶまで,」が指定された数並ぶまで,」が指定された数並ぶまで,Nに様々な値を入れてみて答えとなるに様々な値を入れてみて答えとなるに様々な値を入れてみて答えとなるに様々な値を入れてみて答えとなるNを探すを探すを探すを探す

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数の結果はランダムなの結果はランダムなの結果はランダムなの結果はランダムな64個の文字列であるため,個の文字列であるため,個の文字列であるため,個の文字列であるため,頭に頭に頭に頭に0が並ぶことは非常に稀なことが並ぶことは非常に稀なことが並ぶことは非常に稀なことが並ぶことは非常に稀なことになるになるになるになる

頭に指定した数の個数の頭に指定した数の個数の頭に指定した数の個数の頭に指定した数の個数の0が並ぶには,数十億通り入力値であるが並ぶには,数十億通り入力値であるが並ぶには,数十億通り入力値であるが並ぶには,数十億通り入力値であるNを変化させる必要があり,パソコンの能を変化させる必要があり,パソコンの能を変化させる必要があり,パソコンの能を変化させる必要があり,パソコンの能

力をフルに活用してもなかなか答えとなる力をフルに活用してもなかなか答えとなる力をフルに活用してもなかなか答えとなる力をフルに活用してもなかなか答えとなるNを見つけることは難しいを見つけることは難しいを見つけることは難しいを見つけることは難しい

Page 31: ビットコインの仕組み

ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報 任意のN任意のN任意のN任意のN 結果の64個の文字列結果の64個の文字列結果の64個の文字列結果の64個の文字列

8796 →→→→ D947226BE6299A049AE88EB0F05FF5D032074540BD926D45CD5174CEC134ED9B

14 →→→→ D91A915DB080736443C7B2FA55B70A31D2E4CDDB9182844BB91E04897B9D4598

346972 →→→→ 21830B1A9743C6EF7218A61F5FF28B28C765D8431B72AF39D9E3AF8D87C678F3

5247 →→→→ CC8583C9721B171D6EBA714AAD590A5C3AA624DE12916849A6F628FCACE277B5

2997 →→→→ 3B05CF67849835E31DFBFB7F57D4510614784AD5874404ED374AA835F8B3D194

35 →→→→ 9F14025AF0065B30E47E23EBB3B491D39AE8ED17D33739E5FF3827FFB3634953

57854476 →→→→ DC724AA36BB900D4C85E4F000FCCD3D928BA8D12784E62200F2A725359D3FD47

5488 →→→→ 3267EF2A83A749052C87E981F1BB12C6396ACF590B4B1CD3316CF8F8C5AEB7BC

444453493444453493444453493444453493 →→→→ 000000000000000026405ce18738f0e9c898888c1dc34db7a995d4ec5fc5c5bb000000000000000026405ce18738f0e9c898888c1dc34db7a995d4ec5fc5c5bb000000000000000026405ce18738f0e9c898888c1dc34db7a995d4ec5fc5c5bb000000000000000026405ce18738f0e9c898888c1dc34db7a995d4ec5fc5c5bb

647982 →→→→ 3E3B0CA4F806F9723751581765452265DD0055BAE07E5FA7A8D03FCBC06C7F31

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

+

くじの問題について 4 ビットコインにおける“くじの問題”

31

くじの参加者は,結果の頭に0が指定した個数(16個など)並ぶまで,任意のNを,ランダムに変化させて

いく

⇒この単純作業のみを指して “マイニング”と呼ぶこともある。例えば毎秒1メガハッシュの性能の

パソコンでは,1秒にNを100万通り変化させ,答えの条件を満たすNを探すことになる

(毎秒1テラハッシュの専用マシンなども登場し競争が激化している)

・Nは数十億通りのパターンがあるので,求めるNを見つけられるかは運次第

・他の参加者は実際にハッシュ関数にNを入れてみて容易に正しいか確認できる

Nにいろいろな数値

を入れてみて,運よ

く当たりとなるNを

見つけていく。

今回のくじの当たり

のN

Page 32: ビットコインの仕組み

32

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

((((1))))ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

Nハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

00000000000000003a02aa5954023583a4b5

38c916d179789c0106cdba0ea615

((((2)任意の数値)任意の数値)任意の数値)任意の数値

ハッシュ関数に入れるビットコインの取引情報には,以下が含まれている

ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

①①①①

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

前回のくじの結果の64個の文字列

(改ざんを防ぐための工夫として入力するもの)

②②②②

今回ビットコインの取引履歴データベースに追

加する取引情報

③③③③ 今回くじの結果の報酬の支払い情報くじの参加者は自分のビットコインアドレスへの報

酬の支払い情報を追加

数百個等の10分間に行われた新規ビットコイン取

引の情報が格納される

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

・この報酬は①ビットコインの新規発行と,②取引手数料の分配で構成される。

・ビットコインの新規発行としては現在“くじ”1回あたり25BTCが支払われるが,発行上限2100万枚に近づくにつれ

報酬額は逓減していく。2100万枚到達以降は,新規発行としての報酬は無くなり,取引手数料の分配のみとなる。

(現在1送金取引あたりの手数料は0.0001BTC)

くじの問題について 5 ビットコインにおける“くじの問題”

Page 33: ビットコインの仕組み

くじの問題について 6 ビットコインにおける“くじ”の具体例

33

(2)今回“くじ”に参加していたマイナーの「健太」が答えのNを発見したケースを考える

任意の数値任意の数値任意の数値任意の数値

4084257143

000000000000000058050cca8e

629fqb1418d48de4ea9a7b0879

331fb5accfa9

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

健太はNにいろいろな数値を入れてみて,結果の文字列の頭に0が

16個並ぶようになる「4084257143」を運よく発見した!

+

健太は世界のビットコインの維

持に参加しているマイナーに向

けて,“くじに当選した“ことを通

知する

(1)ビットコインの送金取引が行われ,それを取引履歴データベースに追加するため

の“くじ”が10分ごとに開催される

ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

①①①①

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

②②②②

今回ビットコインの取引履歴データベースに追

加する取引情報

③③③③ 今回くじの結果の報酬の支払い情報

健太のBTCアドレス

「1H8uCBq2uYpTyd2Twk6dgwBbCNkaNqr1bW」

へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

Page 34: ビットコインの仕組み

くじの問題について 7 ビットコインにおける“くじ”の具体例

34

健太からの“くじの当選通知”を受け取ったアメリカの「ジェームズ」が行う作業

任意の数値任意の数値任意の数値任意の数値

4084257143

ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

000000000000000058050cca8e629fqb14

18d48de4ea9a7b0879331fb5accfa9

+

(1)今回のくじの対象となっている取引情報と,当選者である健太から送られてきた報酬支払先である健太のBTCアド

レス,任意の数値4084257143をハッシュ関数に入れて,結果の文字列の頭に0が16個並ぶことを確認する

⇒⇒⇒⇒健太が“当選”しているとわかる健太が“当選”しているとわかる健太が“当選”しているとわかる健太が“当選”しているとわかる

(2)ジェームズが自分の持つ,過去の取引履歴データベースと,今回のくじの対象となっている取引情報を比較し,

今回の対象取引の中に不正や改ざん取引が含まれていないかを確認

(3)正しいデータであれば,ジェームズは自分のパソコンにある取引履歴データベースに,今回の取引情報と,健太

への報酬の支払い情報を追加し,取引承認完了情報をネットワークへ流す

ビットコイビットコイビットコイビットコイ

ンの全取ンの全取ンの全取ンの全取

引履歴引履歴引履歴引履歴

データデータデータデータ

ベースベースベースベース

ジェームズのパソコンにあるデータジェームズのパソコンにあるデータジェームズのパソコンにあるデータジェームズのパソコンにあるデータ

新規取引

健太が報酬

のビットコイ

ンを受取

内容の確認後追加する内容の確認後追加する内容の確認後追加する内容の確認後追加する

ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

①①①①

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

②②②②

今回ビットコインの取引履歴データベースに追

加する取引情報

③③③③ 今回くじの結果の報酬の支払い情報

健太のBTCアドレス

「1H8uCBq2uYpTyd2Twk6dgwBbCNkaNqr1bW」

へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

Page 35: ビットコインの仕組み

35

ビットコインの取引履歴データベースへの新規取引を追加登録する時の,データの確認方法ビットコインの取引履歴データベースへの新規取引を追加登録する時の,データの確認方法ビットコインの取引履歴データベースへの新規取引を追加登録する時の,データの確認方法ビットコインの取引履歴データベースへの新規取引を追加登録する時の,データの確認方法

くじの“当選者”から,他のくじの参加者に対し ,「くじに当選したので取引データを,各参加者の持つデータベースに

追加してください」という通知が来る。この時,各参加者は送られてきた情報を無条件に信用するのではなく,内容の

確認を行い不正データを排除している。

今回のくじの情報

ブロック番

号 前回のくじの結果の文字列 結果の文字列 答えのN 含まれる取引件数

含まれる取引

情報詳細 報酬と受け取ったBTCアドレス

#30122

000000000000000065ed80ac2b94069ada

34e735bfc2d265c18b694e727e2066

000000000000000058050cca8e629fqb14

18d48de4ea9a7b0879331fb5accfa9

4084257143 85件

太郎→花子

10BTC等

新規発行25BTC+取引手数料

8AqTMY7kmHZxBuLUR5wJjPFUv

qGs23ses

【【【【本当にくじに当選しているかの確認本当にくじに当選しているかの確認本当にくじに当選しているかの確認本当にくじに当選しているかの確認】】】】

①前回のくじの結果の文字列,③答えのN,④取引情報詳細,⑤報酬情報をハッシュ関数に入れて,結果の文字列の頭に

0が指定された数並んでいるかを確認(=②になるか)

⑤② ③ ④①

【【【【取引情報になりすまし,二重取引などの改ざんがないか確認取引情報になりすまし,二重取引などの改ざんがないか確認取引情報になりすまし,二重取引などの改ざんがないか確認取引情報になりすまし,二重取引などの改ざんがないか確認】】】】

④取引情報詳細と,自分のパソコンにある過去のビットコインの取引履歴データを見て,各ビットコインの送金取引内容について,秘密

鍵・公開鍵情報からなりすましが無いか,残高に改ざんが無いかを確認

問題が無ければ,自分の持つ取引履歴データベースに追加する

くじの問題について 8 当選したとの通知を受け取った他の参加者の作業

Page 36: ビットコインの仕組み

くじの問題について 9 当選したとの通知を受け取った他の参加者の作業

36

ジェームズが持つビットコインの取引履歴データベースは以下のような情報が記載されていく

今回のくじの情報

ブロック番

号 前回のくじの結果の文字列 結果の文字列 答えのN 含まれる取引件数

含まれる取引

情報詳細 報酬と受け取ったBTCアドレス

・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・

#30121

0000000000000000220d72198a0aa9a43d

7e01337ef9548f4a9620c76d43dba8

000000000000000065ed80ac2b94069ada

34e735bfc2d265c18b694e727e2066

14926463 327件

ジョン→スー

ジー8BTC等

新規発行25BTC+取引手数料

1KnqpFguKiya6k6hQQEoqQpStpS

nBGAvfv

#30122

000000000000000065ed80ac2b94069ada

34e735bfc2d265c18b694e727e2066

000000000000000058050cca8e629fqb14

18d48de4ea9a7b0879331fb5accfa9

4084257143 85件

太郎→花子

10BTC等

新規発行25BTC+取引手数料

8AqTMY7kmHZxBuLUR5wJjPFUv

qGs23ses

#30123

000000000000000058050cca8e629fqb14

18d48de4ea9a7b0879331fb5accfa9

0000000000000000223afe286b0fece3f2

9198d57f0ccc3cc6120e475d8eb58d

295212720 214件

明子→マイケ

ル2BTC等

新規発行25BTC+取引手数料

EBGbGFBhsXYq6kTyjSC9AHRe1

dhe76tD6i

#30124

0000000000000000223afe286b0fece3f2

9198d57f0ccc3cc6120e475d8eb58d

0000000000000000635886dcc360b4b16f

06ffb3357a1a23bc6c3540c4d53d38

8153380 283件

チャン→キャ

シー38BTC等

新規発行25BTC+取引手数料

18qxmquSPh86Ko7nt1XBuJrXh

YjtnYgJQT

#30125

0000000000000000635886dcc360b4b16f

06ffb3357a1a23bc6c3540c4d53d38

00000000000000000328b7510d34e779a

36c6aa65345764a5e80cdc58301a07f

166844006 98件

まゆ→ボブ

78BTC

新規発行25BTC+取引手数料

19tFKqp9FUyYfvz6hrxJH9hWLQd

i2ZFgYQ

・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・

「ジェームズ」以外にも,世界中の“マイナー“が同じように自分の持つビットコインの取引履

歴データベースを更新することで,整合的にネットワーク上で”1つのデータベース”が維持さ

れることになる

※特徴的な点は,各データレコードに前の取引情報が含まれていること

Page 37: ビットコインの仕組み

くじの問題について 10

37

ビットコインの取引履歴データベースに送金取引情報が書き込まれた時点で,「太郎から花子へ10

ビットコインを送る」という取引は「承認」されたことになる。

花子のお財布

残高

10BTC10BTC10BTC10BTC 未承認未承認未承認未承認

花子のお財布

残高

10BTC10BTC10BTC10BTC 承認承認承認承認

取引情報取引情報取引情報取引情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

約10分後,花子のお財

布のステータスが「承

認」に変化する

ビットコイン維持ネットワークからの

“承認”通知

Page 38: ビットコインの仕組み

38

ビットコイン取引がネットワークで承認される

“10分間”について

Page 39: ビットコインの仕組み

10分待たないと「承認」とならない点について分待たないと「承認」とならない点について分待たないと「承認」とならない点について分待たないと「承認」とならない点について

((((1)現状のビットコインの仕様上「未承認」の状態でも,そのビットコインを次の人へ即時に送金可能)現状のビットコインの仕様上「未承認」の状態でも,そのビットコインを次の人へ即時に送金可能)現状のビットコインの仕様上「未承認」の状態でも,そのビットコインを次の人へ即時に送金可能)現状のビットコインの仕様上「未承認」の状態でも,そのビットコインを次の人へ即時に送金可能

※以下の例のように,太郎⇒花子⇒みゆきと受け取ったBTCを未承認の状態で他の人に送金できる

※お財布ウォレットによっては「未承認」状態のBTCは使えなくしているものもある

((((2)万一不正な未承認取引から受け取ったビットコインがあると,その取引は永遠に「承認」されることはない。)万一不正な未承認取引から受け取ったビットコインがあると,その取引は永遠に「承認」されることはない。)万一不正な未承認取引から受け取ったビットコインがあると,その取引は永遠に「承認」されることはない。)万一不正な未承認取引から受け取ったビットコインがあると,その取引は永遠に「承認」されることはない。

不正不正不正不正な未承認な未承認な未承認な未承認取引からの取引からの取引からの取引からのビットコインビットコインビットコインビットコインが次々と送金されると,事後的にそれら取引すべてが“ない”ことになる。が次々と送金されると,事後的にそれら取引すべてが“ない”ことになる。が次々と送金されると,事後的にそれら取引すべてが“ない”ことになる。が次々と送金されると,事後的にそれら取引すべてが“ない”ことになる。

⇒⇒⇒⇒後続の善意の第三者が被害を被る可能性もあり,受け取ったビットコインが“承認”されるまでは,後続の善意の第三者が被害を被る可能性もあり,受け取ったビットコインが“承認”されるまでは,後続の善意の第三者が被害を被る可能性もあり,受け取ったビットコインが“承認”されるまでは,後続の善意の第三者が被害を被る可能性もあり,受け取ったビットコインが“承認”されるまでは,

次へそのビットコインを送金できない仕組みが望まれる。次へそのビットコインを送金できない仕組みが望まれる。次へそのビットコインを送金できない仕組みが望まれる。次へそのビットコインを送金できない仕組みが望まれる。

(3)一方,決済などでは10分承認されるまで待つことは非効率であり,以下の対応などが考えられる

1.「未承認」状態で一旦決済仮完了としておいて,10分後承認されなければ事後的にサービス提供を取り消す

例:ネットで「有料会員限定」サービスをBTCで決済した場合,10分待たないとサービス提供できないと非効率であるので,BTC送金が

行われたら即時にユーザーに有料限定エリアへのアクセスを許可し,10分後“承認“されなかったら閲覧権限を取り消すなど

2. アプリなどで制御して“承認済みのビットコインから”の支払いのみを受け入れる

送金元となるビットコインが“存在すること”は確認できているので,二重使用の可能性はあるものの,受け取ったBTCが“なかったこと“

になる可能性は防げる

取引の承認時間について 1

39

ジョンジョンジョンジョン 太郎太郎太郎太郎 花子花子花子花子 みゆきみゆきみゆきみゆき

送金 受取 送金 受取 送金 受取

10 10 5 5 2 2

未承認未承認未承認未承認 未承認未承認未承認未承認 未承認未承認未承認未承認

未承認状態でも送金が可能

ジョンジョンジョンジョン 太郎太郎太郎太郎 花子花子花子花子 みゆきみゆきみゆきみゆき

送金 受取 送金 受取 送金 受取

10 10 5 5 2 2

未承認未承認未承認未承認 未承認未承認未承認未承認 未承認未承認未承認未承認

ジョンが不正データを太郎に送っていたとすると,後続取引はビットコインの維持ネットワークで承認されることはなく,そのコ

インの動きに伴う残高の変化は“存在しないもの” となってしまう(受け取ったビットコインはなかったことになる)

×××× ×××× ××××

Page 40: ビットコインの仕組み

取引の承認時間について 2

40

1. ビットコインでは,“くじ”の答えがちょうどビットコインでは,“くじ”の答えがちょうどビットコインでは,“くじ”の答えがちょうどビットコインでは,“くじ”の答えがちょうど10分で見つかるように,「難易度の調整」が行われている。このため常に分で見つかるように,「難易度の調整」が行われている。このため常に分で見つかるように,「難易度の調整」が行われている。このため常に分で見つかるように,「難易度の調整」が行われている。このため常に

取引が“承認”されるには取引が“承認”されるには取引が“承認”されるには取引が“承認”されるには10分が必要となる。分が必要となる。分が必要となる。分が必要となる。

2. 10分というのは,数学的な理由からではなく,考案者の「ナカモト サトシ」氏が,このくらい解くのに時間がかかる

問題であれば,改ざん攻撃に耐えうるであろうとの考えで決めたもの。時間が短ければそれは “くじの難易度が低く,

答えを解く時間が短い”という事であり,改ざんに弱くなることになる。

3. 「難易度の調整」とは,例えば参加者が多いとそれだけ短時間(10分未満)で答えが見つかりやすくなるのでハッシュ

関数の結果の文字列に求められる,頭に並ぶ0の数の条件を増やすことが行われる(システムによる自動調整)

((((1))))ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

Nハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

000000000000000003a02aa5954023583a4b

538c916d179789c006cdba0ea615

((((2)任意の数値)任意の数値)任意の数値)任意の数値

頭に並ぶ頭に並ぶ頭に並ぶ頭に並ぶ0の数がの数がの数がの数が16個ではなく個ではなく個ではなく個ではなく17

個という条件にくじの問題が調整個という条件にくじの問題が調整個という条件にくじの問題が調整個という条件にくじの問題が調整

されるされるされるされる

4. 逆に,参加者が少ないと10分では答えが見つからないかもしれないので,ハッシュ関数の結果の文字列の頭に

並ぶ0の数の条件を減らすことが行われる

((((1))))ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報ビットコインの取引情報

Nハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

0000000000000003a02aa5954023583a4b53

8xc916d179789c006cdba0ea615

((((2)任意の数値)任意の数値)任意の数値)任意の数値

頭に並ぶ頭に並ぶ頭に並ぶ頭に並ぶ0の数がの数がの数がの数が16個ではなく個ではなく個ではなく個ではなく15

個という条件にくじの問題が調整個という条件にくじの問題が調整個という条件にくじの問題が調整個という条件にくじの問題が調整

されるされるされるされる

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

今回ビットコインの取引履歴データベースに追

加する取引情報

今回くじの結果の報酬の支払い情報

健太のBTCアドレス

「1H8uCBq2uYpTyd2Twk6dgwBbCNkaNqr1bW」

へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

今回ビットコインの取引履歴データベースに追

加する取引情報

今回くじの結果の報酬の支払い情報

健太のBTCアドレス

「1H8uCBq2uYpTyd2Twk6dgwBbCNkaNqr1bW」

へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

Page 41: ビットコインの仕組み

取引の承認時間について 3

41

難易度(Difficulty,何個頭に0を並ぶことをくじの問題の条件とするか)は,答えが見つかる

までの実績データを元にして,2週間に一回システム上自動的に調整される

https://blockchain.info/ja/charts/difficulty【難易度の推移】

難易度は,マイニング参加者数,マイニング専用のパソコン(ASICという)の開発競争により,大きく上がってきており,

これはつまり “くじに当選”して報酬を得ることが難しくなっていることを意味する。

また,この動きを受け,個人ではなくチームでの参加が増加しており,一部チームによる寡占化も進んでいる。

⇒電気代,マイニングマシン購入費を考えると採算が合わず,参加を辞める人が増えてきている。

しかし参加者が減り続ければやがては難易度が下がりだし,再参加する人も増えるため,ビットコインの

維持作業への参加者がいなくなることはないと言われている

Page 42: ビットコインの仕組み

42

その他ポイントの解説

Page 43: ビットコインの仕組み

今回のくじの情報

ブロック番

号 前回のくじの結果の文字列 結果の文字列 答えのN 含まれる取引件数

含まれる取引

情報詳細 報酬と受け取ったBTCアドレス

#30122

000000000000000065ed80ac2b94069ada

34e735bfc2d265c18b694e727e2066

0000000000000000372818ad1037d9b81

82309b22b356749b13fa864802602d5 XXXXXXX 85件

太郎→ジョンジョンジョンジョン

10BTC等

新規発行25BTC+取引手数料

8AqTMY7kmHZxBuLUR5wJjPFUv

qGs23ses

#30123

0000000000000000372818ad1037d9b81

82309b22b356749b13fa864802602d5

000000000000000062e00f235ca78b0bea

b624a9f116cc4e3b8311a01909be50

XXXXXXX 214件

明子→マイケ

ル2BTC等

新規発行25BTC+取引手数料

EBGbGFBhsXYq6kTyjSC9AHRe1

dhe76tD6i

#30124

000000000000000062e00f235ca78b0bea

b624a9f116cc4e3b8311a01909be50

00000000000000005e4dc43c719dc2cf3d

aef68d3251596f5f631da3ad3afbd9

XXXXXXX 283件

チャン→キャ

シー38BTC等

新規発行25BTC+取引手数料

18qxmquSPh86Ko7nt1XBuJrXh

YjtnYgJQT

今回のくじの情報

ブロック番

号 前回のくじの結果の文字列 結果の文字列 答えのN 含まれる取引件数

含まれる取引

情報詳細 報酬と受け取ったBTCアドレス

#30122

000000000000000065ed80ac2b94069ada

34e735bfc2d265c18b694e727e2066

0000000000000000372818ad1037d9b81

82309b22b356749b13fa864802602d5 XXXXXXX 85件

太郎→ジョンジョンジョンジョン

10BTC等

新規発行25BTC+取引手数料

8AqTMY7kmHZxBuLUR5wJjPFUv

qGs23ses

(2)次に,各“くじ引き”には前の取引の情報が連鎖して含まれているので,改ざんデータに基づく“答えのN” を出発点として,それ以降の

取引のNを全て見つけ直す必要がある

⇒取引情報の答えのNを次々と見つけていくことは,正規のくじ引きに毎回勝つことと同じ負荷であり,非常に難しい

ハッシュ関数に入れるデータに,前回のくじの結果を含めている理由

ハッシュ関数に入れるデータには,今回の新規取引の情報に加えて,1つ前のくじの結果の文字列を含めている。

これはビットコインの改ざんを防ぐための非常に強力な機能となっている。

ビットコインビットコインビットコインビットコインの送金取引に改ざんを行った場合の送金取引に改ざんを行った場合の送金取引に改ざんを行った場合の送金取引に改ざんを行った場合(太郎→花子が,太郎→ジョンに改ざんされた例)

(1) まず,改ざんを行おうとする人は,改ざんされた取引が含まれる“くじ”のデータについて,改ざんデータに基づく“答えのN”を見つけ

る必要がある(1回のくじに当たることと同じだけの負担がかかる)

(3)最後に,改ざんされた取引履歴データで,世界中のマイナーの51%のパソコンをハッキングして正規のデータに上書きする,

もしくはそれと同じ数のパソコンを自前で用意して,改ざんされた取引履歴データを“正しい”とする環境を用意する必要がある

⇒⇒⇒⇒ビットコインの取引履歴データベースを改ざんすることは極めて難しいビットコインの取引履歴データベースを改ざんすることは極めて難しいビットコインの取引履歴データベースを改ざんすることは極めて難しいビットコインの取引履歴データベースを改ざんすることは極めて難しい

Page 44: ビットコインの仕組み

くじの答えが同時に見つけられた場合の処理 1

44

くじ引きくじ引きくじ引きくじ引きのののの当たり当たり当たり当たりは,条件を満たす任意のは,条件を満たす任意のは,条件を満たす任意のは,条件を満たす任意のNを求めることであるため,同時にを求めることであるため,同時にを求めることであるため,同時にを求めることであるため,同時にNを見つけた人が現れた場合どうなるのか?を見つけた人が現れた場合どうなるのか?を見つけた人が現れた場合どうなるのか?を見つけた人が現れた場合どうなるのか?

⇒くじ引きの問題は「条件を満たす任意のNを見つけること」であり,同時に答えが見つかる可能性がある

【【【【マイナーである健太とボブが,同時にくじ引きの当たりを出した場合を考えるマイナーである健太とボブが,同時にくじ引きの当たりを出した場合を考えるマイナーである健太とボブが,同時にくじ引きの当たりを出した場合を考えるマイナーである健太とボブが,同時にくじ引きの当たりを出した場合を考える】】】】

①①①①

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

②②②②

今回ビットコインの取引履歴データベースに追

加する取引情報

③③③③ 今回くじの結果の報酬の支払い情報

健太のBTCアドレス

「1H8uCBq2uYpTyd2Twk6dgwBbCNkaNqr1bW」

へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

N=

4075579827ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

000000000000000024d9476e0c6

dfd36ec9342ee2d4d12375361b0

e920e1f155

健太,ボブともに頭に条件の個健太,ボブともに頭に条件の個健太,ボブともに頭に条件の個健太,ボブともに頭に条件の個

数数数数0が並ぶが並ぶが並ぶが並ぶNを同時に発見を同時に発見を同時に発見を同時に発見

①①①①

前回のくじの結果の64個の文字列

000000000000000030ce3a0d6cfb8b2ad907b7

c7494dd31558fc0be72c1558bc

②②②②

今回ビットコインの取引履歴データベースに追

加する取引情報

③③③③ 今回くじの結果の報酬の支払い情報

ボブのBTCアドレス

「1EdFfmbSJPzBMKcAszPM12mgDNyNbQheZy

」へ報酬を送る

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

健太の当選データ健太の当選データ健太の当選データ健太の当選データ

ボブの当選データボブの当選データボブの当選データボブの当選データ

N=

3625989750ハッシュ関数ハッシュ関数ハッシュ関数ハッシュ関数

000000000000000017ac606587d

32bfed7b0750171de4a39e46e42

1706f3c17a

+

+

Page 45: ビットコインの仕組み

45

健太当選のデータと,ボブ当選のデータの違いは,健太当選のデータと,ボブ当選のデータの違いは,健太当選のデータと,ボブ当選のデータの違いは,健太当選のデータと,ボブ当選のデータの違いは,報酬を報酬を報酬を報酬を

健太かボブどちらが受け取るかということでしかなく,健太かボブどちらが受け取るかということでしかなく,健太かボブどちらが受け取るかということでしかなく,健太かボブどちらが受け取るかということでしかなく,格納格納格納格納

されているビットコインの取引データ自体は同じものされているビットコインの取引データ自体は同じものされているビットコインの取引データ自体は同じものされているビットコインの取引データ自体は同じものとなるとなるとなるとなる

1.健太とボブの当選データは同時にビットコインの維持ネットワークに送信される

2.それを受け取った他の参加者は,健太とボブ,どちらか一方を採用するのではなく,一時的に取引履歴データベースを分岐させる

分岐1分岐1分岐1分岐1 分岐2分岐2分岐2分岐2

ビットコインの全ビットコインの全ビットコインの全ビットコインの全

取引履歴データ取引履歴データ取引履歴データ取引履歴データ

ベースベースベースベース

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインの全ビットコインの全ビットコインの全ビットコインの全

取引履歴データ取引履歴データ取引履歴データ取引履歴データ

ベースベースベースベース

新規取引

(健太当選)

新規取引

(ボブ当選)

3.分岐したデータベースのどちらが生き残るかは,次の新規取引がどちらの分岐に繋げられるかで決まる

次のくじ引きにおいて各参加者は,入力値である前の取引情報に,健太が当選した版とボブが当選した版の任意のどちらかを選んで,

Nを探す作業を行う

前回のくじの結果の64個の文字列(健太版)

000000000000000024d9476e0c6dfd36ec9342

ee2d4d12375361b0e920e1f155

今回ビットコインの取引履歴データベースに追

加する取引情報

今回くじの結果の報酬の支払い情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

N ハッシュハッシュハッシュハッシュ

関数関数関数関数+

前回のくじの結果の64個の文字列(ボブ版)

000000000000000017ac606587d32bfed7b075

0171de4a39e46e421706f3c17a

今回ビットコインの取引履歴データベースに追

加する取引情報

今回くじの結果の報酬の支払い情報

太郎太郎太郎太郎 花子花子花子花子

BTCアドレス

「22StuXaoDIDELTPErEXc

k3V8T3KeZY1s77」

BTCアドレス

「XXoo1uXW214Lqir9Ock7VdZ

Z89wepiuIU1」

 50BTC50BTC50BTC50BTC  10BTC 10BTC 10BTC 10BTC

太郎の取引後残高太郎の取引後残高太郎の取引後残高太郎の取引後残高

BTCアドレス

「22StuXaoDIDELTPErEXck3V

8T3KeZY1s77」

 40BTC 40BTC 40BTC 40BTC

+

先に,前の取引に健太の当選が入力されている方で,条

件を満たすNが見つかれば,このデータが取引履歴デー

タベースに採用され,ボブが当選された分岐データベー

スは破棄される

分岐1分岐1分岐1分岐1 分岐2分岐2分岐2分岐2

ビットコインのビットコインのビットコインのビットコインの

全取引履歴全取引履歴全取引履歴全取引履歴

データベースデータベースデータベースデータベース

ビットコインの全ビットコインの全ビットコインの全ビットコインの全

取引履歴データ取引履歴データ取引履歴データ取引履歴データ

ベースベースベースベース

新規取引

(健太当選)

新規取引

(ボブ当選)

新規取引 破棄される

N ハッシュハッシュハッシュハッシュ

関数関数関数関数

××××

××××

※※※※分岐しても報酬の支払先が誰になるかという分岐しても報酬の支払先が誰になるかという分岐しても報酬の支払先が誰になるかという分岐しても報酬の支払先が誰になるかという違い違い違い違いだけで,ビットコインの送金取引自体へは影響しないだけで,ビットコインの送金取引自体へは影響しないだけで,ビットコインの送金取引自体へは影響しないだけで,ビットコインの送金取引自体へは影響しない

くじの答えが同時に見つけられた場合の処理 2

Page 46: ビットコインの仕組み

46

以上で解説は終了です。

本資料はビットコインの仕組みのエッセンスを,IT技術・数学に詳しくない方でも把握できる

ように分かりやすく解説したものであり,理解しやすいよう簡略化・意訳した箇所がある関

係上,厳密な正確性は犠牲にしていることにご留意ください。

■本資料は2014年6月までの情報に基づいて作成しています。

本資料の内容は,著者の個人的意見に基づくものであり,正確性を保証するものではなく,

また,特定の団体やビットコインコミュニティの見解を示すものではありません。

【本資料著者】

後藤

金融機関でリスク管理や国際規制対応などに長年従事

ビットコインについて,金融イノベーションに繋がる可能性を感じ,調査・研究を行っている。

連絡先 [email protected]

※本資料の再配布,2次利用等を行いたい場合はご相談ください。

但し,ビットコインや仮想通貨の普及・理解を目的とする無料の勉強会では本資料を

ご自由に利用して頂いて結構です。