SECCON 2016 Online CTF Writeup - Vigenere ※人力

  • 2
    いいね
  • 0
    コメント

Vigenere (Crypto, 100pts)

以下の暗号を解くと、flagが手に入ります。

k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ

k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe

下記ページを参考に人力()で解きました。テクニカルな解法ではないです。
ヴィジュネル暗号: Axoluder`s blog
ヴィジュネル暗号 - Wikipedia

既知部分の復号化

問題とともに提示されたヴィジュネル方陣を使用します。

venegere.png

縦軸(上段)を平文p、横軸(左列)を鍵kとした場合、クロスする文字が暗号化後の文字c。

平文が S のとき 暗号が L になる鍵は V
平文が E のとき 暗号が M になる鍵は I
平文が C のとき 暗号が I になる鍵は G

繰り返すことで、鍵の一部が判明します。残り5文字。
k: VIGENER?????

タイトル「Vigenere」から推測して、残り4文字。
k: VIGENERE????

ここで一度復号化

行き詰まってしまったため、今ある鍵部分のみ復号化してみます。
ヴィジュネル暗号では、鍵の長さが平文よりも短い場合、鍵を繰り返し適用することで暗号化/復号化を行うそうです。

key: VIGENERE????

対応づけてみるとこんな感じです。

k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{????? ???????????? ???????????? ??????}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

先ほどのヴィジュネル方陣と照らし合わせて、復号化します。

k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{A???? BCDEDEFG???? KLMNOPQR???? VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

どうやら、A~Zを並べた文字列のようです。

p : SECCON{A????BCDEDEFG????KLMNOPQR????VWXYYZ}

ここから力技

鍵の残り4文字を探し当てる必要があります。
k: VIGENERE????

まずは、平文の空白を推測して埋めてみました。

             BABB        HIIJ        STTU
p  : SECCON{A????BCDEDEFG????KLMNOPQR????VWXYYZ}
    ↓
p  : SECCON{ABABBBCDEDEFGHHIJKLMNOPQRSTTUVWXYYZ}

(推測で)埋めた平文を用いて鍵を推測します。

             CODD         COEE         BODE
k  : VIGENERE???? VIGINERE???? VIGENERE???? VIGENER
p  : SECCON{ABABB BCDEDEFGHIIJ KLMNOPQRSTTU VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

3つの候補 CODD , COEE , BODE から、鍵の残り部分を CODE と仮定しました。
key: VIGENERECODE → ヴィジュネルコード でしょうか。

flag取得

鍵が判明したので、残り部分も復号化します。

k  : VIGENERECODE VIGINERECODE VIGENERECODE VIGENER
p  : SECCON{A???? BCDEDEFG???? KLMNOPQR???? VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

 ↓

k  : VIGENERECODE VIGINERECODE VIGENERECODE VIGENER
p  : SECCON{ABABA BCDEDEFGHIJJ KLMNOPQRSTTU VWXYYZ}
c  : LMIG}RPEDOEE WKJIQIWKJWMN DTSR}TFVUFWY OCBAJBQ

 ↓

SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}

flagが判明し、投稿したところ正解でした。
ヴィジュネル暗号自体を知らなかったこともあり、暗号の理解から始めて2時間以上を要しました。次回はもっとスマートな解き方をしてみたいところです。