Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shigeyuki azuchi
December 04, 2018
Technology
66
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT
GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2018/11/eltoo_and_sighash_noinput/
shigeyuki azuchi
December 04, 2018
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
SLH-DSA (SPHINCS+)
azuchi
0
12
Hyper Tree
azuchi
0
18
FORS
azuchi
0
31
クラスターmempool
azuchi
0
43
W-OTS+
azuchi
0
50
Shorのアルゴリズム
azuchi
0
71
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
55
Fiat-Shamir変換と注意点
azuchi
0
260
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
69
Other Decks in Technology
See All in Technology
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
0
270
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
180
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
240
ScotSecure West 2026 - Glasgow
raybugg
0
130
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
1k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
29k
What the customer really needed
kawaguti
PRO
3
210
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
130
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.1k
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.8k
AI de Idea
kawaguti
PRO
2
130
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
130
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
So, you think you're a good person
axbom
PRO
2
2.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Side Projects
sachag
456
43k
Transcript
新しいオフチェーンコントラクト eltoo と SIGHASH_NOINPUT
1 Off-chain Scaling Payment Channel 資金をブロックチェーン上に固定し、固定した金額を上限として、トラストレスに オフチェーンで決済を繰り返すためのプロトコル。 Block Block Block
Block Block Block Funding Tx(on-chain) Inputs アリスの1BTC ボブの1BTC Outputs アリスとボブのマルチシグに 2 BTC Commitment Tx(off-chain) Outputs アリスに1.1BTC ボブに0.9 BTC Inputs アリスとボブのマルチシグ 2 BTC オンチェーン上にマルチシグで ロックされたコインをインプットにし、 アウトプットには決済時のそれぞれの 残高を反映したトランザクションを作っ て決済する。 新しい決済をする場合はアウトプット の残高を更新した同様のトランザク ションを作る。
2 Payment Channelのセットアップ ① アリスとボブはPayment Channelをセットアップするため チャネル決済に使用するコインをブロックチェーン上に ロックするFunding Txを作成する。 Funding
Tx Inputs アリスの1BTC ボブの1BTC Outputs アリスとボブのマルチシグに 2 BTC この時点で、Funding Txは未署名で 当然ブロードキャストはできない。
3 Payment Channelのセットアップ ② アリスとボブはそれぞれ秘密の値(Secret)とその値のハッシュを生成する。 このうちハッシュだけ相手に伝える。 Secret A1 H(A1) Secret
B1 H(B1) 交換 アリスが作るCommitment Tx1 Outputs アリスの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 •Secret B1が分かればアリスの鍵で入手可能。 ③ アリスとボブは相手から受け取ったハッシュを使ってFunding Txの アウトプットをインプットにしたCommitment Txをそれぞれ作り、自分の署名を 付与して相手に送る。 ボブが作るCommitment Tx1 Outputs ボブの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 •Secret A1が分かればボブの鍵で入手可能。 交換
4 Payment Channelのセットアップ アリスが作ったCommitment Tx1 Outputs アリスの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能
•このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 •Secret B1が分かればアリスの鍵で入手可能。 ボブが作ったCommitment Tx1 Outputs ボブの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 •Secret A1が分かればボブの鍵で入手可能。 この時点でお互いに相手が作成し相手の署名が付与されたCommitment Txを持って いる状態になる。このTxに自分の署名を加えればTxは完成する。 このTxがブロードキャストされると、ブロードキャストしたユーザーは1,000ブロック待てば コインを入手でき、相手はすぐにコインを入手できる。 ④ 最初のCommitment Txの交換が終わったら①で作成したFunding Txに署名して ネットワークにブロードキャストしてチャネルをオープンする。 相手の署名済みのTxを両者 持つので、これでFunding Txを ブロードキャストした後に、 相手がいなくなってマルチシグに ロックした資金が取り戻せないと いった事態はなくなる。
5 オフチェーン決済 オフチェーン決済は新しいシークレットの作成・交換し、決済の結果で残高を 更新したCommitment Txを作り自分の署名を加え相手に送る。 アリスが作るCommitment Tx2 Outputs アリスの鍵で入手可能な 1.1BTC
残り0.9BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 •Secret B2が分かればアリスの鍵で入手可能。 Secret A2 H(A2) Secret B2 H(B2) 交換 ボブが作るCommitment Tx2 Outputs ボブの鍵で入手可能な 0.9BTC 残り1.1 BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 •Secret A2が分かればボブの鍵で入手可能。 交換 Secret A1 Secret B1 交換 セットアップ時と違うのは前のCommitment Txを作る際に 生成した秘密の値を相手に明らかにする点
6 不正を働いた場合のペナルティ アリスが作ったCommitment Tx1 Outputs アリスの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 •このTxがブロックに入って
1,000ブロック経過した らボブの鍵で入手可能。 •Secret B1が分かればアリスの鍵で入手可能。 ボブが自分に有利な古いCommitment Tx1をブロードキャストするとどうなるか? ボブは、Commitment Tx1がブロックに格納されて1,000ブロック経過するまで1BTCは入 手できない。ボブが1000ブロック待っている間にアリスは、もともとアリス宛の1BTCは普通 に入手でき、さらにSecret B2をこの段階では知っているので残りの1BTCも入手することが できる。つまり裏切って古いTxをブロードキャストすると相手に全資金が渡る。 ※ 但し、古いCommitment Txがブロードキャストされていないかチェーンの監視が必要。 アリスが作ったCommitment Tx2 Outputs アリスの鍵で入手可能な 1.1BTC 残り0.9 BTCは以下のいずれかで入手可能 •このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 •Secret B2が分かればアリスの鍵で入手可能。 Commitment Tx2のオフチェーン決 済が終わったとして、この段階でボ ブはCommitment Tx1をブロード キャストした方が自分の残高が多く 特をする。
7 eltoo: A Simple Layer2 Protocol for Bitcoin 2018年4月にChristian Decker、Rusty
Russell、Olaoluwa Osuntokunらによって 発表された新しいオフチェーンプロトコル。 https://blockstream.com/eltoo.pdf 古い状態をブロードキャストした際の 振る舞いが変わる • 不正を働いたユーザーの資金の没収 • 最新の残高の反映
8 eltoo: Payment Channelのセットアップ セトルメント用公開鍵As アップデート用公開鍵Au セトルメント用公開鍵Bs アップデート用公開鍵Bu ① チャネルを開く前に各参加者はアップデート用とセトルメント用の
2つの鍵ペアを生成し、各公開鍵を相手と交換する。 • アップデート鍵ペア(Au, Bu) チャネルの状態を更新する(新しい支払いをする)際に使用する鍵 • セトルメント鍵ペア(As, Bs) チャネルを最終残高で閉じる際に使用する鍵 ※ eltooでは、チャネルの最新状態を表したTxさえ保持しておけば、古い状態 がブロードキャストされても、そのトランザクションを最新状態を表すTxに置換す ることができる。
9 eltoo: Payment Channelのセットアップ ② アリスの資金を2-of-2のマルチシグにロックする Funding Txを作成。 Funding Tx
Inputs アリスの5 BTC Outputs アリスとボブのマルチシグに 5 BTC Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As1とBs1のマルチシグで入手可能 • AuとBuのマルチシグで入手可能 Settlement Tx1 Inputs Trigger TxのUTXO Outputs アリスのアドレスに 5 BTC ③ Funding TxのUTXOをインプットに したTrigger Txを作成。 ④ Trigger TxのUTXOをインプットとしたSettlement Tx1を作成。 セットアップフェーズでは払い戻し用として機能し、アウトプットは 5 BTCがそのままアリスのアドレスへ。 ※Settlement Tx1はTrigger Txがブロックに格納されてから 1000ブロック後にブロードキャスト可能。 sig Bu sig Bs1 LNのコントラクトはCommitment Tx 1つでお互いの残高を管理していたが、 eltooではTrigger Tx(Update Tx)と Settlement Txの2つでチャネルの 残高を管理する sig Au ⑤ アリスはFunding Txに 署名しブロードキャストする。 sig Alice sig As1
10 eltoo: オフチェーン決済 1回目 ① アリス→ボブに1 BTC支払うため、Trigger Txをインプットとして新しい Update Tx2を作成。 Update
Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As2とBs2のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが3以上で、 AuとBuのマルチシグで入手可能 Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC ※ Update TxのnLocktimeには状態を表すState Numberをセットする。 アウトプットの条件の1つには、その <State Number + 1> がOP_CLTVの引数としてセットされる= このUTXOを使用するTxのnLocktimeは3以上であることが条件。 sig Bs2 Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As1とBs1のマルチシグで入手可能 • AuとBuのマルチシグで入手可能 sig Bu nLocktime State Number: 2 sig Au sig Bu ② Update Tx2のUTXOを インプットとして、アウトプットに 残高を反映したSettlement Tx を作成する。 sig Au sig As2 ※ eltooではお互いに同じTx (Update TxとSettlement Tx)を管理する
11 eltoo: オフチェーン決済 2回目 ① ボブ→アリスに0.5 BTC支払うため、Trigger Txをインプットとして新しい Update Tx3を作成。 Update
Tx3 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As3とBs3のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが4以上で、 AuとBuのマルチシグで入手可能 Settlement Tx3 Inputs Update Tx3のUTXO Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC sig Bs3 Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As1とBs1のマルチシグで入手可能 • AuとBuのマルチシグで入手可能 sig Bu nLocktime State Number: 3 sig Au sig Bu ② Update Tx3のUTXOを インプットとして、アウトプットに 残高を反映したSettlement Tx を作成する。 sig Au sig As3
12 eltoo: 古い状態のブロードキャスト ボブの裏切り Update Tx3 Inputs Trigger TxのUTXO Outputs 5
BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As3とBs3のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが4以上で、 AuとBuのマルチシグで入手可能 Settlement Tx3 Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As2とBs2のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが3以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Settlement Tx2 Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC ボブにとってはSettlement Tx2の 方が取り分が多いので、Update Tx2をブロードキャストする その後Settlement Tx2をブロード キャストする必要があるが、これに は Update Tx2がブロックに入ってか ら1,000ブロック待つ必要がある。 sig Bs2 sig As2 sig Bs3 sig As3
13 eltoo: 古い状態のブロードキャスト アリスの対応 Update Tx3 Inputs Trigger TxのUTXO Outputs
5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As3とBs3のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが4以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As2とBs2のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが3以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au ボブが1000ブロック待っている間に、 もう1つの条件を使ってコインを取り戻 す Update Tx3のインプットの参照先を Trigger TxのUTXOからUpdate Tx2の UTXOに書き換え、ブロードキャストす る。 Update Tx3がブロックに格納されるとアリスはその後、 Settlement Tx3を ブロードキャストすることで、最新状態でチャネルをクローズできる。
14 eltooを可能にするSIGHASH_NOINPUT 通常、Txの署名はトランザクションデータが署名対象のメッセージダイジェストとなるため、トランザクションデータ が一部でも変更されるとその署名は無効になる。そのため現時点での Bitcoinの仕様では実現不可能。 Txの署名対象データ【 BIP-143】 nVersion hashPrevouts(全入力のOutpointから生成したハッシュ) hashSequence(全入力のsequenceから生成したハッシュ)
outpoint(署名対象の入力の Outpoint) scriptCode value(署名対象の入力が持つコインの量) nSequence(署名対象の入力の sequence) hashOutputs(全出力から生成したハッシュ) nLocktime sighash type インプットが参照する前のトランザクションのアウトプットの 情報が全て空になる。 署名はトランザクションの OutPointにコミットしなくなり、 署名後にインプットが参照する OutPointの変更が可能にな る。 空(0x00) 署名済みTx Input Output TxA Input Output TxB Input Output 変更可 ※ リバインド可能なのは同じ witness 要素でアンロック可能な UTXOのみ SIGHASH_NOINPUT
15 eltooのポイント: State Numberの導入 Update Tx3 Inputs Trigger TxのUTXO Outputs
5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As3とBs3のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが4以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As2とBs2のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが3以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Update Tx3がブロードキャストされた後に、 Update Tx2のインプットの参照先を Update Tx3に書き換えられるてブロードキャストされてしまう問題 Update Tx3のUTXOを使用する場合、そのTxのnLocktimeは4以上で なければならず、Update Tx2のnLocktimeは2なのでリジェクトされる。 ※ nLocktimeは本来指定時間までTxをロックする仕組みだが、それを チャネル状態のバージョンとして利用。
16 eltooのポイント: セトルメント鍵のローテーション Settlement Tx1 Inputs Trigger TxのUTXO Outputs アリスのアドレスに
5 BTC sig Bs1 sig As1 Settlement Tx3 Inputs Update Tx3のUTXO Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC sig Bs3 sig As3 Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 Settlement Txに署名する際もSIGHASH_NOINPUTが使用される。 不正があった場合に、対応する Update Txのインプットの参照先が変わると Update TxのTXIDも変わり、Settlement Txのインプットの参照先も変更する必要がある。 ※異なるUpdate Tx(Settlemnt Tx2の参照先をUpdate Tx3)を参照されるとまずい Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As3とBs3のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが4以上で、 AuとBuのマルチシグで入手可能 Update Txの条件で、セトルメント鍵でアンロックする場合、 その鍵は各状態毎に異なる鍵が使われる。 鍵ペアの導出自体は HDウォレット等と同様に決定論的に導出される。 これによりSettlement Txは対応するUpdate Txのみにバインドされ る。
17 eltooのポイント: チャネルの協調クローズ Funding Tx Inputs アリスの5 BTC Outputs アリスとボブのマルチシグに
5 BTC Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As1とBs1のマルチシグで入手可能 • AuとBuのマルチシグで入手可能 sig Bu sig Au sig Alice Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 • このTxがブロックに入って 1,000ブロック経過したら As2とBs2のマルチシグで入手可能 • このTxを使用すTxのnLocktimeが3以上で、 AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Closing Tx Inputs Funding TxのUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 on-chain on-chain 協調クローズの場合はClosing Txを 協力して作成してブロードキャスト 協調クローズでない場合、 Trigger Tx、Update Tx、Settlement Txが ブロードキャストされる。 無期限のチャネルにするため、Trigger Txが必要
18 まとめ eltooはPayment Channelで旧状態がブロードキャストされた際に、 ペナルティではなく、最新の状態を後から差し替え可能にするコントラクトを ベースにした新しいPayment Channelの提案。 • メリット ◦
チャネルのバックアップが正常にできてなくて、意図的で無いにしろ 古い状態をブロードキャストしてしまった際のリカバリになる。 ◦ 古い状態をブロードキャストさせようとする攻撃ベクトルを回避す る。 ◦ 保存するのが最新のUpdate Tx / Settlement Txのみで済む。 ◦ 参加者が増えた場合の対応が簡単 ▪ Update Txの各条件が参加者分のマルチシグに ▪ Settlement Txのアウトプットが参加者分増える • デメリット ◦ SIGHASH_NOINPUTがBitcoinに導入されるまで導入できない。