ブロックチェーン 2.0
ブロックチェーン連続講義 第 6 回
慶應義塾大学 SFC 研究所 上席所員
斉藤 賢爾
ks91@sfc.wide.ad.jp
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.1/42
今回のテーマ
ブロックチェーン 2.0
ブロックチェーンの弱点を補ったり、デジタル通貨以外に応用
するための多様な技術についての解説です
存在証明、カラードコイン/オープンアセッツ、Proof of
Stake、サイドチェーン、ビットコインブロックチェーンの
拡張や応用事例など、それぞれの技術のもつ可能性と限界に
ついて解説します
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.2/42
ブロックチェーン 2.0
1. ビットコインブロックチェーンの応用
2. ビットコインブロックチェーンの拡張
3. ブロックチェーンの拡張技術
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.3/42
1. ビットコインブロックチェーン
の応用
Abra – 送金界の Uber – as is 応用事例
Proof of Existence – 存在証明 – 用途外応用事例
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.4/42
Abra
送金界の Uber
https://www.goabra.com
近所の個人や店舗等を利用して現金を入出金
Abra は送金業だが、自分ではお金を預からない
cf. Uber はタクシー業だが、自分では車両を持たない
cf. Airbnb はホテル業だが、自分では宿泊施設を持たない
システム内での送金は無料
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.5/42
Abra とは
P2P 送金ネットワーク
モバイルアプリに入金
(テラーまたはデビットカード経由)
アプリから送金 (無料)
テラー (teller) から出金
テラー → 人間 ATM → すなわち ATM
誰もが金銭出納係になれる
ビットコインをバックエンドとして利用
BTC に交換して送金
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.6/42
手数料
Abra はテラーが大体 1.5% の手数料を設定すること
を推奨
Abra は取引当たり 0.25% の手数料を設定
テラーが手数料を取らなければ、Abra も取らない
(by CEO)
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.7/42
バックエンド
BTC を移転 (USD 価格を 3 日間固定)
ヘッジコストは Abra の手数料に含まれる
固定価格失効に関する UI は将来整備 (昨秋の時点)
ヘッジコントラクトは当初はサーバに格納
スマートコントラクトに移行
“Don’t lose your phone!” (秘密鍵の在処は?)
Abra はユーザのお金を預からない
マルチシグは検討したが最初のバージョンでは
使っていない
本来、カラードコインで実装できるという印象
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.8/42
Proof of Existence (存在証明)
個人が開設してしまった公証サービス
https://proofofexistence.com
ある時点で文書が存在していたことを証明
文書自体を公開することなく所持していることを証明
改ざんがあれば検出
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.9/42
Proof of Existence (存在証明)
指定された文書のダイジェストをビットコイン
ブロックチェーンに埋め込む (出力スクリプト部分に)
OP_RETURN の後ろに
OP_RETURN = その時点でスクリプト実行を失敗と見なす
⇒ 誰も受け取れない宛先 (burn = 消 (焼) 失) として利用される
0x444f4350524f4f46 (‘DOCPROOF’) に続いて
文書の SHA-256 ダイジェストを埋め込む
Bitcoin blockchain explorer 等で探してみてください
毎日のように利用されています
手数料は 5 mBTC (0.005 BTC)
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.10/42
2. ビットコインブロックチェーン
の拡張
カラードコインの概念
オープンアセッツ
Segregated Witness
拡張のための手続き
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.11/42
カラードコインの概念
ビットコインブロックチェーンで BTC 以外の「量」を
取り扱う
次のようなことに応用可能
独自/既存の通貨、証券、スマートプロパティ、. . .
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.12/42
カラードコイン (Colored Coins)
ビットコインのブロックチェーンにビットコイン以外の状態遷移を
載せる
「量」に BTC 以外の意味を持たせる ← 元々はこういう発想
図は過去に検討された設計
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.13/42
異なるカラードコイン実現方式
EPOBC
前頁の図の方式の延長上にある
オープンアセッツ (Open Assets)
OP_RETURN のみの活用にもとづく方式
両者に互換性はない
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.14/42
オープンアセッツ
Open Assets Protocol (OAP)
ビットコインブロックチェーンの上で任意の「量」の
体系を取り扱えるようにするハック
(ハック = とりあえずの解法)
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.15/42
ID と量
アセット ID (asset ID)
1. 秘密鍵を生成する
2. 対応する公開鍵ダイジェストに向けた出力スクリプトを作る
アセット発行取引の最初の入力で参照する
3. 当該スクリプトの 160 ビットダイジェストを得る
= アセット ID (アセットを互いと区別するための識別子)
4. base58check 形式では ‘A’ から始まる
(バージョンバイト = 23)
アセット量 (asset quantity)
当該アセットが何単位あるか
BTC の量とは独立
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.16/42
マーカー出力
OP_RETURN に続けて以下のペイロードを PUSH
項目 意味 サイズ
マーカー 0x4f41 (‘OA’) = オープンアセッツ 2 バイト
バージョン 現在は 0x0100 2 バイト
アセット量の数 可変長整数 1∼9 バイト
アセット量リスト LEB128 形式符号無し整数の列 可変長
メタデータ長 可変長整数 1∼9 バイト
メタデータ 空でもよい 可変長
マーカー出力の手前の出力はアセットの発行
マーカー出力より後ろの出力はアセットの移転
いずれも対応するアセット量がゼロでない限り
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.17/42
オープンアセッツのデータ構造
赤い部分がオープンアセッツプロトコルを通して見える世界
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.18/42
Segregated Witness
ビットコインブロックチェーンで署名データを
取引データ本体から分離するハック
(ハック = とりあえずの解法)
展性 (malleability) を根絶できる
データ転送を効率化したりデータサイズを縮小できる
必要がなければ署名や公開鍵のデータを転送しない
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.19/42
取引のデータ構造
入力スクリプトを取りやめる
その代わりに、入力における証明 (witness) の方法をパターン化
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.20/42
コミットメント
ブロックのデータに対する新しいルール
生成取引の出力スクリプトにて、
OP_RETURN に続けて以下のペイロードを PUSH
項目 意味 サイズ
ヘッダー 0xaa21a9ed 4 バイト
証明 (witness) ルート 二重 SHA-256 値 32 バイト
ただし証明ルートは、拡張された取引データ全体の
ダイジェストについて、取引の Merkle ルートと同様
に計算
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.21/42
証明プログラム (1)
P2WPKH (version 0) (pay-to-(witnessed)-public-key-hash)
witness (証明): < 署名 > < 公開鍵 >
scriptSig (入力スクリプト): 空
scriptPubKey (出力スクリプト) 0 <20-byte ダイジェスト >
20-byte ダイジェストで指定された公開鍵への送金
証明を < 署名 > < 公開鍵 > CHECKSIG と解釈
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.22/42
証明プログラム (2)
P2WSH (version 0) (pay-to-(witnessed)-script-hash)
witness: < 署名 1 > <1 < 公開鍵 1 > < 公開鍵 2 > 2 CHECKMULTISIG>
scriptSig: 空
scriptPubKey 0 <32-byte ダイジェスト >
32-byte ダイジェストで指定されたスクリプトを処理
この例では 1-out-of-2 マルチシグの確認
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.23/42
拡張のための手続き
ビットコインブロックチェーンの技術を更新するには?
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.24/42
BIP (Bitcoin Improvement Proposal)
提案文書 兼 仕様書
ex. BIP 1 : BIP Purposes and Guidelines
https://github.com/bitcoin/bips/blob/master/bip-0001.mediawiki
ex. BIP 141 : Segregated Witness (Consensus
layer)
TCP/IP における RFC や XMPP における XEP と
同様
異なるのは、現場でテストされずディプロイ
されうること
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.25/42
3. ブロックチェーンの拡張技術
Proof of Stake (持ち分証明)
サイドチェーン
信頼できるタイムスタンプのための試案
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.26/42
Proof of Stake (持ち分証明)
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.27/42
Proof of Stake とは?
ブロックを生成できる確率が、当該コインの持ち分の
多さに応じて上昇する
次の利点をもつと言われる
エネルギー消費が低い (無視できる)
集約がより困難 (コインの過半数を所有できるか)
ピアコインなどで採用される
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.28/42
Proof of Stake の一般式
Hn(PD + id + t + . . .) ≤
2n × balance
d
Hn : n ビット値を出力する暗号学的ハッシュ関数
(ex. SHA-256 (n = 256))
PD : 直前のブロックのダイジェスト
id : アカウントの識別子 (ex. 公開鍵のダイジェスト)
t : 時刻 (ex. UNIX 時刻 (秒))
balance : 当該アカウントの残高
d : 難易度 (ex. コインの総量)
ダイジェストを用いる POW の形式で表される
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.29/42
Proof of Stake の 3つの問題
1. コインの溜め込み
2. “Nothing at Stake”
短期的問題
長期的問題
3. 低コスト 51% 攻撃
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.30/42
コインの溜め込み
持ち分が多い方が有利なので、コインは溜め込まれ、
使われない傾向が生じる
貨幣メディアとしての基本機能が阻害される
対策 : Proof of Stake Velocity
古いコインの持ち分評価を下げる
Reddcoin などで採用される
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.31/42
Nothing at Stake - 短期的問題
事故または故意にチェインが分岐した場合、参加者には事態を収拾
する動機がない
何も賭けていない
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.32/42
Nothing at Stake - 長期的問題
システムを開始した者は何度でも全体をやり直せる
ジェネシスブロックの時点で持ち分は 100%
その他の参加者も、持ち分さえあればそこからやり直せる
素の Proof of Stake では偽造を抑止できない
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.33/42
低コスト 51% 攻撃
コインの過半数を取得する意思と、そのための十分な
資金の証拠を表明する
すると、システムの正常な維持が期待できないと予想
されるため、コインの価格が急落する
そこでコインを買い占める
原理的には、ほとんどコストを払わずにコインの過半
数を入手できる
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.34/42
サイドチェーン
ポリシーの異なるチェーンを併用できるとされるが . . .
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.35/42
サイドチェーン技術とその問題
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.36/42
ブロックチェーンにおけるトークン
希ではあるが、後戻りの可能性をもつ
サイドチェーンでは、後戻りがチェーンを跨ぐ危険性がある
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.37/42
サイドチェーンの無意味性
信用が存在しないことを前提
→ ある取引列の終端が確定できない
確定できるのであればメインチェーンに依拠する理由
はない
⇒ サイドチェーンを採用する理由は無い
新しい発見ではなく、サイドチェーンの論文に書かれ
ている記述から金融への応用可能性についてもたらさ
れる帰結
A. Back, et. al., “Enabling Blockchain Innovations with
Pegged Sidechains”, 2014
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.38/42
信頼できるタイムスタンプの
ための試案
普通の意味での分散タイムスタンプサーバの実現に
向けて
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.39/42
課題
一般にブロックのタイムスタンプは信用できない
(何重かの意味で)
1. そもそも取引の時刻を表さない
2. マイニング過程で操作されうる
時刻を進めることで異なるダイジェストを得られる
取引の発生時刻や確定 (しないけど) 時刻を取り扱うには?
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.40/42
解決方法の例
取引データ内にタイムスタンプを格納する
これも自己申告となる
ビットコインブロックチェーンであれば、
例によって OP_RETURN が利用可能
時刻サーバによるデジタル署名を施す
サーバを使うだって?!
ビットコインではそもそも DNS を用いている
ネームサーバ群をボランティアが運用している
⇒ 同じことでは?
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.41/42
ご質問や議論を
ブロックチェーン連続講義 第 6 回「ブロックチェーン 2.0」 — 2016-04-01 – p.42/42

ブロックチェーン連続講義 第6回 ブロックチェーン 2.0