SlideShare a Scribd company logo
1 of 16
Download to read offline
Transaction
Malleabilityについて
作:アンダーウッド・ジョナサン
概要
①背景・簡単な説明
②取引IDについて
③署名と取引の関係
④スクリプトの実行時
⑤展性について(代表例)
  ア)scriptSigの余分なOP
  イ)scriptSigのPUSHDATA系OPの変更
  ウ)ECDSA署名のs値のネガティブ
  エ)Sighashで署名の含まれる範囲を指定
  オ)秘密鍵持つ人自身が再度署名をする。
⑥BIP62で解決?
⑦展性から影響を受けないようにするには?
⑧結論
背景・簡単な説明
・2011年中旬に発覚
・署名のDER必須化な
ど一部対策は打った
・避けられないものと判
断し、「これ以上の対策
はしない」と断言
・2014年、MtGox事件
・取引の情報を変更せ
ずに取引IDが変更可能
・秘密鍵不要
・ノードから見たら
ダブルスペンドと同じ
扱い
取引IDについて
・含まれるもの: 01000000 //バージョン
01 // 入力の数
227b59624bfc0acb51bde9b02a19ac98b62625ead0dd2093596b56e45d94a638 // 入力参照取引
00000000 // 参照出力索引
6a47304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c1622
02206dd641de7908b832bc907d849f08901db02e46376f50d048183bc9b1e7578ab601 //署名
2102d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66 // 公開鍵
ffffffff // Sequence
02 // 出力の数
c0372a0100000000 // 出力の額
1976a914c9868552872337050efec29054cbfccea104de0a88ac // scriptPubkey
ca5f5e0000000000 // 出力の額
1976a914bfc64676ab297c0a6b8b738b8d6689caaf82658188ac // scriptPubkey
00000000 // nLockTime
scriptSig
全部
取引IDは右記に対し
sha256(sha256(tx))
⇒リトルエンディアン
署名と取引の関係
・署名に含まれるもの:
(SIGHASH_ALLの場合)
01000000
01
227b59624bfc0acb51bde9b02a19ac98b62625ead0dd2093596b56e45d94a638
00000000
6a47304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c162
202206dd641de7908b832bc907d849f08901db02e46376f50d048183bc9b1e7578ab601
2102d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66
ffffffff
02
c0372a0100000000
1976a914c9868552872337050efec29054cbfccea104de0a88ac
ca5f5e0000000000
1976a914bfc64676ab297c0a6b8b738b8d6689caaf82658188ac
00000000
含まれない
scriptSigの代わりに
参照先出力のscript
Pubkey
(P2SHの場合、
redeemscript)を挿入
し、取引の
最後に4バイトの
sighash_typeを付け
る。
スクリプトの実行時1
・入力が参照している出力のscriptPubkey
と当該入力に含まれるscriptSigを実行。
(scriptSig⇒scriptPubkey)
先ほどの例で実行してみましょう
scriptSig:
①OP_PUSHDATA
304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c1622
02206dd641de7908b832bc907d849f08901db02e46376f50d048183bc9b1e7578ab601
②OP_PUSHDATA 02d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66
scriptPubkey:
③OP_DUP ④OP_HASH160 ⑤OP_PUSHDATA f8a60ea80148db1dd98a463151d315eb816d1035 ⑥OP_EQUALVERIFY ⑦OP_CHECKSIG
スタックを見ると。。。⇒
スクリプトの実行時2
展性について(代表例)
ア)scriptSigの余分なOP
 署名済みのscriptSigは署名に含まれないで取引IDに含まれ
るので、余分なOP_CODE入れれば取引IDが変わる。
例の取引で言うと:
scriptSig:
+OP_0  <<<OP_0を先頭に挿入。Scriptの実行には影響なし。署名はまだ有効。取引IDが変わる。
①OP_PUSHDATA
304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c1622
02206dd641de7908b832bc907d849f08901db02e46376f50d048183bc9b1e7578ab601
②OP_PUSHDATA 02d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66
scriptPubkey:
③OP_DUP ④OP_HASH160 ⑤OP_PUSHDATA f8a60ea80148db1dd98a463151d315eb816d1035 ⑥OP_EQUALVERIFY ⑦OP_CHECKSIG
展性について(代表例)
イ)scriptSigのPUSHDATA系OPの変更
 PUSHDATAに種類が複数あり、(数字が大きくなれば変わる)
しかし小さい数字に対して大きい数字用のPUSHDATA使っても有効
例の取引で言うと:
scriptSig:
①OP_PUSHDATA4
304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c1622
02206dd641de7908b832bc907d849f08901db02e46376f50d048183bc9b1e7578ab601
②OP_PUSHDATA2 02d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66
scriptPubkey:
③OP_DUP ④OP_HASH160 ⑤OP_PUSHDATA f8a60ea80148db1dd98a463151d315eb816d1035 ⑥OP_EQUALVERIFY ⑦OP_CHECKSIG
展性について(代表例)
ウ)ECDSA署名のs値のネガティブ
 署名のs値の+-を逆にしても計算上有効であるため、orderから
sの値を引いて置き換えると異なるデータとなって、まだ有効。
例の取引で言うと:
scriptSig:
①OP_PUSHDATA
304402201e815830e3cdc6854643a96d0784863263a6c81907e3e156b8177bb0e58c1622
0221009229be2186f747cd436f827b60f76fe10a8096af3ff7cff3a79694dae8deb68b01
②OP_PUSHDATA 02d7697f67f07afc87e7bb19bdcd08607c7f87fbe934bb83a0af2245fc2725fe66
scriptPubkey:
③OP_DUP ④OP_HASH160 ⑤OP_PUSHDATA f8a60ea80148db1dd98a463151d315eb816d1035 ⑥OP_EQUALVERIFY ⑦OP_CHECKSIG
展性について(代表例)
エ)Sighashで署名の含まれる範囲を指定
 一般的に使われるSIGHASH_ALLに対して、出力の中身を全
く署名に含めないSIGHASH_NONEを利用すると、いくらでも出
力の内容を変更できるので取引IDが変わるのは仕方無い。
その他のSIGHASHタイプ:
SIGHASH_ALL:出力全て、そして入力の参照先全てを含める。
SIGHASH_NONE:入力の参照先を全て含め、出力は全く含めない。
SIGHASH_SINGLE:入力の参照先を全て含め、でも他入力のSequenceは含めずに、1つの出力のみ含める。
(*SIGHASH_ANYONECANPAY:上記3つのどれにも併用でき、これを併用すると他の入力の参照先を含めない。)
展性について(代表例)
オ)秘密鍵持つ人自身が再度署名をする。
 署名で異なる乱数を使い、再度署名して配信すると取引IDが
異なる。
…当たり前か…
BIP62で解決?
・既述の問題を含め、他の展性の原因を抑止する
ためにスタンダードルールを変更しようとしている
・しかし、(エ)と(オ)はビットコインの根本的な仕様と
関わっており、変更が不可能。
・トランザクション展性は抑えることできても
修正不可
展性から影響を受けないようにするには?
・DBで出金依頼とutxo情報を結び付ける。
  -Mt.Goxは取引IDのみで管理
・出金後しばらくは出金元のアドレスに関する取引を
監視する。
結論
・トランザクション展性は仕方が無いこと
・取引IDのみを頼りにすると詐欺に遭う可能性あり
・utxoの行方を追うことが大切
質疑応答に入りたいと思います。
御清聴ありがとうございました。

More Related Content

What's hot

総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
Tetsuya Nihonmatsu
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
Yusuke Suzuki
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
 

What's hot (20)

Scalar IST のご紹介
Scalar IST のご紹介 Scalar IST のご紹介
Scalar IST のご紹介
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
 
pgGeocoderのご紹介
pgGeocoderのご紹介pgGeocoderのご紹介
pgGeocoderのご紹介
 
A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用A critique of ansi sql isolation levels 解説公開用
A critique of ansi sql isolation levels 解説公開用
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
総関西サイバーセキュリティLT大会(第34回)基調講演1 情シス部門にとってのゼロトラストセキュリティ
 
GCを発生させないJVMとコーディングスタイル
GCを発生させないJVMとコーディングスタイルGCを発生させないJVMとコーディングスタイル
GCを発生させないJVMとコーディングスタイル
 
Yahoo! JAPANのデータ基盤とHadoop #dbts2016
Yahoo! JAPANのデータ基盤とHadoop #dbts2016Yahoo! JAPANのデータ基盤とHadoop #dbts2016
Yahoo! JAPANのデータ基盤とHadoop #dbts2016
 
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違いLinuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
HashiCorp Vault 紹介
HashiCorp Vault 紹介HashiCorp Vault 紹介
HashiCorp Vault 紹介
 
Fault, Error, Failure の違い
Fault, Error, Failure の違いFault, Error, Failure の違い
Fault, Error, Failure の違い
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Introduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjugIntroduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjug
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 

Viewers also liked

マルレク特別編:Bitcoinの概要と今後の論点
マルレク特別編:Bitcoinの概要と今後の論点マルレク特別編:Bitcoinの概要と今後の論点
マルレク特別編:Bitcoinの概要と今後の論点
Masanori Kusunoki
 

Viewers also liked (20)

Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解する
 
ビットコイン~原理からソースまで~
ビットコイン~原理からソースまで~ビットコイン~原理からソースまで~
ビットコイン~原理からソースまで~
 
5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み5分でわかるブロックチェーンの基本的な仕組み
5分でわかるブロックチェーンの基本的な仕組み
 
ウォレットセキュリティーレビュー
ウォレットセキュリティーレビューウォレットセキュリティーレビュー
ウォレットセキュリティーレビュー
 
ビットコインとgoxと円天と
ビットコインとgoxと円天とビットコインとgoxと円天と
ビットコインとgoxと円天と
 
Bitcoinとは何か?
Bitcoinとは何か?Bitcoinとは何か?
Bitcoinとは何か?
 
マルレク特別編:Bitcoinの概要と今後の論点
マルレク特別編:Bitcoinの概要と今後の論点マルレク特別編:Bitcoinの概要と今後の論点
マルレク特別編:Bitcoinの概要と今後の論点
 
Bitcoinについて
BitcoinについてBitcoinについて
Bitcoinについて
 
Bitcoinの個人的勉強ノート 第3版(2015年1月4日)
Bitcoinの個人的勉強ノート 第3版(2015年1月4日)Bitcoinの個人的勉強ノート 第3版(2015年1月4日)
Bitcoinの個人的勉強ノート 第3版(2015年1月4日)
 
Bitcoinの技術
Bitcoinの技術Bitcoinの技術
Bitcoinの技術
 
JNSA Bitcoin 勉強会 佐藤 20140602
JNSA Bitcoin 勉強会 佐藤 20140602JNSA Bitcoin 勉強会 佐藤 20140602
JNSA Bitcoin 勉強会 佐藤 20140602
 
Blockchain - Future Sync Vol5 Slide
Blockchain   -   Future Sync Vol5 SlideBlockchain   -   Future Sync Vol5 Slide
Blockchain - Future Sync Vol5 Slide
 
デジタルハリウッド大学院 ブロックチェーン研究会第三回 2016年8月25日
デジタルハリウッド大学院 ブロックチェーン研究会第三回 2016年8月25日デジタルハリウッド大学院 ブロックチェーン研究会第三回 2016年8月25日
デジタルハリウッド大学院 ブロックチェーン研究会第三回 2016年8月25日
 
Bitcoinのしくみと設計思想
Bitcoinのしくみと設計思想Bitcoinのしくみと設計思想
Bitcoinのしくみと設計思想
 
ビットコインの仕組み
ビットコインの仕組みビットコインの仕組み
ビットコインの仕組み
 
AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料
 
ビットコインの基礎知識と世界的なトレンド
ビットコインの基礎知識と世界的なトレンドビットコインの基礎知識と世界的なトレンド
ビットコインの基礎知識と世界的なトレンド
 
技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_ux
 
女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -
 

ビットコイン ~ トランザクション展性について