NTTセキュリティ・ジャパン SOCアナリストマネージャー 羽田です。

今年の4月1日に、恒例のエイプリルフール企画として Twitter で謎解き問題を出題させていただきました。

過去のエイプリルフール企画(問題1問題2)と同様、ハッカー集団「アナログニシマス」からの挑戦という形式で CTF ライクな問題をアナリストメンバーと考えてみました。エンジニア向けでありつつ CTF 未経験者でもチャレンジできて、通学・通勤の途中でも(何とか)スマートフォンで取り組めるくらいの難易度の問題を目指して作問しましたが、チャレンジしていただけましたでしょうか?

この記事では、今回出題した以下の問題について解説したいと思います。

まず暗号文を眺めて気づくことは何でしょうか。

"MRI4E{ZRNMCOT1\r\nDJTQDSD_O_R\r\nZQHFZSON\r\nNT}TAM\r\nKIE"

一見するとランダムに見える文字列ですが、この暗号文には "\r\n" が4回出現していることが分かります。"\r\n" は CRLF と呼ばれる制御文字であり、Windows などにおける改行コードを意味しています。この CR(Carriage Return)と LF(Line Feed)は、以下のような意味を持ちます。

  • CR(Carriage Return):  カーソルを行の先頭へ移動する
  • LF(Line Feed): カーソルを次の行へ移動する

CR と LF を組み合わせるとカーソルは次の行の先頭に移りますので、Windows などの OS ではこの制御文字を改行として解釈しています。改行コードを改行に置き換えると、暗号文は以下のようになります。

ですが、まだ答に近づいているようには見えません。

ここで、画像に何かしらヒントが示されていないか考えてみます。画像には「アナログニシマス」と、彼らに奪われた「NTTSecurityコイン」らしきものが描かれております。このコインの中心には大きな「N」マークがあり、その周りは「¥」マークで囲まれています。ここでピンとくる人がいるかもしれません。

今回はアナログニシマスによってコインを奪われてしまいました。そうです、「\n」が奪われてしまったのです(ここでは「¥(円マーク)」と「\(バックスラッシュ)」を同一視しています)。これは暗号文にどのような影響をもたらすのでしょうか。

試しに暗号文の「\n」を削除してみると「\r」が残ります。

"MRI4E{ZRNMCOT1\rDJTQDSD_O_R\rZQHFZSON\rNT}TAM\rKIE"

これは「\r」のたびにカーソルを次の行へ移動せずに先頭に移動する、つまり同じ行に文字を上書きするという動作を意味します。結果的に残る文字列は以下のようになります。

実際、適当なスクリプトでコンソールにこの文字列を出力させてみると、"KIETAMONO_ROT1" という文字列が表示されることが確認できます。この文字列は「消えたもの_ROT1」と読めますね!

しかし、これでは終わらなさそうです。消えたものを "ROT1" するとは、どういうことでしょうか。

今回消えたものは NTTSecurity コインですが、実はもうひとつ消えたものがあります。そうです、「\r」による上書きによって削除された文字列です。消えた文字列は、以下の図の黄色でマークされた部分になります。

この文字列を横に並べると、以下のようになります。

"MRI4E{ZRNMCDJTQDSD_ZQHFZSNT}"

ここまでくると答が見えてきましたね。ROTn(nは整数)は原始的な単一換字式暗号のひとつで、アルファベットを n 文字だけ後にシフトする方式です。ROT13 が有名ですが、今回は ROT1 なので 1文字ずつシフトしてみます。

"NSJ4F{ASONDEKURETE_ARIGATOU}"

ようやく答を得ることができました。アナログニシマスからのメッセージは「遊んでくれてありがとう」でした!

スマートフォンで解くには少し大変だったかもしれませんが、ツールやプログラミングの必要がなく取り組めるものにしました。もし面白いと感じていただけたなら、Twitter の「いいね」を押していただけると幸いです。もしかしたら次回作があるかもしれません。

以上、エイプリルフールの謎解き企画でした。ありがとうございました。