Vigenere (Crypto, 100pts)
以下の暗号を解くと、flagが手に入ります。
k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ
k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe
下記ページを参考に人力()で解きました。テクニカルな解法ではないです。
ヴィジュネル暗号: Axoluder`s blog
ヴィジュネル暗号 - Wikipedia
既知部分の復号
問題とともに提示されたヴィジュネル方陣を使用します。
縦軸(上段)を平文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時間以上を要しました。次回はもっとスマートな解き方をしてみたいところです。