暗号通貨ってなんだろう? by monatr

48
暗号通貨って なんだろう? もな とれ <[email protected]> http://monatr.jp/ Twitter: @monatr_ jp 2014年3月15日 モナーコイン・ビットコイン勉強会@ドワンゴ セミナールーム What is the cryptocurrency?

Upload: miharahiro

Post on 15-Jul-2015

853 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: 暗号通貨ってなんだろう? by monatr

暗号通貨って   なんだろう?

もな とれ<[email protected]>

http://monatr.jp/Twitter: @monatr_ jp

2014年3月15日

モナーコイン・ビットコイン勉強会@ドワンゴ セミナールーム

What is the cryptocurrency?

Page 2: 暗号通貨ってなんだろう? by monatr

この資料について

● この資料について– 本スライドは、2014年3月15日に行われた『モナーコイン・ビット

コイン勉強会@東京』(http://off.gikopool.net/)にて使用したスライドを公開用に一部修正したものです

● ライセンス– 本スライドのライセンスは「クリエイティブコモンズ 表示・非営

利・継承 4.0 国際」(http://creativecommons.org/licenses/by-nc-sa/4.0/)に従うものとします

– ライセンス条項に従う範囲内であれば、自由に改変・複製・再配布をしていただいて構いません

– 商用利用されたい場合など、ライセンスの許可範囲を超える場合には個別に対応いたしますので、著作者までご相談ください

Page 3: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 3

今日のお話

● 暗号通貨(Bitcoin, Monacoin, etc.)の技術的な側面について、情報科学にあまり詳しくない方向けに紹介します– 社会的な側面 (シルクロード、価格の高騰、政府の規制、etc.) については触れま

せん● 基本的に「哲史白書」の内容に沿います

– 「そんなの知ってるよ!」という方は、後ろのほうで即売会をお楽しみください m(_ _)m

● 講演スタイル– 途中質問OK。分からなくなったら気軽に質問を!(恥ずかしがらずに!)

Page 4: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 4

『暗号通貨って       なんだろう?』

Presented by “Mona Tore”

Page 5: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 5

おしながき

● 第一部 イントロダクション– 暗号通貨の目的– 技術的問題

● 第二部 トランザクション– コインの受け渡し

● 第三部 ブロックチェイン– 多重支払い防止

● 第四部 プルーフオブワーク– 改ざん防止

● 第五部 その他(時間があれば)

– 簡易版支払い検証– 難易度– SHA-256 と scrypt– 51% 攻撃

Page 6: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 6

第一部

イントロダクション

● 暗号通貨の目的● 技術的問題● 多重支払い● 改ざん

Page 7: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 7

暗号通貨の目指す場所

● 目的……P2Pを用いた、非中央集権型の電子マネー– 従来の電子マネーは、何らかの権威機関が維持管理

(Edy, PayPal, Suica, WebMoney, Amazonギフト, etc.)● 技術的問題

– 多重支払い……同時に複数の人間に支払う詐欺– 改ざん……支払いを無かったことにする詐欺

➔解決策– ブロックチェイン (Block chain)– プルーフオブワーク (Proof of Work)

Page 8: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 8

技術的問題/多重支払い

● ハッカーが、Aさん、Bさんそれぞれに所持金をすべて支払ったと主張

● P2Pでは、矛盾した支払要求を確実に検知するのは困難

《Aさん》に 1MONA支払う!

《ハッカー》所持金:1MONA

《Aさん》

《Bさん》

《Bさん》に 1MONA支払う!

P2Pネットワーク

P2Pネットワーク

Page 9: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 9

技術的問題/改ざん

● 一旦、正常に支払いを済ませる

● 全ノードの合意を得られたら、ニセ情報を流す

● 単純に多数決で決めてしまうと、改ざんされてしまう可能性

《Aさん》に 1MONA支払う!

《Aさん》

P2Pネットワーク

《ハッカー》所持金:1MONA

多重支払いなし。正常な支払いだ!

《Xさん》

Aさ……いや、Xさんへ1MONAかな?

《Xさん》に1MONA!

《ハッカー》多数のノードがニセ情報を流す

Page 10: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 10

暗号通貨の革新的アイデア

● Bitcoin は、こういった技術的問題を解決する、新たなスキームを提案– ブロックチェイン– プルーフオブワーク

● 以降では、Bitcoin がどのようにして技術的課題をクリアしたのかを見ていく

Page 11: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 11

第二部

トランザクション

● コインの受け渡し● 電子署名

Page 12: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 12

トランザクション

● 暗号通貨の受け渡しをどう表現する?– 所有権の移譲によって表現

● 送金元を勝手に詐称されないためには?– 従来通りの電子署名でOK!– リファレンス実装では ECDSA (楕円曲線DSA) を採用

● まずは、自分の持つ全てのコインを誰かに受け渡す処理を考えてみる

Page 13: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 13

トランザクション

● 《Aさん》の全保有コインを、《Bさん》へ– コインが確かに《Aさん》のものであること– 受け渡し先が《Bさん》であること– トランザクション作成者が《Aさん》であること

《Aさん》1MONA

《Bさん》

トランザクションAさんのお財布の所有権をBさんへ移譲した証明

保有者 =《Aさん》前の保有者《Xさん》所有権移譲証明(《Xさん》署名)

移譲先 =《Bさん》送り先《Bさん》ウォレットアドレス(《Bさん》公開鍵)

《Aさん》電子署名作成

《Xさん》

トランザクション《Xさん》

↓《Aさん》

Page 14: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 14

コインの分割と結合

● 前スライドのやり方では、保有する全てのコインのやりとりのみ– 一部のみを受け渡すには?– 二つのウォレットを合算するには?

● コインの「入力」と「出力」は複数あってもよい、とすればよい

Page 15: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 15

コインの分割と結合

● 《Aさん》から《Bさん》へ 950MONA

トランザクション

《Xさん》からもらった

100MONA

「入力」 「出力」

《Yさん》からもらった

500MONA

《Zさん》からもらった

400MONA

《Aさん》

《Bさん》へ950MONA

《Aさん》=《自分》へ50MONA

《Bさん》

Page 16: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 16

トランザクション手数料

● 出力のコイン枚数よりも入力のコイン枚数が多い場合には、その差額は手数料とみなされる

● 手数料は後述する採掘者(マイナー)に支払われる– 消えてなくなるわけではない

● 手数料の徴収理由– 採掘者の給料(ネットワークの維持手数料)– トランザクション乱発によるいたずら(DoS攻撃)防止

(手数料) = (入力枚数) − (出力枚数)

Page 17: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 17

第三部

多重支払いとブロックチェイン

● 取引の順序化

Page 18: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 18

取引の順序化

● 多重支払いを確実に検知するには?– トランザクションに順序をつける– 過去のトランザクションと矛盾するものは拒否

● トランザクション単位で順序付けをすると、取引量が増えたときに大変なことに……

● そこで、一定期間に発生したトランザクションを一纏めにする → ブロック

Page 19: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 19

ブロック #13

ブロック #2

ブロックチェイン

● トランザクション

● ブロック– 一定期間に発生したト

ランザクションをひと纏めにしたもの

● ブロックチェイン– 生成された順にブロッ

クを繋ぎ、順序化– 多重支払いを確実に検

知できる!

トランザクション #381出:Aさん -100MONA入:Xさん +30MONA入:Yさん +70MONA

ブロック #7

TX #381ブロック #1

… この番号は「ブロック高」(Block hight)

と呼ばれる

● Bitcoin………10分● Monacoin……90秒

ブロック内のトランザクションは順序化しなくていいので、番号は適当TX #251

TX #47

TX #836

Page 20: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 20

ブロックチェインの分岐

● いつ、誰がブロックを生成するか分からない

● 異なるノードが同時に生成すると、ブロックチェインは「分岐」

● どのブランチを「正しい」とするか?

● 最も長いブロックチェインを採用

ブロック #1

ブロック #2

ブロック #3’ ブロック #3’’

ブロック #4’’ブロック #4’

ブロック #5’’

Page 21: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 21

第四部

改ざんとプルーフオブワーク

● CPU一個あたり、一票

Page 22: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 22

改ざん

● ブロックを自由に生成できてしまうと、改ざんが可能

ブロック #1

ブロック #2

ブロック #3

ブロック #4

これが正しいブロックチェイン!

TX #251《ハッカー》→《Aさん》1MONA

《ハッカー》=《Xさん》

ブロック#3を書き換えてやる!

ブロック #3’

ブロック #4’

TX #251’《ハッカー》→《Xさん》1MONA

ブロック #5’

ブロック #1

ブロック #2

ブロック #3

ブロック #4

あ、あれ?左が正しい……のかな?

Page 23: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 23

プルーフオブワーク (POW)

● 勝手にブロックを生成できるのでは、ダメ● 参加ノード全員でくじ引きをして決める?

– 参加者の大多数が善良であれば、改ざんはできない– 大量のIPアドレスを確保できる人がいると、ダメ

● CPU一個につき、一票にしよう!(提案)– 大量のCPUを独占するためには、大量の電気代とハードウェア代が必要

– IPアドレスを確保するよりは難しそう● 「プルーフオブワーク」

Page 24: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 24

POW を実現するためには?

● 「CPU一個につき、一票」を実現するには?– 大量の計算コストが必要な問題を用意する– 一番最初に解けた人が勝者 → ブロック生成

● 問題はどうやって用意する?– 作るのは簡単– 解くのは難しい– 答え合わせは簡単

Page 25: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 25

POW に適した問題

● 作るの簡単・解くの難しい・答え合わせ簡単– パズルゲーム

● コンピュータで簡単に実現できるものは?– 「ハッシュキャッシュ」というのが知られている

ルービックキューブ(画像提供:Wikipedia)

15パズル(画像提供:www.showanavi.jp)

Page 26: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 26

ハッシュ関数

《ハッシュ値》

● 「あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数のこと」(Wikipedia)

● 出力されるハッシュ値は、入力の値が変わるとランダムに変化するようにみえる

ハッシュ関数データ #110111010

データ #201000101

ハッシュ #1523

ハッシュ #2083 出力される数字は

1000未満とする

厳密には「暗号学的ハッシュ関数」という

Page 27: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 27

問題 入力値が X=”01101”で始まるもののうち、ハッシュ関数の出力が N=10 未満になるような入力値を見つけよ

ハッシュ関数を使った「問題」

● 作るのは簡単– N, X を変えればいいだけ

● 解くのは難しい– 実際にいろいろな入力値

を試し、地道に見つけ出すしかない

● 答え合わせは簡単– 答えを一回だけハッシュ関数に通してあげれば検証できるこの問題は

「ハッシュキャッシュ」と呼ばれている

Page 28: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 28

ブロック生成と組み合わせる

● ブロックに、ハッシュ値調整用のデータ (nonce) を付加

● ハッシュ値がある値以下となる nonce を発見できたら、ブロックが生成(採掘)される

ブロック #7’

TX #381 TX #47

Nonce0x83F67A0210ECCD45

ブロック #7’’

TX #381 TX #47

Nonce0x49A1DD05F74B51C

ハッシュ関数ハッシュ #7’

983

ハッシュ #7’’003

Page 29: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 29

POW による改ざんへの対抗

● ハッシュ値をたくさん計算した(=多くのCPUパワーを費やした)人がブロックを生成できる

● 「CPU一個につき、一票」が実現できた!● 改ざんに対抗できるように

ブロック #3’

ブロック #4?

ブロック #1

ブロック #2

ブロック #3

ブロック #4

みんなで次のブロックを作るぞ!

あっちより長いブロックチェイン

作るの、一人じゃ無理 orz

改ざんを行うためには、伸び続ける正規のブロックチェインに追いつき、さらに追い越さなければならない

Page 30: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 30

採掘の難しさ

● Bitcoin はハッシュ関数として SHA-256 を採用(とりうる範囲:          )

● 例)ブロック高 #289980 のハッシュ値– 0x0000000000000000002ded6eae129b3478d68a4f59bfa7e61c160bbb603b1b42

● およそ 26,322,499,741,093,595,921,272 回ハッシュを計算すると、一ブロック採掘可能

Page 31: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 31

ブロック報酬

● ブロック生成(採掘)には大量の電気代とマシン代がかかる– 採掘のモチベーション?

● コインはどこから湧いて出てくる?– トランザクションはコインの受け渡しのみ– 一番最初にコインを手にする人は誰?

● ブロック報酬– ブロックを採掘した人には一定の報酬

Monacoinでは1〜1051,000 ブロックまでは 50枚づつそれ以降は1051,000ブロック毎に半減していく

Page 32: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 32

まとめ

Page 33: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 33

まとめ

● P2P電子マネー実現のための二つの困難を解決● 多重支払い と ブロックチェイン

– ブロックチェインによるトランザクションの順序化– 過去のトランザクションと矛盾する要求を拒否

● 改ざん と プルーフオブワーク– ブロックの生成に高いCPUパワーを要求 (プルーフオブワーク; POW)

– 改ざんするためには参加ノードの過半数のCPUパワーを寡占する必要あり

Page 34: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 34

第五部

その他

● 51%攻撃● 簡易版支払い検証● 難易度● 情報源● etc.

Page 35: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 35

51%攻撃

● プルーフオブワークは、多数決の方法の中で最も「マシ」なだけ

● 演算能力の過半数を独占できてしまえば改ざん可能– いわゆる「51%攻撃」

● 代替案:Proof of Stake (Peercoin)– 「コイン一枚あたり、一票」– コインをたくさん持ってる人は、悪さをして保有コ

インの価値を貶めるようなことはしないだろう

Page 36: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 36

51%攻撃で出来ること

● 理解度確認クイズ51%攻撃で次のことは出来る?出来ない?– 他人のコインを無効化する– 他人のコインを自分のものにする– 自分の支払いをなかったことにする– 他人の支払いをなかったことにする– 勝手にコインを発行しまくる– 嫌いな奴をシカトする(トランザクションを拒否)– 自分以外の採掘者が採掘したブロックを無効化する

Page 37: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 37

簡易版支払い検証/導入

● ブロックチェインには全てのトランザクションが記録されている

● 大量のメモリとディスクスペースが必要– 2014年3月時点では約15GBにも達している(リンク)

● スマホ等でも使えるように「簡易版」を作れないか?

● マークル木を用いた、簡易支払い検証(Simplified Payment Verification; SPV)

Page 38: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 38

簡易版支払い検証/マークル木

● ブロック内の大量のトランザクションの「代表的な」ハッシュ(マークルルート)を求める手法

● ブロックにはマークルルートのみを格納

「マークルルート」ブロックにはこの値のみを格納する

画像提供:Wikipedia

ブロックに含めるデータ

Page 39: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 39

簡易版支払い検証/検証方法

● トランザクションがマークル木に含まれていることを確認したい

● マークル木の一部の情報だけでOK

これが正しいか検証したい!

● 自分の持っている “Data block 000” が正しいか(改ざんやエラーがないか)を検証したい

● そのためには、“Top hash” が再現できるかどうかをチェックすればよい

● “Hash1”, “Hash 0-1” の二つのみ知ってればOK!

Page 40: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 40

簡易版支払い検証/実装

● 全チェイン (Full-Chain) 版クライアント– 公式クライアント(bitcoin-qt, bitcoind)

● ヘッダーのみ (Header-Only) 版クライアント– MultiBit– Android版ウォレットアプリ

Page 41: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 41

難易度 (difficulty)

● ハッシュ関数の出力値のスレッショルドは「難易度 (difficulty)」から決定される– ブロックの生成までに平均すると何回ハッシュを計算する必要があるか?=

● 過去のブロック生成頻度から難易度を調整– ブロック生成頻度が速すぎる……難易度↑– ブロック生成頻度が遅すぎる……難易度↓

具体的な調整方法はいろいろある:• Bitcoin は2,016ブロックの生成に要した時間から調整• Monacoin は Kimoto Gravity Well (KGW) 方式を採用(予定)

Page 42: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 42

SHA-256 と scrypt

● ハッシュ関数の計算は簡単であるべき– 単純に与えられたデータのハッシュ値を知りたい場合に

は、簡単に計算できる方が便利– MD5, SHA, etc.– Bitcoin

● ハッシュ関数の計算は難しくあるべき– ハッシュ値の衝突や入力値の復元から守るためには、計算が難しいほうが便利

– scrypt, etc.– Litecoin, Monacoin など多くの暗号通貨で採用

Page 43: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 43

ウォレットアドレス

● 電子署名で個人を特定するのは公開鍵:– 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

● 長い。コピペするのも大変● 入力ミスをするかも?

● 公開鍵をある手順で変換し、短く、かつ入力ミスのチェックができるような形にしている– 例:MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab

Page 44: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 44

トランザクション展性

● 最近話題になった Transaction Malleability (Mutability) とは?

● リファレンス実装においては、電子署名はトランザクションの一部(支払処理部分)にしか行っていない– それ以外の部分は第三者により書き換え可能

● トランザクションにゴミデータを仕込み、オリジナルとは違う内容に出来てしまう

● しかし、支払いは正しく行われている

Page 45: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 45

トランザクション展性

● Mt.Gox の犯したミス– Gox「トランザクション発行したよ!」– 攻撃者がトランザクションにゴミデータ挿入– Gox「俺のトランザクションがブロックに取り込まれて

いない!」– (↑実際にはきちんと取り込まれている。ミス①)– Gox「仕方ない、送り直すよ!」– (↑手動でチェックすべきだが、自動再送していた。

ミス②)– Gox「400億円分のBTC、いなくなったお (´・ω・`)」

Page 46: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 46

情報源

● Bitcoin の基礎概念はブロックチェインとプルーフオブワークでほぼ尽きている

● だが、実装まで踏み込むととても奥が深い……● 参考文献

– 哲史白書 (http://www.bitcoin.co.jp/docs/SatoshiWhitepaper.pdf)– Bitcoin wiki (https://en.bitcoin.it/)

Page 47: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 47

さいごに

Page 48: 暗号通貨ってなんだろう? by monatr

2014/03/15 モナーコイン・ビットコイン勉強会@東京 48

さいごに

● このスライドの内容はいかがでしたでしょうか?● 皆様の Bitcoin に対する理解が少しでも進んだの

であれば、非常に光栄です● もし、本スライドが少しでも役に立ったのであれ

ばお気持ちだけでもご寄付をいただけると大変ありがたいです m(_ _)m– Monacoin: MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab

– Bitcoin: 1AZYKstEvRLhYnQCheYutqyZ5oNS4SwoJw

– @tipmona tip @monatr_jp 金額 [コメント]