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

ビットコインの仕組みと最新の技術動向@木更津高専

 ビットコインの仕組みと最新の技術動向@木更津高専

木更津工業高等専門学校にて2017年1月19日(木)にビットコインの特別講義を行った際の資料を公開します。

Masahiko Hyuga

January 19, 2017
Tweet

More Decks by Masahiko Hyuga

Other Decks in Technology

Transcript

  1. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 今日の流れ • はじめに • 第一部:ビットコインの仕組み ◦ イントロダクション ◦

    トランザクション ◦ 多重支払とブロックチェーン ◦ 改ざんと、プルーフ・オブ・ワーク ◦ まとめ ◦ その他の話題 • 閑話休題:テストネットコインの配布 • 第二部:最新の技術動向 ◦ 各テーマ紹介 • さいごに
  2. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 自己紹介 ー 略歴 東京大学理学部物理学科 ⇨ 総合文化研究科修士(物理学、熱統計力学基礎論) 2013年末にビットコインと出会い、論文や技術文書を読んだりマイニングをしたりしてい るうちにのめり込む。

    その後、日本国内初の暗号通貨「モナーコイン」を中心に取引所、採掘プール、ウォレッ ト、ECシステムなど多数のサービス開発を行う。 個人でできる範囲を超えてきたことなどから法人(合同会社ジャノム)を設立し現在に至 る。
  3. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 自己紹介 ー 最近の活動 • ビットコインで様々なギフト券やグッズを購入できるECサービス「コインギフト」の運 営 ◦ ハードウェアウォレット「

    KeepKey(※国内独占販売事業者)」「 TREZOR」などの取り扱いを開始 • 株式会社セレス様と共同で、Twitterで簡単にビットコインを送金できるサービス 「CoinTip」を開発 • 技術系の勉強会「暗号通貨勉強会/読書会」を設立・運営 • ビットコインの公式クライアント「Bitcoin Core」の日本語訳 • ビットコインのブロックチェーンを利用したトークンプラットフォーム Counterparty に 関する世界初の本格的な JavaScript ライブラリ「CounterJS」を開発
  4. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 自己紹介 ー アマチュア・マイナー 何年も暗号通貨を掘り続けています。最近は Ethereum を掘ることが多いです。 よく「儲かるの?」と聞かれますが、左のマシンだと ……

    • 消費電力(実測値): 358W ⇨ 月あたり電気代:約7,700円 • 月あたり採掘量:約6,000円 _人人人人人人_ > 損してる <  ̄Y^Y^Y^Y^Y^ ̄ あ、でも冬はあったかい♨ですよ ※ちなみにちょっと古いマシンなので損してます が、最新のGPUだとちゃんと利益出ます
  5. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 暗号通貨の目指す場所 目的……P2Pを用いた、非中央集権型の電子マネー ⇨ 従来の電子マネーは、何らかの権威機関が維持管理していた  (例:Edy, PayPal, Suica, WebMoney,

    BitCash, Amazonギフト, etc.) 技術的課題 • 多重支払い …… 同時に複数の人間に支払う詐欺 • 改ざん …… 支払いを無かったことにする詐欺 ▶ 解決策 • ブロックチェーン(Blockchain) • プルーフ・オブ・ワーク(Proof of Work; PoW)
  6. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 技術的課題/改ざん 《ハッカー》 所持金:1BTC B さん 《Bさん》に 1BTC 支払う!

    多重支払いなし。 正常な支払いだ! Aさ…… いや、Xさんへ 1BTCかな? 《ハッカー》 多数のノードが ニセ情報を流す 《X さん》 一旦、正常に支払を済ませる 全ノードの合意を得られたら、ニセ情報を 流す ⇨ 単純に多数決で決めてしまうと、改ざん されてしまう可能性がある!
  7. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 トランザクション ※トランザクション …… 1つの送金記録のこと。例えば「AさんからBさんへ1BTCを送金 した」といったものを指す。 暗号通貨の受け渡しをどうやって表現するか? ⇨ 所有権の移譲によって表現

    送金元を勝手に詐称されないためにはどうする? ⇨ 昔からある「電子署名」でOK!  (ビットコインのリファレンス実装では ECDSA (楕円曲線DSA)を利用) ▶ まずは、自分の持つすべてのコインを誰かに受け渡す処理を考えてみる
  8. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 トランザクション 《Aさん》の全保有コインを、《Bさん》へ渡すために必要な情報は…… • コインが確かに《Aさん》のものであること • 受け渡し先が《Bさん》であること • トランザクション作成者が《Aさん》であること

    A さん B さん トランザクション Aさんのお財布の所有権をBさんへ移譲した証明 保有者 =《Aさん》 前の保有者《Xさん》 所有権移譲証明 (《Xさん》署名) 移譲先 =《Bさん》 送り先《Bさん》 ウォレットアドレス (《Bさん》公開鍵) 《Aさん》 電子署名作成 X さん トラン ザクション 《Xさん》 ↓ 《Aさん》
  9. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 コインの分割と結合 《Aさん》の持つ 2BTC、3BTC、5BTC の三種類のコインから、《Bさん》へ 9BTC 渡す 処理を考える。 A

    さん B さん トランザクション 《Xさん》から もらった 2BTC 《Yさん》から もらった 3BTC 《Zさん》から もらった 5BTC 《Bさん》へ 9BTC 《Aさん》=《自分》へ 1BTC 入力 出力
  10. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ブロックチェーン トランザクション ブロック ブロックチェーン 一定期間に発生したトランザクションをひと纏め にしたもの (※Bitcoin:10分、Monacoin:90秒) •

    生成された順にブロックを繋ぎ、順序化 • 多重支払いを確実に検知できる! トランザクション #381 出:Aさん -10BTC 入:Xさん +3BTC 入:Yさん +7BTC ブロック #7 ブロック#1 TX #47 TX #251 TX #836 ブロック#2 ブロック#13 : ・ ブロック内のトランザクショ ンは順序化しなくていいの で、番号は適当 TX #381 この番号は 「ブロック高」 (Block hight) と呼ばれる
  11. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 改ざん ブロックを自由に生成できてしまうと、ハッカーにより改ざんされてしまう可能性がある。 ブロック#1 ブロック#2 ブロック#3 ブロック#4 TX #251

    《ハッカー》 →《Aさん》 1BTC これが正しいブロックチェーン! ブロック#1 ブロック#2 ブロック#3 ブロック#4 ブロック#3’ ブロック#4’ ブロック#5’ あ、あれ? 左が正しいのかな? TX #251’ 《ハッカー》 →《Xさん》 1BTC ハッカー《X さん》 ブロック#3を 書き換えてやる!
  12. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 プルーフ・オブ・ワーク(PoW) 勝手にブロックを生成できるのでは、ダメ。 参加ノード全員でくじ引きで決める? • これならば、参加者の大多数が善良であれば改ざんはできない • では、どのように投票券を分配すればいい? •

    IPアドレスごとに一票だと、大量のIPアドレスを確保できる人がいるので不公平に なってしまう ⇨ CPU一個につき、一票にしよう!(提案) • 大量のCPUを独占するためには、大量の電気代とハードウェア代が必要 • IPアドレスを確保するよりは難しそう ▶ プルーフ・オブ・ワーク(Proof of Work; PoW = 働いたことの証明)
  13. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 PoW の実現方法 「CPU一個につき、一票」を実現するためには? 1. 大量の計算コストが必要な問題を用意する 2. 一番最初に解けた人が勝者 →

    ブロック生成権を獲得 とすればよさそう。 「大量の計算コストが必要な問題」はどうやって用意すればいい? • 作るのは簡単 • 解くのは難しい • 答え合わせは簡単 この三つの性質が必要。
  14. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 PoW に適した問題 作るの簡単・解くの難しい・答え合わせ簡単 ⇨ 例えば、パズルゲーム ルービックキューブ (画像提供:Wikipedia) 15パズル

    (画像提供:bonkura-oyaji.blog.so-net.ne.jp/) コンピュータで簡単に実現できるものは? ▶ 「ハッシュキャッシュ」と呼ばれるパズルが知られている。
  15. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ハッシュ関数 「あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その 様な数値を得るための関数のこと」(Wikipedia) データ #1 10111010 データ #2

    01000101 ハッシュ #1 523 ハッシュ #2 083 《ハッシュ関数》 《ハッシュ値》 出力される数字は 999以下とする 出力されるハッシュ値は、入力の値が変わるとランダムに変化する (ようにみえる) 厳密には「暗号学的ハッシュ関数」という
  16. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ハッシュキャッシュ ▪ 作るのは簡単 ⇨ N, X を変えればいいだけ。 ▪

    解くのは難しい ⇨ 実際にいろいろな入力値を試し、地道に見つけ 出すしかない。 ▪ 答えわせは簡単 ⇨ 答えを一回だけハッシュ関数に通してあげれば 検証できる。 入力値が X=”01101”で 始まるもののうち、 ハッシュ関数の出力が N=10 未満になるような 入力値を見つけよ 問題 この問題は「ハッシュキャッシュ」 と呼ばれている
  17. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 PoW による改ざんへの対抗 ハッシュ値をたくさん計算した(= 多くのCPUパワーを費やした)人がブロックを生成でき る。 これにより「CPU一個につき、一票」が実現でき、改ざんに対抗できる。 ブロック#1 ブロック#2

    ブロック#3 ブロック#4 みんなで次のブロック を作るぞ! ブロック#3’ ブロック#4? 改ざんを行うためには、伸び 続ける正規のブロックチェー ンに追いつき、さらに追い越 さなければならない。 あっちより長いブロックチェー ン作るの、一人じゃ無理 orz
  18. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 採掘の難しさ Bitcoin はハッシュ関数として SHA-256 を採用している。 (とりうる範囲:0〜2256 ≒ 1.2

    × 1077) 例えば、ブロック高 #448,705 (2017/01/18 8:55:58 JST) のハッシュ値は、 0x0000000000000000021ecb68b5f8ae6f2e4f3c36d58be50b2bd9c1704c4e43f7 であり、およそ 1,446,996,272,793,502,613,504 回 ≒ 1.45 × 1021 回 = 1.45 ゼタ回 のハッシュ計算を行うと、一つのブロックを採掘可能。 おまけ:京コンピュータで採掘するとどうなる? 京は約10Pflopsなので、ざっくり1,000flopsあたり一回ハッシュ計算可能と見積もると、一つのブロックを採掘するのに約4.6年(!)か かる。
  19. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ブロック報酬 ▪ ブロック生成(採掘)には大量の電気代とマシン代がかかる。 ⇨ 大量のおかねを払ってまで採掘を行うモチベーションは? ▪ コインはどこから湧いて出てくる? トランザクションではコインの受け渡しのみ行われる。

    ⇨ 一番最初にコインを手にする人は誰? ▶ ブロックを採掘できた人にビットコインの新規発行権を与えることで、これらの課題を解 決できる。 ビットコインでは 210,000 ブロックまでは 50BTC づつ発行でき、それ以降は 210,000 ブロックごとに発行できる枚数が半減していく。(現在は 12.5BTC)
  20. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 51%攻撃 「CPU一個につき、一票」を逆手に取ると、ネットワークの演算能力の過半数を専有でき ると自由にブロックを生成することができてしまう。 ⇨ 「51%攻撃」と呼ばれている。 しかし、この場合も何でも好き勝手できるというわけではない。 そこでクイズです!以下の中で「51% 攻撃でできること」はどれ?

    • 他人のコインを無効化する • 他人のコインを自分のものにする • 自分の支払いをなかったことにする • 他人の支払いをなかったことにする • 勝手にコインを発行しまくる • 嫌いな奴をシカトする(トランザクションを拒否) • 自分以外の採掘者が採掘したブロックを無効化する
  21. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 SPV(簡易版支払検証) ー 導入 ブロックチェーンには全てのトランザクションが記録されているため、大量のメモリとディ スクスペースが必要。 ⇨ 2017年1月時点で約98GB (!!!)

    にも達している(参考リンク) スマホ等でも使えるように「簡易版」を作れないか? ▶ マークル木を用いた、いわゆる SPV(Simplified Payment Verification; 簡易版支払 検証)と呼ばれる仕組み
  22. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 SPV(簡易版支払検証) ー 検証方法 トランザクションがマークル木に含まれていることを確認したいとする。 マークル木の一部の情報だけでこの検証ができる。 画像提供:Wikipedia これが正しいか検 証したい!

    自分の持っている “Data block 000” が正 しいか(改ざんやエラーがないか)を検証し たいとする。 そのためには、“Top hash” が再現できる かどうかをチェックすればよい。 “Hash1” および “Hash 0-1” の二つのみ 知ってればOK! この仕組みを用いれば、マークル木のリーフとノードを高々 O[log(N)] 個だけ取得すれ ば任意のリーフの検証が可能である。
  23. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 「スケーラビリティ問題」とは? ビットコインでは、ネットワークを流れるすべてのトランザクションを全ノードで共有する必 要がある。 そのためユーザ数や需要の増加によりトランザクション数が増えていくと、各ノードの 様々なリソースが逼迫することが予想される。 リソースの具体例:ネットワーク帯域、メモリ、CPU演算能力 このようにトランザクション数の増大にビットコインネットワークが耐えられなくなってしま うことを「スケーラビリティ問題」という。

    ※より学術的には……トランザクション数 N に対して各ノードに必要なリソースが現状では O(N) ですが、これを O(1) とできればい くらトランザクション数が増えても各ノードの負担は全く増えませんので無問題となります。また O(log(N)) 程度であれば実用的には 問題ないでしょう。このように、各ノードに必要とされるリソースのオーダーをいかに抑えることができるか?というのが、具体的なス ケーラビリティ改善に関する研究の目標となります。
  24. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 現時点での限界性能(参照元) 参考……クレカ (VISA) の平均処理件数 2,000tps、ピーク性能 56,000tps ※tps =

    transactions per second = 秒あたりトランザクション数 ▪ ネットワーク帯域 トランザクションサイズは平均すると約200バイト程度なので、1Mbps あたり 1,250 tps。 ▪ CPU ECDSA の署名検証処理が主な仕事で、Intel CPU で約 4,000 tps 捌ける。 ▪ ブロックサイズ制限 一ブロックあたり1MBの暫定的な上限がある。約 8 tps。ただしプログラムによるただの 設定値なので、いくらでも引き上げ可能。
  25. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 現状 しかしながらネットワーク需要は既にブロックサイズ上限に達しており、ブロックへの取り 込み待ちトランザクションが溢れている。 マイナーはトランザクション手数料の支払が多い順にブロックに取り込むため、手数料を ケチると何日も取り込まれず着金しなくなることがある。 ※ただしこれは需要と供給が拮抗している状態であることを意味しており、経済学的には合理的な状態とも言える。 ⇨ 暫定的に上限引き上げを行う提案がなされている(cf.

    Bitcoin Unlimited) しかしながら上限引き上げの副作用としてネットワーク帯域・ディスク容量を圧迫するこ と、後述する Lightning Network などの新しい技術により改善できることなどから、いま は引き上げるべきでないという意見もある。 ▶ 「最新技術のみで十分なので引き上げすべきではない」派閥と「すぐにでも引き上げる べき」派閥が政治的な争いを繰り広げる事態に発展。。。
  26. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 支払チャネル 通常の支払方法だと、必ずトランザクションのデータを全ノードにコピーし、ブロック チェーンに書き込む操作が必要となる。 ⇨ これは明らかに高コスト 毎回ブロックチェーンに書き込まずとも送金を行いたいユーザ間のみで完結する方法 (「オフチェーン取引」という)はないだろうか? ⇨

    最も簡単な方法:第三者にビットコインを預け、第三者機関内のデータベースで各ユー ザの残高を管理する(cf. 銀行預金) この方法では第三者機関の破綻リスク(cf. Mt.Gox、銀行の破産)や持ち逃げリスクが あり、安全ではない。 ⇨ そこで考えられたのが、特殊なビットコイン・トランザクションを用いて行う「支払チャネ ル (Payment Channel)」と呼ばれる一連の技術。
  27. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 マイクロペイメント・チャネル 無与信下で (trustlessに) オフチェーンで送金することのできるアルゴリズムであり、他 の支払いチャンネルの基礎となっている非常に重要なもの。何万回送ろうとも手数料は 厳密にゼロになることから、非常に小さな額の支払い(マイクロペイメント)に適している とされる。 マイクロペイメント・チャネルを使って送金する簡単な(抽象的な)手順:

    1. マイクロペイメント・チャネルを開く処理を行う 2. 送金トランザクションを作成し相手に渡す 3. 追加の送金が必要になったら、2. で作ったトランザクションを適宜変更し、相手にト ランザクションを送り直す 4. 終わったらMicropayment Channelを閉じる処理を行う 以降のスライドでは、Aさん⇨Bさんへ送金する場合のやり方を解説します。
  28. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 M.P.チャネル ー 開通処理 Aさん Bさん 1BTC 1BTC A&Bの

    マルチシグ ブロードキャスト 1BTC A&Bの マルチシグ 1BTC Aの アドレス Micropayment Channel 開通トランザクション 返金用(refund) トランザクション 電子署名添付 LockTime = 一週間 Aは、Bの署名済み返金用トランザク ションを受け取ってからM.P.チャン ネルの開通トランザクションをブロー ドキャストする。 (すぐに送ってしまうと、Bが突然い なくなった場合に共有ウォレットのコ インが誰にも取り出せなくなってしま うため) ⇨M.P.チャンネルの開通処理完了 Bが音信不通になった 場合に備えて保管
  29. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 M.P.チャネル ー 初期支払 Aさん Bさん 1BTC A&Bの マルチシグ

    0.1BTC Bへ Bへ0.1BTC支払う トランザクション 0.9BTC Aへ 電子署名添付 ブロードキャストせずに保管 このようにすることで、Bはトランザクションをブロード キャストすることでいつでも0.1BTCを手に入れることが できるため、実質的に「0.1BTCを受け取った」ことに なっている。 ただし、次の支払いを受け付けられるように、受け取っ たトランザクションはブロードキャストせずに保管してお く。
  30. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 M.P.チャネル ー 追加支払 追加で0.1BTCを支払う(合計支払額:0.2BTC)には…… Aさん Bさん 1BTC A&Bの

    マルチシグ 0.2BTC Bへ Bへ追加で0.1BTC (合計:0.2BTC)支払う トランザクション 0.8BTC Aへ 電子署名添付 ブロードキャストせずに保管 追加の0.1BTCの支払いは、前に支払った0.1BTCの支払いと合算 して、0.2BTCの支払いトランザクションに置き換えることで実現す る。 以前受け取ったトランザクションは、Bにとっては都合が悪い(少ない 額しかもらえない)ものなので、破棄してもBは損しないため安全に 破棄できる。 1BTC A&Bの マルチシグ 0.1BTC Bへ Bへ0.1BTC支払う トランザクション 0.9BTC Aへ 前のスライドで受け 取ったトランザクショ ンはこの時点で破棄 してもよい
  31. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 M.P.チャネル ー チャネル閉鎖 1BTC A&Bの マルチシグ 0.786BTC Bへ

    一番最後に送られた 支払いトランザクション 0.214BTC Aへ Aさん Bさん Bの電子署名を添付し、 ブロードキャスト 一番最後にやりとりされた支払いトランザクション に対してBが電子署名を付してブロードキャストを し、Bitcoinネットワーク上にコミットすることで支払 いチャンネルの閉鎖動作を行う。 この時点で返金トランザクションは、「1BTC A&B のマルチシグ」に入っているコインが使用されたた めに無効となる。(破棄してよい) なお、双方向に送金したい場合(BからAに対しても 送金を行いたい場合)には、M.P.チャンネルを両 側に(二つ)開通させればよい。
  32. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 M.P.チャネル ー まとめ メリット: • 検証が早い(トランザクションの正当性のみ チェックすればいいので、一瞬) •

    第三者の信頼を必要としない • 何回も送金を行う場合には、手数料が激安 になる(二回分の手数料で何万回でも送れ る) • 最終的な送金額のみが公開され、途中結果 は秘匿されるため、ある程度プライバシーが 守られる デメリット: • M.P.チャンネルを開いた特定の二者間でし かやり取りできない • はじめにBTCをデポジットしなければならな いため、ある程度の余剰資金が必要 • 受取人もオンラインでなくてはならない • トランザクション展性により、返金トランザク ションが無効化されてしまう可能性がある(こ れは SegWit により解決可能) • 通常の送金と比べると、遥かに複雑
  33. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 Lightning Network ー はじめに マイクロペイメント・チャネルは、支払いチャンネルを開いた二者間のみのやり取りに限定されている。そのた め、違う人に送金する際には、その人ごとに支払いチャンネルを開く必要があり、非効率。そこで支払いチャン ネルをバケツリレー的にいくつも経由することで、どこかを経由して支払いチャンネルが繋がってさえいれば送 金ができるプロトコル「

    Lightning Network」が発明された。 Lightning Networkの一つの利点として、ブロックチェインのデータ量を大幅に削減することができることがあげ られる。これにより、現在問題になっているスケーラビリティの問題を解決できるのではないか、と言われてい る。従来の方法では支払いを行うたびにトランザクションがブロックチェーン上に書き込まれるが Lightning Network を用いれば、支払いチャンネルの開通・閉鎖トランザクションというたった二つのトランザクションを定 期的に(例えば数カ月に一回)ブロックチェイン上に書き込むだけで、ブロックチェインを利用せずとも支払いを 何回でも行うことができる。 通常の支払い方法 支払いトランザクション Lightning Network ブロックチェーン 支払いごとに毎回ブロック チェーンへトランザクション を書き込む! 支払いチャンネル 送金   を経由して支払い ブロックチェーン 支払いチャンネル の開通・閉鎖時の み書き込み
  34. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 Lightning Network ー 中継支払の問題点 このスライド以降ではLightning Networkの基礎的なアイディアの解説を行います。 より詳しく知りたい方はPoon氏によるプレゼンスライドスライド①・②、さらにより詳しく知 りたい方は論文(現時点で草稿)をご覧ください。

    前のスライドで述べたように、 Lightning Network のキモは、支払 いを第三者を中継して行うこと。し かしながら信頼のできない第三者を 中継する場合には第三者が「持ち 逃げ」してしまう可能性があるので、 持ち逃げされないような対策を講じ る必要がある。 さんを経由して支払うよ〜! 支 払 い チ ャ ン ネ ル 支 払 い チ ャ ン ネ ル 1BTC にBitcoinを支払わず 持ち逃げしてやろう。 フヒヒヒヒ……。 Aさん Bさん Cさん
  35. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 Lightning Network ー アイディア(Hashed Timelock Contract) そこで、中継人に持ち逃げされないように 以下のよう

    な手順を踏む。 1. 受取人は秘密情報 R を用意し、適当なハッ シュ函数を用いてハッシュ値 H = Hash(R) を 計算する。 2. 支払人は、使用時に①Bさんの電子署名と②R の情報の両方が必要なアドレス宛てに送金す る。 3. Bさんは、使用時に①Cさんの電子署名と②R の情報の両方が必要なアドレス宛に送金す る。 4. Cさんは、Bさんから受け取ったトランザクション に自分の電子署名とRの情報を付与したもの をブロードキャスト(実際にはクリアリング)す る。 5. Bさんは、Cさんのブロードキャストしたトランザ クションに含まれるRの情報を用いて、Aさんか ら受け取ったトランザクションをブロードキャス ト(実際にはクリアリング)する。 支 払 い チ ャ ン ネ ル 支 払 い チ ャ ン ネ ル Aさん Cさん Bさん R H H = Hash(R) ①Bの電子署名、②Rの値 が必要なトランザクション H H ①Cの電子署名、②Rの値 が必要なトランザクション 基本的なアイディアはこれだけですが、実際に Bitcoinのscript でこれを表現しようとすると非常に複雑です。。。 具体的には一回支払うごとに 10個以上のオフライントランザク ションを作らないといけません。 ※詳細は論文を参照ください。
  36. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 Lightning Network のメリット・デメリット メリット: • 直接支払いチャンネルを開いていない相手 ともやり取りができる •

    ブロックチェーンへ書き込まなければいけな いデータの減少が期待できる • 銀行のクリアリング・システムのようなものを 無与信下で (trustlessに) 実装できる デメリット: • 手続きが非常に複雑 • バグの温床となる可能性 • トランザクション展性対策が必要 (SegWit 導入待ち) • 常にインターネットに接続し、相互監視をす る必要がある
  37. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 匿名性のメリットとデメリット ▪ メリット ① プライバシーを保てる 匿名性がないと、給料がいくらなのか、何をいつ 買ったのか、といった情報が推測できてしまう可能 性がある

    ②Fungibility(代替可能性)を保てる あるモノが個体差がなく同一数量の別の物にいつ でも交換できる、という性質を持つとき「 Fungibility がある」という。(例: 1グラムの純金は、別の 1グラ ムの純金と本質的に一緒であり交換可能である。) ビットコインではコインがどのように流通していった のかがすべて追跡できるため、例えば自分の持っ ているコインが犯罪行為に使われていたコインだと 後から判明すると、 他人がこのコインを使った支払に応じてくれなく なってしまう可能性がある。 一方で匿名性があれば、どのコインも同等のもの であることが保証されるから、このような問題は起 きにくいと考えられる。 ▪ デメリット 足がつきにくいため犯罪行為に使いやすい。 • 詐欺 • 資金洗浄(マネーロンダリング) • 違法薬物取引 • ランサムウェアの身代金支払 • 脱税
  38. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 匿名化の試み • 撹拌サービス …… Tumbler / Mixer •

    CoinJoin …… DASH (旧 Darkcoin)、SharedCoin(サービス終了?) • リング署名 …… CryptoNote (Monero) • 秘匿 (Confidential) トランザクション • TumbleBit • ゼロ知識証明を利用したもの …… Zerocoin / Zerocash 匿名化を目指したものではないが、(副作用的に)少なからず匿名性が担保できるもの: • Lightning Network • Mimblewimble
  39. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 リング署名 ー 概念的説明 支払人の匿名性を向上させる仕組みとして、リング署名を応用したものがある。 リング署名とは、複数人の署名人のうち、誰が署名したかは分からないが、そのうちの 誰かひとりが作成した署名であることを保証できるアルゴリズム。 通常の電子署名 リング署名

    署名人 電子署名 一対一に対応 電子署名 署名人 (複数) 電子署名作成 誰が署名したかは 分からない! ? 通常、ひとつの電子署名にはひとりの署名者(公開鍵)が対応するため、誰が送金を 行ったのか分かってしまいます。リング署名を使うと、複数の署名者のうち誰が送金した のかを隠匿することができる。
  40. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 リング署名 ー アルゴリズム概要 Fig. 1 リング署名の基本動作。ここで各変数は以下のように 定義されている。 •

    v, x_1, x_2, …:乱数 • g_1, g_2, …:落とし戸函数(公開鍵暗号) • E_k:自明でない双方向函数(共有鍵暗号) x_i→y_iの計算は世界中の誰でもできるが、逆の計算 (y_i→x_i)はg_iの秘密鍵を知る署名者のみ可能。 g_1, …の秘密鍵をひとつも知らないと、最終的に得ら れるzはランダムとなってしまう。 Fig. 2 g_iのうち、少なくともひとつの秘密鍵を知る署 名者は、x_2の値を適切にいじることで v = z と でき、一連の鎖的な処理を閉じて「リングを作 る」ことができる。 ⇨電子署名の作成に対応
  41. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 リング署名 ー 暗号通貨への応用 匿名性を向上させることを目的としリング署名を利用した暗号通貨としてのアルゴリズム が CryptoNote により提案されている。CryptoNote を採用する

    Monero, DarkNote, Bytecoin 等により実装。 入力1 出力1 tx #1 入力2 出力2 tx #2 入力3 出力3 tx #3 入力4 出力4 tx #4 リング署名作成 匿名送金を行うには、ネットワー ク上のトランザクションからランダ ムに出力を N 個(図の場合には3 個)選び出し、それと自分が使用 する出力を合わせて N+1 人のリ ング署名を作成する。 こうすることで、N+1人のうちだれ がこのコインを送ったのか分から なくすることができる。
  42. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 秘匿トランザクション ー はじめに 送金額の匿名性を向上させるひとつの方策として、秘 匿トランザクション(Confidential Transaction) というも のがあります。

    勝手にコインが増やされてしまわないよう、トランザク ションの入金額(Input)と出力額(Output)に不正がない かチェックしなければなりません。 Bitcoinではトランザクションに入力と出力の金額があら わに書かれているため、これを使ってチェックしていま す。 しかしながら、「入力額の合計 = 出力額の合計」だけを チェックすればいいことに注目すると、やり取りする金 額があらわに書かれていなくても不正チェックができま す! Input Output 1BTC 1BTC 1BTC 1.8BTC 1.2BTC ←いくら送ったかバ レてしまう。 入力の合計額と 出力の合計額が 等しいかチェック→ 1BTC + 1BTC + 1BTC || 3BTC || 3BTC || 1.8BTC + 1.2BTC ? ←この部分だけ  チェックできればよい
  43. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 秘匿トランザクション ー 基本アイディア 問題:「a + b = c」であることを、a,

    b, c の値を知らせることなく、第三者が検証できるよう にするには? 一見すると無理ぽですが、実は離散対数問題の性質をうまく利用す ることで実現可能です。 ここではビットコイナーに親しみ深い (?)楕円曲線暗号(ベースポイント G)を用いて説明します。 まず、  a + b ≡ c ⇔ (a+b) G = c G ⇔ aG + bG = cG が成り立ちます。 従って「a+b=c」を示したいのであれば、代わりに aG, bG, cG の値を 提示し、「aG + bG = cG」であることを示せれば(ほぼ)十分であるこ とが分かります。 ここで楕円曲線における離散対数問題の困難性を思い出すと、 aG, bG, cGの値から a, b, c を導き出すことは非常に難しいですから、も との入出力額 a, b, c の情報は守られることが分かります。 “≡” は考える楕円曲線の持つ位数を 法として合同、という意味 a + b = c aG + bG = cG 変 換 も と の 値 の 復 元 は 不 可 能 なお、いくつかセキュリティ上・実装上の問題がありますので、このよう な単純なやり方では NGです。 何が問題なのか、どうすれば解決できるのかといった詳細については Gregory Maxwell 氏の公開しているノート を参照ください。
  44. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 TumbleBit Mixing や Tumbler では、中央管理者がコインを持ち逃げしたり、参加者の情報を集め ることで匿名性を破ることができてしまう。こうした問題点を解決する仕組みが 「TumbleBit」である。 中央管理者「Tumbler」を通じて

    Alice から Bob に 1BTC を送金することを考える。大まかな処理の流れは 以下の通り。 1. Tumbler から Bob 宛の 1BTC 分の出金トランザ クション tx を作り、Tumbler のみが知る鍵で暗号 化 (Enc(tx)) し Bob へ渡す 2. Bob は Enc(tx) が Bob のものであるとステップ 3. で Tumbler に知られないようにスクランブル処理 (Scr(Enc(tx))) を施し Alice に渡す 3. Alice は Tumbler に 1BTC を支払うことで暗号化 を解除 (Scr(tx)) してもらい、結果を Bob へ渡す 4. Bob はスクランブルを解除 (tx) し、出金トランザク ションをネットワークへブロードキャストする
  45. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 完全な匿名性を目指して これまでに取り上げた方式の匿名性はどれも、そのシステムを利用する際に参加した人 数に依存している。そのため、「その時点で匿名化システムに参加した人のいずれかで ある」といった情報が漏れてしまい、完全な匿名性を実現できているとは言えない。(例 :TumbleBit では、同じ

    Tumbler を利用したユーザのいずれかのコインであることが分 かってしまう) 単純に参加人数を増やせば匿名性は強固にできるが、トランザクションサイズが増大し てしまいスケーラビリティが失われるなどのデメリットがどの方式にも存在する。 ▶ ゼロ知識証明の最新の研究結果を利用することで、スケーラビリティを保ちながら完 全な匿名性を実現できる方式が提案された。
  46. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 完全匿名コイン • Zerocoin [1] ◦ コミットメントやゼロ知識証明、アキュムレータといった暗号理論の道具を組み合わせることで完全

    な匿名性を目指したプロトコル • ZCoin ◦ Zerocoin の実装。2016年9月28日正式ローンチ • Zerocash [2] ◦ zk-SNARK と呼ばれる新しい暗号手法 (〜2010年) により、Zerocoin の様々な課題を解決 • Zcash [3] ◦ Zerocash の実装。2016年10月28日正式ローンチ ZCoin の GUI クライアント
  47. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 直感的説明/前提条件 • 全世界で共有されている巨大な掲示板と、巨大な貯金箱がある • 取り扱う通貨は1万円札(以降「諭吉さん」)のみ •

    二種類のコインが存在する ◦ 通常コイン …… 普通のビットコインと全く同じ。匿名性は限定的 ◦ 匿名コイン …… 貯金箱に入っているコイン。完全匿名 • 通常コインと匿名コインの相互変換 ◦ Mint(通常⇨匿名):諭吉さんを貯金箱に入れ、その記録を掲示板に張り付ける ◦ Pour※1(匿名⇨通常):Mint した記録をみんなに見せることで、諭吉さんを回収する 全世界で公開・相互監視 Mint Pour ※1 「Pour」は Zerocash でのみ利用さ れている用語(Zerocoin では「Spend」) ですが、ここでは一貫して「 Pour」というこ とにします。 通常コイン 匿名コイン
  48. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 直感的説明/Mint(匿名コインの「鋳造」) 後で取り出す際の証明書を作りつつ、諭吉さんを貯金箱に突っ込む方法 1. 「シリアル番号 sn」および「秘密情報 r」の二つの数字をランダムに選ぶ

    2. sn と r の値を書いたカードを、中身の見えない封筒に開封できないように入れ、掲 示板に貼り付ける 3. 諭吉さん一枚を貯金箱の中に入れる sn = 211542 r = 427925 2. 封筒を掲示板に貼り付ける 3. 諭吉さんを貯金箱の中に入れる 《Mint》
  49. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 直感的説明/Pour(匿名コインを通常コインへ「注ぎ入れる」) 貯金箱に入れた諭吉さんを取り戻すためには、まず以下の二つのデータをネットワーク 参加者(ノード)全員に知らせる 1. シリアル番号 sn

    2. 以下の内容を証明するデータ (Zerocoin: zk-SoK, Zerocash, zk-SNARK) ◦ 掲示板に張られている封筒のうち、どれかひとつの中身には sn が書かれており、そのカードに一 緒に書かれている r の値を知っていること 参加者全員は 1. のシリアル番号が二重に使われていないこと、2. のデータが正しいこ とを確認する。OK であれば諭吉さんを(ランダムに)一枚だけ取り出すことができる。 ※NG の場合には、取り出そうとすると全参加者に阻止される。
  50. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー 直感的説明/Pour イメージ図 ・シリアル番号 sn ・「掲示板に張られている封筒のう ち、どれかひとつの中身には

    sn が 書かれており、そのカードに一緒に書 かれている r の値を知っていること」 の証明 ネットワーク参加者(ノード) ① シリアル番号と証明書を作成 し、これをネットワーク参加者全 員に提示する ② ネットワーク参加者は、アリスから提示され たシリアル番号がすでに使用されていないこと (二重支払の確認)および、証明書が正当であ ることを掲示板に張られている封筒の一覧と照 らしあわせて確認する ③ シリアル番号と証明が正当であ れば、貯金箱の中にある諭吉さん を一枚だけ取り出すことができる (正当でない場合には、全ネット ワーク参加者から阻止される) 《Pour》
  51. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー Zerocoin と Zerocash の違い 両者ともベースとなるアイディアは前述の通りだが、「封筒を張った証明」の作り方に主 な違いがある

    • Zerocoin …… zk-SoK(+ アキュムレータ) ◦ zero-knowledge Signature of Knowledge ◦ ゼロ知識による知識の署名 • Zerocash …… zk-SNARK ◦ zero-knowledge Succinct Non-interactive ARgument of Knowledge ◦ ゼロ知識による簡易的な非対話的知識主張
  52. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ゼロ知識証明 ー Zerocoin と Zerocash 比較表 Bitcoin(参考) Zerocoin

    Zerocash 証明/署名方式 ECDSA zk-SoK(+アキュムレータ) zk-SNARK 証明/署名サイズ 〜100 バイト 40,000 〜 50,000 バイト 300 〜 1,000 バイト Mint 処理時間※1 極めて高速(〜0.1ms) ※電子署名作成時間 高速(〜800ms) 極めて高速(〜0.02ms) Pour 処理時間※1 高速(〜500ms) 極めて低速(〜2分) 検証時間※1 極めて高速(〜0.1ms) 低速(〜500ms)※2 高速(〜5ms) 匿名性 擬似的な匿名性 完全な匿名性 完全な匿名性 送金額面 任意の金額 固定額 任意の金額 ※1 …… Bitcoin の値は libsecp256k1 の手元のマシンのベンチマーク結果、 Zerocoin/Zerocash の値は論文掲載の値による ※2 …… Mint, Pour 処理時間と一緒だが、検証はすべてのノードが行う必要があり、システム全体のパフォーマンスを大きく左右するため、ここでは薄赤色としている
  53. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 その他 ▪ Lightning Network L.N. を用いると送金情報は送金に関わった人(送金者、受領者、中継者)にのみ伝達さ れるため、ある程度の匿名性が担保されると考えられる。銀行送金などの匿名性担保 の仕組みとほぼ一緒。

    ▪ Mimblewimble A ⇨ B ⇨ …… ⇨ Z とコインの受け渡しが行われた場合、必要なのは「A のコインが最終 的に Z に渡った」という情報だけだが、現在のビットコインの仕組みでは不正を検知する ためには途中経過の情報もすべて取っておく必要があり非効率。そこで複数のトランザ クションを「集約」し、途中経過を省略できる仕組みとして「Mimblewimble」が考えられ た。 途中経過を保持しないため、ある程度の匿名性を担保できると考えられる。
  54. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 ビットコイン PoW の問題点 ビットコインで用いられている PoW アルゴリズムは SHA256(d) を用いたハッシュキャッ

    シュ。これにはいくつか問題点が指摘されています。 • 意味のない計算に大量の電気が消費されており、環境に悪い • 専用ハードウェア (ASIC) が作りやすく、寡占化が進みやすい こうした課題を解決するため、いくつもの提案がなされています。
  55. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 意味のある計算を ー Primecoin 結果にあまり意味のないハッシュ関数を計算するのではなく、もっと社会的に意義のあ る計算をしようということで提案されたのが「Primecoin」。 これは Cunningham Chain

    と呼ばれる、ある数学的な性質※1を満たす素数列を見つけ ることを PoW アルゴリズムとしたコイン。 ※1 …… 素数列 p 1 , p 2 , …, p n が p i+1 = 2p i + 1 を満たすとき、この素数列を Cunningham Chain と呼ぶ。 実際に、数多くのワールドレコードを見つけ出しています: https://en.wikipedia.org/wiki/Cunningham_chain ただ、Cunningham Chain は数学的にそこまで重要視されているものではないため、あ まり流行ってはいないようです……。
  56. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 消費電力を抑える ー Proof of Stake (PoS) 「CPU一個につき、一票」とすると、どうしても CPU

    に何らかの計算をさせないといけな くなるため、代わりに「コイン一枚※1につき一票」としよう、というのが Proof of Stake (PoS) です。ここで stake はステーキ (steak) ではなく、「掛け金」を意味する英単語 です。 世界初の実装として「Peercoin」と呼ばれる暗号通貨が開発されました。 ただし、以下にあげるようなデメリットがあるため、最近はこれを更に改良したものが使 われることが多いです。 • 51%アタックを起こしやすい • コイン保有率(資本)の寡占化が進みやすい • ブロックチェーンが分岐しやすい ※1 …… 実際には、コインの枚数に、最後にコインが利用された時刻からの経過時間を掛け算した「コインエイジ」一単位につき一 票を与える、という仕組みを採用しています。
  57. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 PoS の改良版 ー Proof of Importance (PoI) 単純に資本力に比例した投票権を与えるのではなく、より経済的に重要な位置を占める

    ユーザに投票権を与えることでより「公平な」システムを目指したもの。NEM で採用され た。 Google Pagerank に似たアルゴリズムを採用することで、各ユーザの「経済的重要度 (Importance)」を定量的に計算し、これを元に投票権を割り当てている。 ただし、以下のようなデメリットもある: • 多くの PoS アルゴリズムと同様、取引所に Importance が集中してしまい、権力を 持ってしまう • アルゴリズムが複雑で開発者の理解やデバッグが困難(※特に、NEM ではソース コードが公開されておらず、詳細の把握は難しい)
  58. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 Equihash 【衝突問題/誕生日問題】 同一のハッシュ値出力を与えるような、異なる二つの入力を求めよ • 計算 ◦ 入力値をいろいろと変えながらハッシュ値を計算していく。過去に計算したハッシュ値のどれかと一 致する入力値が見つかれば終了

    ◦ 「過去に計算したハッシュ値のリスト」を保持する大量のメモリが必要 • 検証 ◦ 与えられた二つの入力値に対し、それぞれハッシュ値を計算し一致することを確認する ◦ メモリはほとんど必要ない 検証に必要なメモリは計算に必要なメモリと比べて圧倒的に少ないという「非対称性」を 利用した、新しい PoW アルゴリズムが考えられた。 ⇨ Equihash
  59. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 基礎知識 暗号通貨の最新技術は、時に最新の数学や暗号学の知識をフル活用します。特に以下 のような知識をつけておくといいでしょう。 • 数学 ◦ 群論(Abel 群の基本的な性質。

    Galois 理論まで突っ込む必要はない) ◦ 楕円曲線論(特に楕円曲線上の有理点のなす群の性質) ◦ 初等整数論(Euclid の互除法, 中国の剰余定理, トーシェント関数, 平方剰余の相互法則) • 情報科学 ◦ 基礎的な情報工学の知識 ▪ 計算複雑性理論 (Turing マシン, オートマトン, Church-Turing のテーゼ, P≠NP) ▪ コンピュータ・アーキテクチャ (半加算器/全加算器/乗除算器, von Neumann 型計算機, CPU キャッシュ, レジスタ, GPUアーキテクチャ) ◦ 暗号理論 ▪ ハッシュ関数 (衝突耐性, 現像計算困難性, スポンジ関数, ランダムオラクル)、共通鍵暗号 (Feistel 構造, DES, AES, 暗号利用モード)、公開鍵暗号 (Diffie-Hellman, ElGamal, RSA)、 電子署名 (DSA, ECDSA, Schnorr)
  60. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 情報源 • Bitcoin Whitepaper ー すべてのはじまり • Bitcoin

    Wiki ー 公式クライアント (Bitcoin Core) の実装に関する技術情報 • Mastering Bitcoin (邦訳) ー 世界初のビットコインの技術書。日本語で読める文献 としてはいまのところ唯一 • Bitcoin Improvement Proposals (BIPs) ー ビットコインに関する新機能の討論 場。ビットコイン版の RFC 的な存在 あとは論文の形で出版されているものがちらほらあります。 • ビットコイン関連論文まとめ
  61. 『ビットコインの仕組みと最新の技術動向』  2017年1月19日 @木更津高専 サービス紹介 ▪ コインギフト https://coingift.jp/ ビットコインやモナーコインで様々なギフト券(Amazon, iTunes, etc.)やビットコインの ハードウェアウォレットなどなどを販売しています。

    とりあえずビットコインを使ってみたい……という方はぜひご利用ください。 ▪ CoinTip https://cointip.jp/ Twitter でコマンドをツイートするだけでビットコインを簡単に送金することができるサー ビスです。 割り勘や立て替え払いの時などに便利です! @hogehoge に 1mBTC を送金する例:@cointip_jp tip @hogehoge 1