0 はじめに
以下の文章は、CTF(Crypto問)に取り組む際の一般論ではなく、また(有益な)初心者向けの教示でもありません。
そういった類のものは、「強い」人達が書いたものが多数ありますので、そちらを読むことをお勧めします。(∵そうした方が早く確実に目的達成できると思われます。)
この文章は、自分自身が何らかの事情でCTFから離れ、色々忘れてしまった後、再びチャレンジをしようと思った時を想定した、再スタート用メモです。(ですので、偶然そのような境遇にある方や、筆者と似た思考回路を持つ方には、もしかしたら何らかの一助にはなるかもしれません。)
1 初期にそろえておきたい道具
1. 自由に使えるパソコンとインターネット接続環境
2. 基本的な暗号の歴史(古典暗号から現代暗号まで)
※たとえば、「暗号技術のすべて」(IPUSIRON (著)、ISBN-10 : 4798148814、ISBN-13 : 978-4798148816)を通読する。
3. 初等整数論といくつかの代数・数論のトピックス(線形代数、楕円曲線、局所体など)の知見。
※具体的には、Modular arithmetic、Fermat's little theorem、Chinese remainder theorem、Quadratic residue あたり。
4. 実装する手段(たとえば、Python + SageMath)
※素因数分解・離散対数問題・楕円曲線などの基本的な求解アルゴリズムの実装や、各種暗号のよく知られた攻撃手法に関するsolverは一通り持っておくと便利です。
2 少し慣れてきたら入手しておきたい道具
1. 最近の論文と、それらに付随した実装
※論文は、「新しい暗号方式」と「新しい攻撃手法」の双方をチェックしたいところです。
2. CTFでの実戦経験(トレンドの把握)
※難易度の高いCTFでも臆せず出場し、競技中には解けなくても復習して解き方を理解することは有益であると考えます。
3. 過去CTFのWriteupなど
※「強い」人たちは敵ではなく、有益な情報を公開してくださる心強い味方です。
3 問題を解く際の基本的な考え方
G.Polya, How to Solve It(邦題:いかにして問題をとくか、柿内賢信 訳)にほぼすべて書かれています。
4 問題を解く際のアプローチ
・現代暗号の場合、必ず設問のどこかに「脆弱性」が潜んでいます(でなければ、解けないはず)。
・極端にいうと、「一見すると無理ゲー、しかしタネを知ってしまえば瞬殺」というものも少なくありません。(中級レベル問題まではそのパターンが多いです。)
・脆弱性の内容によって、「鍵をリークできる」類のものと、「通常の復号とは異なる手法で解読できてしまう」類のものがあります。
・上級レベルの問題では、最近発表された論文のネタがそのままぶっ込まれることもあるので、「論文即応能力」を身に着けておくのも手かもしれません。
・競技中、他分野の問題に手を出すことは(当然)悪いことではありませんが、「Crypto解けばよかった」と後悔しないことは重要です。