Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

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

Download to read offline

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

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

MONA:MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab
BTC:1AZYKstEvRLhYnQCheYutqyZ5oNS4SwoJw

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

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

MONA:MMonatrZw9NzoFCkV9LX9yB7vE9rDbtSab
BTC:1AZYKstEvRLhYnQCheYutqyZ5oNS4SwoJw

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

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

  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 金額 [コメント]

×