Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
暗号通貨って
   なんだろう?
もな とれ
<monatr.jp@gmail.com>
http://monatr.jp/
Twitter: @monatr_jp
2014年3月15日
モナーコイン・ビットコイン勉強会@ドワンゴ セミナールー...
この資料について
●
この資料について
– 本スライドは、2014年3月15日に行われた『モナーコイン・ビット
コイン勉強会@東京』(http://off.gikopool.net/)にて使用したス
ライドを公開用に一部修正したものです
●
ラ...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 3
今日のお話
●
暗号通貨(Bitcoin, Monacoin, etc.)の技術的な側面につ
いて、情報科学にあまり詳しくない方向けに紹介します
– 社会的な側面 (シルクロード...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 4
『暗号通貨って     
  なんだろう?』
Presented by “Mona Tore”
2014/03/15 モナーコイン・ビットコイン勉強会@東京 5
おしながき
●
第一部
 イントロダクション
– 暗号通貨の目的
– 技術的問題
●
第二部
 トランザクション
– コインの受け渡し
●
第三部
 ブロックチェイン
– 多重支...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 6
第一部
イントロダクション
●
暗号通貨の目的
●
技術的問題
●
多重支払い
●
改ざん
2014/03/15 モナーコイン・ビットコイン勉強会@東京 7
暗号通貨の目指す場所
●
目的……P2Pを用いた、非中央集権型の電子マネー
– 従来の電子マネーは、何らかの権威機関が維持管理
(Edy, PayPal, Suica, WebM...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 8
技術的問題/多重支払い
●
ハッカーが、Aさん、Bさんそれぞれに所持金を
すべて支払ったと主張
●
P2Pでは、矛盾した支払要求を確実に検知する
のは困難
《Aさん》に 1MON...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 9
技術的問題/改ざん
●
一旦、正常に支払い
を済ませる
●
全ノードの合意を得ら
れたら、ニセ情報を流
す
●
単純に多数決で決めて
しまうと、改ざんされ
てしまう可能性
《Aさ...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 10
暗号通貨の革新的アイデア
●
Bitcoin は、こういった技術的問題を解決す
る、新たなスキームを提案
– ブロックチェイン
– プルーフオブワーク
●
以降では、Bitco...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 11
第二部
トランザクション
●
コインの受け渡し
●
電子署名
2014/03/15 モナーコイン・ビットコイン勉強会@東京 12
トランザクション
●
暗号通貨の受け渡しをどう表現する?
– 所有権の移譲によって表現
●
送金元を勝手に詐称されないためには?
– 従来通りの電子署名でOK!
– リファレン...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 13
トランザクション
●
《Aさん》の全保有コインを、《Bさん》へ
– コインが確かに《Aさん》のものであること
– 受け渡し先が《Bさん》であること
– トランザクション作成者が...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 14
コインの分割と結合
●
前スライドのやり方では、保有する全てのコイ
ンのやりとりのみ
– 一部のみを受け渡すには?
– 二つのウォレットを合算するには?
●
コインの「入力」と...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 15
コインの分割と結合
●
《Aさん》から《Bさん》へ 950MONA
トランザクション
《Xさん》から
もらった
100MONA
「入力」 「出力」
《Yさん》から
もらった
5...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 16
トランザクション手数料
●
出力のコイン枚数よりも入力のコイン枚数が多い
場合には、その差額は手数料とみなされる
●
手数料は後述する採掘者(マイナー)に支払われ
る
– 消え...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 17
第三部
多重支払いと
ブロックチェイン
●
取引の順序化
2014/03/15 モナーコイン・ビットコイン勉強会@東京 18
取引の順序化
●
多重支払いを確実に検知するには?
– トランザクションに順序をつける
– 過去のトランザクションと矛盾するものは拒否
●
トランザクション単位で順序付けをする...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 19
ブロック #13
ブロック #2
ブロックチェイン
●
トランザクション
●
ブロック
– 一定期間に発生したト
ランザクションをひと
纏めにしたもの
●
ブロックチェイン
–...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 20
ブロックチェインの分岐
●
いつ、誰がブロック
を生成するか分から
ない
● 異なるノードが同時
に生成すると、
ブロックチェインは
「分岐」
● どのブランチを「正
しい」と...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 21
第四部
改ざんと
プルーフオブワーク
●
CPU一個あたり、一票
2014/03/15 モナーコイン・ビットコイン勉強会@東京 22
改ざん
●
ブロックを自由に生成できてしまうと、改ざん
が可能
ブロック #1
ブロック #2
ブロック #3
ブロック #4
これが正しい
ブロックチェイン!
TX #251...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 23
プルーフオブワーク (POW)
●
勝手にブロックを生成できるのでは、ダメ
●
参加ノード全員でくじ引きをして決める?
– 参加者の大多数が善良であれば、改ざんはできない
– ...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 24
POW を実現するためには?
●
「CPU一個につき、一票」を実現するには?
– 大量の計算コストが必要な問題を用意する
– 一番最初に解けた人が勝者 → ブロック生成
●
問...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 25
POW に適した問題
●
作るの簡単・解くの難しい・答え合わせ簡単
– パズルゲーム
●
コンピュータで簡単に実現できるものは?
– 「ハッシュキャッシュ」というのが知られてい...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 26
ハッシュ関数
《ハッシュ値》
●
「あるデータが与えられた場合にそのデータを
代表する数値を得る操作、または、その様な数
値を得るための関数のこと」(Wikipedia)
●
...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 27
問題
入力値が X=”01101”で
始まるもののうち、
ハッシュ関数の出力が
N=10 未満になる
ような入力値を
見つけよ
ハッシュ関数を使った「問題」
●
作るのは簡単
...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 28
ブロック生成と組み合わせる
●
ブロックに、ハッシュ値調整用のデータ
(nonce) を付加
●
ハッシュ値がある値以下となる nonce を発見
できたら、ブロックが生成(採...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 29
POW による改ざんへの対抗
●
ハッシュ値をたくさん計算した(=多くのCPU
パワーを費やした)人がブロックを生成できる
●
「CPU一個につき、一票」が実現できた!
●
改...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 30
採掘の難しさ
●
Bitcoin はハッシュ関数として SHA-256 を採
用(とりうる範囲:          )
●
例)ブロック高 #289980 のハッシュ値
– 0...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 31
ブロック報酬
●
ブロック生成(採掘)には大量の電気代とマシン
代がかかる
– 採掘のモチベーション?
●
コインはどこから湧いて出てくる?
– トランザクションはコインの受け...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 32
まとめ
2014/03/15 モナーコイン・ビットコイン勉強会@東京 33
まとめ
●
P2P電子マネー実現のための二つの困難を解決
●
多重支払い と ブロックチェイン
– ブロックチェインによるトランザクションの順序化
– 過去のトランザクションと...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 34
第五部
その他
●
51%攻撃
●
簡易版支払い検証
●
難易度
●
情報源
●
etc.
2014/03/15 モナーコイン・ビットコイン勉強会@東京 35
51%攻撃
●
プルーフオブワークは、多数決の方法の中で最
も「マシ」なだけ
●
演算能力の過半数を独占できてしまえば改ざん
可能
– いわゆる「51%攻撃」
●
代替案:Pr...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 36
51%攻撃で出来ること
●
理解度確認クイズ
51%攻撃で次のことは出来る?出来ない?
– 他人のコインを無効化する
– 他人のコインを自分のものにする
– 自分の支払いをなか...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 37
簡易版支払い検証/導入
●
ブロックチェインには全てのトランザクションが
記録されている
●
大量のメモリとディスクスペースが必要
– 2014年3月時点では約15GBにも達し...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 38
簡易版支払い検証/マークル木
●
ブロック内の大量のトランザクションの「代表的
な」ハッシュ(マークルルート)を求める手法
●
ブロックにはマークルルートのみを格納
「マークル...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 39
簡易版支払い検証/検証方法
●
トランザクションがマークル木に含まれている
ことを確認したい
●
マークル木の一部の情報だけでOK
これが正しいか
検証したい!
●
自分の持っ...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 40
簡易版支払い検証/実装
●
全チェイン (Full-Chain) 版クライアント
– 公式クライアント(bitcoin-qt, bitcoind)
●
ヘッダーのみ (Head...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 41
難易度 (difficulty)
●
ハッシュ関数の出力値のスレッショルドは「難
易度 (difficulty)」から決定される
– ブロックの生成までに平均すると何回ハッシュ...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 42
SHA-256 と scrypt
●
ハッシュ関数の計算は簡単であるべき
– 単純に与えられたデータのハッシュ値を知りたい場合に
は、簡単に計算できる方が便利
– MD5, S...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 43
ウォレットアドレス
●
電子署名で個人を特定するのは公開鍵:
– 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A0...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 44
トランザクション展性
●
最近話題になった Transaction Malleability
(Mutability) とは?
●
リファレンス実装においては、電子署名はトラ
...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 45
トランザクション展性
●
Mt.Gox の犯したミス
– Gox「トランザクション発行したよ!」
– 攻撃者がトランザクションにゴミデータ挿入
– Gox「俺のトランザクション...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 46
情報源
●
Bitcoin の基礎概念はブロックチェインとプ
ルーフオブワークでほぼ尽きている
●
だが、実装まで踏み込むととても奥が深い……
●
参考文献
– 哲史白書 (h...
2014/03/15 モナーコイン・ビットコイン勉強会@東京 47
さいごに
2014/03/15 モナーコイン・ビットコイン勉強会@東京 48
さいごに
●
このスライドの内容はいかがでしたでしょうか?
●
皆様の Bitcoin に対する理解が少しでも進んだの
であれば、非常に光栄です
●
もし、本スライドが少しでも...
Upcoming SlideShare
Loading in …5
×

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

9,155 views

Published on

モナーコイン・ビットコイン勉強会@東京
「暗号通貨ってなんだろう?」by もなとれ

要旨:
暗号通貨の基礎的な話を、とりわけ *技術的な* 側面に絞って話していこうと思います。

MONA:MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab
BTC:1AZYKstEvRLhYnQCheYutqyZ5oNS4SwoJw

Published in: Technology
  • Be the first to comment

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

  1. 1. 暗号通貨って    なんだろう? もな とれ <monatr.jp@gmail.com> http://monatr.jp/ Twitter: @monatr_jp 2014年3月15日 モナーコイン・ビットコイン勉強会@ドワンゴ セミナールーム What is the cryptocurrency?
  2. 2. この資料について ● この資料について – 本スライドは、2014年3月15日に行われた『モナーコイン・ビット コイン勉強会@東京』(http://off.gikopool.net/)にて使用したス ライドを公開用に一部修正したものです ● ライセンス – 本スライドのライセンスは「クリエイティブコモンズ 表示・非営 利・継承 4.0 国際」( http://creativecommons.org/licenses/by-nc-sa/4.0/)に従うもの とします – ライセンス条項に従う範囲内であれば、自由に改変・複製・再配布 をしていただいて構いません – 商用利用されたい場合など、ライセンスの許可範囲を超える場合に は個別に対応いたしますので、著作者までご相談ください
  3. 3. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 3 今日のお話 ● 暗号通貨(Bitcoin, Monacoin, etc.)の技術的な側面につ いて、情報科学にあまり詳しくない方向けに紹介します – 社会的な側面 (シルクロード、価格の高騰、政府の規制、etc.) については触れま せん ● 基本的に「哲史白書」の内容に沿います – 「そんなの知ってるよ!」という方は、後ろのほうで即売会を お楽しみください m(_ _)m ● 講演スタイル – 途中質問OK。分からなくなったら気軽に質問を!(恥ずかしがらずに!)
  4. 4. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 4 『暗号通貨って        なんだろう?』 Presented by “Mona Tore”
  5. 5. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 5 おしながき ● 第一部  イントロダクション – 暗号通貨の目的 – 技術的問題 ● 第二部  トランザクション – コインの受け渡し ● 第三部  ブロックチェイン – 多重支払い防止 ● 第四部  プルーフオブワーク – 改ざん防止 ● 第五部  その他(時間があれば) – 簡易版支払い検証 – 難易度 – SHA-256 と scrypt – 51% 攻撃
  6. 6. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 6 第一部 イントロダクション ● 暗号通貨の目的 ● 技術的問題 ● 多重支払い ● 改ざん
  7. 7. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 7 暗号通貨の目指す場所 ● 目的……P2Pを用いた、非中央集権型の電子マネー – 従来の電子マネーは、何らかの権威機関が維持管理 (Edy, PayPal, Suica, WebMoney, Amazonギフト, etc.) ● 技術的問題 – 多重支払い……同時に複数の人間に支払う詐欺 – 改ざん……支払いを無かったことにする詐欺 ➔ 解決策 – ブロックチェイン (Block chain) – プルーフオブワーク (Proof of Work)
  8. 8. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 8 技術的問題/多重支払い ● ハッカーが、Aさん、Bさんそれぞれに所持金を すべて支払ったと主張 ● P2Pでは、矛盾した支払要求を確実に検知する のは困難 《Aさん》に 1MONA 支払う! 《ハッカー》 所持金:1MONA 《Aさん》 《Bさん》 《Bさん》に 1MONA 支払う! P2Pネットワーク P2Pネットワーク
  9. 9. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 9 技術的問題/改ざん ● 一旦、正常に支払い を済ませる ● 全ノードの合意を得ら れたら、ニセ情報を流 す ● 単純に多数決で決めて しまうと、改ざんされ てしまう可能性 《Aさん》に 1MONA 支払う! 《Aさん》 P2Pネットワーク 《ハッカー》 所持金:1MONA 多重支払いなし。 正常な支払いだ! 《Xさん》 Aさ…… いや、Xさんへ 1MONAかな? 《Xさん》に 1MONA! 《ハッカー》 多数のノードが ニセ情報を流す
  10. 10. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 10 暗号通貨の革新的アイデア ● Bitcoin は、こういった技術的問題を解決す る、新たなスキームを提案 – ブロックチェイン – プルーフオブワーク ● 以降では、Bitcoin がどのようにして技術的課 題をクリアしたのかを見ていく
  11. 11. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 11 第二部 トランザクション ● コインの受け渡し ● 電子署名
  12. 12. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 12 トランザクション ● 暗号通貨の受け渡しをどう表現する? – 所有権の移譲によって表現 ● 送金元を勝手に詐称されないためには? – 従来通りの電子署名でOK! – リファレンス実装では ECDSA (楕円曲線DSA) を採用 ● まずは、自分の持つ全てのコインを誰かに受け 渡す処理を考えてみる
  13. 13. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 13 トランザクション ● 《Aさん》の全保有コインを、《Bさん》へ – コインが確かに《Aさん》のものであること – 受け渡し先が《Bさん》であること – トランザクション作成者が《Aさん》であること 《Aさん》 1MONA 《Bさん》 トランザクション Aさんのお財布の所有権をBさんへ移譲した証明 保有者 =《Aさん》 前の保有者《Xさん》 所有権移譲証明 (《Xさん》署名) 移譲先 =《Bさん》 送り先《Bさん》 ウォレットアドレス (《Bさん》公開鍵) 《Aさん》 電子署名作成 《Xさん》 トラン ザクション 《Xさん》 ↓ 《Aさん》
  14. 14. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 14 コインの分割と結合 ● 前スライドのやり方では、保有する全てのコイ ンのやりとりのみ – 一部のみを受け渡すには? – 二つのウォレットを合算するには? ● コインの「入力」と「出力」は複数あってもよ い、とすればよい
  15. 15. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 15 コインの分割と結合 ● 《Aさん》から《Bさん》へ 950MONA トランザクション 《Xさん》から もらった 100MONA 「入力」 「出力」 《Yさん》から もらった 500MONA 《Zさん》から もらった 400MONA 《Aさん》 《Bさん》へ 950MONA 《Aさん》= 《自分》へ 50MONA 《Bさん》
  16. 16. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 16 トランザクション手数料 ● 出力のコイン枚数よりも入力のコイン枚数が多い 場合には、その差額は手数料とみなされる ● 手数料は後述する採掘者(マイナー)に支払われ る – 消えてなくなるわけではない ● 手数料の徴収理由 – 採掘者の給料(ネットワークの維持手数料) – トランザクション乱発によるいたずら(DoS攻撃)防止 (手数料) = (入力枚数) − (出力枚数)
  17. 17. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 17 第三部 多重支払いと ブロックチェイン ● 取引の順序化
  18. 18. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 18 取引の順序化 ● 多重支払いを確実に検知するには? – トランザクションに順序をつける – 過去のトランザクションと矛盾するものは拒否 ● トランザクション単位で順序付けをすると、取 引量が増えたときに大変なことに…… ● そこで、一定期間に発生したトランザクション を一纏めにする → ブロック
  19. 19. 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
  20. 20. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 20 ブロックチェインの分岐 ● いつ、誰がブロック を生成するか分から ない ● 異なるノードが同時 に生成すると、 ブロックチェインは 「分岐」 ● どのブランチを「正 しい」とするか? ● 最も長いブロック チェインを採用 ブロック #1 ブロック #2 ブロック #3’ ブロック #3’’ ブロック #4’’ブロック #4’ ブロック #5’’
  21. 21. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 21 第四部 改ざんと プルーフオブワーク ● CPU一個あたり、一票
  22. 22. 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 あ、あれ? 左が正しい ……のかな?
  23. 23. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 23 プルーフオブワーク (POW) ● 勝手にブロックを生成できるのでは、ダメ ● 参加ノード全員でくじ引きをして決める? – 参加者の大多数が善良であれば、改ざんはできない – 大量のIPアドレスを確保できる人がいると、ダメ ● CPU一個につき、一票にしよう!(提案) – 大量のCPUを独占するためには、大量の電気代とハードウェ ア代が必要 – IPアドレスを確保するよりは難しそう ● 「プルーフオブワーク」
  24. 24. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 24 POW を実現するためには? ● 「CPU一個につき、一票」を実現するには? – 大量の計算コストが必要な問題を用意する – 一番最初に解けた人が勝者 → ブロック生成 ● 問題はどうやって用意する? – 作るのは簡単 – 解くのは難しい – 答え合わせは簡単
  25. 25. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 25 POW に適した問題 ● 作るの簡単・解くの難しい・答え合わせ簡単 – パズルゲーム ● コンピュータで簡単に実現できるものは? – 「ハッシュキャッシュ」というのが知られている ルービックキューブ (画像提供:Wikipedia) 15パズル (画像提供:www.showanavi.jp)
  26. 26. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 26 ハッシュ関数 《ハッシュ値》 ● 「あるデータが与えられた場合にそのデータを 代表する数値を得る操作、または、その様な数 値を得るための関数のこと」(Wikipedia) ● 出力されるハッシュ値は、入力の値が変わると ランダムに変化するようにみえる ハッシュ関数 データ #1 10111010 データ #2 01000101 ハッシュ #1 523 ハッシュ #2 083 出力される数字は 1000未満とする 厳密には「暗号学的ハッシュ関数」という
  27. 27. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 27 問題 入力値が X=”01101”で 始まるもののうち、 ハッシュ関数の出力が N=10 未満になる ような入力値を 見つけよ ハッシュ関数を使った「問題」 ● 作るのは簡単 – N, X を変えればいいだけ ● 解くのは難しい – 実際にいろいろな入力値 を試し、地道に見つけ出 すしかない ● 答え合わせは簡単 – 答えを一回だけハッシュ 関数に通してあげれば検 証できるこの問題は 「ハッシュキャッシュ」 と呼ばれている
  28. 28. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 28 ブロック生成と組み合わせる ● ブロックに、ハッシュ値調整用のデータ (nonce) を付加 ● ハッシュ値がある値以下となる nonce を発見 できたら、ブロックが生成(採掘)される ブロック #7’ TX #381 TX #47 Nonce 0x83F67A0210ECCD45 ブロック #7’’ TX #381 TX #47 Nonce 0x49A1DD05F74B51C ハッシュ関数 ハッシュ #7’ 983 ハッシュ #7’’ 003
  29. 29. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 29 POW による改ざんへの対抗 ● ハッシュ値をたくさん計算した(=多くのCPU パワーを費やした)人がブロックを生成できる ● 「CPU一個につき、一票」が実現できた! ● 改ざんに対抗できるように ブロック #3’ ブロック #4? ブロック #1 ブロック #2 ブロック #3 ブロック #4 みんなで次の ブロックを作るぞ! あっちより長い ブロックチェイン 作るの、 一人じゃ無理 orz 改ざんを行うためには、 伸び続ける正規のブロック チェインに追いつき、 さらに追い越さなければ ならない
  30. 30. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 30 採掘の難しさ ● Bitcoin はハッシュ関数として SHA-256 を採 用(とりうる範囲:          ) ● 例)ブロック高 #289980 のハッシュ値 – 0x0000000000000000002ded6eae129b3478d 68a4f59bfa7e61c160bbb603b1b42 ● およそ 26,322,499,741,093,595,921,272 回 ハッシュを計算すると、一ブロック採掘可能
  31. 31. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 31 ブロック報酬 ● ブロック生成(採掘)には大量の電気代とマシン 代がかかる – 採掘のモチベーション? ● コインはどこから湧いて出てくる? – トランザクションはコインの受け渡しのみ – 一番最初にコインを手にする人は誰? ● ブロック報酬 – ブロックを採掘した人には一定の報酬 Monacoinでは 1〜1051,000 ブロック までは 50枚づつ それ以降は1051,000 ブロック毎に半減していく
  32. 32. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 32 まとめ
  33. 33. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 33 まとめ ● P2P電子マネー実現のための二つの困難を解決 ● 多重支払い と ブロックチェイン – ブロックチェインによるトランザクションの順序化 – 過去のトランザクションと矛盾する要求を拒否 ● 改ざん と プルーフオブワーク – ブロックの生成に高いCPUパワーを要求 (プルーフ オブワーク; POW) – 改ざんするためには参加ノードの過半数のCPUパ ワーを寡占する必要あり
  34. 34. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 34 第五部 その他 ● 51%攻撃 ● 簡易版支払い検証 ● 難易度 ● 情報源 ● etc.
  35. 35. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 35 51%攻撃 ● プルーフオブワークは、多数決の方法の中で最 も「マシ」なだけ ● 演算能力の過半数を独占できてしまえば改ざん 可能 – いわゆる「51%攻撃」 ● 代替案:Proof of Stake (Peercoin) – 「コイン一枚あたり、一票」 – コインをたくさん持ってる人は、悪さをして保有コ インの価値を貶めるようなことはしないだろう
  36. 36. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 36 51%攻撃で出来ること ● 理解度確認クイズ 51%攻撃で次のことは出来る?出来ない? – 他人のコインを無効化する – 他人のコインを自分のものにする – 自分の支払いをなかったことにする – 他人の支払いをなかったことにする – 勝手にコインを発行しまくる – 嫌いな奴をシカトする(トランザクションを拒否) – 自分以外の採掘者が採掘したブロックを無効化する
  37. 37. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 37 簡易版支払い検証/導入 ● ブロックチェインには全てのトランザクションが 記録されている ● 大量のメモリとディスクスペースが必要 – 2014年3月時点では約15GBにも達している(リンク) ● スマホ等でも使えるように「簡易版」を作れない か? ● マークル木を用いた、簡易支払い検証(Simplified Payment Verification; SPV)
  38. 38. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 38 簡易版支払い検証/マークル木 ● ブロック内の大量のトランザクションの「代表的 な」ハッシュ(マークルルート)を求める手法 ● ブロックにはマークルルートのみを格納 「マークルルート」 ブロックにはこの値 のみを格納する 画像提供:Wikipedia ブロックに含めるデータ
  39. 39. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 39 簡易版支払い検証/検証方法 ● トランザクションがマークル木に含まれている ことを確認したい ● マークル木の一部の情報だけでOK これが正しいか 検証したい! ● 自分の持っている “Data block 000” が 正しいか(改ざんやエラーがないか)を 検証したい ● そのためには、“Top hash” が再現 できるかどうかをチェックすればよい ● “Hash1”, “Hash 0-1” の二つのみ 知ってればOK!
  40. 40. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 40 簡易版支払い検証/実装 ● 全チェイン (Full-Chain) 版クライアント – 公式クライアント(bitcoin-qt, bitcoind) ● ヘッダーのみ (Header-Only) 版クライアント – MultiBit – Android版ウォレットアプリ
  41. 41. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 41 難易度 (difficulty) ● ハッシュ関数の出力値のスレッショルドは「難 易度 (difficulty)」から決定される – ブロックの生成までに平均すると何回ハッシュを計 算する必要があるか?= ● 過去のブロック生成頻度から難易度を調整 – ブロック生成頻度が速すぎる……難易度↑ – ブロック生成頻度が遅すぎる……難易度↓ 具体的な調整方法はいろいろある: • Bitcoin は2,016ブロックの生成に要した時間から調整 • Monacoin は Kimoto Gravity Well (KGW) 方式を採用(予定)
  42. 42. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 42 SHA-256 と scrypt ● ハッシュ関数の計算は簡単であるべき – 単純に与えられたデータのハッシュ値を知りたい場合に は、簡単に計算できる方が便利 – MD5, SHA, etc. – Bitcoin ● ハッシュ関数の計算は難しくあるべき – ハッシュ値の衝突や入力値の復元から守るためには、計 算が難しいほうが便利 – scrypt, etc. – Litecoin, Monacoin など多くの暗号通貨で採用
  43. 43. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 43 ウォレットアドレス ● 電子署名で個人を特定するのは公開鍵: – 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887 E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE 187E9C582BA6 ● 長い。コピペするのも大変 ● 入力ミスをするかも? ● 公開鍵をある手順で変換し、短く、かつ入力ミス のチェックができるような形にしている – 例:MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab
  44. 44. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 44 トランザクション展性 ● 最近話題になった Transaction Malleability (Mutability) とは? ● リファレンス実装においては、電子署名はトラ ンザクションの一部(支払処理部分)にしか 行っていない – それ以外の部分は第三者により書き換え可能 ● トランザクションにゴミデータを仕込み、オリ ジナルとは違う内容に出来てしまう ● しかし、支払いは正しく行われている
  45. 45. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 45 トランザクション展性 ● Mt.Gox の犯したミス – Gox「トランザクション発行したよ!」 – 攻撃者がトランザクションにゴミデータ挿入 – Gox「俺のトランザクションがブロックに取り込まれて いない!」 – (↑実際にはきちんと取り込まれている。ミス①) – Gox「仕方ない、送り直すよ!」 – (↑手動でチェックすべきだが、自動再送していた。 ミス②) – Gox「400億円分のBTC、いなくなったお (´・ω・`)」
  46. 46. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 46 情報源 ● Bitcoin の基礎概念はブロックチェインとプ ルーフオブワークでほぼ尽きている ● だが、実装まで踏み込むととても奥が深い…… ● 参考文献 – 哲史白書 (http://www.bitcoin.co.jp/docs/SatoshiWhitepaper.pdf) – Bitcoin wiki (https://en.bitcoin.it/)
  47. 47. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 47 さいごに
  48. 48. 2014/03/15 モナーコイン・ビットコイン勉強会@東京 48 さいごに ● このスライドの内容はいかがでしたでしょうか? ● 皆様の Bitcoin に対する理解が少しでも進んだの であれば、非常に光栄です ● もし、本スライドが少しでも役に立ったのであれ ばお気持ちだけでもご寄付をいただけると大変あ りがたいです m(_ _)m – Monacoin: MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab – Bitcoin: 1AZYKstEvRLhYnQCheYutqyZ5oNS4SwoJw – @tipmona tip @monatr_jp 金額 [コメント]

×