bitcoinでctf bitcoin based ctf - github pages · seccon2014オンライン予選優勝...

77
Bitcoin CTF Bitcoin based CTF 吉村 優 Hikaru Yoshimura リクルートマーケティングパートナーズ [email protected] [email protected] March 27, 2018 (Git Commit ID: fbbdee7) 吉村 優 (RMP) Bitcoin CTF March 27, 2018 1 / 24

Upload: others

Post on 16-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

BitcoinでCTFBitcoin based CTF

吉村優Hikaru Yoshimura

リクルートマーケティングパートナーズ[email protected]

[email protected]

March 27, 2018(Git Commit ID: fbbdee7)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 1 / 24

Page 2: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

筑波大学情報科学類卒(学士)リクルートマーケティングパートナーズ(中途)NB本部プロディベ部英語学習GCTF Team: urandom

I https://urandom.team/

吉村優 (RMP) Bitcoin で CTF March 27, 2018 2 / 24

Page 3: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

筑波大学情報科学類卒(学士)

リクルートマーケティングパートナーズ(中途)NB本部プロディベ部英語学習GCTF Team: urandom

I https://urandom.team/

吉村優 (RMP) Bitcoin で CTF March 27, 2018 2 / 24

Page 4: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

筑波大学情報科学類卒(学士)リクルートマーケティングパートナーズ(中途)

NB本部プロディベ部英語学習GCTF Team: urandom

I https://urandom.team/

吉村優 (RMP) Bitcoin で CTF March 27, 2018 2 / 24

Page 5: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

筑波大学情報科学類卒(学士)リクルートマーケティングパートナーズ(中途)NB本部プロディベ部英語学習G

CTF Team: urandomI https://urandom.team/

吉村優 (RMP) Bitcoin で CTF March 27, 2018 2 / 24

Page 6: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

筑波大学情報科学類卒(学士)リクルートマーケティングパートナーズ(中途)NB本部プロディベ部英語学習GCTF Team: urandom

I https://urandom.team/

吉村優 (RMP) Bitcoin で CTF March 27, 2018 2 / 24

Page 7: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

自己紹介

Twitter @_yyu_Qiita yyuGitHub y-yu

SECCON 2014オンライン予選優勝IWSEC Cup 2015 Gold Prize

SECCON 2015 x CEDECCHALLENGEゲームクラッキング&チートチャレンジ優勝サイバーコロッセオ x SECCON2016準優勝

吉村優 (RMP) Bitcoin で CTF March 27, 2018 3 / 24

Page 8: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFとは?

“Capture The Flag”の略でセキュリティ系の競技のことただし、この発表では jeopardy 形式を前提とする

CTF (jeopardy)脆弱性を攻撃するなどしてフラッグワードと呼ばれる文字列を得るフラッグワードによって相応のポイントが得られ、最終的に最もポイントを獲得したチームが勝利する

国際的なCTFは賞金がもらえるGoogle CTF 2017 (Final) 1位に 13,337 USD(約 150万円)Codegate CTF Finals 2017 1位に 30,000,000 KRW(約 307万円)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 4 / 24

Page 9: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFとは?

“Capture The Flag”の略でセキュリティ系の競技のこと

ただし、この発表では jeopardy 形式を前提とする

CTF (jeopardy)脆弱性を攻撃するなどしてフラッグワードと呼ばれる文字列を得るフラッグワードによって相応のポイントが得られ、最終的に最もポイントを獲得したチームが勝利する

国際的なCTFは賞金がもらえるGoogle CTF 2017 (Final) 1位に 13,337 USD(約 150万円)Codegate CTF Finals 2017 1位に 30,000,000 KRW(約 307万円)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 4 / 24

Page 10: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFとは?

“Capture The Flag”の略でセキュリティ系の競技のことただし、この発表では jeopardy 形式を前提とする

CTF (jeopardy)脆弱性を攻撃するなどしてフラッグワードと呼ばれる文字列を得るフラッグワードによって相応のポイントが得られ、最終的に最もポイントを獲得したチームが勝利する

国際的なCTFは賞金がもらえるGoogle CTF 2017 (Final) 1位に 13,337 USD(約 150万円)Codegate CTF Finals 2017 1位に 30,000,000 KRW(約 307万円)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 4 / 24

Page 11: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFとは?

“Capture The Flag”の略でセキュリティ系の競技のことただし、この発表では jeopardy 形式を前提とする

CTF (jeopardy)脆弱性を攻撃するなどしてフラッグワードと呼ばれる文字列を得るフラッグワードによって相応のポイントが得られ、最終的に最もポイントを獲得したチームが勝利する

国際的なCTFは賞金がもらえるGoogle CTF 2017 (Final) 1位に 13,337 USD(約 150万円)Codegate CTF Finals 2017 1位に 30,000,000 KRW(約 307万円)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 4 / 24

Page 12: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFとは?

“Capture The Flag”の略でセキュリティ系の競技のことただし、この発表では jeopardy 形式を前提とする

CTF (jeopardy)脆弱性を攻撃するなどしてフラッグワードと呼ばれる文字列を得るフラッグワードによって相応のポイントが得られ、最終的に最もポイントを獲得したチームが勝利する

国際的なCTFは賞金がもらえるGoogle CTF 2017 (Final) 1位に 13,337 USD(約 150万円)Codegate CTF Finals 2017 1位に 30,000,000 KRW(約 307万円)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 4 / 24

Page 13: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

従来のCTFの課題

勝利したチームが賞金を本当に得られるのかが不明であるI たとえば脆弱性の情報が欲しいので CTFを開催する

問題を解いたチームが時間内に解答したという証拠がないI Write-upを書くという手もあるが、CTFが終ってから解いたという可能性もある

吉村優 (RMP) Bitcoin で CTF March 27, 2018 5 / 24

Page 14: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

従来のCTFの課題

勝利したチームが賞金を本当に得られるのかが不明であるI たとえば脆弱性の情報が欲しいので CTFを開催する

問題を解いたチームが時間内に解答したという証拠がないI Write-upを書くという手もあるが、CTFが終ってから解いたという可能性もある

吉村優 (RMP) Bitcoin で CTF March 27, 2018 5 / 24

Page 15: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

従来のCTFの課題

勝利したチームが賞金を本当に得られるのかが不明であるI たとえば脆弱性の情報が欲しいので CTFを開催する

問題を解いたチームが時間内に解答したという証拠がないI Write-upを書くという手もあるが、CTFが終ってから解いたという可能性もある

吉村優 (RMP) Bitcoin で CTF March 27, 2018 5 / 24

Page 16: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

正しいフラッグワードを提出した場合、参加者は直ちにその問題に対応する賞金が得られる

I 従来の CTFではポイントの多い順に賞金が決まるが、提案する CTFでは賞金が多い順に順位が決まる

賞金は全て Bitcoinで支払われる基本的に問題を最初に解答したチーム以外には賞金が支払われない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 6 / 24

Page 17: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

正しいフラッグワードを提出した場合、参加者は直ちにその問題に対応する賞金が得られる

I 従来の CTFではポイントの多い順に賞金が決まるが、提案する CTFでは賞金が多い順に順位が決まる

賞金は全て Bitcoinで支払われる基本的に問題を最初に解答したチーム以外には賞金が支払われない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 6 / 24

Page 18: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

正しいフラッグワードを提出した場合、参加者は直ちにその問題に対応する賞金が得られる

I 従来の CTFではポイントの多い順に賞金が決まるが、提案する CTFでは賞金が多い順に順位が決まる

賞金は全て Bitcoinで支払われる基本的に問題を最初に解答したチーム以外には賞金が支払われない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 6 / 24

Page 19: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

正しいフラッグワードを提出した場合、参加者は直ちにその問題に対応する賞金が得られる

I 従来の CTFではポイントの多い順に賞金が決まるが、提案する CTFでは賞金が多い順に順位が決まる

賞金は全て Bitcoinで支払われる

基本的に問題を最初に解答したチーム以外には賞金が支払われない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 6 / 24

Page 20: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

正しいフラッグワードを提出した場合、参加者は直ちにその問題に対応する賞金が得られる

I 従来の CTFではポイントの多い順に賞金が決まるが、提案する CTFでは賞金が多い順に順位が決まる

賞金は全て Bitcoinで支払われる基本的に問題を最初に解答したチーム以外には賞金が支払われない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 6 / 24

Page 21: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

誰もが閲覧できる Bitcoinのブロックチェーンを利用するので、どのチームが問題を時間内に解答したかが誰にとっても明らかである

従来のCTFとは異なり開始時刻や終了時刻が JSTなどではなく、Bitcoinのブロックチェーンの長さが nに達した時に開始であり、m (m > n)に達した時に終了である

I Bitcoinのブロックチェーンは 1ブロックの作成に約 10分必要である。よって、この CTFの制限時間は約 10分刻みで指定できるため、実用上の問題はないと考えられる

吉村優 (RMP) Bitcoin で CTF March 27, 2018 7 / 24

Page 22: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

提案するCTFの特徴

誰もが閲覧できる Bitcoinのブロックチェーンを利用するので、どのチームが問題を時間内に解答したかが誰にとっても明らかである従来のCTFとは異なり開始時刻や終了時刻が JSTなどではなく、Bitcoinのブロックチェーンの長さが nに達した時に開始であり、m (m > n)に達した時に終了である

I Bitcoinのブロックチェーンは 1ブロックの作成に約 10分必要である。よって、この CTFの制限時間は約 10分刻みで指定できるため、実用上の問題はないと考えられる

吉村優 (RMP) Bitcoin で CTF March 27, 2018 7 / 24

Page 23: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプト

まずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 24: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 25: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成する

ブロック トランザクションを複数集めたものを表し、マイナーが作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 26: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 27: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 28: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えている

マイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 29: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Bitcoinとスクリプトまずは Bitcoinに関する用語を整理する

トランザクション ひとつの送金を表し、送金者が作成するブロック トランザクションを複数集めたものを表し、マイナーが

作成する。ある i番目のブロックは i − 1番目のブロックの情報を参照する

ブロックチェーン ブロックを複数集めたもの

ハッシュ値の計算によって “長い”ブロックチェーンを作ることを難しくし、ブロックをブロックチェーンへ入れたマイナーに報酬を与えているマイナーはどのようにブロックに含めるべきトランザクションを検証しているのか?

I 残高よりも大きいお金の送金といった不正なトランザクションをどのように検出する?

吉村優 (RMP) Bitcoin で CTF March 27, 2018 8 / 24

Page 30: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

BitcoinとスクリプトBitcoinのトランザクションには scriptSigと scriptPubKey という 2つの場所にスクリプトと呼ばれる非チューリング完全なスタックベースのプログラムを書き込める

マイナーは次のようにトランザクションのスクリプトを実行する

Alice Bob CharlieTx1 Tx2

1 BTC 1 BTC

eval(scriptSig, scriptPubKey)

マイナーは evalの結果が 0 以外ならトランザクション Tx2を受理し、 0 ならば拒否する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 9 / 24

Page 31: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

BitcoinとスクリプトBitcoinのトランザクションには scriptSigと scriptPubKey という 2つの場所にスクリプトと呼ばれる非チューリング完全なスタックベースのプログラムを書き込めるマイナーは次のようにトランザクションのスクリプトを実行する

Alice Bob CharlieTx1 Tx2

1 BTC 1 BTC

eval(scriptSig, scriptPubKey)

マイナーは evalの結果が 0 以外ならトランザクション Tx2を受理し、 0 ならば拒否する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 9 / 24

Page 32: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

BitcoinとスクリプトBitcoinのトランザクションには scriptSigと scriptPubKey という 2つの場所にスクリプトと呼ばれる非チューリング完全なスタックベースのプログラムを書き込めるマイナーは次のようにトランザクションのスクリプトを実行する

Alice Bob CharlieTx1 Tx2

1 BTC 1 BTC

eval(scriptSig, scriptPubKey)

マイナーは evalの結果が 0 以外ならトランザクション Tx2を受理し、 0 ならば拒否する吉村優 (RMP) Bitcoin で CTF March 27, 2018 9 / 24

Page 33: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

1 参加チーム Tiは運営に Bitcoinの公開鍵 Tiを提出する2 運営は参加登録をブロックチェーンの長さが nとなる前に締め切る

3 問題 jに対応するフラッグワードを Fjとして、またこの問題 jを解答した際に得られる賞金を Bj BTCとし、さらに、ansij := H

(H(Fj | | i)

)とする運営は問題 jに対して、後述のよ

うな scriptPubKey を持つ Bj BTCのトランザクション Txjを作成する

I Hはハッシュ関数 SHA-256であり、また | |は文字列の結合である

吉村優 (RMP) Bitcoin で CTF March 27, 2018 10 / 24

Page 34: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

1 参加チーム Tiは運営に Bitcoinの公開鍵 Tiを提出する

2 運営は参加登録をブロックチェーンの長さが nとなる前に締め切る

3 問題 jに対応するフラッグワードを Fjとして、またこの問題 jを解答した際に得られる賞金を Bj BTCとし、さらに、ansij := H

(H(Fj | | i)

)とする運営は問題 jに対して、後述のよ

うな scriptPubKey を持つ Bj BTCのトランザクション Txjを作成する

I Hはハッシュ関数 SHA-256であり、また | |は文字列の結合である

吉村優 (RMP) Bitcoin で CTF March 27, 2018 10 / 24

Page 35: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

1 参加チーム Tiは運営に Bitcoinの公開鍵 Tiを提出する2 運営は参加登録をブロックチェーンの長さが nとなる前に締め切る

3 問題 jに対応するフラッグワードを Fjとして、またこの問題 jを解答した際に得られる賞金を Bj BTCとし、さらに、ansij := H

(H(Fj | | i)

)とする運営は問題 jに対して、後述のよ

うな scriptPubKey を持つ Bj BTCのトランザクション Txjを作成する

I Hはハッシュ関数 SHA-256であり、また | |は文字列の結合である

吉村優 (RMP) Bitcoin で CTF March 27, 2018 10 / 24

Page 36: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

1 参加チーム Tiは運営に Bitcoinの公開鍵 Tiを提出する2 運営は参加登録をブロックチェーンの長さが nとなる前に締め切る

3 問題 jに対応するフラッグワードを Fjとして、またこの問題 jを解答した際に得られる賞金を Bj BTCとし、さらに、ansij := H

(H(Fj | | i)

)とする運営は問題 jに対して、後述のよ

うな scriptPubKey を持つ Bj BTCのトランザクション Txjを作成する

I Hはハッシュ関数 SHA-256であり、また | |は文字列の結合である

吉村優 (RMP) Bitcoin で CTF March 27, 2018 10 / 24

Page 37: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSEOP_DUP2OP_EQUAL...

OP_ENDIFOP_CHECKSIG

吉村優 (RMP) Bitcoin で CTF March 27, 2018 11 / 24

Page 38: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

4 運営は全てのトランザクション Txjをブロックチェーンへ送信する

I ただし、トランザクションをブロックチェーンへ送信する時間はあらかじめ全参加チームに告知する

5 運営は全てのトランザクション Txjのトランザクション IDをCTFの問題ページに記載する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 12 / 24

Page 39: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの開催前

4 運営は全てのトランザクション Txjをブロックチェーンへ送信する

I ただし、トランザクションをブロックチェーンへ送信する時間はあらかじめ全参加チームに告知する

5 運営は全てのトランザクション Txjのトランザクション IDをCTFの問題ページに記載する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 12 / 24

Page 40: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの実施中

1 今、チーム Tiが問題 jのフラッグワード Fjを得たとする。チーム Tiはトランザクション Txjを入力に持ち、次のようなscriptSigを持つトランザクション Txijを作成する。ただし、hij := H(Fj | | i)であり、Siはチーム Tiの Bitcoinの公開鍵 Tiに対応する秘密鍵によって作成された署名である

Listing: Txij の scriptSig

Sihiji

2 チーム Tiはトランザクション Txijを Bitcoinのブロックチェーンへ送信する

3 問題 jがまだ解かれていないかつフラッグワードが正しい場合、チーム Tiは Bj BTCを獲得する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 13 / 24

Page 41: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの実施中1 今、チーム Tiが問題 jのフラッグワード Fjを得たとする。チーム Tiはトランザクション Txjを入力に持ち、次のようなscriptSigを持つトランザクション Txijを作成する。ただし、hij := H(Fj | | i)であり、Siはチーム Tiの Bitcoinの公開鍵 Tiに対応する秘密鍵によって作成された署名である

Listing: Txij の scriptSig

Sihiji

2 チーム Tiはトランザクション Txijを Bitcoinのブロックチェーンへ送信する

3 問題 jがまだ解かれていないかつフラッグワードが正しい場合、チーム Tiは Bj BTCを獲得する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 13 / 24

Page 42: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの実施中1 今、チーム Tiが問題 jのフラッグワード Fjを得たとする。チーム Tiはトランザクション Txjを入力に持ち、次のようなscriptSigを持つトランザクション Txijを作成する。ただし、hij := H(Fj | | i)であり、Siはチーム Tiの Bitcoinの公開鍵 Tiに対応する秘密鍵によって作成された署名である

Listing: Txij の scriptSig

Sihiji

2 チーム Tiはトランザクション Txijを Bitcoinのブロックチェーンへ送信する

3 問題 jがまだ解かれていないかつフラッグワードが正しい場合、チーム Tiは Bj BTCを獲得する

吉村優 (RMP) Bitcoin で CTF March 27, 2018 13 / 24

Page 43: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの実施中1 今、チーム Tiが問題 jのフラッグワード Fjを得たとする。チーム Tiはトランザクション Txjを入力に持ち、次のようなscriptSigを持つトランザクション Txijを作成する。ただし、hij := H(Fj | | i)であり、Siはチーム Tiの Bitcoinの公開鍵 Tiに対応する秘密鍵によって作成された署名である

Listing: Txij の scriptSig

Sihiji

2 チーム Tiはトランザクション Txijを Bitcoinのブロックチェーンへ送信する

3 問題 jがまだ解かれていないかつフラッグワードが正しい場合、チーム Tiは Bj BTCを獲得する吉村優 (RMP) Bitcoin で CTF March 27, 2018 13 / 24

Page 44: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの終了後

1 運営は Bitcoinのブロックチェーンの長さがm + 3に達したときのブロックチェーンについて、チームに対応する Bitcoinの公開鍵を用いて問題を解答することで獲得した Bitcoinの量を計測する

I m + 3は目安なので、m + 1やm + 6などでもよい2 Bitcoinを獲得した量でチームの順位付けを行う

吉村優 (RMP) Bitcoin で CTF March 27, 2018 14 / 24

Page 45: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの終了後

1 運営は Bitcoinのブロックチェーンの長さがm + 3に達したときのブロックチェーンについて、チームに対応する Bitcoinの公開鍵を用いて問題を解答することで獲得した Bitcoinの量を計測する

I m + 3は目安なので、m + 1やm + 6などでもよい

2 Bitcoinを獲得した量でチームの順位付けを行う

吉村優 (RMP) Bitcoin で CTF March 27, 2018 14 / 24

Page 46: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

CTFの終了後

1 運営は Bitcoinのブロックチェーンの長さがm + 3に達したときのブロックチェーンについて、チームに対応する Bitcoinの公開鍵を用いて問題を解答することで獲得した Bitcoinの量を計測する

I m + 3は目安なので、m + 1やm + 6などでもよい2 Bitcoinを獲得した量でチームの順位付けを行う

吉村優 (RMP) Bitcoin で CTF March 27, 2018 14 / 24

Page 47: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

Listing: Tx1j の scriptSig

S1h1j1

左は運営が作成したトランザクション Txjの scriptPubKey

右はチーム T1が作成したトランザクション Tx1jの scriptSig

吉村優 (RMP) Bitcoin で CTF March 27, 2018 15 / 24

Page 48: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

Listing: Tx1j の scriptSig

S1h1j1

左は運営が作成したトランザクション Txjの scriptPubKey

右はチーム T1が作成したトランザクション Tx1jの scriptSig

吉村優 (RMP) Bitcoin で CTF March 27, 2018 15 / 24

Page 49: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

Listing: Tx1j の scriptSig

S1h1j1

左は運営が作成したトランザクション Txjの scriptPubKey

右はチーム T1が作成したトランザクション Tx1jの scriptSig

吉村優 (RMP) Bitcoin で CTF March 27, 2018 15 / 24

Page 50: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

Listing: Tx1j の scriptSig

S1h1j1

左は運営が作成したトランザクション Txjの scriptPubKey

右はチーム T1が作成したトランザクション Tx1jの scriptSig

吉村優 (RMP) Bitcoin で CTF March 27, 2018 15 / 24

Page 51: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

1 チーム T1がトランザクション Tx1jを送信したとする。その scriptSigから、スタックは 1 h1j S1 となる。ここから Txjの scriptPubKey を実行する

2 スタックの先頭を複製して 1を載せる 1 1 1 h1j S1

3 スタックの先頭から 2つを取り出し、それらを比較する(等しいので 1が積まれる) 1 1 h1j S1

4 スタックの先頭を取り除き、それが 1なので OP_IFから OP_ELSEを実行する 1 h1j S1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 16 / 24

Page 52: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

1 チーム T1がトランザクション Tx1jを送信したとする。その scriptSigから、スタックは 1 h1j S1 となる。ここから Txjの scriptPubKey を実行する

2 スタックの先頭を複製して 1を載せる 1 1 1 h1j S1

3 スタックの先頭から 2つを取り出し、それらを比較する(等しいので 1が積まれる) 1 1 h1j S1

4 スタックの先頭を取り除き、それが 1なので OP_IFから OP_ELSEを実行する 1 h1j S1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 16 / 24

Page 53: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

1 チーム T1がトランザクション Tx1jを送信したとする。その scriptSigから、スタックは 1 h1j S1 となる。ここから Txjの scriptPubKey を実行する

2 スタックの先頭を複製して 1を載せる 1 1 1 h1j S1

3 スタックの先頭から 2つを取り出し、それらを比較する(等しいので 1が積まれる) 1 1 h1j S1

4 スタックの先頭を取り除き、それが 1なので OP_IFから OP_ELSEを実行する 1 h1j S1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 16 / 24

Page 54: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

1 チーム T1がトランザクション Tx1jを送信したとする。その scriptSigから、スタックは 1 h1j S1 となる。ここから Txjの scriptPubKey を実行する

2 スタックの先頭を複製して 1を載せる 1 1 1 h1j S1

3 スタックの先頭から 2つを取り出し、それらを比較する(等しいので 1が積まれる) 1 1 h1j S1

4 スタックの先頭を取り除き、それが 1なので OP_IFから OP_ELSEを実行する 1 h1j S1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 16 / 24

Page 55: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

5 スタックの先頭を捨てる h1j S1

6 スタック先頭に SHA-256を適用し結果をスタックの先頭に追加するH(h1j) S1

7 ans1jをスタックの先頭に追加するans1j H(h1j) S1

8 スタックの先頭から 2つを取り出し、それらを比較する。等しくない場合は直ちに失敗となる S1

I h1j = H(Fj | | 1)I ans1j = H

(H(Fj | | 1)

)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 17 / 24

Page 56: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

5 スタックの先頭を捨てる h1j S16 スタック先頭に SHA-256を適用し結果をスタックの先頭に追加するH(h1j) S1

7 ans1jをスタックの先頭に追加するans1j H(h1j) S1

8 スタックの先頭から 2つを取り出し、それらを比較する。等しくない場合は直ちに失敗となる S1

I h1j = H(Fj | | 1)I ans1j = H

(H(Fj | | 1)

)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 17 / 24

Page 57: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

5 スタックの先頭を捨てる h1j S16 スタック先頭に SHA-256を適用し結果をスタックの先頭に追加するH(h1j) S1

7 ans1jをスタックの先頭に追加するans1j H(h1j) S1

8 スタックの先頭から 2つを取り出し、それらを比較する。等しくない場合は直ちに失敗となる S1

I h1j = H(Fj | | 1)I ans1j = H

(H(Fj | | 1)

)

吉村優 (RMP) Bitcoin で CTF March 27, 2018 17 / 24

Page 58: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

5 スタックの先頭を捨てる h1j S16 スタック先頭に SHA-256を適用し結果をスタックの先頭に追加するH(h1j) S1

7 ans1jをスタックの先頭に追加するans1j H(h1j) S1

8 スタックの先頭から 2つを取り出し、それらを比較する。等しくない場合は直ちに失敗となる S1

I h1j = H(Fj | | 1)I ans1j = H

(H(Fj | | 1)

)吉村優 (RMP) Bitcoin で CTF March 27, 2018 17 / 24

Page 59: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

9 チーム T1の公開鍵 T1をスタックの先頭に追加する T1 S1

10 スタックの先頭にあるデータを公開鍵として、スタックの先頭から 2番目にあるデータとして署名としてそれらを検証する 1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 18 / 24

Page 60: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

フラッグワードが正しい場合の挙動

Listing: Txj の scriptPubKey

OP_DUP1OP_EQUALOP_IF

OP_DROPOP_SHA256ans1jOP_EQUALVERIFYT1

OP_ELSE...

OP_ENDIFOP_CHECKSIG

9 チーム T1の公開鍵 T1をスタックの先頭に追加する T1 S1

10 スタックの先頭にあるデータを公開鍵として、スタックの先頭から 2番目にあるデータとして署名としてそれらを検証する 1

吉村優 (RMP) Bitcoin で CTF March 27, 2018 18 / 24

Page 61: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

運営は解答されなかった問題の賞金を回収できるのか?ブロックチェーンの長さがmとなったら運営が賞金を回収するために、トランザクションを次のようにする

Listing:改良した Txj の scriptPubKey の一部...OP_ELSEOP_DROPmOP_CHECKLOCKTIMEVERIFYOP_DROPTmaster

OP_ENDIF...OP_CHECKSIG

I ただし Tmaster は運営の Bitcoin公開鍵とする

吉村優 (RMP) Bitcoin で CTF March 27, 2018 19 / 24

Page 62: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題運営は解答されなかった問題の賞金を回収できるのか?

ブロックチェーンの長さがmとなったら運営が賞金を回収するために、トランザクションを次のようにする

Listing:改良した Txj の scriptPubKey の一部...OP_ELSEOP_DROPmOP_CHECKLOCKTIMEVERIFYOP_DROPTmaster

OP_ENDIF...OP_CHECKSIG

I ただし Tmaster は運営の Bitcoin公開鍵とする

吉村優 (RMP) Bitcoin で CTF March 27, 2018 19 / 24

Page 63: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題運営は解答されなかった問題の賞金を回収できるのか?ブロックチェーンの長さがmとなったら運営が賞金を回収するために、トランザクションを次のようにする

Listing:改良した Txj の scriptPubKey の一部...OP_ELSE

OP_DROPmOP_CHECKLOCKTIMEVERIFYOP_DROPTmaster

OP_ENDIF...OP_CHECKSIG

I ただし Tmaster は運営の Bitcoin公開鍵とする吉村優 (RMP) Bitcoin で CTF March 27, 2018 19 / 24

Page 64: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

問題とチームのそれぞれごとにトランザクションを用意することで、従来のCTFのように解答順序によらずに賞金を与えることもできる?

ただし、そうするとメンバーを同じにしたチームをたくさん作ることで分割した賞金を不正に取得する攻撃ができる従って最初に解いたチーム以外に賞金を与えることはできない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 20 / 24

Page 65: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

問題とチームのそれぞれごとにトランザクションを用意することで、従来のCTFのように解答順序によらずに賞金を与えることもできる?ただし、そうするとメンバーを同じにしたチームをたくさん作ることで分割した賞金を不正に取得する攻撃ができる

従って最初に解いたチーム以外に賞金を与えることはできない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 20 / 24

Page 66: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

問題とチームのそれぞれごとにトランザクションを用意することで、従来のCTFのように解答順序によらずに賞金を与えることもできる?ただし、そうするとメンバーを同じにしたチームをたくさん作ることで分割した賞金を不正に取得する攻撃ができる従って最初に解いたチーム以外に賞金を与えることはできない

吉村優 (RMP) Bitcoin で CTF March 27, 2018 20 / 24

Page 67: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

どうして問題のトランザクションを公開する時間を全参加チームにあらかじめ告知するのか?

トランザクションに書かれたハッシュ値 ansijの原像を総当たりで見つけることも可能であるため、公平に総当たりできるようにするためただ、ハッシュ関数は SHA-256を利用しているため、CTFの終了までに総当たりで原像を求められる可能性は低いと考えられる

吉村優 (RMP) Bitcoin で CTF March 27, 2018 21 / 24

Page 68: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

どうして問題のトランザクションを公開する時間を全参加チームにあらかじめ告知するのか?トランザクションに書かれたハッシュ値 ansijの原像を総当たりで見つけることも可能であるため、公平に総当たりできるようにするため

ただ、ハッシュ関数は SHA-256を利用しているため、CTFの終了までに総当たりで原像を求められる可能性は低いと考えられる

吉村優 (RMP) Bitcoin で CTF March 27, 2018 21 / 24

Page 69: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

進んだ話題

どうして問題のトランザクションを公開する時間を全参加チームにあらかじめ告知するのか?トランザクションに書かれたハッシュ値 ansijの原像を総当たりで見つけることも可能であるため、公平に総当たりできるようにするためただ、ハッシュ関数は SHA-256を利用しているため、CTFの終了までに総当たりで原像を求められる可能性は低いと考えられる

吉村優 (RMP) Bitcoin で CTF March 27, 2018 21 / 24

Page 70: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できたBitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださったI http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 71: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できた

Bitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださったI http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 72: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できたBitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださったI http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 73: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できたBitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださった

I http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 74: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できたBitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださったI http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 75: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

まとめ

Bitcoinを利用したCTFについて考えることで、より透明で公平なCTFを構成できたBitcoinのリファレンス実装は、提案するCTFで利用するようなトランザクションを受け付けない。よって現実的にはEthereumなど別の暗号通貨を利用しなければならないかもしれない

I @lotzさんが Ethereumで実装してくださったI http://lotz84.hatenablog.com/entry/2018/01/02/134056

賞金が集まれば、提案する方法でCTFを実施してみたい

吉村優 (RMP) Bitcoin で CTF March 27, 2018 22 / 24

Page 76: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

目次

1 自己紹介

2 CTFとは?

3 従来のCTFの課題

4 提案するCTFの特徴

5 Bitcoinとスクリプト

6 CTFのプロトコル

7 進んだ話題

8 まとめ

吉村優 (RMP) Bitcoin で CTF March 27, 2018 23 / 24

Page 77: BitcoinでCTF Bitcoin based CTF - GitHub Pages · SECCON2014オンライン予選優勝 IWSECCup2015GoldPrize SECCON2015xCEDEC CHALLENGEゲームクラッキン グ&チートチャレンジ優勝

Thank you for your attention!

吉村優 (RMP) Bitcoin で CTF March 27, 2018 24 / 24