Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20180116-bitcoin

kotohata
January 12, 2018

 20180116-bitcoin

kotohata

January 12, 2018
Tweet

More Decks by kotohata

Other Decks in Business

Transcript

  1. Copyright ©2017 Attracie, inc. All rights reserved. ⽤語集 • トランザクション・・・「いつ、誰から誰にビットコインが移動した」ということが記録された情報。1決済・1⽀払いごと

    に1トランザクション発⽣する。 • ブロック・・・トランザクションが数千個まとまったフォルダのようなもの。 • ブロックチェーン・・・ビットコインがはじまって以来、最初のトランザクションを含む先頭のブロックから続くブロック 全体のこと。いま500,000ブロックぐらい存在。 • ブロック時間・・・平均的に何分おきに次のブロックが⽣成されるかの時間。 • トランザクションinput・・・トランザクションの左側。資⾦の移転元(⽀払っている⼈)の情報が含まれている。複式簿記でい う貸⽅。 • トランザクションoutput・・・トランザクションの右側。資⾦の移転先の情報が含まれている。借⽅。 • ノード・・・分散ネットワークの1参加者という意味ですが、具体的に⾔えばビットコインのプログラム(bitcoind)が動いてい る1プロセスのことで、⾔い換えれば1台のパソコンのこと。macbookでbitcoindを動かせばそのmacが1ノードとなります。 • マイニング・・・新しいブロックを作り、ブロックチェーンの末尾に追加する作業のこと。ただし新しいブロックを作るに はすさまじい量の計算が必要になっていて、世界中のパソコンがその計算を競い合っています。したがって相当の電気代を 使いますが、ブロック作成者には報酬としてビットコインが与えられます。 • マイナー・・・マイニングをする⼈のこと。 • ウォレット・・・ビットコインの所有の源泉となる秘密鍵が格納されているソフトウェア。秘密鍵は⽂字列なので紙にQR コードを書き込んだものもある。 • ビットコインアドレス・・・ビットコインの⼝座番号のようなもの。
  2. Copyright ©2017 Attracie, inc. All rights reserved. ビットコインとは? プログラムとしてのビットコイン(bitcoind, bitcoin-cli)

    C++とpythonで書かれたオープンソースの分散ネットワークプログラム。 分散サーバとして機能するbitcoind、それを照会したりリクエストを⾏うbitcoin-cliというプログラムがある。 決済ネットワークとしてのビットコイン(Bitcoin) 上のプログラムをサトシナカモト⽒(創案者)が2009年に動かして以降、世界中のノードで動いているbitcoindが組 み合わさって動いているネットワークシステム。各ノードが⾃律的に構築している(が結果的に全体で同じものに なっていく)ブロックチェーンが台帳となっている。 通貨としてのビットコイン(bitcoin, satoshi, BTC) ブロックチェーンに記録された残⾼。
  3. Copyright ©2017 Attracie, inc. All rights reserved. ビットコインの特徴 bitcoindは単⼀のマスターデータや特権管理者を持たない bitcoindを⽴ち上げれば⾃由にビットコインのネットワークに参加でき、それぞれのノードが全取引情報を記録し

    たマスターデータを持つ。 bitcoindはお互いに情報をやり取りして最新の情報を取り込んでいく どこかのサーバを信頼してそこの情報で同期をとるのではなく、いろいろなノードから細かいデータを受け取り ながら⾃律してデータベース(ブロックチェーン)を更新していく。これがお互いに作⽤することで、データベー スがほとんど同じ状態になっていく。 bitcoinのトランザクションは即時反映されず、ネットワーク全体による承認・合意形成に約1時間かかる 中央集権でないので、bitcoindのネットワークの多数が合意形成することでトランザクションの反映とみなす。
  4. Copyright ©2017 Attracie, inc. All rights reserved. ブロックチェーンとは? ビットコインの全取引を含んだ台帳 それぞれのbitcoindにはビットコイン開始以来の全取引情報を含んだブロックチェーンが格納されている(数⼗GB

    くらいで、これからも増えていく)。同じブロックチェーンのデータベースが世界中に重複しているので、保存効 率という意味では無駄ともいえる。 ブロックチェーンは最初のブロックから最新のブロックまでで構成される 現在50万程度のブロックができていて、10分に1個新しいブロックができるようになっている。 ブロックにはトランザクションが数千含まれている 平均10分間隔でブロックは新しくなる。ブロックができてから次のブロックが誕⽣するまでに発⽣したトランザ クションが含まれている。「トランザクション数がいくつになると⾃動的に次のブロックができる」とかではな いので注意。
  5. Copyright ©2017 Attracie, inc. All rights reserved. ブロックチェーンの中⾝ ブロック1 ブロック2

    ブロック 500,000 ・・・ 最新のブロック トランザクション トランザクション トランザクション トランザクション トランザクション トランザクション ・ ・ ・ トランザクション トランザクション トランザクション 未承認のトランザクション 新しいブロック 末尾に追加する マイニング
  6. Copyright ©2017 Attracie, inc. All rights reserved. なぜブロックを区切る必要があるのか ブロックを新しく作るにはマイニ ングが必要となる。

    マイニングにはめちゃくちゃな計 算量が必要で、世界中のマイナー の計算量をもっても10分に1度し かできない難易度になっている。 ブロックチェーンはブロックの数 が最も多いものを信頼する。 したがって悪意をもってブロック を改ざんしようとすると、正しい ブロックチェーンでマイニングさ れてる分のマイニングが必要。 とても個⼈や⼀組織でできる計算 量ではないので、信頼されるまで ブロックをつなげられない。
  7. Copyright ©2017 Attracie, inc. All rights reserved. よくある誤解 誤解1. ブロックチェーン上でビットコインの売買ができる

    ビットコインネットワーク⾃体では売買はできない。 なぜならブロックチェーンには「誰がいくらのビットコインを持っているか」という情報と「誰が誰にビット コインを送る」という指⽰しかできないため。 ⽇本円(JPY)とビットコイン(BTC)を交換するには、ブロックチェーンとは直接関係のない外部の取引所で⼆者間 が合意し、取引所が代⾏してトランザクションを処理する。 誤解2. マイニングを頑張って嘘のブロックを積み上げれば、他⼈のビットコインを⾃分のものにできる 「そのビットコインの所有権があるか」は公開鍵に対応するデジタル署名が⾏われているかで判断できるので、 そもそもトランザクションの検証で無効であることが判断できる。 誤解3. 1BTC持ってる⼈が全額をAさんに送った。その直後にBさんにも1BTC送ろうとすると、ビットコインネッ トワークには拒否される。 サーバ・クライアント型のネットワークであれば2度⽬は拒否されるが、ビットコインは分散ネットワークなの でそもそも1度⽬が即時に承認されず、両⽅のトランザクションが保留状態となる。先にブロックに⼊ったも のが優勢となり、さらに6ブロックができると事実上逆転不能と考えられ承認される。もう⼀⽅のトランザク ションはいつまでも承認されない。
  8. Copyright ©2017 Attracie, inc. All rights reserved. rubyでハッシュ関数を使った例 同じSHA256というアルゴリズムを使えば、別の⾔語や別の⼈のパソコンでも全く同じ結果になります。 ウェブサービスではパスワードそのものをデータベースに⼊れるのではなくハッシュ化したものを保存して、

    ハッシュ値が⼀致するかを⽐べることで⽣のパスワードを保存せずに正しいパスワードかを判断する、といった ⽤途で使われています。 ※ ハッシュ化されたパスワードを知っても、不正なログインはできないのでセキュリティ上優れています ※ ハッシュ化された値はもとに戻せない(復号できない)ので、ハッシュ関数にかけることは「暗号化」とはいわ ず「ハッシュ化」といいます。
  9. Copyright ©2017 Attracie, inc. All rights reserved. 秘密鍵・公開鍵の特徴 秘密鍵 公開鍵

    それぞれの⽂字列はプログラミング⾔ 語やOSがかわっても、アルゴリズムが ⼀致している限り使える
  10. Copyright ©2017 Attracie, inc. All rights reserved. 公開鍵のユースケース SSHにおける認証 ①クライアントは前もって公開鍵をサーバに登録しておく

    ②クライアントから接続があったとき、サーバはクライアントが秘密鍵の所有者(=サーバのアクセス権を もっているとみなせる⼈)か知りたい。しかしクライアントはセキュリティ上、秘密鍵そのものを送りた くない。 ③そこでサーバは乱数Xを⽣成し、公開鍵で暗号化したものをクライアントに返す。公開鍵で暗号化され たものは対応する秘密鍵で復号できるので、クライアントはもとのXを知ることができる。そのXをサー バに送りつけることで、サーバはクライアントは秘密鍵の所有者であることを知れる。
  11. Copyright ©2017 Attracie, inc. All rights reserved. 公開鍵のユースケース 電⼦署名 ここでの「他の誰か」は

    世界中で動いている bitcoindのこと。 では「Aさんの公開鍵」は どこから⼊⼿しているの でしょうか?
  12. Copyright ©2017 Attracie, inc. All rights reserved. ビットコインを持っているとは? 世界中に存在するbitcoindの中に⼊ってるブロックチェーンのデータには、ビットコイン残⾼とその所有者の公 開鍵(相当のもの)が記録されている。

    秘密鍵を持っていれば、対応する公開鍵のビットコイン残⾼を別の⼝座に移すような要求(トランザクションと いう)を発⾏できる。トランザクションを秘密鍵で署名する。 トランザクションをどこかのbitcoindに送るとそれが全体のネットワークに浸透して、未承認のトランザクショ ンとして認識される。違う秘密鍵で署名してたらこの時点でバレる。 新しいブロックが⾒つかったとき(誰かがマイニングに成功したとき)、それまでの未承認トランザクションはま とまって末尾のブロックの中に追加され、さらに6ブロック追加されると承認済みとしてみなされる。 「ビットコインを持っている」とは、残⾼が紐付いている公開鍵が承認済みブロックチェーン の中に存在し、対応する秘密鍵を持っていて、ビットコインネットワークにトランザクション を承認させることができる、と⾔い換えられる。
  13. Copyright ©2017 Attracie, inc. All rights reserved. 実際の例 ブロック https://blockchain.info/ja/block/00000000000000000019a06680ed9e5e11d3ce6988b7c7f3562d290b6a1f0c78

    トランザクション https://blockchain.info/ja/tx/f1a8fb0b0a435eb16893adc3b23eae9380686c25aa6cd3340b69e7986ce7fe39 トランザクションはinputとoutputの2つで構成されてい る。 inputにある資⾦がoutputに移動したことが記録されて いる。 複式簿記の貸⽅・借⽅のようになっている。 input output アドレスA 1,000 アドレスB 700 アドレスC 250 上の例ではアドレスAの中の1,000が、BとCにそれぞれ 700,250ずつ送信されている。 (余りの50はマイナー⼿数料となる)
  14. Copyright ©2017 Attracie, inc. All rights reserved. ブロックの中⾝ トランザクションが連なっている txid

    (⼩さい順に古いものとする) インプット アウトプット 011 txid: 001 vout: 0 value: 2.5 scriptPubKey: 0b80b4be9ff... value: 1.5 scriptPubKey: d160fbc599e... 012 txid: 005 vout: 0 value: 0.5 scriptPubKey: e3f3360fcd3... value: 0.01 scriptPubKey: 4432b19fd9c... 013 txid: 011 vout: 1 value: 1.2 scriptPubKey: 2d167ecc95b... value: 0.3 scriptPubKey: 6bf87137934...
  15. Copyright ©2017 Attracie, inc. All rights reserved. 新しいトランザクションはどのように処理されるか 100BTC持っているAさんがBさ んに10BTC送⾦しようとしてい

    る。 Aさんが100BTC持っているとは、 Aさんの⼿元の秘密鍵に対応し た公開鍵が、⼗分に承認され ているブロックチェーン上に 記録されているということ。
  16. Copyright ©2017 Attracie, inc. All rights reserved. 新しいトランザクションはどのように処理されるか ノードは新規トランザクショ ンを受け取ったら、資⾦の出

    処であるトランザクションの 公開鍵と、トランザクション の署名を⽐較して同⼀⼈物か 調べる。 問題ないトランザクションで あれば他のノードに伝達して、 未検証トランザクションとし て加える。
  17. Copyright ©2017 Attracie, inc. All rights reserved. 新しいトランザクションはどのように処理されるか 各ノードで未検証トランザク ションを把握しつつ、他の

    ノードとも情報をやりとりす る。 どこかのノードでマイニング に成功すると、そのノードが 把握していた未検証トランザ クション⼀式がブロックに なって、ブロックチェーンの 最後尾に追加される。 ブロック発掘は他のノードに もすぐ伝達され、そのブロッ クに⼊ってるトランザクショ ンは未検証トランザクション から除外される。
  18. Copyright ©2017 Attracie, inc. All rights reserved. ここまでのまとめと補⾜ • ハッシュ関数や公開鍵・秘密鍵など、計算機科学やインターネットで使われる概念を応⽤した、分散ネット

    ワークとなっている。 • ブロックチェーンという形式のデータベースが各ネットワークに点在していて、⼀定のルールに従って全体で データをやりとりしながら協調して同じ内容にしていく。 • ブロックチェーン上にはビットコイン残⾼と公開鍵相当のものが記録されている。この公開鍵に対応する秘密 鍵があれば、この残⾼を送⾦できる。ビットコインを持っている、とは所持している秘密鍵に対応する公開鍵 がブロックチェーン上にあり、残⾼が認められているということ。 • ブロックチェーンは匿名だが、上記の理由でどのアドレスにいくら⼊ってるかは誰でもわかる。
  19. Copyright ©2017 Attracie, inc. All rights reserved. ここまでのまとめと補⾜ 秘密鍵・公開鍵・ビットコインアドレス 秘密鍵

    公開鍵 ビットコイン アドレス 複数⽣成可能 ⼀⽅向に変換 公開鍵を複雑にハッシュ化したものがビットコインアドレスとなる(1対1の関係)。ビットコインアドレスから公 開鍵に戻すことはできない。 秘密鍵から任意の数の公開鍵を作れる。公開鍵から秘密鍵に戻すことはできない。 したがって1つの秘密鍵で複数のビットコインアドレスを持つことができる。 複数のビットコインアドレスが同じ秘密鍵で作られているかどうかはわからない。
  20. Copyright ©2017 Attracie, inc. All rights reserved. ビットコインのよくある指摘 電気代、無駄では? マイニングに時間とコストがかかることが、取引台帳の改ざんを難しくしている。したがって通貨の信頼の

    源泉といえる。 => ただしマイニングを使わないコンセンサスアルゴリズム(PoSなど)も出現している 送⾦に時間がかかるのは短くすべきでは? これも上と同じことがいえる。 利便性と堅牢性のトレードオフ。
  21. Copyright ©2017 Attracie, inc. All rights reserved. ビットコインの課題 送⾦詰まりと⼿数料⾼騰 トランザクション

    ブロック1 ブロック2 ブロック 500,000 ... ブロックチェーン ノード ノード ノード ノード トランザクション トランザクション 未検証トランザクションのプール ビットコインの送⾦が完了する=送ったトランザクションがブロッ クに⼊って、そのブロックのあとに6ブロックが追加される とい うこと。 ただしブロックは1MBまでという制限があり、すべてのトランザ クションが⼊るわけではない。 すぐに送りたい=先にブロックに⼊れてほしいなら⼿数料を⾃分で 増やせば良い(マイナーが⼿数料が⾼いものを優先する) 新規ブロック
  22. Copyright ©2017 Attracie, inc. All rights reserved. 送⾦詰まりの解決策 ⽅法 特徴

    デメリット ビットコインキャッシュ(BCH) ブロックサイズを8MBに増やした。単純に8倍のトラ ンザクションを処理できる。 1ブロック作成に8倍のトランザクションをさばかな いといけないので、ブロック作成者つまりマイナー に負担がかかる。個⼈マイナーが脱落し、負担にた えられる巨⼤マイナーがネットワークを独占し、中 央集権化してしまう恐れがある。 segwit 取引データのあまり重要でない(と考えられている) 領域のデータを削って別の保存領域に置く。 ビットコインの参加者によって導⼊状況が変わる。 bitflyerでは採⽤されていない。 ウォレット側がsegwit対応する必要があり、導⼊の ⾜並みがそろっていない。 ビットコインキャッシュをsegwit対応されたビット コインアドレスに送ると消失する。 Lightning Network ブロックチェーンの外側で⼆者間の取引を実現し、 最終的な結果だけブロックチェーンに書き込む。 ⼿数料が激安(0円も可能)で、早い。 segwitの実装が前提で、そのほかにも技術的な難易 度が⾼い。