ふるつき2

裏ブログです。うそです

SECCON CTFに出さない問題

この前SECCON CTF Finals 2022があって、懇親会などで参加者の人とも話したりした。

その時に「最近のSECCON CTFには腕木暗号やモールス信号やQRコードの問題が少なくなって悲しい」という話をいただいた。

その時は穏やかに収めたけど、出すわけない……。

SECCON CTF は知名度が高くていろんな人が参加してくれる(日本人の参加数で言ったら間違いなく最大のCTFだろう)お祭りである一方、トッププレイヤーが参加してくる競技でもある。

競技であるからにはできる限り不公平や理不尽のない構造になっている必要があって、「SECCONらしい」問題は理不尽を生む。

まともな問題を解いて点数を競っていたはずなのに、急に謎の問題が現れて、それを解くのは知識とか知恵とかではなくてひたすら時間をかけることであったり、運であったり、その競技とは全く関係ない知識であったりして、謎の問題が解けたかどうかの差で順位が左右されてしまう、というのがここで言っている不公平や理不尽。

あるいは急にクオリティの低い問題が現れて、こんなの全然解いても楽しくないし、他にもっと創造的で知的好奇心を刺激する問題があるんだが、他のチームにこのくだらない問題を解かれてしまうとその点数差が順位に響くので競技のために仕方なくその問題に取り組んで時間を奪われて、楽しい・新規性のある・真にCTFで出題されるべき問題に取り組めない、という理不尽。

こういう不幸を防ぐべく、我々は「この分野で競う競技である」ということを事前に明らかにしようとしているし、それに沿うような問題を作ろうとしているし、プレイヤースキルが高い方が勝つ、という構造を作ろうとしている。

別の論点だと、先にも述べたようにSECCON CTFには(CTFプレイヤーとしてはスキルの低い)日本人も多く参加してくれるので、そういった層を門前払いしてしまうのは勿体無いという理屈はわかる。わかるが、そういった層のためにくだらない問題を用意するべきではないと考えているし、ある程度考えたり調べたりしたらそのカテゴリにさほど詳しくなくても十分解けるような(それでいて十分知識のあるプレイヤーを退屈させないような)問題をそれぞれのカテゴリに用意している。

おわかりいただけただろうか

だめとわかっている方針に固執してしまう

要するに頭がかたいということなんだけど。

一見正道にみえるが明らかにその方法は無理、という方法についてずっと考えてしまって解法にたどり着けないことが多い。例えば一見LSB Leak Attackに見えるのでどうにかして最下位bitを取りたいと思っているが、実は別のオラクルがあって……というような問題とか。そういう問題あるかはしらないけど、こういうのを見たときに「なにができるか」ではなく「なにをしたいか」を考えてしまいがち。

これがスクリプトキディの限界です

最近CTFに出てないしupsolveもしてない

なぜなら忙しいから……

なぜ忙しいかというと、SECCON決勝の問題を作ったり、ACSCの問題を作ったりしないといけないからです。

ACSCオーガナイジング情報も既にpublicになっている ACSC CTF Organizers - Asian Cyber Security Challenge

問題を作るのがあまり上手な方ではないので作問にはいつでも苦労していて、あれではだめ、これは解けないと頭を抱えている。

そういうわけで週末はまとまった時間をとりにくいのでCTFに出ていない。Insomni’hackにもbi0s CTFにも出られなかったし、このままではDiceCTFにも出られないかもしれない。こんな全然CTFやってないやつがcrypto-writeup-publicとか出していても馬鹿にするけどね、私なら。

インプットなしには作問もどんどん難しくなるはずだし、どこかで一旦区切りをつけて作問から参加者に回らないとな、と思っている。

動的配点アルゴリズムに超増加列を用いるとどうか

つまり、どれだけ簡単な問題を解いたとしても1番難しい問題を1問解くのには敵わない、ということにする。問題の配点は、どれだけ解かれたかという数ではなく、どの問題よりも解かれたか、という順序でのみ決まる*1

例えば、100solves, 50solves, 25solves, 1solves の問題があったら、それらの問題の配点は 100点, 200点, 400点, 800点にするといった具合。

当然、全ての問題の間でこのアルゴリズムを使うと、最も難しい問題を解かないと優勝はない、ということになってしまうから、カテゴリ間でこの順序づけで配点が行われる、くらいでどうだろうか。

こうすると難しい問題を解くインセンティブが大きくなるし、真に難しい問題を解けるチームが勝ちやすくなるので良さそうな気がする。一方で、その問題の難しさが、カスさによって担保されているとかだとCTF自体の質を思いっきり損なうのでまずい。カス問題がたまたま1チームしか解けなくても、他の10solvesの問題とそんなに点差がなければちょっと許されるかもしれないが、明らかに他の10solvesの問題より配点が大きいと許されなさそう。

あとは、スコアボード上で上位のチームと下位のチームの点数の差がめちゃめちゃなことになりそう。自分達が4000点で、1位のチームは12000点です、みたいなことになると感覚的に絶望がくる。1問の配点が1000点とか2000点くらいあったとしても、なんとなくの感覚では大差で厳しい、と思うような気がする。

*1:他のカテゴリとの兼ね合いも考えたらめちゃめちゃ解かれている問題はもっと点を下げるとかはしても良いかも

新年のtetctfには即席チームででた

年始一発目ということで流石にzer0ptsでは出なさそうな雰囲気を感じたので、twitterで雑に募集してみた。 discordの招待リンクを流しただけだが、そこそこの人数が集まってくれた。

ただし、即席チームなので編成が偏っていた。私がCrypto Playerだからなのか、Crypto担当の人が多くいたと思う*1

こうなるとPwnやWebの人は参加しても一人で黙々と問題を解くみたいになってしまい、即席チームに期待していたであろうコミュニケーションとかはできなかったかもしれず、申し訳なく思う。一緒に問題を解くまではできずとも、なんとなく疑問を投げかけたり、解けた時に💯とかやって囃すだけでもできたらよかったな。

*1:単にCrypto Playerは人口が多いだけかも。なぜなら簡単だから。少し前まではWebが多かったような気がしたが

zer0pts Tシャツ & パーカー

チームメイトのposixさんが作ってくれた。posixはwebつよ人材であるだけでなくデザインもできる人材っぽく、defenitのロゴとかもカッコよかったし、zer0ptsのロゴもかっこいいのを作ってくれた

これを急に作ったよっていって何着も送りつけてくれる行動力には頭がさがる。かっこよくて早速愛着が湧いてます

オンサイトの大会とかでも大会ロゴだけじゃなくてチームロゴとかも入れてくれるとめちゃめちゃ良さそうだけど、小単位での発注になって高くなっちゃうのかな

問題にしたらいいじゃんと思っているやつ

これまでのCTFの問題になじまないようなものでも、考えることが面白い問題や、CTFでその概念に初めて出会って学び始める人がいそうな問題は出題したらいいと思っている。

例えばフィボナッチ数列の母関数とかは純粋数学すぎてCTFには出せないかな〜と考えてしまうかもしれないが、これは面白いと思うから頑張って問題にして出したらいいと思う。ただ、こういうのは一発ネタなので他のCTFで類題が出題されていたらもう出さないほうがいいし、あんまりうまく問題にできない時も諦めたほうが多分いい