SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Copyright ©2017 HAW International Inc. all rights reserved.
暗号通貨読書会#14
Confidential Transaction
2017 / 12 / 19
株式会社ハウインターナショナル
安土 茂亨
Copyright ©2017 HAW International Inc. all rights reserved.
自己紹介
安土 茂亨 @techmedia_think
福岡で主にRubyでBlockchain関連のプロダクトの開発や
PoC、大学との共同研究とか
● openassets-ruby
https://github.com/haw-itn/openassets-ruby
● bitcoin-rubyへのsegwit実装
● Bech32のrubyライブラリ
https://github.com/azuchi/bech32rb
● bitcoinrb
https://github.com/haw-itn/bitcoinrb
● ブログ
http://techmedia-think.hatenablog.com/
● ブロックチェーン・プログラミング 仮想通貨入門 執筆
https://www.amazon.co.jp/dp/4061538314/
Copyright ©2017 HAW International Inc. all rights reserved.
Confidential Transaction
Greg Maxwellによって発表された、Bitcoinの送金量を秘匿するための仕組み
https://people.xiph.org/~greg/confidential_values.txt
オリジナルのアイディアはBitcointalkでのAdam Backのポスト
https://bitcointalk.org/index.php?topic=305791.0
ブロックチェーン上には個人情報は記載されないが、外的要因でアドレスと個人が結びつくと
アドレス間の送金履歴などから、誰がいくら誰に支払いをしていたか分かってしまうため、その
プライバシーを強化するためのプロトコル。
※トランザクションの発生やアドレス(scriptPubkey)は通常のBitcoinと同様記載され、秘匿さ
れるのはあくまで量だけ。
● BlockstreamのサイドチェーンElementsで実装
https://github.com/ElementsProject/elements
Copyright ©2017 HAW International Inc. all rights reserved.
Pedersen Commitment
1991年にPedersenによって提案された、離散対数を利用した秘密分散の仕組み
https://www.cs.cornell.edu/courses/cs754/2001fa/129.PDF
● シンプルなcommitment
commitment = SHA-256(blinding_factor || data)
● commitmentの加算
C(BF1, data1) + C(BF2, data2) == C(BF1 + BF2, data1 + data2)
C(BF1, data1) − C(BF1, data1) == 0
data1〜3={1, 1, 2}、BF1〜BF3={5, 10, 15}の場合
C(BF1, data1) + C(BF2, data2) - C(BF3, data3) == 0
C(1 + 1, 5 + 10) − C(2, 15) == 0
Copyright ©2017 HAW International Inc. all rights reserved.
楕円曲線を利用したPedersen Commitment
● 楕円曲線暗号の秘密鍵(x)と公開鍵(Pub)
Pub = xG (※Gは楕円曲線のベースグループ)
● 楕円曲線の準同型の加法性
Pub1 + Pub2 = (x1 + x2 (mod n))G
※この性質を利用したのがBIP-32のHDウォレット
● 楕円曲線を利用したcommitment
commitment = xG + aH
※ xは秘密のblinding factor, a はコミットするコインの量
HはGとは異なるベースグループでGから計算する
H = to_point(SHA256(ENCODE(G)))
※楕円曲線上の点Hのx座標が(SHA256(ENCODE(G)))
Copyright ©2017 HAW International Inc. all rights reserved.
Hの計算方法
require 'ecdsa'
G = ECDSA::Group::Secp256k1
# 1. Gのジェネレーター(点)の x座標をSHA256し、Hのx座標を算出する
encoded_g = ECDSA::Format::PointOctetString.encode(G.generator)
coordinate_x = Digest::SHA256.hexdigest(encoded_g).to_i(16)
=> 36444060476547731421425013472121489344383018981262552973668657287772036414144
# 2. 算出したx座標からy座標を計算(yは2つ候補がある) y^2 = x^3 + 7
P = G.field.prime
coordinate_y1 = G.field.power((coordinate_x**3 + 7) % P, (P + 1)/4)
=> 93254584761608041185240733468443117438813272608612929589951789286136240436011
coordinate_y2 = coordinate_y1 * -1 % P
=> 22537504475708154238330251540244790414456712057027634449505794721772594235652
# ※Elementsの実装ではcoordinate_y2を使用
# 3. x座標とy座標が分かったので Hの点が分かる。CTの場合Hは固定値なので都度計算する必要はない。
H = ECDSA::Point.new(G, coordinate_x, coordinate_y2)
Copyright ©2017 HAW International Inc. all rights reserved.
Bitcoinのトランザクションに適用
TxOut
value(8 bytes)
scriptPubkey
commitment = xG + aH (32 bytes)
“value”: 0.0050000
“commitment”: “08e6cb1c2118fa492df6782f84d496882ced45b4e759d7cafd507cc2211d217cef”
※ commitment = 楕円曲線の公開鍵
↑はElementsが出力するcommitmentだが通常のECDSAの公開鍵のフォーマットとは異なる。
blinding factor(x)とaを知らない第三者は
コインの量が分からない
Copyright ©2017 HAW International Inc. all rights reserved.
秘匿された量の検証
秘密を知らないユーザーには送金される量は分からないが、そのトランザクションで送金され
ている量が正しい量かは誰もが検証できる必要がある。(インプットの量 − アウトプットの量 = 手数料)
インプットのcommitment − アウトプットのcommitment = 0 になればいい。
※但し、手数料は明示的に設定する必要がある。
楕円曲線の点(x, y)の減算をする場合は、点 (x, -y)を加算する。
問題点
(1 + 1) − (-5 + 7) == 0
も成立し、もともとインプットは 2BTCしかないが、7 BTCのアウトプットが成立(=通貨発行)してしまう。
※ グループGは巡回群なのでオーバーフローさせることでマイナスのような振る舞いをする。
commitmentがマイナスの値でない( 0〜2^64の範囲である)ことを証明する別の仕組みが必要。
(In1 + In2 + In3 + … ) - (Out1 + Out2 + Out3 + … + fee * H) == 0
Copyright ©2017 HAW International Inc. all rights reserved.
Range Proof
commitment(P) = xG + aH
● 前提
Gに加えてHも付加しているため、誰もPの秘密鍵が分からない=誰もこの公開鍵に対
応した署名は作れない。
a = 0の場合、P=xGとなりxを知っているユーザーはPの秘密鍵を知っていることになり、
Pに対応した署名を作成できる。
● a = 1(a != 0)の場合の証明
1. Cを使って新しいcommitment C’ = C - 1H を作る。
2. a=1ならC'の秘密鍵はxで、C'の署名を作ることができる。
3. a != 1なら、誰もC'の署名に必要な秘密鍵はわからないので署名は作れない。
Copyright ©2017 HAW International Inc. all rights reserved.
Range Proof
OR Proofはcommitmentがあるデータ・セットの中のいずれかの値にコミットしたものであるこ
とを証明する仕組み。
C = xG + aH, C’ = C - 1H
リング署名{C, C’}が提供された場合Cは0 か1 どちらかのコミットメントである。
コミットされた値が0..32の範囲にあること証明する場合は以下を用意する。
○ C1(0 or 1),C2(0 or 2),C3(0 or 4),C4(0 or 8),C5(0 or 16)
○ OR Proof
リング署名をさらに効率的にするためボロミアン・リング署名を採用。
https://github.com/Blockstream/borromean_paper/raw/master/borromean_draft_0.01_8c3f9e7.pdf
※ アウトプットが1つだけの場合は、range proofは不要
Copyright ©2017 HAW International Inc. all rights reserved.
量の表現方法と通知
● 量の表現
量は浮動小数点で表現する。(0.0112345 → 112345 × 10^-7)
性能とproofのサイズは仮数部のbit数に比例。
● Blinding Factorと量の通知
送信者はBlinding Factorと量を送信者と受信者のECDHの鍵共有の前提で、量と
blinding factorを暗号化したメッセージをproofにセットすることで相手に通知する。(他に
も任意のメッセージを送るのに利用可)
Copyright ©2017 HAW International Inc. all rights reserved.
ElementsでのBlinding Factorの共有
Blinding factorはコインの受信者が送信者に伝える。
Elementsの場合、commitmentのxGを含むConfidential Addressを相手に伝える。
CTErPjNQRCAK6r3Nd3oARyrNhVRecmn6fuAQ7YJABN7KWQdML5uwPyLE7sLmY6wXVrCCnrCqytNYukyJ
04eb (version bytes)
02f7b3997676d9c9f78630b335a99c383f620a7d4630ad7c2d989838b15346768(confidential key = xG)
aabe7c2cb93edaa3448aa9607ff95849f101d908(公開鍵ハッシュ)
ef4201bd(チェックサム)
Base58デコード
送信者はアドレスのconfidential keyと送るコインの量からcommitmentを作成し、公開鍵
ハッシュからP2PKHのscriptPubkeyを作成して、コインを送金するトランザクションを作る。
※ Blinding Factor(x)を直接渡しているわけではない。
Copyright ©2017 HAW International Inc. all rights reserved.
range proofのサイズ問題とBulletproofs
現在の実装では、2つのアウトプットを持つトランザクションのサイズは5.5 KBほどで、そのう
ちrange proofのサイズは5.3 KBを占める。ブロックサイズ1MBのような制限下では現実的に
採用しづらい。
Bulletproofs: Short Proofs for Confidential Transactions and More
http://web.stanford.edu/~buenz/pubs/bulletproofs.pdf
http://diyhpl.us/wiki/transcripts/scalingbitcoin/stanford-2017/state-of-cryptography/
● range proofのサイズを大幅に削減(4KB→670B: 2/10のサイズ)
範囲のビット長nについて 2 log(n) + 9 の要素で証明が作成でき、対数的なデータ増加になる。
● range proofの集約をサポート(2つのrange proof 8KB→736B : 1/10のサイズ)
単一の証明にO(log(m))の追加要素が必要なだけ(m はコミットメントの数)
署名を集約できるのでアウトプットが多いCTほどrange proofの圧縮効果が高い。
Copyright ©2017 HAW International Inc. all rights reserved.
Bulletproofsの効果
さまざまなrange proofを必要とする仕組みに適用可能
● Confidential Transaction, Confidential Assets
● Monero
https://github.com/b-g-goodell/research-lab/tree/master/source-code/StringCT-jav
a/src/how/monero/hodl/bulletproof
通常のrange proofに比べ90%のスペースの節約と25%の検証の高速化
● Mimblewimble(160GB→17GB)
● Provisoins Protocol(Proof of Solvency:200万ユーザー18GB→62MB)
http://www.jbonneau.com/doc/DBBCB15-CCS-provisions.pdf
● ValueShuffle(CoinJoin + Confidential Transaction)
https://eprint.iacr.org/2017/238.pdf
Copyright ©2017 HAW International Inc. all rights reserved.
Confidential Assets
Confidential Transactionを使ってネイティブのコイン以外に任意のアセットの発行・送付を
するプロトコル。https://blockstream.com/bitcoin17-final41.pdf
各アウトプットにアセットのタイプ識別するasset tagを付与する。
各アウトプットのcommitmentは
commitment = xG + aH
commitmentの構築に使っていた固定値Hをアセットの識別子として置き換える。
aがHコインの量となり、range proofなどはConfidential Transactionと同様に機能する。
Copyright ©2017 HAW International Inc. all rights reserved.
asset tag
● asset tagの構成要素
○ Ricardian Contract
アセットの使用条件や償還ルールを記載したマシンリーダブルなドキュメント
○ Asset Entropy
アセット発行に使用するUTXOとRicardian Contractから生成するエントロピー
● asset tagの導出
1. UTXOのOutPoint(I)とRicardian Contract(C)からエントロピーを計算
E = Hash(Hash(I)||Hash(C))
※ ElementsではIとCのハッシュをリーフにしたマークルツリーのルート
2. エントロピーからasset tagを計算
H(E || 0)
※ H(E || 0) の0は追加発行フラグで、0は追加発行無し、1は追加発行有り。
H(E || 1)が追加発行時のトークンとなり、このトークンを持っているウォレットで同じアセットの追加発行が可
能
3. 計算したasset tagを使ってcommitmentを作成する
Copyright ©2017 HAW International Inc. all rights reserved.
range proof
commitment1 = xG + aH
commitment2 = xG + aI
コインの量aは同じだが、HとI異なるアセットを表現したコミットメント
HとIのアセットについて2つのインプットと4つのアウトプットをもつ場合
● Input: xG + aH、yG + bI
● Output:uG + cH、vG + dI、wG + eH、zG + fI
量の検証は
Out1 + Out2 + Out3 + Out4 - In1 - In2 == 0
(uG + cH) + (vG + dI) + (wG + eH) + (zG + fI) - (xG + aH) - (yG + bI) == 0
(u + v + w + g - x - y)G + (c + e - a)H + (d + f - b)I == 0
CTと同様range proofを付与するが、その際固定のHでなくasset tagを使う。
Copyright ©2017 HAW International Inc. all rights reserved.
asset tagの秘匿
アセットの量だけでなく何のアセットなのかasset tagも秘匿したい場合、asset tagをblinded
asset tagに置き換える。
blinded asset tag(A) = H + rG
※Hはasset tagで、rはランダムなシークレット
このblinded asset tag を使ったcommitmentは、
commitment = xG + aA = xG + a(H+ rG) = (x + ra)G + aH
問題点
● 正しいasset tagであることはどうやったら検証できるか?
● A' = -H + rGのようなマイナスのアセット量を持つblinded asset tagが作れる
Copyright ©2017 HAW International Inc. all rights reserved.
asset surjection proof
トランザクション内のどのインプットがどのアウトプットに対応しているかを秘匿したまま、あるイ
ンプットのasset tagがあるアウトプットのasset tagと同じであることを暗号学的に証明する仕
組み。
asset tag Hにコミットするblinded asset tag A, Bがあるとして、
A - B = (H + aG) - (H + bG) = (a - b)G
秘密鍵 a - bを使ってを署名することができる。
トランザクションのblinded asset tagを持つアウトプットに対して、全てのインプットを引きou1
- in1, out1 - in2, out1 - in3…、これら計算値でリング署名を構成する。
※実際に有効な署名が作れるのはアウトプットとインプットのasset tagが同じ場合のみ
このリング署名をasset surjection proofと呼ぶ。
Copyright ©2017 HAW International Inc. all rights reserved.
soft forkで実装するConfidential Transaction
2016.1.6にFelix Weissが提案 Confidential Transactions as a soft fork (using segwit)
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-January/012194.html
※以降の話は全て↑の提案の話で、実際にこの仕組みが採用されると決まった話ではありません。
● script witnessの後にアウトプット用のwitnessOuts領域を追加
○ CTのアウトプットの量は0(※SFに対応していないノードには 0 satoshiに見える)
○ commitmentとrange proofをwitnessOutsにセット
● 手数料は、誰もが使用可能なアウトプットに明示的にセット(GCTXO)する。
Copyright ©2017 HAW International Inc. all rights reserved.
Blinding Transaction
量が秘匿されていないコインの量を秘匿するトランザクション
● アウトプットのコインの量は0が指定され、そのコインはコインベーストランザク
ションの特殊なアウトプット(GCTXO[coinbase])にロックされる。
● 秘匿化されたコインは全てGCTXOで管理される。
Ins: 全て秘匿されていない通常のUTXOを参照する
Outs:
0..N: 新しい秘匿対象の出力
量: 0
scriptPubkey: `OP_2 <32バイトのハッシュ値>`
witnessOut: `0x{petersen-commitment}> <0x{range-proof}>`
最後の出力:
量: 0
scriptPubkey: `OP_RETURN OP_2 {blinding-fee-amount}`
Fee: 全入力のコインの合計
Copyright ©2017 HAW International Inc. all rights reserved.
Confidential Transaction
量が秘匿されたコインを秘匿したまま送金するトランザクション
● インプット・アウトプット共に全て量は 0(アウトプットは誰もが使用可能なスクリプト)
● commitmentとrage proofが有効なこと
● 最後のアウトプットがマイナーへの手数料
Ins:
prev: CTXO[n]
scriptSig: 空
witnessIn: `<署名> <0x{redeem script}>`
Outs:
0..N: 新しい秘匿対象の出力
量: 0
scriptPubkey: `OP_2 <32バイトのハッシュ値>`
witnessOut: `0x{petersen-commitment}> <0x{range-proof}>`
最後の出力:
量: 0
scriptPubkey: `OP_RETURN OP_2 {confidential-fee-amount}`
Fee: 0
Copyright ©2017 HAW International Inc. all rights reserved.
Unblinding Transaction
量が秘匿されたコインの秘匿を解除するトランザクション
● アウトプットは全てOP_RETURN
● アンブラインドされたコインは Confidential base Transactionの1つめのアウトプットで通常の
UTXOにされる。
Ins:
prev: CTXO[n]
scriptSig: 空
witnessIn: `<署名> <0x{redeem script}>`
Outs:
0..N:
量: 0
scriptPubkey: `OP_RETURN OP_2 {アンブラインドするコインの量} {p2sh-destination}`
witnessOut: 空
最後の出力:
量: 0
scriptPubkey: `OP_RETURN OP_2 {unblinding-fee-amount}`
Fee: 0
Copyright ©2017 HAW International Inc. all rights reserved.
Confidential base Transaction
CTに関するトランザクションが含まれるブロックの最後のトランザクションとして登
録されるトランザクション
● GCTXO[coinbase] : ブロックに含まれる全ての秘匿されたコインの量を持つ
● GCTXO[last_block] : 前のブロックConfidential base Transactionの0番目のアウトプットのコ
イン(前のブロックの秘匿化されたコインからアンブラインドされたコインを引いた量)
● 1番め以降のアウトプットはアンブラインドしたコインの UTXO
Ins:
GCTXO[last_block],
GCTXO[coinbase]
Outs:
0: GCTXO[current_block]
量: {last_block + coinbase - unblindings}
scriptPubkey: `OP_TRUE`
1..N:
量/scriptPubkey: このブロック内のトランザクションでアンブラインドしたコインの量
Copyright ©2017 HAW International Inc. all rights reserved.
Block
トランザクションフロー
Blinding Tx
UTXO
CTXO
秘匿された手数料のアウトプット
手数料=全インプットの合計
Coinbase Tx
GCTXO
Confidential base Tx
GCTXO [ coinbase ]
GCTXO [ last_block ]
GCTXO [ current_block ]
UTXO
Unblinding Tx
CTXO
OP_RETURN アンブラインド量 script
秘匿された手数料のアウトプット
手数料=0
Confidential Tx
CTXO
CTXO
秘匿された手数料のアウトプット
手数料=0
Block
Coinbase Tx
GCTXO
秘匿化されたコインは全てGCTXOが保持する。
Confidential base Tx
GCTXO [ coinbase ]
GCTXO [ last_block ]
GCTXO [ current_block ]
UTXO
前ブロック時点の秘匿されたコインの送料
このブロックで秘匿されたコインの量
マイナーが作成するTxで手数料も徴収

Contenu connexe

Tendances

暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
 
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)MITSUNARI Shigeo
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化MITSUNARI Shigeo
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshareKeisuke Yahata
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がりMITSUNARI Shigeo
 
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明MITSUNARI Shigeo
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解するKenji Urushima
 
技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料Tetsuyuki Oishi
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
NeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicNeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicAkira Tanimoto
 

Tendances (20)

暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advanced
 
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
 
楕円曲線と暗号
楕円曲線と暗号楕円曲線と暗号
楕円曲線と暗号
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshare
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり
 
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解する
 
lsh
lshlsh
lsh
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会9
暗認本読書会9暗認本読書会9
暗認本読書会9
 
技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
NeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_publicNeurIPS'21参加報告 tanimoto_public
NeurIPS'21参加報告 tanimoto_public
 

Plus de shigeyuki azuchi

新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUTshigeyuki azuchi
 
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」shigeyuki azuchi
 
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」shigeyuki azuchi
 
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」shigeyuki azuchi
 
JAWS FESTA 東海道 2016 ブロックチェーンとは何なのか?
JAWS FESTA 東海道 2016   ブロックチェーンとは何なのか?JAWS FESTA 東海道 2016   ブロックチェーンとは何なのか?
JAWS FESTA 東海道 2016 ブロックチェーンとは何なのか?shigeyuki azuchi
 
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクトe-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクトshigeyuki azuchi
 
Open Assetsを利用したP2P型の投票システムとエクスプローラ
Open Assetsを利用したP2P型の投票システムとエクスプローラOpen Assetsを利用したP2P型の投票システムとエクスプローラ
Open Assetsを利用したP2P型の投票システムとエクスプローラshigeyuki azuchi
 
neo4jを使ったブロックチェーンデータの解析
neo4jを使ったブロックチェーンデータの解析neo4jを使ったブロックチェーンデータの解析
neo4jを使ったブロックチェーンデータの解析shigeyuki azuchi
 
Serverlessでサイト監視
Serverlessでサイト監視Serverlessでサイト監視
Serverlessでサイト監視shigeyuki azuchi
 
Jenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCIJenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCIshigeyuki azuchi
 
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)shigeyuki azuchi
 

Plus de shigeyuki azuchi (12)

新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
 
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」
福岡ブロックチェーンエコノミー勉強会In東京「カラードコインの作り方」
 
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」
福岡ブロックチェーンエコノミー勉強会Vol.3「Segregated Witness」
 
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」
福岡ブロックチェーンエコノミー「ブロックチェーンのコンセンサス形成」
 
JAWS FESTA 東海道 2016 ブロックチェーンとは何なのか?
JAWS FESTA 東海道 2016   ブロックチェーンとは何なのか?JAWS FESTA 東海道 2016   ブロックチェーンとは何なのか?
JAWS FESTA 東海道 2016 ブロックチェーンとは何なのか?
 
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクトe-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト
e-ZUKA Tech Night in 博多! -fin tech特集- Bitcoinのブロックチェーンでできるコントラクト
 
Open Assetsを利用したP2P型の投票システムとエクスプローラ
Open Assetsを利用したP2P型の投票システムとエクスプローラOpen Assetsを利用したP2P型の投票システムとエクスプローラ
Open Assetsを利用したP2P型の投票システムとエクスプローラ
 
neo4jを使ったブロックチェーンデータの解析
neo4jを使ったブロックチェーンデータの解析neo4jを使ったブロックチェーンデータの解析
neo4jを使ったブロックチェーンデータの解析
 
Serverlessでサイト監視
Serverlessでサイト監視Serverlessでサイト監視
Serverlessでサイト監視
 
Jenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCIJenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCI
 
Openassets ruby
Openassets rubyOpenassets ruby
Openassets ruby
 
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)
オンプレ環境と連携するハイブリッドクラウド活用事例 (2014.8.8 AWS Japan Tour 2014 福岡)
 

【暗号通貨輪読会#14】confidential transaction

  • 1. Copyright ©2017 HAW International Inc. all rights reserved. 暗号通貨読書会#14 Confidential Transaction 2017 / 12 / 19 株式会社ハウインターナショナル 安土 茂亨
  • 2. Copyright ©2017 HAW International Inc. all rights reserved. 自己紹介 安土 茂亨 @techmedia_think 福岡で主にRubyでBlockchain関連のプロダクトの開発や PoC、大学との共同研究とか ● openassets-ruby https://github.com/haw-itn/openassets-ruby ● bitcoin-rubyへのsegwit実装 ● Bech32のrubyライブラリ https://github.com/azuchi/bech32rb ● bitcoinrb https://github.com/haw-itn/bitcoinrb ● ブログ http://techmedia-think.hatenablog.com/ ● ブロックチェーン・プログラミング 仮想通貨入門 執筆 https://www.amazon.co.jp/dp/4061538314/
  • 3. Copyright ©2017 HAW International Inc. all rights reserved. Confidential Transaction Greg Maxwellによって発表された、Bitcoinの送金量を秘匿するための仕組み https://people.xiph.org/~greg/confidential_values.txt オリジナルのアイディアはBitcointalkでのAdam Backのポスト https://bitcointalk.org/index.php?topic=305791.0 ブロックチェーン上には個人情報は記載されないが、外的要因でアドレスと個人が結びつくと アドレス間の送金履歴などから、誰がいくら誰に支払いをしていたか分かってしまうため、その プライバシーを強化するためのプロトコル。 ※トランザクションの発生やアドレス(scriptPubkey)は通常のBitcoinと同様記載され、秘匿さ れるのはあくまで量だけ。 ● BlockstreamのサイドチェーンElementsで実装 https://github.com/ElementsProject/elements
  • 4. Copyright ©2017 HAW International Inc. all rights reserved. Pedersen Commitment 1991年にPedersenによって提案された、離散対数を利用した秘密分散の仕組み https://www.cs.cornell.edu/courses/cs754/2001fa/129.PDF ● シンプルなcommitment commitment = SHA-256(blinding_factor || data) ● commitmentの加算 C(BF1, data1) + C(BF2, data2) == C(BF1 + BF2, data1 + data2) C(BF1, data1) − C(BF1, data1) == 0 data1〜3={1, 1, 2}、BF1〜BF3={5, 10, 15}の場合 C(BF1, data1) + C(BF2, data2) - C(BF3, data3) == 0 C(1 + 1, 5 + 10) − C(2, 15) == 0
  • 5. Copyright ©2017 HAW International Inc. all rights reserved. 楕円曲線を利用したPedersen Commitment ● 楕円曲線暗号の秘密鍵(x)と公開鍵(Pub) Pub = xG (※Gは楕円曲線のベースグループ) ● 楕円曲線の準同型の加法性 Pub1 + Pub2 = (x1 + x2 (mod n))G ※この性質を利用したのがBIP-32のHDウォレット ● 楕円曲線を利用したcommitment commitment = xG + aH ※ xは秘密のblinding factor, a はコミットするコインの量 HはGとは異なるベースグループでGから計算する H = to_point(SHA256(ENCODE(G))) ※楕円曲線上の点Hのx座標が(SHA256(ENCODE(G)))
  • 6. Copyright ©2017 HAW International Inc. all rights reserved. Hの計算方法 require 'ecdsa' G = ECDSA::Group::Secp256k1 # 1. Gのジェネレーター(点)の x座標をSHA256し、Hのx座標を算出する encoded_g = ECDSA::Format::PointOctetString.encode(G.generator) coordinate_x = Digest::SHA256.hexdigest(encoded_g).to_i(16) => 36444060476547731421425013472121489344383018981262552973668657287772036414144 # 2. 算出したx座標からy座標を計算(yは2つ候補がある) y^2 = x^3 + 7 P = G.field.prime coordinate_y1 = G.field.power((coordinate_x**3 + 7) % P, (P + 1)/4) => 93254584761608041185240733468443117438813272608612929589951789286136240436011 coordinate_y2 = coordinate_y1 * -1 % P => 22537504475708154238330251540244790414456712057027634449505794721772594235652 # ※Elementsの実装ではcoordinate_y2を使用 # 3. x座標とy座標が分かったので Hの点が分かる。CTの場合Hは固定値なので都度計算する必要はない。 H = ECDSA::Point.new(G, coordinate_x, coordinate_y2)
  • 7. Copyright ©2017 HAW International Inc. all rights reserved. Bitcoinのトランザクションに適用 TxOut value(8 bytes) scriptPubkey commitment = xG + aH (32 bytes) “value”: 0.0050000 “commitment”: “08e6cb1c2118fa492df6782f84d496882ced45b4e759d7cafd507cc2211d217cef” ※ commitment = 楕円曲線の公開鍵 ↑はElementsが出力するcommitmentだが通常のECDSAの公開鍵のフォーマットとは異なる。 blinding factor(x)とaを知らない第三者は コインの量が分からない
  • 8. Copyright ©2017 HAW International Inc. all rights reserved. 秘匿された量の検証 秘密を知らないユーザーには送金される量は分からないが、そのトランザクションで送金され ている量が正しい量かは誰もが検証できる必要がある。(インプットの量 − アウトプットの量 = 手数料) インプットのcommitment − アウトプットのcommitment = 0 になればいい。 ※但し、手数料は明示的に設定する必要がある。 楕円曲線の点(x, y)の減算をする場合は、点 (x, -y)を加算する。 問題点 (1 + 1) − (-5 + 7) == 0 も成立し、もともとインプットは 2BTCしかないが、7 BTCのアウトプットが成立(=通貨発行)してしまう。 ※ グループGは巡回群なのでオーバーフローさせることでマイナスのような振る舞いをする。 commitmentがマイナスの値でない( 0〜2^64の範囲である)ことを証明する別の仕組みが必要。 (In1 + In2 + In3 + … ) - (Out1 + Out2 + Out3 + … + fee * H) == 0
  • 9. Copyright ©2017 HAW International Inc. all rights reserved. Range Proof commitment(P) = xG + aH ● 前提 Gに加えてHも付加しているため、誰もPの秘密鍵が分からない=誰もこの公開鍵に対 応した署名は作れない。 a = 0の場合、P=xGとなりxを知っているユーザーはPの秘密鍵を知っていることになり、 Pに対応した署名を作成できる。 ● a = 1(a != 0)の場合の証明 1. Cを使って新しいcommitment C’ = C - 1H を作る。 2. a=1ならC'の秘密鍵はxで、C'の署名を作ることができる。 3. a != 1なら、誰もC'の署名に必要な秘密鍵はわからないので署名は作れない。
  • 10. Copyright ©2017 HAW International Inc. all rights reserved. Range Proof OR Proofはcommitmentがあるデータ・セットの中のいずれかの値にコミットしたものであるこ とを証明する仕組み。 C = xG + aH, C’ = C - 1H リング署名{C, C’}が提供された場合Cは0 か1 どちらかのコミットメントである。 コミットされた値が0..32の範囲にあること証明する場合は以下を用意する。 ○ C1(0 or 1),C2(0 or 2),C3(0 or 4),C4(0 or 8),C5(0 or 16) ○ OR Proof リング署名をさらに効率的にするためボロミアン・リング署名を採用。 https://github.com/Blockstream/borromean_paper/raw/master/borromean_draft_0.01_8c3f9e7.pdf ※ アウトプットが1つだけの場合は、range proofは不要
  • 11. Copyright ©2017 HAW International Inc. all rights reserved. 量の表現方法と通知 ● 量の表現 量は浮動小数点で表現する。(0.0112345 → 112345 × 10^-7) 性能とproofのサイズは仮数部のbit数に比例。 ● Blinding Factorと量の通知 送信者はBlinding Factorと量を送信者と受信者のECDHの鍵共有の前提で、量と blinding factorを暗号化したメッセージをproofにセットすることで相手に通知する。(他に も任意のメッセージを送るのに利用可)
  • 12. Copyright ©2017 HAW International Inc. all rights reserved. ElementsでのBlinding Factorの共有 Blinding factorはコインの受信者が送信者に伝える。 Elementsの場合、commitmentのxGを含むConfidential Addressを相手に伝える。 CTErPjNQRCAK6r3Nd3oARyrNhVRecmn6fuAQ7YJABN7KWQdML5uwPyLE7sLmY6wXVrCCnrCqytNYukyJ 04eb (version bytes) 02f7b3997676d9c9f78630b335a99c383f620a7d4630ad7c2d989838b15346768(confidential key = xG) aabe7c2cb93edaa3448aa9607ff95849f101d908(公開鍵ハッシュ) ef4201bd(チェックサム) Base58デコード 送信者はアドレスのconfidential keyと送るコインの量からcommitmentを作成し、公開鍵 ハッシュからP2PKHのscriptPubkeyを作成して、コインを送金するトランザクションを作る。 ※ Blinding Factor(x)を直接渡しているわけではない。
  • 13. Copyright ©2017 HAW International Inc. all rights reserved. range proofのサイズ問題とBulletproofs 現在の実装では、2つのアウトプットを持つトランザクションのサイズは5.5 KBほどで、そのう ちrange proofのサイズは5.3 KBを占める。ブロックサイズ1MBのような制限下では現実的に 採用しづらい。 Bulletproofs: Short Proofs for Confidential Transactions and More http://web.stanford.edu/~buenz/pubs/bulletproofs.pdf http://diyhpl.us/wiki/transcripts/scalingbitcoin/stanford-2017/state-of-cryptography/ ● range proofのサイズを大幅に削減(4KB→670B: 2/10のサイズ) 範囲のビット長nについて 2 log(n) + 9 の要素で証明が作成でき、対数的なデータ増加になる。 ● range proofの集約をサポート(2つのrange proof 8KB→736B : 1/10のサイズ) 単一の証明にO(log(m))の追加要素が必要なだけ(m はコミットメントの数) 署名を集約できるのでアウトプットが多いCTほどrange proofの圧縮効果が高い。
  • 14. Copyright ©2017 HAW International Inc. all rights reserved. Bulletproofsの効果 さまざまなrange proofを必要とする仕組みに適用可能 ● Confidential Transaction, Confidential Assets ● Monero https://github.com/b-g-goodell/research-lab/tree/master/source-code/StringCT-jav a/src/how/monero/hodl/bulletproof 通常のrange proofに比べ90%のスペースの節約と25%の検証の高速化 ● Mimblewimble(160GB→17GB) ● Provisoins Protocol(Proof of Solvency:200万ユーザー18GB→62MB) http://www.jbonneau.com/doc/DBBCB15-CCS-provisions.pdf ● ValueShuffle(CoinJoin + Confidential Transaction) https://eprint.iacr.org/2017/238.pdf
  • 15. Copyright ©2017 HAW International Inc. all rights reserved. Confidential Assets Confidential Transactionを使ってネイティブのコイン以外に任意のアセットの発行・送付を するプロトコル。https://blockstream.com/bitcoin17-final41.pdf 各アウトプットにアセットのタイプ識別するasset tagを付与する。 各アウトプットのcommitmentは commitment = xG + aH commitmentの構築に使っていた固定値Hをアセットの識別子として置き換える。 aがHコインの量となり、range proofなどはConfidential Transactionと同様に機能する。
  • 16. Copyright ©2017 HAW International Inc. all rights reserved. asset tag ● asset tagの構成要素 ○ Ricardian Contract アセットの使用条件や償還ルールを記載したマシンリーダブルなドキュメント ○ Asset Entropy アセット発行に使用するUTXOとRicardian Contractから生成するエントロピー ● asset tagの導出 1. UTXOのOutPoint(I)とRicardian Contract(C)からエントロピーを計算 E = Hash(Hash(I)||Hash(C)) ※ ElementsではIとCのハッシュをリーフにしたマークルツリーのルート 2. エントロピーからasset tagを計算 H(E || 0) ※ H(E || 0) の0は追加発行フラグで、0は追加発行無し、1は追加発行有り。 H(E || 1)が追加発行時のトークンとなり、このトークンを持っているウォレットで同じアセットの追加発行が可 能 3. 計算したasset tagを使ってcommitmentを作成する
  • 17. Copyright ©2017 HAW International Inc. all rights reserved. range proof commitment1 = xG + aH commitment2 = xG + aI コインの量aは同じだが、HとI異なるアセットを表現したコミットメント HとIのアセットについて2つのインプットと4つのアウトプットをもつ場合 ● Input: xG + aH、yG + bI ● Output:uG + cH、vG + dI、wG + eH、zG + fI 量の検証は Out1 + Out2 + Out3 + Out4 - In1 - In2 == 0 (uG + cH) + (vG + dI) + (wG + eH) + (zG + fI) - (xG + aH) - (yG + bI) == 0 (u + v + w + g - x - y)G + (c + e - a)H + (d + f - b)I == 0 CTと同様range proofを付与するが、その際固定のHでなくasset tagを使う。
  • 18. Copyright ©2017 HAW International Inc. all rights reserved. asset tagの秘匿 アセットの量だけでなく何のアセットなのかasset tagも秘匿したい場合、asset tagをblinded asset tagに置き換える。 blinded asset tag(A) = H + rG ※Hはasset tagで、rはランダムなシークレット このblinded asset tag を使ったcommitmentは、 commitment = xG + aA = xG + a(H+ rG) = (x + ra)G + aH 問題点 ● 正しいasset tagであることはどうやったら検証できるか? ● A' = -H + rGのようなマイナスのアセット量を持つblinded asset tagが作れる
  • 19. Copyright ©2017 HAW International Inc. all rights reserved. asset surjection proof トランザクション内のどのインプットがどのアウトプットに対応しているかを秘匿したまま、あるイ ンプットのasset tagがあるアウトプットのasset tagと同じであることを暗号学的に証明する仕 組み。 asset tag Hにコミットするblinded asset tag A, Bがあるとして、 A - B = (H + aG) - (H + bG) = (a - b)G 秘密鍵 a - bを使ってを署名することができる。 トランザクションのblinded asset tagを持つアウトプットに対して、全てのインプットを引きou1 - in1, out1 - in2, out1 - in3…、これら計算値でリング署名を構成する。 ※実際に有効な署名が作れるのはアウトプットとインプットのasset tagが同じ場合のみ このリング署名をasset surjection proofと呼ぶ。
  • 20. Copyright ©2017 HAW International Inc. all rights reserved. soft forkで実装するConfidential Transaction 2016.1.6にFelix Weissが提案 Confidential Transactions as a soft fork (using segwit) https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-January/012194.html ※以降の話は全て↑の提案の話で、実際にこの仕組みが採用されると決まった話ではありません。 ● script witnessの後にアウトプット用のwitnessOuts領域を追加 ○ CTのアウトプットの量は0(※SFに対応していないノードには 0 satoshiに見える) ○ commitmentとrange proofをwitnessOutsにセット ● 手数料は、誰もが使用可能なアウトプットに明示的にセット(GCTXO)する。
  • 21. Copyright ©2017 HAW International Inc. all rights reserved. Blinding Transaction 量が秘匿されていないコインの量を秘匿するトランザクション ● アウトプットのコインの量は0が指定され、そのコインはコインベーストランザク ションの特殊なアウトプット(GCTXO[coinbase])にロックされる。 ● 秘匿化されたコインは全てGCTXOで管理される。 Ins: 全て秘匿されていない通常のUTXOを参照する Outs: 0..N: 新しい秘匿対象の出力 量: 0 scriptPubkey: `OP_2 <32バイトのハッシュ値>` witnessOut: `0x{petersen-commitment}> <0x{range-proof}>` 最後の出力: 量: 0 scriptPubkey: `OP_RETURN OP_2 {blinding-fee-amount}` Fee: 全入力のコインの合計
  • 22. Copyright ©2017 HAW International Inc. all rights reserved. Confidential Transaction 量が秘匿されたコインを秘匿したまま送金するトランザクション ● インプット・アウトプット共に全て量は 0(アウトプットは誰もが使用可能なスクリプト) ● commitmentとrage proofが有効なこと ● 最後のアウトプットがマイナーへの手数料 Ins: prev: CTXO[n] scriptSig: 空 witnessIn: `<署名> <0x{redeem script}>` Outs: 0..N: 新しい秘匿対象の出力 量: 0 scriptPubkey: `OP_2 <32バイトのハッシュ値>` witnessOut: `0x{petersen-commitment}> <0x{range-proof}>` 最後の出力: 量: 0 scriptPubkey: `OP_RETURN OP_2 {confidential-fee-amount}` Fee: 0
  • 23. Copyright ©2017 HAW International Inc. all rights reserved. Unblinding Transaction 量が秘匿されたコインの秘匿を解除するトランザクション ● アウトプットは全てOP_RETURN ● アンブラインドされたコインは Confidential base Transactionの1つめのアウトプットで通常の UTXOにされる。 Ins: prev: CTXO[n] scriptSig: 空 witnessIn: `<署名> <0x{redeem script}>` Outs: 0..N: 量: 0 scriptPubkey: `OP_RETURN OP_2 {アンブラインドするコインの量} {p2sh-destination}` witnessOut: 空 最後の出力: 量: 0 scriptPubkey: `OP_RETURN OP_2 {unblinding-fee-amount}` Fee: 0
  • 24. Copyright ©2017 HAW International Inc. all rights reserved. Confidential base Transaction CTに関するトランザクションが含まれるブロックの最後のトランザクションとして登 録されるトランザクション ● GCTXO[coinbase] : ブロックに含まれる全ての秘匿されたコインの量を持つ ● GCTXO[last_block] : 前のブロックConfidential base Transactionの0番目のアウトプットのコ イン(前のブロックの秘匿化されたコインからアンブラインドされたコインを引いた量) ● 1番め以降のアウトプットはアンブラインドしたコインの UTXO Ins: GCTXO[last_block], GCTXO[coinbase] Outs: 0: GCTXO[current_block] 量: {last_block + coinbase - unblindings} scriptPubkey: `OP_TRUE` 1..N: 量/scriptPubkey: このブロック内のトランザクションでアンブラインドしたコインの量
  • 25. Copyright ©2017 HAW International Inc. all rights reserved. Block トランザクションフロー Blinding Tx UTXO CTXO 秘匿された手数料のアウトプット 手数料=全インプットの合計 Coinbase Tx GCTXO Confidential base Tx GCTXO [ coinbase ] GCTXO [ last_block ] GCTXO [ current_block ] UTXO Unblinding Tx CTXO OP_RETURN アンブラインド量 script 秘匿された手数料のアウトプット 手数料=0 Confidential Tx CTXO CTXO 秘匿された手数料のアウトプット 手数料=0 Block Coinbase Tx GCTXO 秘匿化されたコインは全てGCTXOが保持する。 Confidential base Tx GCTXO [ coinbase ] GCTXO [ last_block ] GCTXO [ current_block ] UTXO 前ブロック時点の秘匿されたコインの送料 このブロックで秘匿されたコインの量 マイナーが作成するTxで手数料も徴収