Edited at

SECCON 2016 Online CTF Writeup - Vigenere ※人力

More than 1 year has passed since last update.


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時間以上を要しました。次回はもっとスマートな解き方をしてみたいところです。