初めまして。小林(仮)です。
先月、あおかけす氏(@fulutori_aonos)が開催したMaidakeCTF2019でCryptoの問題を2問出題させてもらったので、そのWriteupを書いていきます。(遅くなってすいません)
因みに私が作成したのは、
Do you know XOR[300]
と
Secret Image[500]
です。
それではWirteupを書いていきます。
Do you know XOR[300]
この問題では暗号化するためのプログラムとその出力結果が渡されていました。
暗号化するプログラムの方では、平文を50文字になるようにパディングした後、パディングした平文と秘密鍵で排他的論理和をとることによって暗号文を作成しています。そしてその結果を16進数表記でresult.txtに出力しています。
単純なXOR暗号です。
XOR暗号の仕組みは、平文m、秘密鍵k、暗号文cとしたとき以下のように表せます。
暗号化
m ⊕ k = c
復号
c ⊕ k = m
つまり、平文とそのときの暗号文が分かれば秘密鍵がわかるということです。
よって今回の問題では、平文とその暗号文から秘密鍵を発見し、その秘密鍵でFLAGの暗号文を復号しasciiコードを文字に変換するとフラグを得ることができます。
復号のプログラムはこんな感じです。
これを実行すると、
MaidakeCTF{You_know_the_characteristics_of_XOR}
が得られます。
Secret Image[500]
この問題ではpngファイルと秘密鍵のデータが渡されていました。

この問題はこの画像がAES-ECBモードで暗号化されていることがわかればすぐに解けます。画像を渡された秘密鍵で復号するだけです。
暗号化する画像は何でもよかったのですが、ヒントとしてlinux penguinを暗号化してECB Penguinを作ってみました。(linux penguin crypto と検索すると似たようなような画像がたくさん出てきます)
復号プログラムは以下です。
このプログラムを実行すると、下図のようになります。

フラグは
MaidakeCTF{AES-ECB_mode_is_Vulnerable}
です。
最後に
初めて問題を作ったのですが、自分が作った問題って愛着が湧くものですね。
CTF開催中、度々自分が作った問題の正答数を確認していて、もう我が子同然でした。
個人的にSecret Imageは誰にも解かせるつもりはなかったのですが、外部の方にはあっという間に解かれてしまい、悔しかったです。
Writeup書くのって意外と大変なんですね…(笑)