m1z0r3CTF 2020 writeup
こんにちは! Ken.Sです!
前回のブログはこちらから!
ということで、この記事はm1z0r3CTFで作問したもののwriteupです。こちらを見る前に是非問題を解いてみてください!!
パワポ資料をgithubに載せたのでそちらをご覧ください!solverも掲載しております。
ご質問等ございましたらお気軽にご連絡ください!
GitHub - ksbowler/m1z0r3CTF2020
こちらでは裏話などを話していきたいと思います(笑)
Searchable Encryption
m1z0r3は研究室チームで毎年メンバーが変わるので、CTF歴の短い方がほとんどです。歴1年以下などのそういった方でも解けるくらいな簡単な問題にしようということで、これを作りました。ただ、実際は相手チームのcrypto担当に新入生がおらずちょっと悲しかったです(笑)
暗号の本を家で読んでいる時に「検索可能暗号」というものを知りまして、実際には複雑で暗号学的に安全な仕組みになっているのですが、誰でも検索可能な状態にすればCTFの問題になるのかな?と思ったのが作成背景です。秘密鍵で検索キーワードを暗号化するはずが、SHA-256ハッシュが暗号化となっているのが今回の脆弱性で、適当な文字入れたら"Contain"か"No"が返って来ることと問題文から推測できたかなと思います。
almost EDO
この問題が一番物議を醸すのではないでしょうか…(笑)
No.6はtokyo westerns ctfのtwin-dの改良問題でした。
TokyoWesterns CTF 6th 2020 一問も解けなかった話 - Attack All Around
この問題では、
e2 + 2*e1*e2 - e1 = 0 mod phi_n
となっており、式変形することでCommon Modulus Attackが出来るのですが、この左辺がphi_nの倍数になることからphi_nを推測できる…という問題ができないのかな?と思いました。上記の問題では左辺が素因数分解できなかったのですが、今回はCommon Modulus Attackは出来ない且つ0 mod phi_nとなる式が作れてそれが素因数分解できるように作問してみました。
No.7は「RSAでやってはいけないNのこと」より一度も遭遇したことのないHastad's Broadcast Attackをやりたかったです。言っちゃえば中国人剰余定理を使うだけです。
そしてこの問題の肝である、48個のFLAGを欠片をいくつか集めて暗号化している部分ですが、復号できたら(英単語)_(一文字)に気付いて、その(一文字)が求めるFLAGのアナグラムだと分かっても…。といった感じだったと思います。
実際のm1z0r3CTFではチーム間でヒントの出し合いをしていたので、
「エスパー要素しかない」
「48がヒント」
「日本人しか解けない」
「単語の意味が重要」
「順番が存在していて、48個しかない」
などとヒントを出していました。ノーヒントで解けた方いたらすごい!!!!
エスパーというか謎解きになってしまいましたが、flag formatの"m1z0r3{"に並べたら「いろはにほへと」になるかな?なんて思ってたり…。まあ1と0はflag内に2つあるので、それを無くせばよかったなと反省しております。
作問意図はNo.6, 7をやりたかったのですが、これだとすぐ解かれると思いこの謎解き要素を追加しました。結果、謎は解けても英単語->日本語訳が分からん!!と尤もな批評を頂きました。そりゃtattered clothesを「綴れ」だとは無理がありました(翻訳してても難しかった)。次回は無理のない謎解き要素を加えたいです(笑)「いろはにほへと」を思いついたのは、最近U-NEXTに加入しまして昔2,3話だけ見た「花咲くいろは」を見つけたからです(笑)
Let's play Nimmt!
最近研究室メンバーでオンラインボドゲ会をほぼ毎週行っており、このゲームなら実装できるかなと思いやってみました。カード毎にポイントが異なると実装が面倒だったので1pointでも取ったら負けとしました。国内CTFでもMISCで二部探索ゲームとかあったので、新入生とかに楽しんでもらえればと思っていました。
各プレイヤーの所持カードの内、最小値を持っているプレイヤーは初期状態でその値以下のカードが場に出ていないと必ずポイントを回収してしまうので、そういったことは避けるように実装しています。
問題文にはいくつか誤植があり申し訳ないです…。(GameBoardArena -> BoardGameArena, All cards has 1 point. -> All cards have 1 point. etc)
Sum Min and Sum Max
弊研の黄coderから「競プロ問題作れ」というプログラミングハラスメントを受けまして、緑coderの私がどうやっても簡単に解かれてしまうだろうということで、得意分野のプログラミング問題にしてみました。が、競プロ問題の恐れてたことで私の解答が正しくないといったことがありました…。solverにあがっているのは正しいものですので…。
一投で一本も倒さないということがあるとQ1が簡単かなと思い制約を付けてみました。AtCoderには無い問題なので、色んな競プロerに解いてもらえると嬉しいです。
来年が私にとって最後のm1z0r3CTFになるので、とびっきり難しい問題を作ってやろうかなと思っています(笑)
それでは!
See you next time!