yoshikingのがんばる日記

あたまよくないけどがんばります

InterKosenCTF 2019 で作問した

 チームinsecureとして、InterKosenCTFを8月11~12日に開催しました. 作問は主にptr-yudaiふるつきがしていたのですが、僕も2問作問して出題したので、想定解を簡単に書きたいと思います.

運営メンバーの記事やwirteup集など

ptr-yudai: InterKosenCTF 2019で作問しました - CTFするぞ

ふるつき: InterKosenCTF2019 開催記 - ふるつき

writeup集: InterKosenCTF2019 writeups - HackMD

問題: GitHub - theoldmoon0602/InterKosenCTF2019-challenges-public

[Forensics] Hugtto!

 easyなステガノ問題として出題しました. この問題は、身内CTFで僕が作った超絶簡単ステガノを見たふるつきが助言をくれて作られたものです. 想定解としては、randomのseedをtarやpngの生成時間から予想できるため、どこに埋め込まれているかわかるというものでした. 非想定解もありましたが、解くのがとても簡単になるようなものではなかったのでセーフです. ただ、出題者の意図としては、randomのseedがわかるとrandomを再現できるよーといったところです.

[Crypto] pascal homomorphicity

 hardとして出題しましたが、midiumのFlag Ticketより解かれたし、hardではなくmidiumで出すべきだったと反省しています. まあ、このtag付けをミスっても問題ないのがdynamicスコアのいいところですね!

 当初、ふるつきがpaillier暗号の面白い原理 c=(1+n)^ {m} \bmod{n^ 2}=1 + m\ast n \bmod{n^ 2}を使った問題を出す予定だったのですが、その問題をテストしたときに僕が思いつき改変した問題です. ふるつきの時は c=(1+m)^ {flag} \bmod{m^ 2}(m.bits > flag.bits) mを入力できる問題でした. これだと、原理さえわかれば秒で解けるし、paillier暗号の形ではなかったのでいじりました.

 想定解としては、

  1. 原理に気付く(2項定理や問題文でググるpascal paillierさんが出てくるのでなんとかpaillier暗号にたどり着く)
  2. 暗号文を2つ用意して、原理より gcd(c_1 - 1 , c_2 - 1)=gcd(m_1\ast n, m_2\ast n)=n nを求める
  3. 初めに暗号化されたフラグがあるので、 nがわかっているとやるだけ

でした. 非想定解ではテストのとき、ptr-yudaiが二部探索して解いてました.

 個人的にはフラグ(KosenCTF{Th15_15_t00_we4k_p41ll1er_crypt05y5tem})が絶望的に読みにくいのが残念でした.(無理にリートにしなくてよかったな...) しかし、楽しんでもらえたようでよかったです.

さいごに

 前回のInterKosenCTFよりはお手伝いできたので良かったです. でも、運営中のログ管理、スコアサーバ周りはふるつきとptr-yudaiが2人でしているので、僕も手伝えるぐらいにならないといけないですね(今僕が触ると壊すし、なんもわからん). てか、彼らは一からツールを作ったりしていて、マジですごいのでもっと褒めてあげてください.

 今回がopenなCTFで初作問だったのですが、アンケートで面白いと答えてくださりとてもうれしいのと、ほっとしています. 次回はWinterKosenCTFがあるのですが、こちらは難易度が高めになっているので、作問できるかなといった感じですが、頑張っていきます.

 最後になりましたが、運営メンバー、参加者の皆様、スポンサーの皆様、ありがとうございました.