Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ブロックチェーン×プライバシーと暗号技術
Search
shigeyuki azuchi
October 11, 2018
Technology
1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ブロックチェーン×プライバシーと暗号技術
e-ZUKA Tech Night Vol. 45の発表スライド
shigeyuki azuchi
October 11, 2018
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
FORS
azuchi
0
7
クラスターmempool
azuchi
0
31
W-OTS+
azuchi
0
32
Shorのアルゴリズム
azuchi
0
55
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
42
Fiat-Shamir変換と注意点
azuchi
0
220
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
54
BIP-374 離散対数の等価性証明
azuchi
0
71
BIP-353 DNS Payment Instructions
azuchi
0
88
Other Decks in Technology
See All in Technology
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
180
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
530
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
680
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.6k
20260619 私の日常業務での生成 AI 活用
masaruogura
1
240
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
820
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
260
Lightning近況報告
kozy4324
0
220
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
110
AIチャット検索改善の3週間
kworkdev
PRO
2
160
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
300
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
820
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
The Curious Case for Waylosing
cassininazir
1
400
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
400
Making Projects Easy
brettharned
120
6.7k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
HDC tutorial
michielstock
2
720
Building Applications with DynamoDB
mza
96
7.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Transcript
Copyright ©2018 chaintope, Inc. all rights reserved. e-ZUKA Tech Night
Vol. 45 ブロックチェーン×プライバシーと暗号技術 2018/10/11 chaintope, Inc Shigeyuki Azuchi
Copyright ©2018 chaintope, Inc. all rights reserved. 自己紹介 • Shigeyuki
Azuchi • 株式会社chaintope CTO • BitcoinプロトコルのRuby実装「bitcoinrb」 • Open Assets ProtocolのRuby実装 「openassets-ruby」 • 共著 「ブロックチェーン・プログラミング 仮想通貨入門」 • ブログ「Develop with pleasure!」 https://techmedia-think.hatenablog.com/
Copyright ©2018 chaintope, Inc. all rights reserved. プライバシーの課題 • どのアドレスからどのアドレスへ支払われた
• どのアドレスにいくら支払われた • どんな契約が行われた
Copyright ©2018 chaintope, Inc. all rights reserved. 取引量の秘匿
Copyright ©2018 chaintope, Inc. all rights reserved. 取引されるBitcoinの量 量を秘匿するためにはこのデータを秘匿する必要がある 取引するBitcoinの量は、
トランザクションの各アウトプットにロック スクリプトと一緒に明示的に記載される。 Version 4 bytes TxIn Count 1-9 bytes TxIn variable TxOut Count 1-9 bytes TxOut variable Locktime 4 bytes value 8 bytes ScriptPubkey length 1-9 bytes ScriptPubkey variable “value”: 50000
Copyright ©2018 chaintope, 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 ©2018 chaintope, Inc. all rights reserved. Confidential Transaction 楕円曲線を利用したPedersen
commitmentを利用して、量を公開鍵として管理 • 楕円曲線暗号の秘密鍵(x)と公開鍵(Pub) Pub = xG (※Gは楕円曲線のベースグループ) • 楕円曲線の準同型の加法性 Pub1 + Pub2 = (x1 + x2)G • 楕円曲線を利用したcommitment commitment = xG + aH ※ xは秘密のblinding factor, a はコミットするコインの量 HはGとは異なるベースグループでGから計算する H = to_point(SHA256(ENCODE(G))) ※楕円曲線上の点Hのx座標が(SHA256(ENCODE(G)))
Copyright ©2018 chaintope, Inc. all rights reserved. Bitcoin Transactionに適用 value
8 bytes ScriptPubkey length 1-9 bytes ScriptPubkey variable “value”: 50000 commitment = xG + aH (32 bytes) “commitment”: “08e6cb1c2118fa492df6782f84d496882ced45b4e759d7cafd507cc2211d217cef” xはBlinding Factor aが送金するBitcoinの量 valueをintegerからcommitmentに変更する ※ commitment = 公開鍵(楕円曲線上の点) Blinding Factor(x)とaを知らない第三者は Tx内のコインの量が分からない
Copyright ©2018 chaintope, Inc. all rights reserved. 量の検証 秘密を知らないユーザーには送金される量は分からないが、そのトランザクション で送金されている量が正しい量かは誰もが検証できる必要がある。
(インプットの量 − アウトプットの量 = 手数料) インプットのcommitment − アウトプットのcommitment = 0 になればいい。 (※但し、手数料は明示的に設定する必要がある。) 楕円曲線の点(x, y)の減算は、逆元を(x, -y)を加算する。 問題点 (1 + 1) − (-5 + 7) == 0 も成立し、もともとインプットは2BTCしかないが、7 BTCのアウトプットが 成立(=通貨発行)してしまう。 ※ グループGは巡回群なのでオーバーフローさせることでマイナスのような振る舞いをする。 commitmentがマイナスの値でない(0〜2^64の範囲である)ことを証明する Range Proofを別途提供する必要がある。 (In1 + In2 + In3 + … ) - (Out1 + Out2 + Out3 + … + fee * H) == 0
Copyright ©2018 chaintope, Inc. all rights reserved. 取引先の秘匿
Copyright ©2018 chaintope, Inc. all rights reserved. ミキシング Version 4
bytes TxIn Count 1-9 bytes TxIn variable TxOut Count 1-9 bytes TxOut variable Locktime 4 bytes 複数のユーザーの送金を1つのトランザクションにまとめる (ミックスする)ことで、トランザクショングラフを複雑にし、 送金先を分かりづらくする。 ※管理者が送金元と送金先を知ることができるのが、 プライバシーリスク
Copyright ©2018 chaintope, Inc. all rights reserved. TumbleBit ① Tumblerを利用した決済に合意
② ボブはTumberとの PCにコインをロック ③ アリスはTumberとの PCにコインをロック ④ ボブはTumberから パズルzを受け取る。 RSAパズルを解かないと キャッシュアウト不可能。 Z B(Z) B(Z) ⑤ アリスはTumberに B(Z)の回答B(ε)を求める。 B(ε) B(ε) ⑥ ボブはB(ε)を変換して真の回答 εを入 手。 ε Puzzle-Promise Protocol
Copyright ©2018 chaintope, Inc. all rights reserved. 取引内容の秘匿
Copyright ©2018 chaintope, Inc. all rights reserved. Cross-chain Atomic Swap
HTLC(Hashed Time Lock Contract) シークレットとタイムロックを利用したAtomic Swapプロトコル アリスはLitecoin上でシークレットAを公開してLTCを入手し、 ボブは公開されたAを使ってBTCを入手する。 ※コインを入手する際にスクリプトは公開されブロックチェーンに記録されるため、 Atomic Swapを行ったことは誰もが知ることになる アリスはBitcoinを以下のアンロック条件のスクリプトに送る。 • H(A)のプリイメージ=シークレットAが分かればボブは BTCを入手できる。 • 10日経過したらアリスはBTCを入手できる。 Secret A H(A) ボブはLTCを以下のアンロック条件のコントラクトに送る。 • H(A)のプリイメージ=シークレットAが 分かればアリスはLTCを入手できる。 • 5日経過したらボブはLTCを入手できる。 BTC/LTCを交換
Copyright ©2018 chaintope, Inc. all rights reserved. Schnorr署名 公開鍵と署名の集約特性を持つデジタル署名方式 •
楕円曲線のジェネレータ: G • 秘密鍵: x • 公開鍵: P = xG • ハッシュ関数: H() • メッセージ: m 【署名の生成】 1. ランダムなnonce k を選択 2. kを秘密鍵として楕円曲線上の点R = kGを計算 3. s = k + H(P, R, m)x を計算 4. (R, s)が署名データ 【署名の検証】 sG = R + H(P, R, m)P が成立するか検証 Bitcoinへの導入の提案もスタート https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki
Copyright ©2018 chaintope, Inc. all rights reserved. Adaptor Signature Atomic
Swapで必要なハッシュのプリイメージの交換を 代替するのがAdaptor Signature • 通常のSchnorr署名 (R, s) : s = k + H(P, R, m)x • Adaptor Signature (R, s’, T): s’ = k + t + H(P, R, m)x ※いずれもRは同じ値 Adaptor Signature s’ と 署名 s が揃うと t が計算できる s’ - s = t T = tG → tがプリイメージ、Tがハッシュの代替
Copyright ©2018 chaintope, Inc. all rights reserved. Adaptor Signatureを利用したAtomic Swap
③ アリスはランダムなシークレットt (T = tG)を生成し、マルチシグの 署名を作成するヒントが入ったAdapter Signatureを作ってボブに送る。 ※ 両方のチェーンでそれぞれのPとRを使って同様のことを行う。 このとき同じ t を使用する。 s’ = k1 + t + H(P, R, m)x1 BTC/LTCを交換 (R, s', T) ②各チェーンで相手に送金する未署名のTxを作成 T = tG ④ ボブはマルチシグの署名データの一部をアリスに渡す sB = k2 + H(P, R, m)x2 ⑥ ボブはアリスの署名 s を使って t の値を知る。 t = s’ + sB - s t が分かるとマルチシグをアンロックするのに必要な アリス側の署名を計算できる。 sA = s’’ - t これでもう1方のチェーンのコインを入手する。 ⑤アリスはボブから受け取ったsBを使って、マルチシグの署名を完成させる。 s = s’ + sB - t = k1 + k2 + H(P, R, m)(x1 + x2) 署名(R, s)を完成させコインを入手するTxをブロードキャストする。 鍵ペア P1 = x1G nonce R1 = k1G 鍵ペア P2 = x2G nonce R2 = k2G マルチシグ公開鍵 P = P1 + P2 nonce R = R1 + R2 (※ P, R は各チェーンで異なる) ① P 宛にBTCをロック ① P’ 宛にLTCをロック Tx Tx’ sB Tx’ (R, s) t
Copyright ©2018 chaintope, Inc. all rights reserved. 最後に エンジニア向けオンライン・コミュニティ ブロックチェーンの技術要素について、初心者向け、
最先端情報などを動画で配信していきます!